From 943968ad5ba7a7b09b3403fc8d5c4534d38562ce Mon Sep 17 00:00:00 2001 From: Sebastian Sille Date: Sun, 5 May 2024 16:37:17 +0200 Subject: [PATCH] Import_3ds: Improved light animation import Importing light color animation to shader nodes --- io_scene_3ds/import_3ds.py | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/io_scene_3ds/import_3ds.py b/io_scene_3ds/import_3ds.py index 35acbfe7..1cd1c7cb 100644 --- a/io_scene_3ds/import_3ds.py +++ b/io_scene_3ds/import_3ds.py @@ -1395,19 +1395,23 @@ def process_next_chunk(context, file, previous_chunk, imported_objects, keyframe_data = {} keyframe_data[0] = child.data.color[:] child.data.color = read_track_data(new_chunk)[0] - if child.data.use_nodes and "Emission" in child.data.node_tree.nodes: - child.data.node_tree.nodes["Emission"].inputs[0].default_value[:3] = child.data.color - if child.data.use_nodes and "RGB" in child.data.node_tree.nodes: - child.data.node_tree.nodes["RGB"].outputs[0].default_value[:3] = child.data.color + child.data.use_nodes = True + tree = child.data.node_tree + emitnode = next((nd for nd in tree.nodes if nd.type == 'EMISSION'), False) + colornode = next((nd for nd in tree.nodes if nd.type == 'RGB'), False) + if emitnode: + emitnode.inputs[0].default_value[:3] = child.data.color + if colornode: + colornode.outputs[0].default_value[:3] = child.data.color for keydata in keyframe_data.items(): child.data.color = keydata[1] child.data.keyframe_insert(data_path="color", frame=keydata[0]) - if child.data.use_nodes and "Emission" in child.data.node_tree.nodes: - child.data.node_tree.nodes["Emission"].inputs[0].default_value[:3] = keydata[1] - child.data.node_tree.keyframe_insert(data_path="nodes[\"Emission\"].inputs[0].default_value", frame=keydata[0]) - if child.data.use_nodes and "RGB" in child.data.node_tree.nodes: - child.data.node_tree.nodes["RGB"].outputs[0].default_value[:3] = keydata[1] - child.data.node_tree.keyframe_insert(data_path="nodes[\"RGB\"].outputs[0].default_value", frame=keydata[0]) + if emitnode: + emitnode.inputs[0].default_value[:3] = keydata[1] + tree.keyframe_insert(data_path="nodes[\"Emission\"].inputs[0].default_value", frame=keydata[0]) + if colornode: + colornode.outputs[0].default_value[:3] = keydata[1] + tree.keyframe_insert(data_path="nodes[\"RGB\"].outputs[0].default_value", frame=keydata[0]) contextTrack_flag = False elif KEYFRAME and new_chunk.ID == POS_TRACK_TAG and tracktype == 'OBJECT': # Translation