[Bf-blender-cvs] [cc5a75d5727] master: Cycles: move shader node versioning code to C

Brecht Van Lommel noreply at git.blender.org
Wed Apr 24 12:59:44 CEST 2019


Commit: cc5a75d5727ab45c2521bf6103a28aa2503fbafc
Author: Brecht Van Lommel
Date:   Sat Apr 20 20:25:23 2019 +0200
Branches: master
https://developer.blender.org/rBcc5a75d5727ab45c2521bf6103a28aa2503fbafc

Cycles: move shader node versioning code to C

Shader nodes are now shared with Eevee, so makes more sense to have it in
the core and not be Cycles specific.

Fix T62415: issues with append/link of old Cycles settings.

===================================================================

M	intern/cycles/blender/addon/version_update.py
M	source/blender/blenloader/CMakeLists.txt
M	source/blender/blenloader/intern/readfile.c
M	source/blender/blenloader/intern/readfile.h
M	source/blender/blenloader/intern/versioning_260.c
A	source/blender/blenloader/intern/versioning_cycles.c

===================================================================

diff --git a/intern/cycles/blender/addon/version_update.py b/intern/cycles/blender/addon/version_update.py
index 6f005727b95..899245db03e 100644
--- a/intern/cycles/blender/addon/version_update.py
+++ b/intern/cycles/blender/addon/version_update.py
@@ -22,140 +22,6 @@ import math
 from bpy.app.handlers import persistent
 
 
-def foreach_cycles_nodetree_group(nodetree, traversed):
-    for node in nodetree.nodes:
-        if node.bl_idname == 'ShaderNodeGroup':
-            group = node.node_tree
-            if group and group not in traversed:
-                traversed.add(group)
-                yield group, group.library
-                yield from foreach_cycles_nodetree_group(group, traversed)
-
-
-def foreach_cycles_nodetree():
-    traversed = set()
-
-    for material in bpy.data.materials:
-        nodetree = material.node_tree
-        if nodetree:
-            yield nodetree, material.library
-            yield from foreach_cycles_nodetree_group(nodetree, traversed)
-
-    for world in bpy.data.worlds:
-        nodetree = world.node_tree
-        if nodetree:
-            yield nodetree, world.library
-            foreach_cycles_nodetree_group(nodetree, traversed)
-
-    for light in bpy.data.lights:
-        nodetree = light.node_tree
-        if nodetree:
-            yield nodetree, light.library
-            foreach_cycles_nodetree_group(nodetree, traversed)
-
-
-def displacement_node_insert(nodetree):
-    # Gather links to replace
-    displacement_links = []
-    for link in nodetree.links:
-        if (
-                link.to_node.bl_idname == 'ShaderNodeOutputMaterial' and
-                link.from_node.bl_idname != 'ShaderNodeDisplacement' and
-                link.to_socket.identifier == 'Displacement'
-        ):
-            displacement_links.append(link)
-
-    # Replace links with displacement node
-    for link in displacement_links:
-        from_node = link.from_node
-        from_socket = link.from_socket
-        to_node = link.to_node
-        to_socket = link.to_socket
-
-        nodetree.links.remove(link)
-
-        node = nodetree.nodes.new(type='ShaderNodeDisplacement')
-        node.location[0] = 0.5 * (from_node.location[0] + to_node.location[0])
-        node.location[1] = 0.5 * (from_node.location[1] + to_node.location[1])
-        node.inputs['Scale'].default_value = 0.1
-        node.inputs['Midlevel'].default_value = 0.0
-
-        nodetree.links.new(from_socket, node.inputs['Height'])
-        nodetree.links.new(node.outputs['Displacement'], to_socket)
-
-
-def displacement_principled_nodes(node):
-    if node.bl_idname == 'ShaderNodeDisplacement':
-        if node.space != 'WORLD':
-            node.space = 'OBJECT'
-    if node.bl_idname == 'ShaderNodeBsdfPrincipled':
-        if node.subsurface_method != 'RANDOM_WALK':
-            node.subsurface_method = 'BURLEY'
-
-
-def square_roughness_node_insert(nodetree):
-    roughness_node_types = {
-        'ShaderNodeBsdfAnisotropic',
-        'ShaderNodeBsdfGlass',
-        'ShaderNodeBsdfGlossy',
-        'ShaderNodeBsdfRefraction'}
-
-    # Update default values
-    for node in nodetree.nodes:
-        if node.bl_idname in roughness_node_types:
-            roughness_input = node.inputs['Roughness']
-            roughness_input.default_value = math.sqrt(max(roughness_input.default_value, 0.0))
-
-    # Gather roughness links to replace
-    roughness_links = []
-    for link in nodetree.links:
-        if link.to_node.bl_idname in roughness_node_types and \
-           link.to_socket.identifier == 'Roughness':
-            roughness_links.append(link)
-
-    # Replace links with sqrt node
-    for link in roughness_links:
-        from_node = link.from_node
-        from_socket = link.from_socket
-        to_node = link.to_node
-        to_socket = link.to_socket
-
-        nodetree.links.remove(link)
-
-        node = nodetree.nodes.new(type='ShaderNodeMath')
-        node.operation = 'POWER'
-        node.location[0] = 0.5 * (from_node.location[0] + to_node.location[0])
-        node.location[1] = 0.5 * (from_node.location[1] + to_node.location[1])
-
-        nodetree.links.new(from_socket, node.inputs[0])
-        node.inputs[1].default_value = 0.5
-        nodetree.links.new(node.outputs['Value'], to_socket)
-
-
-def mapping_node_order_flip(node):
-    """
-    Flip euler order of mapping shader node
-    """
-    if node.bl_idname == 'ShaderNodeMapping':
-        rot = node.rotation.copy()
-        rot.order = 'ZYX'
-        quat = rot.to_quaternion()
-        node.rotation = quat.to_euler('XYZ')
-
-
-def vector_curve_node_remap(node):
-    """
-    Remap values of vector curve node from normalized to absolute values
-    """
-    if node.bl_idname == 'ShaderNodeVectorCurve':
-        node.mapping.use_clip = False
-        for curve in node.mapping.curves:
-            for point in curve.points:
-                point.location.x = (point.location.x * 2.0) - 1.0
-                point.location.y = (point.location.y - 0.5) * 2.0
-        node.mapping.update()
-
-
 def custom_bake_remap(scene):
     """
     Remap bake types into the new types and set the flags accordingly
@@ -213,28 +79,6 @@ def custom_bake_remap(scene):
         scene.render.bake.use_pass_indirect = False
 
 
-def ambient_occlusion_node_relink(nodetree):
-    for node in nodetree.nodes:
-        if node.bl_idname == 'ShaderNodeAmbientOcclusion':
-            node.samples = 1
-            node.only_local = False
-            node.inputs['Distance'].default_value = 0.0
-
-    # Gather links to replace
-    ao_links = []
-    for link in nodetree.links:
-        if link.from_node.bl_idname == 'ShaderNodeAmbientOcclusion':
-            ao_links.append(link)
-
-    # Replace links
-    for link in ao_links:
-        from_node = link.from_node
-        to_socket = link.to_socket
-
-        nodetree.links.remove(link)
-        nodetree.links.new(from_node.outputs['Color'], to_socket)
-
-
 @persistent
 def do_versions(self):
     if bpy.context.preferences.version <= (2, 78, 1):
@@ -411,48 +255,3 @@ def do_versions(self):
                 cmat = mat.cycles
                 if not cmat.is_property_set("displacement_method"):
                     cmat.displacement_method = 'DISPLACEMENT'
-
-        # Nodes
-        for nodetree, library in foreach_cycles_nodetree():
-            if library not in libraries:
-                continue
-
-            # Euler order was ZYX in previous versions.
-            if version <= (2, 73, 4):
-                for node in nodetree.nodes:
-                    mapping_node_order_flip(node)
-
-            if version <= (2, 76, 5):
-                for node in nodetree.nodes:
-                    vector_curve_node_remap(node)
-
-            if version <= (2, 79, 1) or \
-               (version >= (2, 80, 0) and version <= (2, 80, 3)):
-                displacement_node_insert(nodetree)
-
-            if version <= (2, 79, 2):
-                for node in nodetree.nodes:
-                    displacement_principled_nodes(node)
-
-            if version <= (2, 79, 3) or \
-               (version >= (2, 80, 0) and version <= (2, 80, 4)):
-                # Switch to squared roughness convention
-                square_roughness_node_insert(nodetree)
-
-            if version <= (2, 79, 4):
-                ambient_occlusion_node_relink(nodetree)
-
-        # Particles
-        for part in bpy.data.particles:
-            if part.library not in libraries:
-                continue
-
-            # Copy cycles hair settings to internal settings
-            if version <= (2, 80, 15):
-                cpart = part.get("cycles", None)
-                if cpart:
-                    part.shape = cpart.get("shape", 0.0)
-                    part.root_radius = cpart.get("root_width", 1.0)
-                    part.tip_radius = cpart.get("tip_width", 0.0)
-                    part.radius_scale = cpart.get("radius_scale", 0.01)
-                    part.use_close_tip = cpart.get("use_closetip", True)
diff --git a/source/blender/blenloader/CMakeLists.txt b/source/blender/blenloader/CMakeLists.txt
index 5b6c91ee1fe..8ab93ba382c 100644
--- a/source/blender/blenloader/CMakeLists.txt
+++ b/source/blender/blenloader/CMakeLists.txt
@@ -53,6 +53,7 @@ set(SRC
   intern/versioning_260.c
   intern/versioning_270.c
   intern/versioning_280.c
+  intern/versioning_cycles.c
   intern/versioning_defaults.c
   intern/versioning_dna.c
   intern/versioning_legacy.c
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index f8f43f1fa86..6646a46be56 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -9420,6 +9420,7 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
   blo_do_versions_260(fd, lib, main);
   blo_do_versions_270(fd, lib, main);
   blo_do_versions_280(fd, lib, main);
+  blo_do_versions_cycles(fd, lib, main);
 
   /* WATCH IT!!!: pointers from libdata have not been converted yet here! */
   /* WATCH IT 2!: Userdef struct init see do_versions_userdef() above! */
@@ -9436,6 +9437,7 @@ static void do_versions_after_linking(Main *main)
   do_versions_after_linking_260(main);
   do_versions_after_linking_270(main);
   do_versions_after_linking_280(main);
+  do_versions_after_linking_cycles(main);
 }
 
 /** \} */
diff --git a/source/blender/blenloader/intern/readfile.h b/source/blender/blenloader/intern/readfile.h
index f4b82e60e31..7cd5bb7ac93 100644
--- a/source/blender/blenloader/intern/readfile.h
+++ b/source/blender/blenloader/intern/readfile.h
@@ -182,10 +182,12 @@ void blo_do_versions_250(struct FileData *fd, struct Library *lib, struct Main *
 void blo_do_versions_260(struct FileData *fd, struct Library *lib, struct Main *bmain);
 void blo_do_versions_270(struct FileData *fd, struct Library *lib, struct Main *bmain);
 void blo_do_versions_280(struct FileData *fd, struct Library *lib, struct Main *bmain);
+void blo_do_versions_cycles(struct FileData *fd, struct Library *lib, struct Main *bmain);
 
 void do_versions_after_linking_250(struct Main *bmain);
 void do_versions_after_linking_260(struct Main *bmain);
 void do_versions_after_linking_270(s

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list