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

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

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

Сообщение #101 Korchy » 09.05.2020, 08:59

ZiCVIZ писал(а):А вот как заставить пайчарм автоматом исполнять код в блендере ?

Если PyCharm - про, то можно настроить запуск Блендера срвером, будет как в вышеприведенном аддоне под VSC.
Если Комьюнити - то я делаю так https://b3d.interplanety.org/otladka-mnogofaylovogo-addona-v-blender-bystroy-pereustanovkoy/
Korchy M
Аватара
Сообщения: 2864



Сообщение #102 ZiCVIZ » 09.05.2020, 09:36

Вот меня совсем не радует то что VS Code отказывается исполнять скрипты ...
я понимаю что это у меня какойто касяк ... но я не понимаю где сабака порылась :(
ZiCVIZ M
Сообщения: 7

Сообщение #103 Pavel » 30.06.2020, 19:30

Как сделать преобразование нормалей из одной системы координат в другую? Я имею в виду split нормали (те нормали, которые указываются для сглаживания). Есть нормали для вершин, есть нормали для полигонов. А мне нужно преобразовать нормали для сглаживания. Количество этих нормалей равно количеству loop'ов.

У меня есть список нормалей из такой системы координат:

Ось X - смотрит вправо
Ось Y - смотрит вверх
Ось Z - смотрит вперёд

Этот список нормалей нужно преобразовать в блендеровскую систему:

Ось X - смотрит вправо
Ось Y - смотрит вперёд
Ось Z - смотрит вверх

Уже много пытался преобразовать (менял местами компоненты и т. д.), но результат не корректный получается. Либо у меня ошибка в другом месте, не в коде преобразования. Либо нормали такие странные. Не знаю.
Pavel M
Аватара
Сообщения: 1129

  • 1

Сообщение #104 mac7 » 02.07.2020, 00:16

Pavel писал(а):менял местами компоненты и т. д.

там еще инвертировать надо forward(+Y), up(Z) <-> forward(-Z), up (Y)
mac7 M
Аватара
Откуда: Луцьк
Сообщения: 323

Сообщение #105 Pavel » 02.07.2020, 00:30

mac7, что-то не помогло. Наверное ошибка в другом месте. Или нормали изначально такие. В общем, завтра посмотрю, может не правильно конвертирую нормали из byte в float. Просто в этом формате компонент нормали хранится в 8 битах.
Pavel M
Аватара
Сообщения: 1129

Сообщение #106 Korchy » 02.07.2020, 08:47

Pavel писал(а):Просто в этом формате компонент нормали хранится в 8 битах.
Ты их из бинарника читаешь? Тогда проверь, что байты в обратном порядке не хранятся.
Korchy M
Аватара
Сообщения: 2864



Сообщение #107 Pavel » 02.07.2020, 09:12

Korchy, в этом ошибки точно нет. Так как я импортировал другие данные из этого же файла и они загрузились корректно. В этом формате порядок байтов одинаков для всех данных (в том числе и нормалей).

Добавлено спустя 3 часа 28 минут:
Посмотрел эти нормали. Заметил одну вещь. Если создать кастомные нормали у меша и значения нормалей будут идентичными, то кастомные нормали будут смотреть в разные стороны. Вот код:
Код: Выделить всё
import bpy


m = bpy.context.object.data
norms = [(1.0, 1.0, 0.0), ] * len(m.loops)
m.normals_split_custom_set(norms)
Изображение

Почему это происходит? Как вообще эти нормали вычисляются? Они имеют глобальное пространство? Или домножаются на нормаль полигона?
Pavel M
Аватара
Сообщения: 1129

Сообщение #108 Pavel » 06.07.2020, 20:23

С нормалями разобрался. Возник другой вопрос:
есть ли аналог этого оператора, но для модуля bmesh?:
Код: Выделить всё
bpy.ops.mesh.set_normals_from_faces()
Искал, не нашёл. Этот оператор устанавливает sharp edges, учитывая угол сглаживания (Smooth Angle). Мне нужно пометить рёбра как sharp.

Мне нужно именно для bmesh, так как экспортёр настолько сросся с этим модулем, что переписывать его для bpy.ops.mesh не имеет смысла. И не удобно использовать bpy.ops.mesh, так как каждый раз нужно включать режим редактирования, а на больших мешах это занимает время. И не удобно это: использовать везде bmesh, а для этой операции создавать временный меш, выделять его, включать режим редактирования и вызывать bpy.ops.mesh.set_normals_from_faces()
Pavel M
Аватара
Сообщения: 1129

Сообщение #109 Pavel » 20.11.2020, 13:58

Всем привет.
Уже много пытаюсь модифицировать позиции частиц во время рендеринга. Ничего не получается. Вот этот код отказывается работать:

Код: Выделить всё
import bpy


@bpy.app.handlers.persistent
def render_init_handler(scene):
    loc = [2.0] * 8 * 3
    obj = bpy.data.objects['1']
    deps = bpy.context.evaluated_depsgraph_get()
    par_sys = obj.evaluated_get(deps).particle_systems['1']
    par_sys.particles.foreach_set('location', loc)
    deps.update()
    bpy.context.scene.update()


bpy.app.handlers.render_init.append(render_init_handler)
bpy.app.handlers.render_pre.append(render_init_handler)
bpy.app.handlers.render_post.append(render_init_handler)

Вот сцена для примера. Нужно запустить скрипт и сделать рендер кадра. Частицы не переместятся в точку (2, 2, 2).

Как всё таки перемещать частицы во время рендеринга?
Вложения
partest.zip
(75 КБ) Скачиваний: 4
Pavel M
Аватара
Сообщения: 1129

Пред.

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

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

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