From cc5a75d5727ab45c2521bf6103a28aa2503fbafc Mon Sep 17 00:00:00 2001 From: Brecht Van Lommel Date: Sat, 20 Apr 2019 20:25:23 +0200 Subject: 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. --- intern/cycles/blender/addon/version_update.py | 201 -------------------------- 1 file changed, 201 deletions(-) (limited to 'intern') 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) -- cgit v1.2.3