Closed AziatkaVictor closed 5 months ago
Вить, а импорт .object? %)
Вить, а импорт .object? %)
Я тестировал у себя, вроде как импорт и экспорт работает нормально. Но тут только полноценные тесты покажут.
Attention: 11 lines
in your changes are missing coverage. Please review.
Comparison is base (
ba4999c
) 75.44% compared to head (ec0d60a
) 75.40%.
:exclamation: Your organization needs to install the Codecov GitHub app to enable full functionality.
:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.
@AziatkaVictor я пока не хочу добавлять поддержку 4.0. Пока у меня нет возможности его запустить и тестировать на нём аддон.
Там есть проблемы не только с шейдерами. Начиная с версии 3.5 и выше разработчики изменили mesh формат. Аддон работает в 3.5-3.6 так как была оставлена обратная совместимость. Работоспособность в 4.0 под вопросом.
Если сейчас сказать, что аддон работает в 4.0, то пользователи столкнутся с проблемами и будут писать баг-репорты, которые я не смогу исправить из-за того, что у меня 4.0 не работает.
@PavelBlend тогда может стоит сделать просто пред-релизную версию для 4.0? Или же просто сделать второстепенную ветку для этого? Я понимаю, что сейчас могут полететь баг-репорты, на которые ты не можешь повлиять, но мне кажется будет лучше дать возможность хотя бы пощупать новую версию.
И кстати, почему у тебя не работает 4.0? Это не придирка, просто интересно.
И кстати, почему у тебя не работает 4.0?
А вот: https://github.com/PavelBlend/blender-xray/issues/708#issuecomment-1813118112
может стоит сделать просто пред-релизную версию для 4.0? Или же просто сделать второстепенную ветку для этого?
@AziatkaVictor ну тогда сделаю ветку. Только я не могу проверить аддон на работоспособность и вносить изменения для 4.0. Могу только чужие pull request'ы принять.
По поводу твоего кода:
может заменить bpy.app.version_string
на bpy.app.version
? Тогда не придётся использовать int
. Вот пример:
if bpy.app.version >= (4, 0, 0):
node.inputs['Specular IOR Level'].default_value = 0.0
else:
node.inputs['Specular'].default_value = 0.0
И ещё, чтобы не дублировать код, можно создать функцию в io_scene_xray\utils\version.py
, которая будет принимать Principled
нод и менять ему значения:
def set_princp_specular(node):
if bpy.app.version >= (4, 0, 0):
node.inputs['Specular IOR Level'].default_value = 0.0
else:
node.inputs['Specular'].default_value = 0.0
@PavelBlend идея отличная, на самом деле, даже сам хотел её предложить. Просто не хотелось умничать, ибо я в твоём проекте совсем немного разобрался. За совет спасибо, не знал, что можно таким образом через tuple проводить сравнения версий, поэтому сделал так.
В любом случае, сделай пред-релиз с версией для 4.0 и новый тег для Issues. Как я погляжу, тестеров у тебя будет достаточно. Ну и я считаю, что никого не обидит, если ошибки новой версии немного подождут или не будут решены вовсе. Все-таки, плагин некоммерческий, а пользоваться им очень хочется.
@AziatkaVictor я запустил автоматические тесты на блендере 4.0 без GUI и посыпались другие ошибки:
File "D:\git\blender-xray\io_scene_xray\log.py", line 284, in wrapper
return method(self, context)
File "D:\git\blender-xray\io_scene_xray\utils\stats.py", line 277, in wrapper
result = method(self, context)
File "D:\git\blender-xray\io_scene_xray\utils\ie.py", line 70, in wrapper
result = method(self, context, *args)
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\ops.py", line 133, in execute
main.export_file(
File "D:\git\blender-xray\io_scene_xray\log.py", line 270, in wrap
return func(*args, **kwargs)
File "D:\git\blender-xray\io_scene_xray\utils\stats.py", line 238, in wrapper
result = method(*args, **kwargs)
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\main.py", line 558, in export_file
export_body(bpy_obj, writer, context)
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\main.py", line 547, in export_body
export_main(bpy_obj, writer, context)
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\main.py", line 530, in export_main
materials, bone_writers, some_arm, bpy_root, uv_map_names = export_meshes(
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\main.py", line 312, in export_meshes
if len(bpy_arm_obj.pose.bone_groups):
AttributeError: 'Pose' object has no attribute 'bone_groups'
File "D:\git\blender-xray\tests\cases\test_object_export.py", line 548, in test_merge_objects
bpy.ops.xray_export.object(
File "C:\progs\blender\blender-4.0.1-windows-x64\4.0\scripts\modules\bpy\ops.py", line 109, in __call__
ret = _op_call(self.idname_py(), kw)
RuntimeError: Error: Python: Traceback (most recent call last):
File "D:\git\blender-xray\io_scene_xray\log.py", line 284, in wrapper
return method(self, context)
File "D:\git\blender-xray\io_scene_xray\utils\stats.py", line 277, in wrapper
result = method(self, context)
File "D:\git\blender-xray\io_scene_xray\utils\ie.py", line 70, in wrapper
result = method(self, context, *args)
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\ops.py", line 133, in execute
main.export_file(
File "D:\git\blender-xray\io_scene_xray\log.py", line 270, in wrap
return func(*args, **kwargs)
File "D:\git\blender-xray\io_scene_xray\utils\stats.py", line 238, in wrapper
result = method(*args, **kwargs)
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\main.py", line 558, in export_file
export_body(bpy_obj, writer, context)
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\main.py", line 547, in export_body
export_main(bpy_obj, writer, context)
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\main.py", line 530, in export_main
materials, bone_writers, some_arm, bpy_root, uv_map_names = export_meshes(
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\main.py", line 255, in export_meshes
merged_obj = merge_meshes(armature_meshes, bpy_arm_obj)
File "D:\git\blender-xray\io_scene_xray\formats\obj\exp\main.py", line 112, in merge_meshes
utils.obj.apply_obj_modifier(mod, context=override)
File "D:\git\blender-xray\io_scene_xray\utils\obj.py", line 128, in apply_obj_modifier
bpy.ops.object.modifier_apply(context, modifier=mod.name)
File "C:\progs\blender\blender-4.0.1-windows-x64\4.0\scripts\modules\bpy\ops.py", line 106, in __call__
C_exec, C_undo = _BPyOpsSubModOp._parse_args(args)
File "C:\progs\blender\blender-4.0.1-windows-x64\4.0\scripts\modules\bpy\ops.py", line 60, in _parse_args
raise ValueError("1-2 args execution context is supported")
ValueError: 1-2 args execution context is supported
File "D:\git\blender-xray\tests\cases\test_ogf_export.py", line 216, in test_export_motions
bpy.ops.pose.group_add()
File "C:\progs\blender\blender-4.0.1-windows-x64\4.0\scripts\modules\bpy\ops.py", line 109, in __call__
ret = _op_call(self.idname_py(), kw)
AttributeError: Calling operator "bpy.ops.pose.group_add" error, could not be found
File "D:\git\blender-xray\tests\cases\test_ops.py", line 952, in test_level_shader_nodes
bpy.ops.io_scene_xray.create_level_shader_nodes(mode='ACTIVE_LEVEL')
File "C:\progs\blender\blender-4.0.1-windows-x64\4.0\scripts\modules\bpy\ops.py", line 109, in __call__
ret = _op_call(self.idname_py(), kw)
RuntimeError: Error: Python: Traceback (most recent call last):
File "D:\git\blender-xray\io_scene_xray\ops\level_shaders.py", line 796, in execute
_create_shader_nodes(mat, shader_groups, self.light_format)
File "D:\git\blender-xray\io_scene_xray\ops\level_shaders.py", line 665, in _create_shader_nodes
_create_and_link_nodes(mat, diff_img, shader_groups, light_format)
File "D:\git\blender-xray\io_scene_xray\ops\level_shaders.py", line 598, in _create_and_link_nodes
group = _create_group_nodes(
File "D:\git\blender-xray\io_scene_xray\ops\level_shaders.py", line 377, in _create_group_nodes
tex_rgb = shader_group.inputs.new('NodeSocketColor', 'Texture Color')
AttributeError: 'ShaderNodeTree' object has no attribute 'inputs'
File "D:\git\blender-xray\tests\cases\test_ops.py", line 706, in test_remove_rig
bpy.ops.io_scene_xray.remove_rig()
File "C:\progs\blender\blender-4.0.1-windows-x64\4.0\scripts\modules\bpy\ops.py", line 109, in __call__
ret = _op_call(self.idname_py(), kw)
RuntimeError: Error: Python: Traceback (most recent call last):
File "D:\git\blender-xray\io_scene_xray\utils\__init__.py", line 58, in wrapper
result = method(self, context, *args)
File "D:\git\blender-xray\io_scene_xray\ops\rig\remove_rig.py", line 85, in execute
move_bones_on_first_layer(arm_obj)
File "D:\git\blender-xray\io_scene_xray\ops\rig\remove_rig.py", line 59, in move_bones_on_first_layer
bone.layers = layers
AttributeError: 'Bone' object has no attribute 'layers'
File "D:\git\blender-xray\tests\cases\test_rig.py", line 13, in test_rig
bpy.ops.io_scene_xray.create_connected_bones()
File "C:\progs\blender\blender-4.0.1-windows-x64\4.0\scripts\modules\bpy\ops.py", line 109, in __call__
ret = _op_call(self.idname_py(), kw)
RuntimeError: Error: Python: Traceback (most recent call last):
File "D:\git\blender-xray\io_scene_xray\utils\__init__.py", line 58, in wrapper
result = method(self, context, *args)
File "D:\git\blender-xray\io_scene_xray\ops\rig\connect_bones.py", line 274, in execute
connect_bones(arm, mesh_objects)
File "D:\git\blender-xray\io_scene_xray\ops\rig\connect_bones.py", line 203, in connect_bones
bone.layers = bone_layers
AttributeError: 'EditBone' object has no attribute 'layers'
Так что не знаю, стоит ли вообще над 4.0 работать.
И нужно ещё выяснить, будут ли ошибки в 3д окне при отрисовке шейпов и центров масс костей.
@PavelBlend да, так как они переработали UI для слоёв костей тоже. Так что много чего стоит сделать, но оно того стоит.
@AziatkaVictor привет. У меня по прежнему не запускается 4.0 и выше. Поэтому я даже не могу изучить его новые возможности и изменения. Посмотреть как всё работает, а не только читать в документации. И писать код мне придётся "в слепую", запуская блендер через консоль без UI (через cmd). Это долго. Поэтому я не смогу адаптировать аддон под 4.0+. Я закрою этот PR, так как доработать его я не могу. А то, что исправлено - это слишком мало. Аддон всё равно не будет полноценно работать.
Поэтому я не смогу адаптировать аддон под 4.0+. Я закрою этот PR, так как доработать его я не могу. А то, что исправлено - это слишком мало. Аддон всё равно не будет полноценно работать.
Печально. Думаю, многие бы хотели использовать аддон вместе с 4.0, но да ладно. Это не такая огромная проблема.
А на счет изменений, я и не планировал полностью чинить аддон под 4.0, так как я особо и не разбираюсь в том, как он устроен и какие функции как должны работать. Этот фикс я делал исключительно для того, чтобы был минимально необходимый функционал для работы. Мне, как человеку, который работает над созданием уровней, было необходимо использовать импорт/экспорт *.object файлов, поэтому сделал для себя и выкатил коммит сюда.
Как я уже говорил, неплохим вариантом было бы все-таки создание бета-версии аддона, где будут тестироваться твои правки, через код и через других людей. В этом нет ничего такого, все-таки, аддон делается за спасибо, а реализован он очень даже грамотно.
Added support for 4.0 version of Blenders BSDF Node: For old version was problem with changing "Specular" when importing models, it calls now "Specular IOR Level".