Fix T52714: Dynamic Sky not working with localization enabled

Bumped version to 1.0.6
Adress the issue of accessing nodes with string keys
Since they are translated in other UI languages
could cause material generation to fail

Add a poll to the operator as it only works if
Cycles is enabled in add-ons
Improve the tooltip

If possible, to be included in the 2.79a version
This commit is contained in:
Vuk Gardašević 2017-09-18 21:08:56 +02:00
parent 435e6affc0
commit 8f830f44e9
Notes: blender-bot 2023-02-14 19:35:27 +01:00
Referenced by issue #52714, Dynamic Sky for Cycles do not work using Blender in spanish
1 changed files with 101 additions and 72 deletions

View File

@ -22,7 +22,7 @@
bl_info = {
"name": "Dynamic Sky",
"author": "Pratik Solanki",
"version": (1, 0, 4),
"version": (1, 0, 6),
"blender": (2, 78, 0),
"location": "View3D > Tools",
"description": "Creates Dynamic Sky for Cycles",
@ -71,10 +71,26 @@ def check_world_name(name_id="Dynamic"):
return name_id
def check_cycles():
return ('cycles' in bpy.context.user_preferences.addons.keys())
class dsky(Operator):
bl_idname = "sky.dyn"
bl_label = "Make a Procedural sky"
bl_description = "Make a Procedural Sky"
bl_description = ("Make a Procedural Sky with parameters in the 3D View\n"
"Note: Available just for Cycles renderer\n"
"Only the last created Dynamic World can be accessed from this panel")
@classmethod
def poll(cls, context):
return check_cycles()
def get_node_types(self, node_tree, node_type):
for node in node_tree.nodes:
if node.type == node_type:
return node
return None
def execute(self, context):
try:
@ -88,48 +104,67 @@ class dsky(Operator):
world.use_nodes = True
nt = world.node_tree
bg = world.node_tree.nodes['Background']
# Note: (see T52714) to avoid string localization problems, assign the name for
# nodes that will be exposed in the 3D view (pattern UI name with underscore)
bg = self.get_node_types(nt, "BACKGROUND")
bg.name = "Scene_Brightness"
bg.inputs[0].default_value[:3] = (0.5, .1, 0.6)
bg.inputs[1].default_value = 1
bg.location = (6708.3, 360)
ntl = nt.links.new
tcor = nt.nodes.new(type="ShaderNodeTexCoord")
map = nt.nodes.new(type="ShaderNodeMapping")
map.vector_type = 'NORMAL'
tcor.location = (243.729, 1005)
map1 = nt.nodes.new(type="ShaderNodeMapping")
map1.vector_type = 'NORMAL'
map1.location = (786.54, 730)
nor = nt.nodes.new(type="ShaderNodeNormal")
nor.name = "Sky_normal"
nor.location = (1220.16, 685)
cr1 = nt.nodes.new(type="ShaderNodeValToRGB")
cr1.color_ramp.elements[0].position = 0.969
cr1.color_ramp.interpolation = 'EASE'
cr1.location = (1671.33, 415)
cr2 = nt.nodes.new(type="ShaderNodeValToRGB")
cr2.color_ramp.elements[0].position = 0.991
cr2.color_ramp.elements[1].position = 1
cr2.color_ramp.interpolation = 'EASE'
cr2.location = (2196.6, 415)
cr3 = nt.nodes.new(type="ShaderNodeValToRGB")
cr3.color_ramp.elements[0].position = 0.779
cr3.color_ramp.elements[1].position = 1
cr3.color_ramp.interpolation = 'EASE'
cr3.location = (2196.6, 415)
mat1 = nt.nodes.new(type="ShaderNodeMath")
mat1.operation = 'MULTIPLY'
mat1.inputs[1].default_value = 0.2
mat1.location = (2196.6, 685)
mat2 = nt.nodes.new(type="ShaderNodeMath")
mat2.operation = 'MULTIPLY'
mat2.inputs[1].default_value = 2
mat2.location = (3294, 685)
mat3 = nt.nodes.new(type="ShaderNodeMath")
mat3.operation = 'MULTIPLY'
mat3.inputs[1].default_value = 40.9
mat3.location = (2745.24, 415)
mat4 = nt.nodes.new(type="ShaderNodeMath")
mat4.operation = 'SUBTRACT'
mat4.inputs[1].default_value = 1
mat4.location = (3294, 415)
ntl(mat2.inputs[0], mat1.outputs[0])
ntl(mat4.inputs[0], mat3.outputs[0])
ntl(mat1.inputs[0], cr3.outputs[0])
ntl(mat3.inputs[0], cr2.outputs[0])
soft = nt.nodes.new(type="ShaderNodeMixRGB")
soft.name = "Soft_hard"
soft.location = (3819.3, 550)
soft_1 = nt.nodes.new(type="ShaderNodeMixRGB")
soft_1.location = (3819.3, 185)
soft.inputs[0].default_value = 1
soft_1.inputs[0].default_value = 0.466
ntl(soft.inputs[1], mat2.outputs[0])
@ -140,12 +175,16 @@ class dsky(Operator):
mix1 = nt.nodes.new(type="ShaderNodeMixRGB")
mix1.blend_type = 'MULTIPLY'
mix1.inputs[0].default_value = 1
mix1.location = (4344.3, 630)
mix1_1 = nt.nodes.new(type="ShaderNodeMixRGB")
mix1_1.blend_type = 'MULTIPLY'
mix1_1.inputs[0].default_value = 1
mix1_1.location = (4344.3, 90)
mix2 = nt.nodes.new(type="ShaderNodeMixRGB")
mix2.location = (4782, 610)
mix2_1 = nt.nodes.new(type="ShaderNodeMixRGB")
mix2_1.location = (5131.8, 270)
mix2.inputs[1].default_value = (0, 0, 0, 1)
mix2.inputs[2].default_value = (32, 22, 14, 200)
mix2_1.inputs[1].default_value = (0, 0, 0, 1)
@ -158,22 +197,33 @@ class dsky(Operator):
gam = nt.nodes.new(type="ShaderNodeGamma")
gam.inputs[1].default_value = 2.3
gam.location = (5131.8, 610)
gam2 = nt.nodes.new(type="ShaderNodeGamma")
gam2.name = "Sun_value"
gam2.inputs[1].default_value = 1
gam2.location = (5524.5, 610)
gam3 = nt.nodes.new(type="ShaderNodeGamma")
gam3.name = "Shadow_color_saturation"
gam3.inputs[1].default_value = 1
gam3.location = (5524.5, 880)
sunopa = nt.nodes.new(type="ShaderNodeMixRGB")
sunopa.blend_type = 'ADD'
sunopa.inputs[0].default_value = 1
sunopa.location = (5940.6, 610)
sunopa_1 = nt.nodes.new(type="ShaderNodeMixRGB")
sunopa_1.blend_type = 'ADD'
sunopa_1.inputs[0].default_value = 1
sunopa_1.location = (5524.5, 340)
combine = nt.nodes.new(type="ShaderNodeMixRGB")
combine.location = (6313.8, 360)
ntl(combine.inputs[1], sunopa.outputs[0])
ntl(combine.inputs[2], sunopa_1.outputs[0])
lp = nt.nodes.new(type="ShaderNodeLightPath")
lp.location = (5940.6, 130)
ntl(combine.inputs[0], lp.outputs[0])
ntl(gam2.inputs[0], gam.outputs[0])
@ -184,25 +234,33 @@ class dsky(Operator):
map2.scale[2] = 6.00
map2.scale[0] = 1.5
map2.scale[1] = 1.5
map2.location = (2196.6, 1510)
n1 = nt.nodes.new(type="ShaderNodeTexNoise")
n1.inputs[1].default_value = 3.8
n1.inputs[2].default_value = 2.4
n1.inputs[3].default_value = 0.5
n1.location = (2745.24, 1780)
n2 = nt.nodes.new(type="ShaderNodeTexNoise")
n2.inputs[1].default_value = 2.0
n2.inputs[2].default_value = 10
n2.inputs[3].default_value = 0.2
n2.location = (2745.24, 1510)
ntl(n2.inputs[0], map2.outputs[0])
ntl(n1.inputs[0], map2.outputs[0])
sc1 = nt.nodes.new(type="ShaderNodeValToRGB")
sc1.location = (3294, 1780)
sc2 = nt.nodes.new(type="ShaderNodeValToRGB")
sc2.location = (3294, 1510)
sc3 = nt.nodes.new(type="ShaderNodeValToRGB")
sc3.location = (3819.3, 820)
sc3_1 = nt.nodes.new(type="ShaderNodeValToRGB")
sc3_1.location = (4344.3, 1360)
sc4 = nt.nodes.new(type="ShaderNodeValToRGB")
sc4.location = (3819.3, 1090)
sc1.color_ramp.elements[1].position = 0.649
sc1.color_ramp.elements[0].position = 0.408
@ -234,11 +292,24 @@ class dsky(Operator):
sc3_1.color_ramp.elements[0].position = 0.0
smix1 = nt.nodes.new(type="ShaderNodeMixRGB")
smix1.location = (3819.3, 1550)
smix1.name = "Cloud_color"
smix2 = nt.nodes.new(type="ShaderNodeMixRGB")
smix2.location = (4344.3, 1630)
smix2.name = "Cloud_density"
smix2_1 = nt.nodes.new(type="ShaderNodeMixRGB")
smix2_1.location = (4782, 1360)
smix3 = nt.nodes.new(type="ShaderNodeMixRGB")
smix3.location = (4344.3, 1090)
smix3.name = "Sky_and_Horizon_colors"
smix4 = nt.nodes.new(type="ShaderNodeMixRGB")
smix4.location = (4782, 880)
smix5 = nt.nodes.new(type="ShaderNodeMixRGB")
smix5.name = "Cloud_opacity"
smix5.location = (5131.8, 880)
smix1.inputs[1].default_value = (1, 1, 1, 1)
smix1.inputs[2].default_value = (0, 0, 0, 1)
@ -255,12 +326,18 @@ class dsky(Operator):
smix5.inputs[0].default_value = 1
srgb = nt.nodes.new(type="ShaderNodeSeparateRGB")
srgb.location = (786.54, 1370)
aniadd = nt.nodes.new(type="ShaderNodeMath")
aniadd.location = (1220.16, 1235)
crgb = nt.nodes.new(type="ShaderNodeCombineRGB")
crgb.location = (1671.33, 1510)
sunrgb = nt.nodes.new(type="ShaderNodeMixRGB")
sunrgb.name = "Sun_color"
sunrgb.blend_type = 'MULTIPLY'
sunrgb.inputs[2].default_value = (32, 30, 30, 200)
sunrgb.inputs[0].default_value = 1
sunrgb.location = (4344.3, 360)
ntl(mix2.inputs[2], sunrgb.outputs[0])
@ -283,6 +360,7 @@ class dsky(Operator):
ntl(sc2.inputs[0], n2.outputs[0])
skynor = nt.nodes.new(type="ShaderNodeNormal")
skynor.location = (3294, 1070)
ntl(sc3.inputs[0], skynor.outputs[1])
ntl(sc4.inputs[0], skynor.outputs[1])
@ -299,69 +377,19 @@ class dsky(Operator):
ntl(cr1.inputs[0], nor.outputs[1])
ntl(cr2.inputs[0], cr1.outputs[0])
ntl(cr3.inputs[0], nor.outputs[1])
ntl(nor.inputs[0], map.outputs[0])
ntl(map.inputs[0], tcor.outputs[0])
ntl(nor.inputs[0], map1.outputs[0])
ntl(map1.inputs[0], tcor.outputs[0])
ntl(sunopa_1.inputs[1], smix5.outputs[0])
ntl(sunopa_1.inputs[2], mix2_1.outputs[0])
nt.nodes['Background'].location = (6708.3, 360)
nt.nodes['ColorRamp'].location = (1671.33, 415)
nt.nodes['ColorRamp.001'].location = (2196.6, 415)
nt.nodes['ColorRamp.002'].location = (1671.33, 685)
nt.nodes['ColorRamp.003'].location = (3294, 1780)
nt.nodes['ColorRamp.004'].location = (3294, 1510)
nt.nodes['ColorRamp.005'].location = (3819.3, 820)
nt.nodes['ColorRamp.006'].location = (4344.3, 1360)
nt.nodes['ColorRamp.007'].location = (3819.3, 1090)
nt.nodes['Combine RGB'].location = (1671.33, 1510)
nt.nodes['Gamma'].location = (5131.8, 610)
nt.nodes['Gamma.001'].location = (5524.5, 610)
nt.nodes['Gamma.002'].location = (5524.5, 880)
nt.nodes['Light Path'].location = (5940.6, 130)
nt.nodes['Mapping'].location = (786.54, 730)
nt.nodes['Mapping.001'].location = (2196.6, 1510)
nt.nodes['Math'].location = (2196.6, 685)
nt.nodes['Math.001'].location = (3294, 685)
nt.nodes['Math.002'].location = (2745.24, 415)
nt.nodes['Math.003'].location = (3294, 415)
nt.nodes['Math.004'].location = (1220.16, 1235)
nt.nodes['Mix'].location = (3819.3, 550)
nt.nodes['Mix.001'].location = (3819.3, 185)
nt.nodes['Mix.002'].location = (4344.3, 630)
nt.nodes['Mix.003'].location = (4344.3, 90)
nt.nodes['Mix.004'].location = (4782, 610)
nt.nodes['Mix.005'].location = (5131.8, 270)
nt.nodes['Mix.006'].location = (5940.6, 610)
nt.nodes['Mix.007'].location = (5524.5, 340)
nt.nodes['Mix.008'].location = (6313.8, 360)
nt.nodes['Mix.009'].location = (3819.3, 1550)
nt.nodes['Mix.010'].location = (4344.3, 1630)
nt.nodes['Mix.011'].location = (4782, 1360)
nt.nodes['Mix.012'].location = (4344.3, 1090)
nt.nodes['Mix.013'].location = (4782, 880)
nt.nodes['Mix.014'].location = (5131.8, 880)
nt.nodes['Mix.015'].location = (4344.3, 360)
nt.nodes['Noise Texture'].location = (2745.24, 1780)
nt.nodes['Noise Texture.001'].location = (2745.24, 1510)
nt.nodes['Normal'].location = (1220.16, 685)
nt.nodes['Normal.001'].location = (3294, 1070)
nt.nodes['Separate RGB'].location = (786.54, 1370)
nt.nodes['Texture Coordinate'].location = (243.729, 1005)
nt.nodes['World Output'].location = (7167.3, 360)
world_out = self.get_node_types(nt, "OUTPUT_WORLD")
world_out.location = (7167.3, 360)
except Exception as e:
error_handlers(self, e, "Make a Procedural sky has failed")
return {"CANCELLED"}
return {'FINISHED'}
@ -385,18 +413,19 @@ def draw_world_settings(col, context):
pick_world = bpy.data.worlds[stored_name]
try:
m = pick_world.node_tree.nodes[28]
m = pick_world.node_tree.nodes['Mix.012'].inputs[1]
n = pick_world.node_tree.nodes['Mix.012'].inputs[2]
c = pick_world.node_tree.nodes['Mix.009'].inputs[1]
o = pick_world.node_tree.nodes['Mix.014'].inputs[0]
d = pick_world.node_tree.nodes['Mix.010'].inputs[0]
so = pick_world.node_tree.nodes['Gamma.001'].inputs[1]
so2 = pick_world.node_tree.nodes['Gamma.002'].inputs[1]
no = pick_world.node_tree.nodes['Normal'].outputs[0]
sof = pick_world.node_tree.nodes['Mix'].inputs[0]
bgp = pick_world.node_tree.nodes['Background'].inputs[1]
suc = pick_world.node_tree.nodes['Mix.015'].inputs[1]
m = pick_world.node_tree.nodes['Sky_and_Horizon_colors'].inputs[1]
n = pick_world.node_tree.nodes['Sky_and_Horizon_colors'].inputs[2]
c = pick_world.node_tree.nodes['Cloud_color'].inputs[1]
o = pick_world.node_tree.nodes['Cloud_opacity'].inputs[0]
d = pick_world.node_tree.nodes['Cloud_density'].inputs[0]
so = pick_world.node_tree.nodes['Sun_value'].inputs[1]
so2 = pick_world.node_tree.nodes['Shadow_color_saturation'].inputs[1]
no = pick_world.node_tree.nodes['Sky_normal'].outputs[0]
sof = pick_world.node_tree.nodes['Soft_hard'].inputs[0]
bgp = pick_world.node_tree.nodes['Scene_Brightness'].inputs[1]
suc = pick_world.node_tree.nodes['Sun_color'].inputs[1]
except:
col.label(text="Please Create a new World", icon="INFO")
col.label(text="seems that there was already", icon="BLANK1")