Вопросы по написанию плагинов

Список разделов Blender 3D Плагины

Описание: Обсуждение расширений для Blender
Модератор: exooman

Сообщение #21 grayich » 09.09.2015, 23:09

x64 Linux
grayich M
Аватара
Откуда: Харьков
Сообщения: 4856

Сообщение #22 Mega_Myr » 10.09.2015, 16:24


Не совсем. Конечно аддоны упрощают управление. И к своему стыду я о них даже не вспомнил. Но все равно выделение кольца полигонов, выделение лассо, или выделение по короткому пути без изменения хоткеев всё также не доступно.
Я, просто в качестве эксперимента, хочу найти универсальный способ управления на разных устройствах "из коробки" без изменения настроек ввода.

P.S. Спасибо за видеонаводку.
WIP Windows 10 x64

В общении со мной результат всегда непредсказуем. Он не всегда плохой, но всегда непредсказуемый.
Mega_Myr M
Аватара
Сообщения: 28

Сообщение #23 Elena_Leto » 07.05.2016, 19:43

Всем привет. Нуждаюсь в помощи умников и разумниц. Такая проблема, решила изучать 3д моделирование. И первым шагом на пути - это написание бакалаврской. Но такая беда, сказали нужно написать плагин :'-( а у меня маленькая беда с этим. ну не сильно это для меня :-~ В итоге вместо того, что бы изучать программы и набивать руку в моделирование, лажу по сайтам в поисках плагинов.
Ни у кого случайно не завалялось мааааленького кода нубского плагина ? =-) Или ссылочки на темы и сайты, где такое счастье можно найти, желательно с описанием кода. Была бы ооочень благодарна :nya:
Elena_Leto F
Аватара
Сообщения: 6

  • 2

Сообщение #24 grayich » 09.05.2016, 17:03

Elena_Leto, http://vk.com/doc-47447946_163285706?hash=29aa3759376f053e85
http://blender3d.com.ua/sozdaniye-dopolneniya-addona-dlya-blender/
ну и можно взять любое дополнение для blender изучить его, переделать и т.п. в том числе читая комментарии
x64 Linux
grayich M
Аватара
Откуда: Харьков
Сообщения: 4856

Сообщение #25 Elena_Leto » 23.05.2016, 00:01

grayich, :nya: спасибо большое. Обе ссылочки пригодились и все получилось.
Elena_Leto F
Аватара
Сообщения: 6

Сообщение #26 Pavel » 13.02.2018, 17:04

Хочу написать небольшой аддон, но не знаю с чего начать. Аддон нужен, чтобы решить одну проблему.

Суть проблемы:
если добавить Background Image и выставить Size в 1, то при изменении смещения X или Y, картинка смещается со слишком большим шагом (нельзя точно позиционировать изображение, приходиться вручную вводить цифры).

Я хочу сделать аддон, который бы добавлял горячее сочетание клавиш Shift+Alt+Mouse Move, при котором точность смещения X и Y изменялась бы в зависимости от масштаба в 3д окне.

Вопрос:
Возможно ли такое реализовать? Если да, то как?
Pavel M
Аватара
Сообщения: 835

Сообщение #27 Pavel » 23.04.2018, 21:02

Помогите разобраться. Я не могу понять, как писать аддоны, пока не посмотрю уже готовый пример, в котором реализована аналогичная функция. Каков принцип создания аддонов? Я так понимаю, что нужно писать классы, которые наследуются от имеющихся классов в bpy.types . Например, чтобы создать новую нодовую систему (наподобие Animation Nodes), нужно наследовать классы NodeTree, Node, NodeSocket и указать им нужные атрибуты (это я посмотрел в скрипте scripts\templates_py\custom_nodes.py) и потом зарегистрировать их. А как понять, что и как создавать без наличия готовых примеров? В API документации есть только список с описанием классов в bpy.types . И не понятно, как, что и с кем взаимодействует.
Pavel M
Аватара
Сообщения: 835

Сообщение #28 Korchy » 23.04.2018, 21:18

Korchy M
Аватара
Сообщения: 2441



Сообщение #29 Pavel » 21.06.2018, 13:38

Пишу импорт 3д моделей из игры. Не получается решить одну проблему. Уже третий день не могу её побороть. Суть такая:

Есть вершины. Каждая вершина имеет координату в пространстве, нормаль, текстурную координату.

В этом формате сглаживание реализуется за счёт нормалей вершин. Но я не знаю, как преобразовать нормали вершин в рёбра sharp. У меня получилось только так:
Изображение
А должно быть так:
Изображение
То есть у меня некоторые угловые рёбра пометились как sharp, так как в моём коде сглаживание указывается на уровне вершин. Как отфильтровать угловые рёбра, чтобы они не помечались? Нужно сделать проверку, является ли данное ребро Non-Manifold и только тогда помечать. Но как это сделать?

В общем вот код:
https://github.com/PavelBlend/blender_stalker_tools_addon/tree/smooth_groups

Импорт идёт в файле importer.py
Pavel M
Аватара
Сообщения: 835

Сообщение #30 Pavel » 13.07.2018, 21:51

Я давно делал анимации рук и оружия от первого лица. Вот пример:
Спойлер
phpBB [media]
Но есть одна проблема, которую я хочу решить с помощью питона:
в данном скелете используется по несколько констрейнтов Child Of для одной кости. Во время анимирования их приходиться переключать между собой с помощью ползунка Influence либо вообще выключать все Child Of. Но если начать это делать, то кость улетает от изначального положения. Вот пример:
Спойлер
phpBB [media]

Приходится постоянно вручную перемещать кость обратно. Из-за чего возникают неточности и кость дёргается.

Вопрос: как на питоне решить эту проблему? Чтобы при нажатии кнопки кость переносилась в исходное положение. Из исходных данных есть матрица трансформации кости и инвертированные матрицы констрейнтов Child Of. Но что с этими исходными данными сделать, чтобы всё работало правильно?

У меня пока получилось переместить кость в позицию родителя. Вот код:
https://github.com/PavelBlend/blender_child_of_helper_addon
Но не всегда нужно переносить кость так. Иногда нужно сохранять смещение.

Вот blend сцена для примера:
https://drive.google.com/open?id=14A-wz0BUc0ugkA82iS0vVGN8o5dPzcfs
Pavel M
Аватара
Сообщения: 835

Сообщение #31 Pavel » 25.09.2018, 16:36

Есть кастомные ноды. Внутри нодов есть параметры. Например, у меня есть параметр myFloatProperty:
Изображение
Как сделать так, чтобы при изменении этого параметра выполнялись какие либо действия?
Например, при изменении параметра myFloatProperty, в консоль печаталось число 1.

Добавлено спустя 54 минуты 25 секунд:
Как вообще заставить дерево нодов работать? Например, у меня есть новая система нодов, которая содержит три ноды:

Output - выполняет всё дерево нодов
Float - одно число типа float
Print - выводит в консоль что либо с помощью функции print

Как это реализовать?
Pavel M
Аватара
Сообщения: 835

Сообщение #32 Pavel » 19.10.2018, 19:42

Как программно узнать длину кривой?
Pavel M
Аватара
Сообщения: 835

Сообщение #33 Pavel » 16.12.2018, 20:55

Пишу импорт одного формата 3д моделей. Не получается кое-что сделать. В этом формате есть полигоны, которые построены на одних и тех же вершинах, но имеют противоположные нормали. Своего рода двусторонние полигоны. Например, есть такие индексы вершин, по которым строятся два треугольника: [10, 12, 15] и [10, 15, 12]. Как видно вершины одинаковые, но порядок у них разный. Чтобы понять точнее, что я имею в виду, запустите этот скрипт (который создаёт икосферу с двусторонними полигонами):
Код: Выделить всё
import bpy


vertices = (
    (0.0000, 0.0000, -1.0000),
    (0.7236, -0.5257, -0.4472),
    (-0.2764, -0.8506, -0.4472),
    (-0.8944, 0.0000, -0.4472),
    (-0.2764, 0.8506, -0.4472),
    (0.7236, 0.5257, -0.4472),
    (0.2764, -0.8506, 0.4472),
    (-0.7236, -0.5257, 0.4472),
    (-0.7236, 0.5257, 0.4472),
    (0.2764, 0.8506, 0.4472),
    (0.8944, 0.0000, 0.4472),
    (0.0000, 0.0000, 1.0000)
)

triangles = (
    (0, 1, 2),
    (1, 0, 5),
    (0, 2, 3),
    (0, 3, 4),
    (0, 4, 5),
    (1, 5, 10),
    (2, 1, 6),
    (3, 2, 7),
    (4, 3, 8),
    (5, 4, 9),
    (1, 10, 6),
    (2, 6, 7),
    (3, 7, 8),
    (4, 8, 9),
    (5, 9, 10),
    (6, 10, 11),
    (7, 6, 11),
    (8, 7, 11),
    (9, 8, 11),
    (10, 9, 11),
    (0, 2, 1),
    (1, 5, 0),
    (0, 3, 2),
    (0, 4, 3),
    (0, 5, 4),
    (1, 10, 5),
    (2, 6, 1),
    (3, 7, 2),
    (4, 8, 3),
    (5, 9, 4),
    (1, 6, 10),
    (2, 7, 6),
    (3, 8, 7),
    (4, 9, 8),
    (5, 10, 9),
    (6, 11, 10),
    (7, 11, 6),
    (8, 11, 7),
    (9, 11, 8),
    (10, 11, 9)
)

triangles = list(set(triangles))    # изменяю порядок полигонов на произвольный
bpy_mesh = bpy.data.meshes.new('test_two_sided')
bpy_mesh.from_pydata(vertices, (), triangles)
bpy_object = bpy.data.objects.new('test_two_sided', bpy_mesh)
bpy.context.scene.objects.link(bpy_object)

Мне нужно сделать так, чтобы при создании этой сферы происходила фильтрация треугольников. Чтобы отсекались дублирующие полигоны и сохранялись только полигоны внешней стороны икосферы. Как это сделать?
Pavel M
Аватара
Сообщения: 835

Сообщение #34 Korchy » 16.12.2018, 23:31

Код: Выделить всё
a = [1,2,3]
b = [3,2,1]
print(a == list(reversed(b)))

# True
Korchy M
Аватара
Сообщения: 2441



Сообщение #35 Pavel » 17.12.2018, 12:57

Korchy, так не подходит. Там всё намного сложнее. Нужно правильно выяснить главную сторону полигона и удалить не главную. Как понять, какой полигон лицевой, а какой обратный: [0, 1, 2] или [0, 2, 1]? Если выбрать только первый попавшийся полигон, то икосфера будет иметь неправильные нормали (все полигоны будут рандомно смотреть то наружу, то внутрь).
Pavel M
Аватара
Сообщения: 835

Сообщение #36 Korchy » 17.12.2018, 17:22

Лицевой всегда против часовой стрелки.
Korchy M
Аватара
Сообщения: 2441



Сообщение #37 Pavel » 17.12.2018, 17:32

Korchy, а как это программно определить?
Pavel M
Аватара
Сообщения: 835

Сообщение #38 Korchy » 17.12.2018, 19:59

Возможно я не понимаю проблемы. У тебя есть список вертексов, образующий полигон. Допустим
[(0,0,0), (1,0,0), (1,1,0), (0,1,0)]
соответственно его индексы
0, 1, 2, 3
отстраивая полигон в порядке индексов 0, 1, 2, 3 ты получаешь нужную нормаль. И тоже самое, ты получишь нужную нормаль, если будешь отстраивать в порядоке, 1, 2, 3, 0, и в порядке 3, 0, 1, 2, все равно будет нужное направление нормали.
Но если ты отстроишь полигон в порядке 3, 2, 1, 0 (равно как и 2, 1, 0, 3 и т.д.) нормаль будет смотреть в противоположную сторону.
Korchy M
Аватара
Сообщения: 2441



Сообщение #39 Pavel » 17.12.2018, 22:24

Korchy, проблема в том, что по номеру вершин ничего определить нельзя. Нужно вычислять значение нормали полигона и сравнивать с другими нормалями полигонов меша. И как-то выяснить, что отсекать, а что нет.

Вот пример:
Изображение
Два полигона смотрят вверх, но у одного индексы вершин возрастают, а у другого нет.

И вот ещё:
Изображение
Этот полигон 0, 1, 2. Он смотрит вверх. Потом я переместил вершину (при этом полигон остался 0, 1, 2) и он стал смотреть вниз. То есть цифры 0, 1, 2 могут указывать как на внешний полигон, так и на внутренний.

Нужно как-то анализировать координаты вершин и нормали полигонов, но я не знаю как.
Pavel M
Аватара
Сообщения: 835

Сообщение #40 mac7 » 17.12.2018, 23:14

Pavel, можно оффтоп вопрос
Спойлер
зачем так извращаться и делать мод под сталкер?
почему не хочешь изучить какой-то актуальный игровой движок, например дружелюбный к изучению Unity, мож и Unreal который развивается со скоростью света.
mac7 M
Аватара
Откуда: Луцьк
Сообщения: 245

Пред.След.

Вернуться в Плагины

Кто сейчас на форуме (по активности за 5 минут)

Сейчас этот раздел просматривают: 3 гостя