View difference between Paste ID: EzNp9NN2 and bfaWWbR5
SHOW: | | - or go back to the newest paste.
1
# ##### BEGIN LICENSE BLOCK #####
2
#
3
#  Attribution-NonCommercial-NoDerivatives 4.0 International (CC BY-NC-ND 4.0) 
4
#
5
#  This work is licensed under the Creative Commons
6
#  Attribution-NonCommercial-NoDerivatives 4.0 International License. 
7
#
8
#  To view a copy of this license,
9
#  visit http://creativecommons.org/licenses/by-nc-nd/4.0/.
10
#
11
# ##### END LICENSE BLOCK #####
12
13
bl_info = {
14
    "name": "Shader Library",
15
    "author": "Darkfall",
16
    "version": (1, 9),
17
    "blender": (2, 90, 1),
18
    "location": "View3D > Toolshelf",
19
    "description": "Select from the Various Different Shaders, and they will be addded to your selected object",
20
    "warning": "",
21
    "wiki_url": "",
22
    "category": "Add Shader",
23
}
24
25
import bpy
26
from bpy.types import (Panel, Operator, Menu, PropertyGroup)
27
from bpy.props import (PointerProperty, FloatProperty, FloatVectorProperty, BoolProperty, BoolVectorProperty, StringProperty, IntProperty, EnumProperty)
28
29
class ShaderLibraryProperties(PropertyGroup):
30
    
31
    planet_type: EnumProperty(
32
        name="Planet Type:",
33
        description="Select A Planet Type.",
34
        items=[ ('OP2', "Continental World", "An Earth-like Planet"),
35
                ('OP3', "Dust World", "A Barren Planet"),
36
                ('OP4', "Moon", "A Moon"),
37
                ('OP5', "Rocky World", "A Rocky Planet"),
38
                ('OP6', "Stars", "Uhm, Stars!"),
39
                ('OP7', "Golden World", "A Sci-fi Planet with a Golden Theme"),
40
                ('OP8', "Icy World", "An Icy Planet"),
41
               ]
42
        )
43
44
class ShaderMainPanel(Panel):
45
    bl_label = " "
46
    bl_idname = "SHADER_PT_MAINPANEL"
47
    bl_space_type = 'VIEW_3D'
48
    bl_region_type = 'UI'
49
    bl_category = 'Shader Library'
50
51
    def draw_header(self, context):
52
        layout = self.layout
53
        row = layout.row()
54
        row.label(text="The Shader Library", icon= 'NODE_MATERIAL')
55
        
56
    def draw(self, context):
57
        layout = self.layout
58
        row = layout.row()
59
        row = layout.row()
60
        row.label(text= "Select a Shader to be added.")
61
        row = layout.row()
62
        #row.label(text= "(Press Shift F - for Shortcut)")
63
        row.label(text= "                                           (ver 1.09)")
64
65
class SubPanelCosmic(Panel):
66
    bl_label = "Cosmic Shaders"
67
    bl_idname = "SHADER_PT_COSMICSHADERS"
68
    bl_space_type = 'VIEW_3D'
69
    bl_region_type = 'UI'
70
    bl_category = 'Shader Library'
71
    bl_parent_id = 'SHADER_PT_MAINPANEL'
72
    bl_options = {'DEFAULT_CLOSED'}
73
74
    def draw(self, context):
75
        layout = self.layout
76
        scene = context.scene
77
        mytool = scene.my_tool
78
        
79
        layout.scale_y = 1.1
80
        row = layout.row()
81
        row.label(text= "Select a Cosmic Shader.")
82
        row = layout.row()
83
        row.prop(mytool, "planet_type")
84
        row = layout.row()
85
        row.operator("wm.cosmicop", icon= 'WORLD', text= "Add Cosmic Shader")
86
        row = layout.row()
87
88
class SubPanelPreciousMetals(Panel):
89
    bl_label = "Gemstones"
90
    bl_idname = "SHADER_PT_PRECIOUSMETALS"
91
    bl_space_type = 'VIEW_3D'
92
    bl_region_type = 'UI'
93
    bl_category = 'Shader Library'
94
    bl_parent_id = 'SHADER_PT_MAINPANEL'
95
    bl_options = {'DEFAULT_CLOSED'}
96
97
    def draw(self, context):
98
        layout = self.layout
99
        layout.scale_y = 1.1
100
        row = layout.row()
101
        row.label(text= "Select a Gemstone Shader.")
102
        row = layout.row()
103
        row.operator("wm.diamondop", icon= 'DECORATE_ANIMATE', text= "Diamond")
104
        row = layout.row()
105
106
class SubPanelMaterials(Panel):
107
    bl_label = "Materials"
108
    bl_idname = "SHADER_PT_MATERIALS"
109
    bl_space_type = 'VIEW_3D'
110
    bl_region_type = 'UI'
111
    bl_category = 'Shader Library'
112
    bl_parent_id = 'SHADER_PT_MAINPANEL'
113
    bl_options = {'DEFAULT_CLOSED'}
114
115
    def draw(self, context):
116
        layout = self.layout
117
        layout.scale_y = 1.1
118
        row = layout.row()
119
        row.label(text= "Select a Basic Material Shader.")
120
        row = layout.row()
121
        row = layout.row()
122
        row.operator("wm.leatherop", icon= 'OUTLINER_OB_SURFACE', text= "Leather")
123
        row = layout.row()
124
        row.operator("shader.brick_operator", icon= 'MOD_BUILD', text= "Brick")
125
126
class SubPanelMetals(Panel):
127
    bl_label = "Metallics"
128
    bl_idname = "SHADER_PT_METALS"
129
    bl_space_type = 'VIEW_3D'
130
    bl_region_type = 'UI'
131
    bl_category = 'Shader Library'
132
    bl_parent_id = 'SHADER_PT_MAINPANEL'
133
    bl_options = {'DEFAULT_CLOSED'}
134
135
    def draw(self, context):
136
        layout = self.layout
137
        layout.scale_y = 1.1
138
        row = layout.row()
139
        row.label(text= "Select a Basic Metallic Shader.")
140
        row = layout.row()
141
        row = layout.row()
142
        row.operator('shader.gold_operator', icon= 'KEYTYPE_KEYFRAME_VEC')
143
        row.operator('shader.silver_operator', icon= 'HANDLETYPE_FREE_VEC')
144
        row.operator('shader.copper_operator', icon= 'KEYTYPE_EXTREME_VEC')
145
        row = layout.row()
146
        row.operator('shader.scifigold_operator', icon= 'COLORSET_09_VEC')
147
148
class SubPanelStylized(Panel):
149
    bl_label = "Stylized"
150
    bl_idname = "SHADER_PT_STYLIZED"
151
    bl_space_type = 'VIEW_3D'
152
    bl_region_type = 'UI'
153
    bl_category = 'Shader Library'
154
    bl_parent_id = 'SHADER_PT_MAINPANEL'
155
    bl_options = {'DEFAULT_CLOSED'}
156
157
    def draw(self, context):
158
        layout = self.layout
159
        layout.scale_y = 1.1
160
        row = layout.row()
161
        row.label(text= "Select a Stylized Shader.")
162
        row = layout.row()
163
        row.operator("shader.cloud_operator", icon= 'OUTLINER_DATA_VOLUME', text= "Clouds")
164
        row = layout.row()
165
        row.operator("wm.ghostop", icon= 'GHOST_ENABLED', text= "Ghost")
166
        row.operator("wm.hologramop", icon= 'USER', text= "Hologram")
167
        row = layout.row()
168
        row.operator("wm.neonop", icon= 'PARTICLE_PATH', text= "Neon")
169
        row = layout.row()
170
        row.operator("wm.potionop", icon= 'SORTTIME', text= "Stylized Potion")
171
        row = layout.row()
172
173
class SHADER_OT_COSMIC(Operator):
174
    """Open the Cosmic Shader Dialog box"""
175
    bl_label = "             Cosmic Operator"
176
    bl_idname = "wm.cosmicop"
177
    bl_options = {'REGISTER', 'UNDO'}
178
    
179
    col1 : FloatVectorProperty(name='Color Tint',subtype='COLOR_GAMMA',size=4,default=(1,1,1,1), min= 0, max= 1)
180
    v_col : FloatVectorProperty(name='Variation Col',subtype='COLOR_GAMMA',size=4, default=(0.181135, 1, 0.0857819, 1), min= 0, max= 1)
181
    v_bool : BoolProperty(default= False, name= "Enable Color Variation Options")
182
    v_scale : FloatProperty(default= 8, name= "Variation Size", min= 5, max= 10 )
183
    atmos : BoolProperty(default= True, name= "Enable Atmospheric Glow")
184
    m_atmos : BoolProperty(default= True, name= "Enable Atmospheric Glow")
185
    land_scale : FloatProperty(default= 5)
186
    land_hue : FloatProperty(default= 0.5, min= 0, max= 1)
187
    land_sat : FloatProperty(default= 1, min= 0, max= 1)
188
    d_hue : FloatProperty(default= 0.5, min= 0, max= 1)
189
    cloud_bool : BoolProperty(default= False, name= "Enable Clouds")
190
    cloud_scale : FloatProperty(default= 55.400, name= "Cloud Size")
191
    cloud_vis : FloatProperty(default= 1, name= "Cloud Visibility", min= 0, max= 1)
192
    atmos_glow : FloatProperty(default= 6.500)
193
    atmos_col : FloatVectorProperty(default= (0, 0.141263, 0.904661, 1), name='Atmos Color',subtype='COLOR_GAMMA',size=4, min= 0, max= 1)
194
    d_atmos_col : FloatVectorProperty(default= (0.552012, 0.130136, 0.0451862, 1), name='Atmos Color',subtype='COLOR_GAMMA',size=4)
195
    d_atmos_glow : FloatProperty(default= 6.500)
196
    m_atmos_col : FloatVectorProperty(default= (1,1,1,1), name='Atmos Color',subtype='COLOR_GAMMA',size=4, min= 0, max= 1)
197
    m_atmos_glow : FloatProperty(default= 1.05)
198
    star_scale : FloatProperty(default= 614)
199
    m_macro_scale : FloatProperty(default= 8.6, description= "Scale the Macro Surface Detail")
200
    m_micro_scale : FloatProperty(default= 7.6, description= "Scale the Micro Surface Detail")
201
    m_seed : FloatProperty(default= 0.5, description= "Generate a Random Variation based of this seed value")
202
    star_coverage : FloatProperty(default= 0.674, min=0.628, max= 1)
203
    water_lvl : FloatProperty(default= 0.492, min= 0.35, max= 0.515)
204
    stripe_amount : FloatProperty(default= 3.500, min= 0, max= 30)
205
    shadow_bool : BoolProperty(default= False, name= "Enable Shadow")
206
    m_shadow_bool : BoolProperty(default= False, name= "Enable Shadow", description= "Enable a Shadow simulating Day/Night")
207
    city_bool : BoolProperty(default= False, name= "Enable City Lights")
208
    city_lights : FloatProperty(default= 21.980, name= "Scale")
209
    city_brightness : FloatProperty(default= 7.9, name= "Light Strength")
210
    shadow_coverage : FloatProperty(default= 0, min= -1, max= 1)
211
    shadow_vis : FloatProperty(default= 0.962, min= 0.3, max= 1)
212
    m_shadow_coverage : FloatProperty(default= 0.5, min= 0.046, max= 1)
213
    m_shadow_vis : FloatProperty(default= 0.962, min= 0.3, max= 1)
214
    r_scale : FloatProperty(default= 7, min= 1, max= 20, name= "Scale")
215
    r_soften : FloatProperty(default= 0.150, min= 0, max= 1, name= "Soften Landmass")
216
    r_land_height : FloatProperty(default= 0.337, min= 0.041, max= 0.4)
217
    r_land_col1 : FloatVectorProperty(name='Color 1',subtype='COLOR_GAMMA',size=4,default=(0.38643, 0.0953075, 0.0251869, 1), min= 0, max= 1)
218
    r_land_col2 : FloatVectorProperty(name='Color 2',subtype='COLOR_GAMMA',size=4,default=(1, 0.533275, 0.0666201, 1), min= 0, max= 1)
219
    r_land_col3 : FloatVectorProperty(name='Color 3',subtype='COLOR_GAMMA',size=4,default=(1, 0.930111, 0.428691, 1), min= 0, max= 1)
220
    r_land_col4 : FloatVectorProperty(name='Color 4',subtype='COLOR_GAMMA',size=4,default=(0.991102, 1, 0.366253, 1), min= 0, max= 1)
221
    r_water_col : FloatVectorProperty(name='Water Color',subtype='COLOR_GAMMA',size=4,default=(0.144129, 0.0802198, 0, 1), min= 0, max= 1)
222
    r_atmos : BoolProperty(default= True, name= "Enable Atmospheric Glow")
223
    r_atmos_col : FloatVectorProperty(default= (0.513397, 0.30397, 0.118823, 1), name='Atmos Color',subtype='COLOR_GAMMA',size=4, min= 0, max= 1)
224
    r_atmos_glow : FloatProperty(default= 1.280)
225
    g_scale : FloatProperty(default= 4.861, min= 1, max= 20, name= "Scale")
226
    g_soften : FloatProperty(default= 0.318, min= 0, max= 1, name= "Soften Landmass")
227
    g_land_height : FloatProperty(default= 0.154, min= 0.041, max= 0.4)
228
    g_land_col1 : FloatVectorProperty(name='Color 1',subtype='COLOR_GAMMA',size=4,default=(0.198069, 0.0953075, 0.0703601, 1), min= 0, max= 1)
229
    g_land_col2 : FloatVectorProperty(name='Color 2',subtype='COLOR_GAMMA',size=4,default=(0.48515, 0.238398, 0.0648033, 1), min= 0, max= 1)
230
    g_land_col3 : FloatVectorProperty(name='Color 3',subtype='COLOR_GAMMA',size=4,default=(1, 0.467784, 0.066626, 1), min= 0, max= 1)
231
    g_land_col4 : FloatVectorProperty(name='Color 4',subtype='COLOR_GAMMA',size=4,default=(1, 0.745404, 0.23074, 1), min= 0, max= 1)
232
    g_water_col : FloatVectorProperty(name='Water Color',subtype='COLOR_GAMMA',size=4,default=(0.144129, 0.0802198, 0, 1), min= 0, max= 1)
233
    g_atmos : BoolProperty(default= True, name= "Enable Atmospheric Glow")
234
    g_atmos_col : FloatVectorProperty(default= (1, 0.693872, 0.212231, 1), name='Atmos Color',subtype='COLOR_GAMMA',size=4, min= 0, max= 1)
235
    g_atmos_glow : FloatProperty(default= 2.420)
236
    i_scale : FloatProperty(default= 3.692, min= 1, max= 20, name= "Scale")
237
    i_soften : FloatProperty(default= 0.238, min= 0, max= 1, name= "Soften Landmass")
238
    i_land_height : FloatProperty(default= 0.238, min= 0.041, max= 0.4)
239
    i_land_col1 : FloatVectorProperty(name='Color 1',subtype='COLOR_GAMMA',size=4,default=(0.00334653, 0.0152085, 0.0975874, 1), min= 0, max= 1)
240
    i_land_col2 : FloatVectorProperty(name='Color 2',subtype='COLOR_GAMMA',size=4,default=(0.0409151, 0.304987, 0.48515, 1), min= 0, max= 1)
241
    i_land_col3 : FloatVectorProperty(name='Color 3',subtype='COLOR_GAMMA',size=4,default=(0.381326, 0.527115, 1, 1), min= 0, max= 1)
242
    i_land_col4 : FloatVectorProperty(name='Color 4',subtype='COLOR_GAMMA',size=4,default=(0.745404, 0.991102, 1, 1), min= 0, max= 1)
243
    i_water_col : FloatVectorProperty(name='Water Color',subtype='COLOR_GAMMA',size=4,default=(0.0122865, 0.0343398, 0.0802199, 1), min= 0, max= 1)
244
    i_atmos : BoolProperty(default= True, name= "Enable Atmospheric Glow")
245
    i_atmos_col : FloatVectorProperty(default= (0.0761853, 0.456411, 1, 1), name='Atmos Color',subtype='COLOR_GAMMA',size=4, min= 0, max= 1)
246
    i_atmos_glow : FloatProperty(default= 2.420)
247
    c_shader_type : EnumProperty(
248
        name="Shader Type:",
249
        description="Select a Shader Type",
250
        items=[ ('OP1', "Emission", ""),
251
                ('OP2', "Principled", ""),
252
               ]
253
        )
254
    
255
    def draw(self, context):
256
        layout = self.layout
257
        scene = context.scene
258
        mytool = scene.my_tool
259
        
260
        if mytool.planet_type == 'OP2':
261
            layout.prop(self, "c_shader_type", text= "Shader Type", expand= True)
262
            layout.prop(self, "land_hue", slider= True, text= "Land Hue")
263
            layout.prop(self, "land_sat", slider= True, text= "Land Saturation")
264
            layout.prop(self, "land_scale", text= "Land Scale")
265
            layout.prop(self, "water_lvl", slider= True, text= "Water Level")
266
            layout.prop(self, "v_bool")
267
            if self.v_bool == True:
268
                layout.prop(self, "v_col")
269
                layout.prop(self, "v_scale", slider= True)
270
            layout.prop(self, "shadow_bool")
271
            if self.shadow_bool == True:
272
                layout.prop(self, "shadow_coverage", slider= True, text= "Shadow Position")
273
                layout.prop(self, "shadow_vis", slider= True, text= "Shadow Visibility")
274
                layout.prop(self, "city_bool")
275
                if self.city_bool == True:
276
                    layout.prop(self, "city_lights")
277
                    layout.prop(self, "city_brightness")         
278
            layout.prop(self, "atmos")
279
            if self.atmos == True:
280
                layout.prop(self, "atmos_col", text= "Atmos Color")
281
                layout.prop(self, "atmos_glow", text= "Glow Amount")
282
            layout.prop(self, "cloud_bool")    
283
            if self.cloud_bool == True:
284
                layout.prop(self, "cloud_scale")
285
                layout.prop(self, "cloud_vis", slider= True)
286
        
287
        if mytool.planet_type == 'OP3':
288
            layout.prop(self, "d_hue", text= "Planet Hue", slider= True)
289
            layout.prop(self, "stripe_amount", text= "Stripe Amount", slider= True)
290
            layout.prop(self, "atmos")
291
            if self.atmos == True:
292
                layout.prop(self, "d_atmos_col", text= "Atmos Color")
293
                layout.prop(self, "d_atmos_glow", text= "Glow Amount")    
294
                
295
        if mytool.planet_type == 'OP4':
296
            layout.prop(self, "m_seed", text= "Seed")
297
            layout.prop(self, "m_macro_scale", text= "Moon Macro Scale")
298
            layout.prop(self, "m_micro_scale", text= "Moon Micro Scale")
299
            layout.prop(self, "m_atmos")
300
            if self.m_atmos == True:
301
                layout.prop(self, "m_atmos_col", text= "Atmos Color")
302
                layout.prop(self, "m_atmos_glow", text= "Glow Amount")
303
            layout.prop(self, "m_shadow_bool")
304
            if self.m_shadow_bool == True:
305
                layout.prop(self, "m_shadow_coverage", text= "Shdow Position", slider= True)
306
                layout.prop(self, "m_shadow_vis", text= "Shdow Visibility", slider= True)
307
                 
308
        if mytool.planet_type == 'OP5':
309
            layout.prop(self, "r_scale", text= "Noise Scale", slider= True)
310
            layout.prop(self, "r_land_height", text= "Land Height", slider= True)
311
            layout.prop(self, "r_land_col1", text= "Land Color 1")
312
            layout.prop(self, "r_land_col2", text= "Land Color 2")
313
            layout.prop(self, "r_land_col3", text= "Land Color 3")
314
            layout.prop(self, "r_land_col4", text= "Land Color 4")
315
            layout.prop(self, "r_water_col", text= "Water Color")
316
            layout.prop(self, "r_soften", text= "Soften Noise Pattern", slider= True)
317
            layout.prop(self, "r_atmos", text= "Enable Atmospheric Glow")
318
            if self.r_atmos == True:
319
                layout.prop(self, "r_atmos_col", text= "Amospheric Color")
320
                layout.prop(self, "r_atmos_glow", text= "Atmos Strength")
321
        
322
        if mytool.planet_type == 'OP6':
323
            layout.prop(self, "star_scale", text= "Star Scale")
324
            layout.prop(self, "star_coverage", slider= True, text= "Star Density")
325
            
326
        if mytool.planet_type == 'OP7':
327
            layout.prop(self, "g_scale", text= "Noise Scale", slider= True)
328
            layout.prop(self, "g_land_height", text= "Land Height", slider= True)
329
            layout.prop(self, "g_land_col1", text= "Land Color 1")
330
            layout.prop(self, "g_land_col2", text= "Land Color 2")
331
            layout.prop(self, "g_land_col3", text= "Land Color 3")
332
            layout.prop(self, "g_land_col4", text= "Land Color 4")
333
            layout.prop(self, "g_water_col", text= "Water Color")
334
            layout.prop(self, "g_soften", text= "Soften Noise Pattern", slider= True)
335
            layout.prop(self, "g_atmos", text= "Enable Atmospheric Glow")
336
            if self.g_atmos == True:
337
                layout.prop(self, "g_atmos_col", text= "Amospheric Color")
338
                layout.prop(self, "g_atmos_glow", text= "Atmos Strength") 
339
        
340
        if mytool.planet_type == 'OP8':
341
            layout.prop(self, "i_scale", text= "Noise Scale", slider= True)
342
            layout.prop(self, "i_land_height", text= "Land Height", slider= True)
343
            layout.prop(self, "i_land_col1", text= "Land Color 1")
344
            layout.prop(self, "i_land_col2", text= "Land Color 2")
345
            layout.prop(self, "i_land_col3", text= "Land Color 3")
346
            layout.prop(self, "i_land_col4", text= "Land Color 4")
347
            layout.prop(self, "i_water_col", text= "Water Color")
348
            layout.prop(self, "i_soften", text= "Soften Noise Pattern", slider= True)
349
            layout.prop(self, "i_atmos", text= "Enable Atmospheric Glow")
350
            if self.i_atmos == True:
351
                layout.prop(self, "i_atmos_col", text= "Amospheric Color")
352
                layout.prop(self, "i_atmos_glow", text= "Atmos Strength")         
353
                        
354
    
355
    def execute(self, context):
356
        c = self.col1
357
        cv = self.cloud_vis
358
        scene = context.scene
359
        mytool = scene.my_tool
360
        
361
        if mytool.planet_type == 'OP1':
362
            material_cosmic = bpy.data.materials.new(name= "Coming Soon")
363
            material_cosmic.use_nodes = True
364
            material_cosmic.node_tree.nodes.remove(material_cosmic.node_tree.nodes.get('Principled BSDF'))
365
            material_output = material_cosmic.node_tree.nodes.get('Material Output')
366
            material_output.location = (1000,0)
367
            glass1_node = material_cosmic.node_tree.nodes.new('ShaderNodeBsdfGlass')
368
            glass1_node.location = (-600,0)
369
            glass1_node.inputs[0].default_value = (1, 0, 0, 1)
370
            glass1_node.inputs[2].default_value = 1.446
371
            #material_cosmic.node_tree.links.new(glass1_node.outputs[0], add1_node.inputs[0])
372
            #material_cosmic.node_tree.links.new(mix1_node.outputs[0], material_output.inputs[0])
373
            bpy.context.object.active_material = material_cosmic
374
            bpy.context.object.active_material.diffuse_color = c
375
            bpy.context.object.active_material.metallic = 0.3
376
        
377
        if mytool.planet_type == 'OP2':
378
            if self.c_shader_type== 'OP1':
379
                material_cosmic2 = bpy.data.materials.new(name= "Continental")
380
                material_cosmic2.use_nodes = True
381
                material_cosmic2.node_tree.nodes.remove(material_cosmic2.node_tree.nodes.get('Principled BSDF'))
382
                material_output = material_cosmic2.node_tree.nodes.get('Material Output')
383
                material_output.location = (3200,0)
384
                noise1_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexNoise')
385
                noise1_node.location = (-1000,0)
386
                noise1_node.inputs[2].default_value = self.land_scale
387
                noise1_node.inputs[3].default_value = 16
388
                noise1_node.inputs[4].default_value = 0.848
389
                noise1_node.inputs[5].default_value = 0
390
                noise2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexNoise')
391
                noise2_node.location = (-800, 0)
392
                noise2_node.inputs[2].default_value = 12.5
393
                noise2_node.inputs[3].default_value = 2
394
                noise2_node.inputs[4].default_value = 0.890
395
                noise2_node.inputs[5].default_value = 0
396
                cr1_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
397
                cr1_node.location = (-900, -200)
398
                cr1_node.color_ramp.elements[0].position= 0.133
399
                cr1_node.color_ramp.elements[1].position= self.water_lvl
400
                cr1_node.color_ramp.elements.new(position= 0.516)
401
                cr2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
402
                cr2_node.location = (-650, -200)
403
                cr2_node.color_ramp.elements[0].position= 0.505
404
                cr2_node.color_ramp.elements[1].position= 0.650
405
                mixrgb_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
406
                mixrgb_node.location = (-600, 0)
407
                mixrgb_node.inputs[2].default_value = (0, 0.0202886, 0.502886, 1)
408
                multiply_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
409
                multiply_node.location = (-400, 200)
410
                multiply_node.blend_type = 'BURN'
411
                multiply_node.inputs[2].default_value = (0.391573, 0.799103, 0, 1)
412
                hue_node = material_cosmic2.node_tree.nodes.new('ShaderNodeHueSaturation')
413
                hue_node.location = (800, 100)
414
                hue_node.inputs[0].default_value = self.land_hue
415
                hue_node.inputs[1].default_value = self.land_sat
416
                cr3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
417
                cr3_node.location = (-400, -200)
418
                cr3_node.color_ramp.elements[0].position= 0.402
419
                cr3_node.color_ramp.elements[1].position= 0.418
420
                overlay_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
421
                overlay_node.location = (1000, 0)
422
                overlay_node.blend_type = 'LIGHTEN'
423
                overlay_node.inputs[2].default_value = (0, 0.0152085, 0.0528607, 1)
424
                dark_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
425
                dark_node.location = (1200, 0)
426
                dark_node.blend_type = 'DARKEN'
427
                dark_node.inputs[2].default_value = (0,0,0,1)
428
                dark_node.use_clamp = True
429
                if self.shadow_bool == False:
430
                    dark_node.mute= True
431
                grad1_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexGradient')
432
                grad1_node.location= (800, 500)
433
                mapping2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMapping')
434
                mapping2_node.location = (600, 500)
435
                mapping2_node.inputs[1].default_value[0] = self.shadow_coverage
436
                mapping2_node.inputs[3].default_value[0] = 1
437
                mapping2_node.inputs[3].default_value[1] = 1
438
                mapping2_node.inputs[3].default_value[2] = 1
439
                coord2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexCoord')
440
                coord2_node.location = (400, 500)
441
                sv = self.shadow_vis
442
                cr7_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
443
                cr7_node.location = (1200, 300)
444
                cr7_node.color_ramp.elements[0].position= 0.096
445
                cr7_node.color_ramp.elements[1].position= 0.551
446
                cr7_node.color_ramp.elements[1].color= (sv, sv, sv, 1)
447
                cr8_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
448
                cr8_node.location = (1400, 500)
449
                cr8_node.color_ramp.elements[0].position= 0.421
450
                cr8_node.color_ramp.elements[1].position= 0.435
451
                cr8_node.color_ramp.elements[0].color= (1,1,1,1)
452
                cr8_node.color_ramp.elements[1].color= (0,0,0,1)
453
                math2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMath')
454
                math2_node.location = (1700, 600)
455
                math2_node.operation = 'SUBTRACT'
456
                math3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMath')
457
                math3_node.location = (1500, 700)
458
                math3_node.operation = 'MULTIPLY'
459
                math4_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMath')
460
                math4_node.location = (900, 900)
461
                math4_node.operation = 'MULTIPLY'
462
                cr9_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
463
                cr9_node.location = (600, 900)
464
                cr9_node.color_ramp.elements[0].position= 0.598
465
                cr9_node.color_ramp.elements[1].position= 0.606
466
                noise4_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexNoise')
467
                noise4_node.location = (400, 900)
468
                noise4_node.inputs[2].default_value = 96.100
469
                noise4_node.inputs[3].default_value = 2
470
                noise4_node.inputs[4].default_value = 1
471
                noise4_node.inputs[5].default_value = 2.4
472
                math5_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMath')
473
                math5_node.location = (200, 900)
474
                math5_node.operation = 'ADD'
475
                musgrave2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexMusgrave')
476
                musgrave2_node.location = (0, 1000)
477
                musgrave2_node.inputs[2].default_value = self.city_lights
478
                musgrave2_node.inputs[3].default_value = 2
479
                musgrave2_node.inputs[4].default_value = 2
480
                musgrave2_node.inputs[5].default_value = 2
481
                musgrave3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexMusgrave')
482
                musgrave3_node.location = (0, 800)
483
                musgrave3_node.inputs[2].default_value = -5.80
484
                musgrave3_node.inputs[3].default_value = 2
485
                musgrave3_node.inputs[4].default_value = 9.2
486
                musgrave3_node.inputs[5].default_value = 9.8
487
                mixs3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixShader')
488
                mixs3_node.location = (3000, 0)
489
                if self.city_bool == False:
490
                    mixs3_node.mute= True
491
                emiss4_node = material_cosmic2.node_tree.nodes.new('ShaderNodeEmission')
492
                emiss4_node.location = (2800, -200)
493
                emiss4_node.inputs[1].default_value = self.city_brightness
494
                mixrgb3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
495
                mixrgb3_node.location = (2600, -200)
496
                mixrgb3_node.inputs[2].default_value = (1, 0.694074, 0.220557, 1)
497
                cr10_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
498
                cr10_node.location = (2800, 500)
499
                cr10_node.color_ramp.elements[1].position= 0.027
500
                emiss1_node = material_cosmic2.node_tree.nodes.new('ShaderNodeEmission')
501
                emiss1_node.location = (1700, 200)
502
                emiss1_node.inputs[1].default_value = 2.800
503
                emiss2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeEmission')
504
                emiss2_node.location = (1900, -200)
505
                emiss2_node.inputs[0].default_value = self.atmos_col
506
                emiss2_node.inputs[1].default_value = self.atmos_glow
507
                emiss3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeEmission')
508
                emiss3_node.location = (1900, 0)
509
                emiss3_node.inputs[0].default_value = (1, 1, 1, 1)
510
                emiss3_node.inputs[1].default_value = 6.500
511
                mixs2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixShader')
512
                mixs2_node.location = (2500, 0)
513
                if self.cloud_bool == False:
514
                    mixs2_node.mute= True
515
                lweight_node = material_cosmic2.node_tree.nodes.new('ShaderNodeLayerWeight')
516
                lweight_node.location = (2200, 400)
517
                lweight_node.inputs[0].default_value = 0.370
518
                cr4_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
519
                cr4_node.location = (2500, 400)
520
                cr4_node.color_ramp.elements[0].position= 0.056739
521
                mixs_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixShader')
522
                mixs_node.location = (2700, 0)
523
                if self.atmos == False: 
524
                    mixs_node.mute= True
525
                cr5_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
526
                cr5_node.location = (-400, -500)
527
                cr5_node.color_ramp.elements[0].position= 0.540761
528
                cr5_node.color_ramp.elements[1].position= 0.769022
529
                cr5_node.color_ramp.elements[1].color = (cv, cv, cv, cv)
530
                noise3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexNoise')
531
                noise3_node.location = (-600, -500)
532
                noise3_node.inputs[2].default_value = self.cloud_scale
533
                noise3_node.inputs[3].default_value = 7.100
534
                noise3_node.inputs[4].default_value = 0.995
535
                noise3_node.inputs[5].default_value = 0.8
536
                mapping_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMapping')
537
                mapping_node.location = (-800, -500)
538
                mapping_node.inputs[3].default_value[0] = 0.18
539
                mapping_node.inputs[3].default_value[1] = 0.18
540
                mapping_node.inputs[3].default_value[2] = 0.18
541
                coord_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexCoord')
542
                coord_node.location = (-1000, -500)
543
                mixrgb2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
544
                mixrgb2_node.location = (600, 0)
545
                mixrgb2_node.inputs[2].default_value = self.v_col
546
                math_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMath')
547
                math_node.location = (400, 0)
548
                math_node.operation = 'MULTIPLY'
549
                musgrave1_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexMusgrave')
550
                musgrave1_node.location = (200, -200)
551
                musgrave1_node.inputs[2].default_value = self.v_scale
552
                musgrave1_node.inputs[3].default_value = 16
553
                musgrave1_node.inputs[4].default_value = 0.030
554
                musgrave1_node.inputs[5].default_value = 1.2
555
                musgrave1_node.musgrave_type = 'MULTIFRACTAL'
556
                cr6_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
557
                cr6_node.location = (200, 200)
558
                cr6_node.color_ramp.elements[0].position= 0.092
559
                cr6_node.color_ramp.elements[1].position= 0.122
560
                bw_node = material_cosmic2.node_tree.nodes.new('ShaderNodeRGBToBW')
561
                bw_node.location = (0, 200)
562
                link = material_cosmic2.node_tree.links.new
563
                link(mixrgb3_node.outputs[0], emiss4_node.inputs[0])
564
                link(overlay_node.outputs[0], dark_node.inputs[1])
565
                link(math2_node.outputs[0], mixrgb3_node.inputs[1])
566
                link(math2_node.outputs[0], cr10_node.inputs[0])
567
                link(math4_node.outputs[0], math3_node.inputs[0])
568
                link(math5_node.outputs[0], math4_node.inputs[1])
569
                link(cr9_node.outputs[0], math4_node.inputs[0])
570
                link(noise4_node.outputs[0], cr9_node.inputs[0])
571
                link(math5_node.outputs[0], noise4_node.inputs[1])
572
                link(musgrave3_node.outputs[0], math5_node.inputs[1])
573
                link(musgrave2_node.outputs[0], math5_node.inputs[0])
574
                link(cr6_node.outputs[0], math3_node.inputs[1])
575
                link(math3_node.outputs[0], math2_node.inputs[0])
576
                link(cr8_node.outputs[0], math2_node.inputs[1])
577
                link(grad1_node.outputs[0], cr8_node.inputs[0])
578
                link(cr10_node.outputs[0], mixs3_node.inputs[0])
579
                link(emiss4_node.outputs[0], mixs3_node.inputs[2])
580
                link(mixs_node.outputs[0], mixs3_node.inputs[1])
581
                link(coord2_node.outputs[0], mapping2_node.inputs[0])
582
                link(mapping2_node.outputs[0], grad1_node.inputs[0])
583
                link(grad1_node.outputs[0], cr7_node.inputs[0])
584
                link(dark_node.outputs[0], emiss1_node.inputs[0])
585
                link(cr7_node.outputs[0], dark_node.inputs[0])
586
                link(math_node.outputs[0], mixrgb2_node.inputs[0])
587
                link(cr6_node.outputs[0], math_node.inputs[0])
588
                link(musgrave1_node.outputs[0], math_node.inputs[1])
589
                link(bw_node.outputs[0], cr6_node.inputs[0])
590
                link(math_node.outputs[0], mixrgb2_node.inputs[0])
591
                link(multiply_node.outputs[0], bw_node.inputs[0])
592
                link(multiply_node.outputs[0], mixrgb2_node.inputs[1])
593
                link(emiss1_node.outputs[0], mixs2_node.inputs[1])
594
                link(emiss3_node.outputs[0], mixs2_node.inputs[2])
595
                link(mixs2_node.outputs[0], mixs_node.inputs[1])
596
                link(emiss2_node.outputs[0], mixs_node.inputs[2])
597
                link(cr5_node.outputs[0], mixs2_node.inputs[0])
598
                link(noise3_node.outputs[0], cr5_node.inputs[0])
599
                link(mapping_node.outputs[0], noise3_node.inputs[0])
600
                link(coord_node.outputs[0], mapping_node.inputs[0])
601
                link(cr4_node.outputs[0], mixs_node.inputs[0])
602
                link(lweight_node.outputs[0], cr4_node.inputs[0])
603
                link(dark_node.outputs[0], emiss1_node.inputs[0])
604
                link(mixrgb2_node.outputs[0], hue_node.inputs[4])
605
                link(hue_node.outputs[0], overlay_node.inputs[1])
606
                link(cr3_node.outputs[0], overlay_node.inputs[0])
607
                link(mixrgb_node.outputs[0], multiply_node.inputs[1])
608
                link(noise2_node.outputs[0], multiply_node.inputs[0])
609
                link(cr2_node.outputs[0], mixrgb_node.inputs[1])
610
                link(noise1_node.outputs[0], mixrgb_node.inputs[0])
611
                link(noise2_node.outputs[0], cr2_node.inputs[0])
612
                link(noise2_node.outputs[0], cr3_node.inputs[0])
613
                link(cr1_node.outputs[0], noise2_node.inputs[0])
614
                link(noise1_node.outputs[0], cr1_node.inputs[0])
615
                link(mixs3_node.outputs[0], material_output.inputs[0])
616
                bpy.context.object.active_material = material_cosmic2
617
                bpy.context.object.active_material.diffuse_color = (0, 1, 0, 1)
618
                bpy.context.object.active_material.metallic = 0.3
619
            else:
620
                material_cosmic2 = bpy.data.materials.new(name= "Continental")
621
                material_cosmic2.use_nodes = True
622
                bdsf_node = material_cosmic2.node_tree.nodes.get('Principled BSDF')
623
                bdsf_node.location = (1700, 200)
624
                material_output = material_cosmic2.node_tree.nodes.get('Material Output')
625
                cr11_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
626
                cr11_node.location = (1600, 200)
627
                cr11_node.color_ramp.elements[0].color= (0.527,0.527,0.527,1)
628
                bw2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeRGBToBW')
629
                bw2_node.location = (1500, 200)
630
                bump_node = material_cosmic2.node_tree.nodes.new('ShaderNodeBump')
631
                bump_node.location = (1500, 0)
632
                material_output.location = (3200,0)
633
                noise1_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexNoise')
634
                noise1_node.location = (-1000,0)
635
                noise1_node.inputs[2].default_value = self.land_scale
636
                noise1_node.inputs[3].default_value = 16
637
                noise1_node.inputs[4].default_value = 0.848
638
                noise1_node.inputs[5].default_value = 0
639
                noise2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexNoise')
640
                noise2_node.location = (-800, 0)
641
                noise2_node.inputs[2].default_value = 12.5
642
                noise2_node.inputs[3].default_value = 2
643
                noise2_node.inputs[4].default_value = 0.890
644
                noise2_node.inputs[5].default_value = 0
645
                cr1_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
646
                cr1_node.location = (-900, -200)
647
                cr1_node.color_ramp.elements[0].position= 0.133
648
                cr1_node.color_ramp.elements[1].position= self.water_lvl
649
                cr1_node.color_ramp.elements.new(position= 0.516)
650
                cr2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
651
                cr2_node.location = (-650, -200)
652
                cr2_node.color_ramp.elements[0].position= 0.505
653
                cr2_node.color_ramp.elements[1].position= 0.650
654
                mixrgb_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
655
                mixrgb_node.location = (-600, 0)
656
                mixrgb_node.inputs[2].default_value = (0, 0.0202886, 0.502886, 1)
657
                multiply_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
658
                multiply_node.location = (-400, 200)
659
                multiply_node.blend_type = 'BURN'
660
                multiply_node.inputs[2].default_value = (0.391573, 0.799103, 0, 1)
661
                hue_node = material_cosmic2.node_tree.nodes.new('ShaderNodeHueSaturation')
662
                hue_node.location = (800, 100)
663
                hue_node.inputs[0].default_value = self.land_hue
664
                hue_node.inputs[1].default_value = self.land_sat
665
                cr3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
666
                cr3_node.location = (-400, -200)
667
                cr3_node.color_ramp.elements[0].position= 0.402
668
                cr3_node.color_ramp.elements[1].position= 0.418
669
                overlay_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
670
                overlay_node.location = (1000, 0)
671
                overlay_node.blend_type = 'LIGHTEN'
672
                overlay_node.inputs[2].default_value = (0, 0.0152085, 0.0528607, 1)
673
                dark_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
674
                dark_node.location = (1200, 0)
675
                dark_node.blend_type = 'DARKEN'
676
                dark_node.inputs[2].default_value = (0,0,0,1)
677
                dark_node.use_clamp = True
678
                if self.shadow_bool == False:
679
                    dark_node.mute= True
680
                grad1_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexGradient')
681
                grad1_node.location= (800, 500)
682
                mapping2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMapping')
683
                mapping2_node.location = (600, 500)
684
                mapping2_node.inputs[1].default_value[0] = self.shadow_coverage
685
                mapping2_node.inputs[3].default_value[0] = 1
686
                mapping2_node.inputs[3].default_value[1] = 1
687
                mapping2_node.inputs[3].default_value[2] = 1
688
                coord2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexCoord')
689
                coord2_node.location = (400, 500)
690
                sv = self.shadow_vis
691
                cr7_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
692
                cr7_node.location = (1200, 300)
693
                cr7_node.color_ramp.elements[0].position= 0.096
694
                cr7_node.color_ramp.elements[1].position= 0.551
695
                cr7_node.color_ramp.elements[1].color= (sv, sv, sv, 1)
696
                cr8_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
697
                cr8_node.location = (1400, 500)
698
                cr8_node.color_ramp.elements[0].position= 0.421
699
                cr8_node.color_ramp.elements[1].position= 0.435
700
                cr8_node.color_ramp.elements[0].color= (1,1,1,1)
701
                cr8_node.color_ramp.elements[1].color= (0,0,0,1)
702
                math2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMath')
703
                math2_node.location = (1700, 600)
704
                math2_node.operation = 'SUBTRACT'
705
                math3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMath')
706
                math3_node.location = (1500, 700)
707
                math3_node.operation = 'MULTIPLY'
708
                math4_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMath')
709
                math4_node.location = (900, 900)
710
                math4_node.operation = 'MULTIPLY'
711
                cr9_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
712
                cr9_node.location = (600, 900)
713
                cr9_node.color_ramp.elements[0].position= 0.598
714
                cr9_node.color_ramp.elements[1].position= 0.606
715
                noise4_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexNoise')
716
                noise4_node.location = (400, 900)
717
                noise4_node.inputs[2].default_value = 96.100
718
                noise4_node.inputs[3].default_value = 2
719
                noise4_node.inputs[4].default_value = 1
720
                noise4_node.inputs[5].default_value = 2.4
721
                math5_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMath')
722
                math5_node.location = (200, 900)
723
                math5_node.operation = 'ADD'
724
                musgrave2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexMusgrave')
725
                musgrave2_node.location = (0, 1000)
726
                musgrave2_node.inputs[2].default_value = self.city_lights
727
                musgrave2_node.inputs[3].default_value = 2
728
                musgrave2_node.inputs[4].default_value = 2
729
                musgrave2_node.inputs[5].default_value = 2
730
                musgrave3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexMusgrave')
731
                musgrave3_node.location = (0, 800)
732
                musgrave3_node.inputs[2].default_value = -5.80
733
                musgrave3_node.inputs[3].default_value = 2
734
                musgrave3_node.inputs[4].default_value = 9.2
735
                musgrave3_node.inputs[5].default_value = 9.8
736
                mixs3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixShader')
737
                mixs3_node.location = (3000, 0)
738
                if self.city_bool == False:
739
                    mixs3_node.mute= True
740
                emiss4_node = material_cosmic2.node_tree.nodes.new('ShaderNodeEmission')
741
                emiss4_node.location = (2800, -200)
742
                emiss4_node.inputs[1].default_value = self.city_brightness
743
                mixrgb3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
744
                mixrgb3_node.location = (2600, -200)
745
                mixrgb3_node.inputs[2].default_value = (1, 0.694074, 0.220557, 1)
746
                cr10_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
747
                cr10_node.location = (2800, 500)
748
                cr10_node.color_ramp.elements[1].position= 0.027
749
                emiss2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeEmission')
750
                emiss2_node.location = (1900, -200)
751
                emiss2_node.inputs[0].default_value = self.atmos_col
752
                emiss2_node.inputs[1].default_value = self.atmos_glow
753
                emiss3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeEmission')
754
                emiss3_node.location = (1900, 0)
755
                emiss3_node.inputs[0].default_value = (1, 1, 1, 1)
756
                emiss3_node.inputs[1].default_value = 6.500
757
                mixs2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixShader')
758
                mixs2_node.location = (2500, 0)
759
                if self.cloud_bool == False:
760
                    mixs2_node.mute= True
761
                lweight_node = material_cosmic2.node_tree.nodes.new('ShaderNodeLayerWeight')
762
                lweight_node.location = (2200, 400)
763
                lweight_node.inputs[0].default_value = 0.160
764
                cr4_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
765
                cr4_node.location = (2500, 400)
766
                cr4_node.color_ramp.elements[0].position= 0.005435
767
                mixs_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixShader')
768
                mixs_node.location = (2700, 0)
769
                if self.atmos == False: 
770
                    mixs_node.mute= True
771
                cr5_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
772
                cr5_node.location = (-400, -500)
773
                cr5_node.color_ramp.elements[0].position= 0.540761
774
                cr5_node.color_ramp.elements[1].position= 0.769022
775
                cr5_node.color_ramp.elements[1].color = (cv, cv, cv, cv)
776
                noise3_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexNoise')
777
                noise3_node.location = (-600, -500)
778
                noise3_node.inputs[2].default_value = self.cloud_scale
779
                noise3_node.inputs[3].default_value = 7.100
780
                noise3_node.inputs[4].default_value = 0.995
781
                noise3_node.inputs[5].default_value = 0.8
782
                mapping_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMapping')
783
                mapping_node.location = (-800, -500)
784
                mapping_node.inputs[3].default_value[0] = 0.18
785
                mapping_node.inputs[3].default_value[1] = 0.18
786
                mapping_node.inputs[3].default_value[2] = 0.18
787
                coord_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexCoord')
788
                coord_node.location = (-1000, -500)
789
                mixrgb2_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMixRGB')
790
                mixrgb2_node.location = (600, 0)
791
                mixrgb2_node.inputs[2].default_value = self.v_col
792
                math_node = material_cosmic2.node_tree.nodes.new('ShaderNodeMath')
793
                math_node.location = (400, 0)
794
                math_node.operation = 'MULTIPLY'
795
                musgrave1_node = material_cosmic2.node_tree.nodes.new('ShaderNodeTexMusgrave')
796
                musgrave1_node.location = (200, -200)
797
                musgrave1_node.inputs[2].default_value = self.v_scale
798
                musgrave1_node.inputs[3].default_value = 16
799
                musgrave1_node.inputs[4].default_value = 0.030
800
                musgrave1_node.inputs[5].default_value = 1.2
801
                musgrave1_node.musgrave_type = 'MULTIFRACTAL'
802
                cr6_node = material_cosmic2.node_tree.nodes.new('ShaderNodeValToRGB')
803
                cr6_node.location = (200, 200)
804
                cr6_node.color_ramp.elements[0].position= 0.092
805
                cr6_node.color_ramp.elements[1].position= 0.122
806
                bw_node = material_cosmic2.node_tree.nodes.new('ShaderNodeRGBToBW')
807
                bw_node.location = (0, 200)
808
                link = material_cosmic2.node_tree.links.new
809
                link(mixrgb3_node.outputs[0], emiss4_node.inputs[0])
810
                link(overlay_node.outputs[0], dark_node.inputs[1])
811
                link(math2_node.outputs[0], mixrgb3_node.inputs[1])
812
                link(math2_node.outputs[0], cr10_node.inputs[0])
813
                link(math4_node.outputs[0], math3_node.inputs[0])
814
                link(math5_node.outputs[0], math4_node.inputs[1])
815
                link(cr9_node.outputs[0], math4_node.inputs[0])
816
                link(noise4_node.outputs[0], cr9_node.inputs[0])
817
                link(math5_node.outputs[0], noise4_node.inputs[1])
818
                link(musgrave3_node.outputs[0], math5_node.inputs[1])
819
                link(musgrave2_node.outputs[0], math5_node.inputs[0])
820
                link(cr6_node.outputs[0], math3_node.inputs[1])
821
                link(math3_node.outputs[0], math2_node.inputs[0])
822
                link(cr8_node.outputs[0], math2_node.inputs[1])
823
                link(grad1_node.outputs[0], cr8_node.inputs[0])
824
                link(cr10_node.outputs[0], mixs3_node.inputs[0])
825
                link(emiss4_node.outputs[0], mixs3_node.inputs[2])
826
                link(mixs_node.outputs[0], mixs3_node.inputs[1])
827
                link(coord2_node.outputs[0], mapping2_node.inputs[0])
828
                link(mapping2_node.outputs[0], grad1_node.inputs[0])
829
                link(grad1_node.outputs[0], cr7_node.inputs[0])
830
                link(dark_node.outputs[0], bdsf_node.inputs[0])
831
                link(cr11_node.outputs[0], bdsf_node.inputs[7])
832
                link(bump_node.outputs[0], bdsf_node.inputs[19])
833
                link(dark_node.outputs[0], bdsf_node.inputs[0])
834
                link(dark_node.outputs[0], bw2_node.inputs[0])
835
                link(bw2_node.outputs[0], cr11_node.inputs[0])
836
                link(dark_node.outputs[0], bump_node.inputs[2])
837
                link(cr7_node.outputs[0], dark_node.inputs[0])
838
                link(math_node.outputs[0], mixrgb2_node.inputs[0])
839
                link(cr6_node.outputs[0], math_node.inputs[0])
840
                link(musgrave1_node.outputs[0], math_node.inputs[1])
841
                link(bw_node.outputs[0], cr6_node.inputs[0])
842
                link(math_node.outputs[0], mixrgb2_node.inputs[0])
843
                link(multiply_node.outputs[0], bw_node.inputs[0])
844
                link(multiply_node.outputs[0], mixrgb2_node.inputs[1])
845
                link(bdsf_node.outputs[0], mixs2_node.inputs[1])
846
                link(emiss3_node.outputs[0], mixs2_node.inputs[2])
847
                link(mixs2_node.outputs[0], mixs_node.inputs[1])
848
                link(emiss2_node.outputs[0], mixs_node.inputs[2])
849
                link(cr5_node.outputs[0], mixs2_node.inputs[0])
850
                link(noise3_node.outputs[0], cr5_node.inputs[0])
851
                link(mapping_node.outputs[0], noise3_node.inputs[0])
852
                link(coord_node.outputs[0], mapping_node.inputs[0])
853
                link(cr4_node.outputs[0], mixs_node.inputs[0])
854
                link(lweight_node.outputs[0], cr4_node.inputs[0])
855
                link(mixrgb2_node.outputs[0], hue_node.inputs[4])
856
                link(hue_node.outputs[0], overlay_node.inputs[1])
857
                link(cr3_node.outputs[0], overlay_node.inputs[0])
858
                link(mixrgb_node.outputs[0], multiply_node.inputs[1])
859
                link(noise2_node.outputs[0], multiply_node.inputs[0])
860
                link(cr2_node.outputs[0], mixrgb_node.inputs[1])
861
                link(noise1_node.outputs[0], mixrgb_node.inputs[0])
862
                link(noise2_node.outputs[0], cr2_node.inputs[0])
863
                link(noise2_node.outputs[0], cr3_node.inputs[0])
864
                link(cr1_node.outputs[0], noise2_node.inputs[0])
865
                link(noise1_node.outputs[0], cr1_node.inputs[0])
866
                link(mixs3_node.outputs[0], material_output.inputs[0])
867
                bpy.context.object.active_material = material_cosmic2
868
                bpy.context.object.active_material.diffuse_color = (0, 1, 0, 1)
869
                bpy.context.object.active_material.metallic = 0.3
870
                
871
        if mytool.planet_type == 'OP3':
872
            material_cosmic3 = bpy.data.materials.new(name= "Dust World")
873
            material_cosmic3.use_nodes = True
874
            material_cosmic3.node_tree.nodes.remove(material_cosmic3.node_tree.nodes.get('Principled BSDF'))
875
            material_output = material_cosmic3.node_tree.nodes.get('Material Output')
876
            material_output.location = (1000,0)
877
            cr1_node = material_cosmic3.node_tree.nodes.new('ShaderNodeValToRGB')
878
            cr1_node.location = (-300, 500)
879
            cr1_node.color_ramp.elements[0].position= 0.858544
880
            cr1_node.color_ramp.elements[1].position= 0.970109
881
            magic_node = material_cosmic3.node_tree.nodes.new('ShaderNodeTexMagic')
882
            magic_node.location = (-500, 500)
883
            magic_node.inputs[1].default_value = self.stripe_amount
884
            magic_node.inputs[2].default_value = 0.130
885
            magic_node.turbulence_depth = 1
886
            mapping_node = material_cosmic3.node_tree.nodes.new('ShaderNodeMapping')
887
            mapping_node.location = (-700, 500)
888
            mapping_node.inputs[2].default_value[0] = -42.4
889
            mapping_node.inputs[2].default_value[1] = 47.6
890
            mapping_node.inputs[2].default_value[2] = 0
891
            mapping_node.inputs[3].default_value[0] = 0.6
892
            coord_node = material_cosmic3.node_tree.nodes.new('ShaderNodeTexCoord')
893
            coord_node.location = (-900, 500)
894
            voronoi_node = material_cosmic3.node_tree.nodes.new('ShaderNodeTexVoronoi')
895
            voronoi_node.location = (-700, 0)
896
            voronoi_node.feature = 'SMOOTH_F1'
897
            voronoi_node.distance = 'CHEBYCHEV'
898
            voronoi_node.inputs[2].default_value = 21.690
899
            voronoi_node.inputs[3].default_value = 1
900
            voronoi_node.inputs[4].default_value = 1
901
            mapping2_node = material_cosmic3.node_tree.nodes.new('ShaderNodeMapping')
902
            mapping2_node.location = (-900, 0)
903
            mapping2_node.inputs[3].default_value[0] = 0.140
904
            coord2_node = material_cosmic3.node_tree.nodes.new('ShaderNodeTexCoord')
905
            coord2_node.location = (-1100, 0)
906
            bw_node = material_cosmic3.node_tree.nodes.new('ShaderNodeRGBToBW')
907
            bw_node.location = (-550, 0)
908
            multiply1_node = material_cosmic3.node_tree.nodes.new('ShaderNodeMixRGB')
909
            multiply1_node.location = (-400, 200)
910
            multiply1_node.inputs[0].default_value = 1
911
            multiply1_node.inputs[2].default_value = (0.552012, 0.130136, 0.0451862, 1)
912
            multiply1_node.blend_type= 'MULTIPLY'
913
            multiply2_node = material_cosmic3.node_tree.nodes.new('ShaderNodeMixRGB')
914
            multiply2_node.location = (-400, -200)
915
            multiply2_node.inputs[0].default_value = 1
916
            multiply2_node.inputs[2].default_value = (0.187821, 0.0684782, 0, 1)
917
            multiply2_node.blend_type= 'MULTIPLY'
918
            mixrgb_node = material_cosmic3.node_tree.nodes.new('ShaderNodeMixRGB')
919
            mixrgb_node.location = (-200, 0)
920
            overlay_node = material_cosmic3.node_tree.nodes.new('ShaderNodeMixRGB')
921
            overlay_node.location = (0, 0)
922
            overlay_node.inputs[0].default_value = 0.595
923
            overlay_node.blend_type= 'OVERLAY'
924
            darken_node = material_cosmic3.node_tree.nodes.new('ShaderNodeMixRGB')
925
            darken_node.location = (200, 0)
926
            darken_node.inputs[2].default_value = (0.035037, 0.0133497, 0.00550307, 1)
927
            darken_node.blend_type= 'MULTIPLY'
928
            noise1_node = material_cosmic3.node_tree.nodes.new('ShaderNodeTexNoise')
929
            noise1_node.location = (0, -200)
930
            noise1_node.inputs[2].default_value = 8.600
931
            noise1_node.inputs[3].default_value = 16
932
            noise1_node.inputs[4].default_value = 0.830
933
            noise1_node.inputs[5].default_value = 0
934
            cr3_node = material_cosmic3.node_tree.nodes.new('ShaderNodeValToRGB')
935
            cr3_node.location = (200, -200)
936
            cr3_node.color_ramp.elements[0].position= 0.366848
937
            cr3_node.color_ramp.elements[1].position= 0.608695
938
            hue_node = material_cosmic3.node_tree.nodes.new('ShaderNodeHueSaturation')
939
            hue_node.location = (400, 200)
940
            hue_node.inputs[0].default_value = self.d_hue
941
            emiss1_node = material_cosmic3.node_tree.nodes.new('ShaderNodeEmission')
942
            emiss1_node.location = (600, 200)
943
            emiss1_node.inputs[1].default_value = 2.800
944
            emiss2_node = material_cosmic3.node_tree.nodes.new('ShaderNodeEmission')
945
            emiss2_node.location = (600, -200)
946
            emiss2_node.inputs[0].default_value = self.d_atmos_col
947
            emiss2_node.inputs[1].default_value = self.d_atmos_glow
948
            lweight_node = material_cosmic3.node_tree.nodes.new('ShaderNodeLayerWeight')
949
            lweight_node.location = (200, 400)
950
            lweight_node.inputs[0].default_value= 0.160
951
            mixs_node = material_cosmic3.node_tree.nodes.new('ShaderNodeMixShader')
952
            mixs_node.location = (800, 0)
953
            if self.atmos == False: 
954
                mixs_node.mute= True
955
            cr2_node = material_cosmic3.node_tree.nodes.new('ShaderNodeValToRGB')
956
            cr2_node.location = (500, 400)
957
            cr2_node.color_ramp.elements[0].position= 0.013587
958
            cr2_node.color_ramp.elements[1].position= 1
959
            link = material_cosmic3.node_tree.links.new
960
            link(voronoi_node.outputs[0], mixrgb_node.inputs[0])
961
            link(mixrgb_node.outputs[0], overlay_node.inputs[1])
962
            link(voronoi_node.outputs[0], mapping_node.inputs[0])
963
            link(mapping2_node.outputs[0], voronoi_node.inputs[0])
964
            link(coord2_node.outputs[0], mapping2_node.inputs[0])
965
            link(bw_node.outputs[0], multiply2_node.inputs[1])
966
            link(bw_node.outputs[0], multiply1_node.inputs[1])
967
            link(voronoi_node.outputs[1], bw_node.inputs[0])
968
            link(coord_node.outputs[0], mapping_node.inputs[0])
969
            link(mapping_node.outputs[0], magic_node.inputs[0])
970
            link(magic_node.outputs[0], cr1_node.inputs[0])
971
            link(cr1_node.outputs[0], overlay_node.inputs[2])
972
            link(multiply2_node.outputs[0], mixrgb_node.inputs[2])
973
            link(multiply1_node.outputs[0], mixrgb_node.inputs[1])
974
            link(overlay_node.outputs[0], darken_node.inputs[1])
975
            link(cr3_node.outputs[0], darken_node.inputs[0])
976
            link(darken_node.outputs[0], hue_node.inputs[4])
977
            link(hue_node.outputs[0], emiss1_node.inputs[0])
978
            link(noise1_node.outputs[0], cr3_node.inputs[0])
979
            link(lweight_node.outputs[0], cr2_node.inputs[0])
980
            link(cr2_node.outputs[0], mixs_node.inputs[0])
981
            link(emiss2_node.outputs[0], mixs_node.inputs[2])
982
            link(emiss1_node.outputs[0], mixs_node.inputs[1])
983
            link(mixs_node.outputs[0], material_output.inputs[0])
984
            bpy.context.object.active_material = material_cosmic3
985
            bpy.context.object.active_material.diffuse_color = (1, 0.3, 0.004, 1)
986
            bpy.context.object.active_material.metallic = 0.3
987
            
988
        if mytool.planet_type == 'OP4':
989
            material_cosmic4 = bpy.data.materials.new(name= "Moon")
990
            material_cosmic4.use_nodes = True
991
            material_cosmic4.node_tree.nodes.remove(material_cosmic4.node_tree.nodes.get('Principled BSDF'))
992
            material_output = material_cosmic4.node_tree.nodes.get('Material Output')
993
            material_output.location = (1000,0)
994
            mus1_node = material_cosmic4.node_tree.nodes.new('ShaderNodeTexMusgrave')
995
            mus1_node.location = (-1600,400)
996
            mus1_node.musgrave_type= 'MULTIFRACTAL'
997
            mus1_node.inputs[2].default_value = self.m_macro_scale
998
            mus1_node.inputs[3].default_value = 16
999
            mus1_node.inputs[4].default_value = 0.720
1000
            mus1_node.inputs[5].default_value = 2.610
1001
            mus2_node = material_cosmic4.node_tree.nodes.new('ShaderNodeTexMusgrave')
1002
            mus2_node.location = (-1400,400)
1003
            mus2_node.musgrave_dimensions = '4D'
1004
            mus2_node.musgrave_type= 'MULTIFRACTAL'
1005
            mus2_node.inputs[1].default_value = self.m_seed
1006
            mus2_node.inputs[2].default_value = 0.740
1007
            mus2_node.inputs[3].default_value = 16
1008
            mus2_node.inputs[4].default_value = 0.350
1009
            mus2_node.inputs[5].default_value = 2.610
1010
            mus3_node = material_cosmic4.node_tree.nodes.new('ShaderNodeTexMusgrave')
1011
            mus3_node.location = (-1200,400)
1012
            mus3_node.musgrave_dimensions = '4D'
1013
            mus3_node.inputs[1].default_value = 0
1014
            mus3_node.inputs[2].default_value = 6.990
1015
            mus3_node.inputs[3].default_value = 12
1016
            mus3_node.inputs[4].default_value = 6.830
1017
            mus3_node.inputs[5].default_value = 2
1018
            cr1_node = material_cosmic4.node_tree.nodes.new('ShaderNodeValToRGB')
1019
            cr1_node.location = (-1000, 400)
1020
            cr1_node.color_ramp.elements[0].position= 0
1021
            cr1_node.color_ramp.elements.new(position= 0.035)
1022
            cr1_node.color_ramp.elements[1].color= (1,1,1,1)
1023
            mus4_node = material_cosmic4.node_tree.nodes.new('ShaderNodeTexMusgrave')
1024
            mus4_node.location = (-1600,-400)
1025
            mus4_node.musgrave_type= 'MULTIFRACTAL'
1026
            mus4_node.inputs[2].default_value = self.m_micro_scale
1027
            mus4_node.inputs[3].default_value = 16
1028
            mus4_node.inputs[4].default_value = 0.900
1029
            mus4_node.inputs[5].default_value = 1.400
1030
            mus5_node = material_cosmic4.node_tree.nodes.new('ShaderNodeTexMusgrave')
1031
            mus5_node.location = (-1400,-400)
1032
            mus5_node.musgrave_type= 'HETERO_TERRAIN'
1033
            mus5_node.inputs[2].default_value = 19.00
1034
            mus5_node.inputs[3].default_value = 16
1035
            mus5_node.inputs[4].default_value = 2.000
1036
            mus5_node.inputs[5].default_value = 1.4
1037
            cr2_node = material_cosmic4.node_tree.nodes.new('ShaderNodeValToRGB')
1038
            cr2_node.location = (-1200, -400)
1039
            cr2_node.color_ramp.elements[1].position= 0.057
1040
            cr2_node.color_ramp.elements[1].color= (0.421482, 0.421482, 0.421482, 1)
1041
            screen_node = material_cosmic4.node_tree.nodes.new('ShaderNodeMixRGB')
1042
            screen_node.location = (-1000, -400)
1043
            screen_node.blend_type = 'SCREEN'            
1044
            screen_node.inputs[2].default_value = (0.391528, 0.391528, 0.391528, 1)
1045
            screen_node.use_clamp = True
1046
            multiply_node = material_cosmic4.node_tree.nodes.new('ShaderNodeMixRGB')
1047
            multiply_node.location = (-800, -0)
1048
            multiply_node.blend_type = 'MULTIPLY'
1049
            multiply_node.inputs[2].default_value = (0,0,0,1)
1050
            multiply_node.use_clamp = True
1051
            grad1_node = material_cosmic4.node_tree.nodes.new('ShaderNodeTexGradient')
1052
            grad1_node.location= (-600, 200)
1053
            sv = self.m_shadow_vis
1054
            cr3_node = material_cosmic4.node_tree.nodes.new('ShaderNodeValToRGB')
1055
            cr3_node.location = (-400, 200)
1056
            cr3_node.color_ramp.elements[1].position= self.m_shadow_coverage
1057
            cr3_node.color_ramp.elements[1].color= (sv, sv, sv, 1)
1058
            dark_node = material_cosmic4.node_tree.nodes.new('ShaderNodeMixRGB')
1059
            dark_node.location = (-200, 0)
1060
            dark_node.blend_type = 'MULTIPLY'
1061
            dark_node.inputs[2].default_value = (0,0,0,1)
1062
            dark_node.use_clamp = True
1063
            if self.m_shadow_bool == False:
1064
                dark_node.mute= True
1065
            emiss1_node = material_cosmic4.node_tree.nodes.new('ShaderNodeEmission')
1066
            emiss1_node.location = (0, 200)
1067
            emiss1_node.inputs[1].default_value = 3
1068
            emiss2_node = material_cosmic4.node_tree.nodes.new('ShaderNodeEmission')
1069
            emiss2_node.location = (0, -200)
1070
            emiss2_node.inputs[0].default_value = self.m_atmos_col
1071
            emiss2_node.inputs[1].default_value = self.m_atmos_glow
1072
            lweight_node = material_cosmic4.node_tree.nodes.new('ShaderNodeLayerWeight')
1073
            lweight_node.location = (400, 400)
1074
            lweight_node.inputs[0].default_value = 0.570
1075
            cr4_node = material_cosmic4.node_tree.nodes.new('ShaderNodeValToRGB')
1076
            cr4_node.location = (600, 400)
1077
            cr4_node.color_ramp.elements[0].position= 0.158
1078
            cr4_node.color_ramp.elements[1].position= 0.416
1079
            mixs_node = material_cosmic4.node_tree.nodes.new('ShaderNodeMixShader')
1080
            mixs_node.location = (800, 0)
1081
            if self.m_atmos == False: 
1082
                mixs_node.mute= True
1083
            link = material_cosmic4.node_tree.links.new
1084
            link(mus1_node.outputs[0], mus2_node.inputs[0])
1085
            link(mus2_node.outputs[0], mus3_node.inputs[0])
1086
            link(mus4_node.outputs[0], mus5_node.inputs[0])
1087
            link(mus3_node.outputs[0], cr1_node.inputs[0])
1088
            link(mus5_node.outputs[0], cr2_node.inputs[0])
1089
            link(cr1_node.outputs[0], multiply_node.inputs[0])
1090
            link(cr2_node.outputs[0], screen_node.inputs[1])
1091
            link(screen_node.outputs[0], multiply_node.inputs[1])
1092
            link(grad1_node.outputs[0], cr3_node.inputs[0])
1093
            link(cr3_node.outputs[0], dark_node.inputs[0])
1094
            link(multiply_node.outputs[0], dark_node.inputs[1])
1095
            link(dark_node.outputs[0], emiss1_node.inputs[0])
1096
            link(emiss1_node.outputs[0], mixs_node.inputs[1])
1097
            link(emiss2_node.outputs[0], mixs_node.inputs[2])
1098
            link(cr4_node.outputs[0], mixs_node.inputs[0])
1099
            link(lweight_node.outputs[0], cr4_node.inputs[0])
1100
            link(mixs_node.outputs[0], material_output.inputs[0])
1101
            bpy.context.object.active_material = material_cosmic4
1102
            bpy.context.object.active_material.metallic = 0.3
1103
            
1104
        if mytool.planet_type == 'OP5':
1105
            material_cosmic5 = bpy.data.materials.new(name= "Rocky Planet")
1106
            material_cosmic5.use_nodes = True
1107
            bsdf_node = material_cosmic5.node_tree.nodes.get('Principled BSDF')
1108
            bsdf_node.location = (400, 0)
1109
            material_output = material_cosmic5.node_tree.nodes.get('Material Output')
1110
            material_output.location = (1000, 0)
1111
            mus_node = material_cosmic5.node_tree.nodes.new('ShaderNodeTexMusgrave')
1112
            mus_node.location = (-1400, 0)
1113
            mus_node.musgrave_type = 'RIDGED_MULTIFRACTAL'
1114
            mus_node.inputs[2].default_value = self.r_scale
1115
            mus_node.inputs[3].default_value = 20
1116
            mus_node.inputs[4].default_value = self.r_soften
1117
            mus_node.inputs[5].default_value = 2.830
1118
            mus_node.inputs[6].default_value = 0
1119
            mus_node.inputs[7].default_value = 12.870
1120
            cr1_node = material_cosmic5.node_tree.nodes.new('ShaderNodeValToRGB')
1121
            cr1_node.location = (-1200, 200)
1122
            cr1_node.color_ramp.elements[1].position= 0.005
1123
            lh = self.r_land_height
1124
            cr2_node = material_cosmic5.node_tree.nodes.new('ShaderNodeValToRGB')
1125
            cr2_node.location = (-1200, -200)
1126
            cr2_node.color_ramp.elements[0].color= (0.071, 0.071, 0.071, 1)
1127
            cr2_node.color_ramp.elements.new(position= 0.337)
1128
            cr2_node.color_ramp.elements[1].color = (lh, lh, lh, 1)
1129
            cr2_node.color_ramp.elements[1].position = 0.856
1130
            cr2_node.color_ramp.elements[2].color = (0.4, 0.4, 0.4, 1)
1131
            math1_node = material_cosmic5.node_tree.nodes.new('ShaderNodeMath')
1132
            math1_node.location= (-1000, 0)
1133
            math1_node.operation= 'MULTIPLY'
1134
            math1_node.use_clamp= True
1135
            cr3_node = material_cosmic5.node_tree.nodes.new('ShaderNodeValToRGB')
1136
            cr3_node.location = (-800, 200)
1137
            cr3_node.color_ramp.elements[1].color= (0.059, 0.059, 0.059, 1)
1138
            multiply1_node = material_cosmic5.node_tree.nodes.new('ShaderNodeMixRGB')
1139
            multiply1_node.location = (-600, -200)
1140
            multiply1_node.blend_type= 'MULTIPLY'
1141
            multiply1_node.inputs[0].default_value= 0.860
1142
            multiply1_node.inputs[2].default_value= (0.5691, 0.150605, 0, 1)
1143
            c1 = self.r_land_col1
1144
            c2 = self.r_land_col2
1145
            c3 = self.r_land_col3
1146
            c4 = self.r_land_col4
1147
            cr4_node = material_cosmic5.node_tree.nodes.new('ShaderNodeValToRGB')
1148
            cr4_node.location = (-600, -400)
1149
            cr4_node.color_ramp.elements.new(position= 0.082)
1150
            cr4_node.color_ramp.elements.new(position= 0.209)
1151
            cr4_node.color_ramp.elements.new(position= 0.647)
1152
            cr4_node.color_ramp.elements[1].color = c1
1153
            cr4_node.color_ramp.elements[2].color = c2
1154
            cr4_node.color_ramp.elements[3].color = c3
1155
            cr4_node.color_ramp.elements[4].color = c4
1156
            cr4_node.color_ramp.elements[3].position= 0.476
1157
            cr4_node.color_ramp.elements[4].position= 0.647
1158
            bump_node = material_cosmic5.node_tree.nodes.new('ShaderNodeBump')
1159
            bump_node.location = (-600, -600)
1160
            bump_node.inputs[1].default_value= 0.050
1161
            mix1_node = material_cosmic5.node_tree.nodes.new('ShaderNodeMixRGB')
1162
            mix1_node.location = (-400, -300)
1163
            mix1_node.inputs[0].default_value= 0.440
1164
            bw1_node = material_cosmic5.node_tree.nodes.new('ShaderNodeRGBToBW')
1165
            bw1_node.location = (-200, -300)
1166
            cr5_node = material_cosmic5.node_tree.nodes.new('ShaderNodeValToRGB')
1167
            cr5_node.location = (0, -300)
1168
            cr5_node.color_ramp.elements[1].position = 0.019
1169
            mix2_node = material_cosmic5.node_tree.nodes.new('ShaderNodeMixRGB')
1170
            mix2_node.location = (200, -100)
1171
            mix2_node.inputs[1].default_value= self.r_water_col
1172
            cr6_node = material_cosmic5.node_tree.nodes.new('ShaderNodeValToRGB')
1173
            cr6_node.location = (200, -500)
1174
            cr6_node.color_ramp.elements[0].color = (0.345, 0.345, 0.345, 1)
1175
            lw_node = material_cosmic5.node_tree.nodes.new('ShaderNodeLayerWeight')
1176
            lw_node.location = (600, 200)
1177
            lw_node.inputs[0].default_value = 0.160
1178
            cr7_node = material_cosmic5.node_tree.nodes.new('ShaderNodeValToRGB')
1179
            cr7_node.location = (600, 400)
1180
            cr7_node.color_ramp.elements[0].position = 0.005
1181
            emiss1_node = material_cosmic5.node_tree.nodes.new('ShaderNodeEmission')
1182
            emiss1_node.location = (600, -200)
1183
            emiss1_node.inputs[0].default_value= self.r_atmos_col
1184
            emiss1_node.inputs[1].default_value= self.r_atmos_glow
1185
            mixs_node = material_cosmic5.node_tree.nodes.new('ShaderNodeMixShader')
1186
            mixs_node.location = (800, 0)
1187
            if self.r_atmos == False:
1188
                mixs_node.mute= True
1189
            link = material_cosmic5.node_tree.links.new
1190
            link(mus_node.outputs[0], cr1_node.inputs[0])
1191
            link(mus_node.outputs[0], cr2_node.inputs[0])
1192
            link(mus_node.outputs[0], cr4_node.inputs[0])
1193
            link(mus_node.outputs[0], bump_node.inputs[2])
1194
            link(cr1_node.outputs[0], math1_node.inputs[0])
1195
            link(cr2_node.outputs[0], math1_node.inputs[1])
1196
            link(math1_node.outputs[0], cr3_node.inputs[0])
1197
            link(math1_node.outputs[0], multiply1_node.inputs[1])
1198
            link(multiply1_node.outputs[0], mix1_node.inputs[1])
1199
            link(cr4_node.outputs[0], mix1_node.inputs[2])
1200
            link(mix1_node.outputs[0], bw1_node.inputs[0])
1201
            link(bw1_node.outputs[0], cr5_node.inputs[0])
1202
            link(cr5_node.outputs[0], mix2_node.inputs[0])
1203
            link(cr5_node.outputs[0], cr6_node.inputs[0])
1204
            link(mix1_node.outputs[0], mix2_node.inputs[2])
1205
            link(mix2_node.outputs[0], bsdf_node.inputs[0])
1206
            link(cr6_node.outputs[0], bsdf_node.inputs[7])
1207
            link(bump_node.outputs[0], bsdf_node.inputs[19])
1208
            link(lw_node.outputs[0], cr7_node.inputs[0])
1209
            link(cr7_node.outputs[0], mixs_node.inputs[0])
1210
            link(emiss1_node.outputs[0], mixs_node.inputs[2])
1211
            link(bsdf_node.outputs[0], mixs_node.inputs[1])
1212
            link(cr3_node.outputs[0], material_output.inputs[2])
1213
            link(mixs_node.outputs[0], material_output.inputs[0])
1214
            bpy.context.object.active_material = material_cosmic5
1215
            bpy.context.object.active_material.diffuse_color = (0.8, 0.225265, 0.0318058, 1)
1216
            bpy.context.object.active_material.metallic = 0.3
1217
            
1218
        if mytool.planet_type == 'OP6':
1219
            material_cosmic6 = bpy.data.materials.new(name= "Star Sphere")
1220
            material_cosmic6.use_nodes = True
1221
            material_cosmic6.node_tree.nodes.remove(material_cosmic6.node_tree.nodes.get('Principled BSDF'))
1222
            material_output = material_cosmic6.node_tree.nodes.get('Material Output')
1223
            material_output.location = (0,0)
1224
            emiss_node = material_cosmic6.node_tree.nodes.new('ShaderNodeEmission')
1225
            emiss_node.location = (-200,0)
1226
            emiss_node.inputs[0].default_value = (1, 0, 0, 1)
1227
            cr_node = material_cosmic6.node_tree.nodes.new('ShaderNodeValToRGB')
1228
            cr_node.location = (-400,0)
1229
            cr_node.color_ramp.elements[0].position = 0.624
1230
            cr_node.color_ramp.elements[1].position = self.star_coverage
1231
            noise_node = material_cosmic6.node_tree.nodes.new('ShaderNodeTexNoise')
1232
            noise_node.location = (-600, 0)
1233
            noise_node.inputs[2].default_value = self.star_scale
1234
            noise_node.inputs[3].default_value = 16
1235
            noise_node.inputs[4].default_value = 0.740
1236
            noise_node.inputs[5].default_value = 0
1237
            link = material_cosmic6.node_tree.links.new
1238
            link(cr_node.outputs[0], emiss_node.inputs[0])
1239
            link(noise_node.outputs[0], cr_node.inputs[0])
1240
            link(emiss_node.outputs[0], material_output.inputs[0])
1241
            bpy.context.object.active_material = material_cosmic6
1242
            bpy.context.object.active_material.diffuse_color = (0, 0, 0, 1)
1243
            bpy.context.object.active_material.metallic = 0.3 
1244
            
1245
        if mytool.planet_type == 'OP7':
1246
            material_cosmic7 = bpy.data.materials.new(name= "Golden World")
1247
            material_cosmic7.use_nodes = True
1248
            bsdf_node = material_cosmic7.node_tree.nodes.get('Principled BSDF')
1249
            bsdf_node.location = (400, 0)
1250
            material_output = material_cosmic7.node_tree.nodes.get('Material Output')
1251
            material_output.location = (1000, 0)
1252
            mus_node = material_cosmic7.node_tree.nodes.new('ShaderNodeTexMusgrave')
1253
            mus_node.location = (-1400, 0)
1254
            mus_node.musgrave_type = 'RIDGED_MULTIFRACTAL'
1255
            mus_node.inputs[2].default_value = self.g_scale
1256
            mus_node.inputs[3].default_value = 20
1257
            mus_node.inputs[4].default_value = self.g_soften
1258
            mus_node.inputs[5].default_value = 2.310
1259
            mus_node.inputs[6].default_value = -0.070
1260
            mus_node.inputs[7].default_value = 10.010
1261
            cr1_node = material_cosmic7.node_tree.nodes.new('ShaderNodeValToRGB')
1262
            cr1_node.location = (-1200, 200)
1263
            cr1_node.color_ramp.elements[1].position= 0.005
1264
            lh = self.g_land_height
1265
            cr2_node = material_cosmic7.node_tree.nodes.new('ShaderNodeValToRGB')
1266
            cr2_node.location = (-1200, -200)
1267
            cr2_node.color_ramp.elements[0].color= (0.071, 0.071, 0.071, 1)
1268
            cr2_node.color_ramp.elements.new(position= 0.337)
1269
            cr2_node.color_ramp.elements[1].color = (lh, lh, lh, 1)
1270
            cr2_node.color_ramp.elements[2].color = (0.318, 0.318, 0.318, 1)
1271
            math1_node = material_cosmic7.node_tree.nodes.new('ShaderNodeMath')
1272
            math1_node.location= (-1000, 0)
1273
            math1_node.operation= 'MULTIPLY'
1274
            math1_node.use_clamp= True
1275
            cr3_node = material_cosmic7.node_tree.nodes.new('ShaderNodeValToRGB')
1276
            cr3_node.location = (-800, 200)
1277
            cr3_node.color_ramp.elements[1].color= (0.059, 0.059, 0.059, 1)
1278
            multiply1_node = material_cosmic7.node_tree.nodes.new('ShaderNodeMixRGB')
1279
            multiply1_node.location = (-600, -200)
1280
            multiply1_node.blend_type= 'MULTIPLY'
1281
            multiply1_node.inputs[0].default_value= 1
1282
            multiply1_node.inputs[2].default_value= (0.00856812, 0.0684782, 0.127438, 1)
1283
            c1 = self.g_land_col1
1284
            c2 = self.g_land_col2
1285
            c3 = self.g_land_col3
1286
            c4 = self.g_land_col4
1287
            cr4_node = material_cosmic7.node_tree.nodes.new('ShaderNodeValToRGB')
1288
            cr4_node.location = (-600, -400)
1289
            cr4_node.color_ramp.elements.new(position= 0.041)
1290
            cr4_node.color_ramp.elements.new(position= 0.098)
1291
            cr4_node.color_ramp.elements.new(position= 0.275)
1292
            cr4_node.color_ramp.elements[1].color = c1
1293
            cr4_node.color_ramp.elements[2].color = c2
1294
            cr4_node.color_ramp.elements[3].color = c3
1295
            cr4_node.color_ramp.elements[3].position= 0.201
1296
            cr4_node.color_ramp.elements[4].color = c4
1297
            cr4_node.color_ramp.elements[4].position = 0.275
1298
            math2_node = material_cosmic7.node_tree.nodes.new('ShaderNodeMath')
1299
            math2_node.location= (-800, -400)
1300
            math2_node.operation= 'MULTIPLY'
1301
            math2_node.use_clamp= True
1302
            noise_node = material_cosmic7.node_tree.nodes.new('ShaderNodeTexNoise')
1303
            noise_node.location = (-1000, -600)
1304
            noise_node.inputs[2].default_value = 19
1305
            noise_node.inputs[3].default_value = 2
1306
            noise_node.inputs[4].default_value = 0.5
1307
            noise_node.inputs[5].default_value = 2.2
1308
            bump_node = material_cosmic7.node_tree.nodes.new('ShaderNodeBump')
1309
            bump_node.location = (-600, -600)
1310
            bump_node.inputs[1].default_value= 0.050
1311
            mix1_node = material_cosmic7.node_tree.nodes.new('ShaderNodeMixRGB')
1312
            mix1_node.location = (-400, -300)
1313
            mix1_node.inputs[0].default_value= 0.640
1314
            bw1_node = material_cosmic7.node_tree.nodes.new('ShaderNodeRGBToBW')
1315
            bw1_node.location = (-200, -300)
1316
            cr5_node = material_cosmic7.node_tree.nodes.new('ShaderNodeValToRGB')
1317
            cr5_node.location = (0, -300)
1318
            cr5_node.color_ramp.elements[0].position = 0.079
1319
            cr5_node.color_ramp.elements[1].position = 0.160
1320
            mix2_node = material_cosmic7.node_tree.nodes.new('ShaderNodeMixRGB')
1321
            mix2_node.location = (200, -100)
1322
            mix2_node.inputs[1].default_value= self.g_water_col
1323
            cr6_node = material_cosmic7.node_tree.nodes.new('ShaderNodeValToRGB')
1324
            cr6_node.location = (200, -500)
1325
            cr6_node.color_ramp.elements[0].color = (0.345, 0.345, 0.345, 1)
1326
            lw_node = material_cosmic7.node_tree.nodes.new('ShaderNodeLayerWeight')
1327
            lw_node.location = (600, 200)
1328
            lw_node.inputs[0].default_value = 0.160
1329
            cr7_node = material_cosmic7.node_tree.nodes.new('ShaderNodeValToRGB')
1330
            cr7_node.location = (600, 400)
1331
            cr7_node.color_ramp.elements[0].position = 0.005
1332
            emiss1_node = material_cosmic7.node_tree.nodes.new('ShaderNodeEmission')
1333
            emiss1_node.location = (600, -200)
1334
            emiss1_node.inputs[0].default_value= self.g_atmos_col
1335
            emiss1_node.inputs[1].default_value= self.g_atmos_glow
1336
            mixs_node = material_cosmic7.node_tree.nodes.new('ShaderNodeMixShader')
1337
            mixs_node.location = (800, 0)
1338
            if self.g_atmos == False:
1339
                mixs_node.mute= True
1340
            link = material_cosmic7.node_tree.links.new
1341
            link(mus_node.outputs[0], cr1_node.inputs[0])
1342
            link(mus_node.outputs[0], cr2_node.inputs[0])
1343
            link(mus_node.outputs[0], math2_node.inputs[0])
1344
            link(math2_node.outputs[0], cr4_node.inputs[0])
1345
            link(noise_node.outputs[0], math2_node.inputs[1])
1346
            link(mus_node.outputs[0], bump_node.inputs[2])
1347
            link(cr1_node.outputs[0], math1_node.inputs[0])
1348
            link(cr2_node.outputs[0], math1_node.inputs[1])
1349
            link(math1_node.outputs[0], cr3_node.inputs[0])
1350
            link(math1_node.outputs[0], multiply1_node.inputs[1])
1351
            link(multiply1_node.outputs[0], mix1_node.inputs[1])
1352
            link(cr4_node.outputs[0], mix1_node.inputs[2])
1353
            link(mix1_node.outputs[0], bw1_node.inputs[0])
1354
            link(bw1_node.outputs[0], cr5_node.inputs[0])
1355
            link(cr5_node.outputs[0], mix2_node.inputs[0])
1356
            link(cr5_node.outputs[0], cr6_node.inputs[0])
1357
            link(mix1_node.outputs[0], mix2_node.inputs[2])
1358
            link(mix2_node.outputs[0], bsdf_node.inputs[0])
1359
            link(cr6_node.outputs[0], bsdf_node.inputs[7])
1360
            link(bump_node.outputs[0], bsdf_node.inputs[19])
1361
            link(lw_node.outputs[0], cr7_node.inputs[0])
1362
            link(cr7_node.outputs[0], mixs_node.inputs[0])
1363
            link(emiss1_node.outputs[0], mixs_node.inputs[2])
1364
            link(bsdf_node.outputs[0], mixs_node.inputs[1])
1365
            link(cr3_node.outputs[0], material_output.inputs[2])
1366
            link(mixs_node.outputs[0], material_output.inputs[0])
1367
            bpy.context.object.active_material = material_cosmic7
1368
            bpy.context.object.active_material.diffuse_color = (0.8, 0.517521, 0.0242545, 1)
1369
            bpy.context.object.active_material.metallic = 0.3
1370
            
1371
        if mytool.planet_type == 'OP8':
1372
            material_cosmic8 = bpy.data.materials.new(name= "Icy World")
1373
            material_cosmic8.use_nodes = True
1374
            bsdf_node = material_cosmic8.node_tree.nodes.get('Principled BSDF')
1375
            bsdf_node.location = (400, 0)
1376
            material_output = material_cosmic8.node_tree.nodes.get('Material Output')
1377
            material_output.location = (1000, 0)
1378
            mus_node = material_cosmic8.node_tree.nodes.new('ShaderNodeTexMusgrave')
1379
            mus_node.location = (-1400, 0)
1380
            mus_node.musgrave_type = 'RIDGED_MULTIFRACTAL'
1381
            mus_node.inputs[2].default_value = self.i_scale
1382
            mus_node.inputs[3].default_value = 90
1383
            mus_node.inputs[4].default_value = self.i_soften
1384
            mus_node.inputs[5].default_value = 2.910
1385
            mus_node.inputs[6].default_value = -0.120
1386
            mus_node.inputs[7].default_value = 10.010
1387
            cr1_node = material_cosmic8.node_tree.nodes.new('ShaderNodeValToRGB')
1388
            cr1_node.location = (-1200, 200)
1389
            cr1_node.color_ramp.elements[1].position= 0.005
1390
            lh = self.i_land_height
1391
            cr2_node = material_cosmic8.node_tree.nodes.new('ShaderNodeValToRGB')
1392
            cr2_node.location = (-1200, -200)
1393
            cr2_node.color_ramp.elements[0].color= (0.071, 0.071, 0.071, 1)
1394
            cr2_node.color_ramp.elements.new(position= 0.337)
1395
            cr2_node.color_ramp.elements[1].color = (lh, lh, lh, 1)
1396
            cr2_node.color_ramp.elements[2].color = (0.306, 0.306, 0.306, 1)
1397
            math1_node = material_cosmic8.node_tree.nodes.new('ShaderNodeMath')
1398
            math1_node.location= (-1000, 0)
1399
            math1_node.operation= 'MULTIPLY'
1400
            math1_node.use_clamp= True
1401
            cr3_node = material_cosmic8.node_tree.nodes.new('ShaderNodeValToRGB')
1402
            cr3_node.location = (-800, 200)
1403
            cr3_node.color_ramp.elements[1].color= (0.059, 0.059, 0.059, 1)
1404
            multiply1_node = material_cosmic8.node_tree.nodes.new('ShaderNodeMixRGB')
1405
            multiply1_node.location = (-600, -200)
1406
            multiply1_node.blend_type= 'MULTIPLY'
1407
            multiply1_node.inputs[0].default_value= 1
1408
            multiply1_node.inputs[2].default_value= (0.144129, 0.0231533, 0.00182117, 1)
1409
            c1 = self.i_land_col1
1410
            c2 = self.i_land_col2
1411
            c3 = self.i_land_col3
1412
            c4 = self.i_land_col4
1413
            cr4_node = material_cosmic8.node_tree.nodes.new('ShaderNodeValToRGB')
1414
            cr4_node.location = (-600, -400)
1415
            cr4_node.color_ramp.elements.new(position= 0.041)
1416
            cr4_node.color_ramp.elements.new(position= 0.098)
1417
            cr4_node.color_ramp.elements.new(position= 0.275)
1418
            cr4_node.color_ramp.elements[1].color = c1
1419
            cr4_node.color_ramp.elements[2].color = c2
1420
            cr4_node.color_ramp.elements[3].color = c3
1421
            cr4_node.color_ramp.elements[3].position= 0.201
1422
            cr4_node.color_ramp.elements[4].color = c4
1423
            cr4_node.color_ramp.elements[4].position = 0.275
1424
            math2_node = material_cosmic8.node_tree.nodes.new('ShaderNodeMath')
1425
            math2_node.location= (-800, -400)
1426
            math2_node.operation= 'MULTIPLY'
1427
            math2_node.use_clamp= True
1428
            noise_node = material_cosmic8.node_tree.nodes.new('ShaderNodeTexNoise')
1429
            noise_node.location = (-1000, -600)
1430
            noise_node.inputs[2].default_value = 19
1431
            noise_node.inputs[3].default_value = 2
1432
            noise_node.inputs[4].default_value = 0.5
1433
            noise_node.inputs[5].default_value = 2.2
1434
            bump_node = material_cosmic8.node_tree.nodes.new('ShaderNodeBump')
1435
            bump_node.location = (-600, -600)
1436
            bump_node.inputs[1].default_value= 0.050
1437
            mix1_node = material_cosmic8.node_tree.nodes.new('ShaderNodeMixRGB')
1438
            mix1_node.location = (-400, -300)
1439
            mix1_node.inputs[0].default_value= 0.640
1440
            bw1_node = material_cosmic8.node_tree.nodes.new('ShaderNodeRGBToBW')
1441
            bw1_node.location = (-200, -300)
1442
            cr5_node = material_cosmic8.node_tree.nodes.new('ShaderNodeValToRGB')
1443
            cr5_node.location = (0, -300)
1444
            cr5_node.color_ramp.elements[0].position = 0.079
1445
            cr5_node.color_ramp.elements[1].position = 0.160
1446
            mix2_node = material_cosmic8.node_tree.nodes.new('ShaderNodeMixRGB')
1447
            mix2_node.location = (200, -100)
1448
            mix2_node.inputs[1].default_value= self.i_water_col
1449
            cr6_node = material_cosmic8.node_tree.nodes.new('ShaderNodeValToRGB')
1450
            cr6_node.location = (200, -500)
1451
            cr6_node.color_ramp.elements[0].color = (0.345, 0.345, 0.345, 1)
1452
            lw_node = material_cosmic8.node_tree.nodes.new('ShaderNodeLayerWeight')
1453
            lw_node.location = (600, 200)
1454
            lw_node.inputs[0].default_value = 0.160
1455
            cr7_node = material_cosmic8.node_tree.nodes.new('ShaderNodeValToRGB')
1456
            cr7_node.location = (600, 400)
1457
            cr7_node.color_ramp.elements[0].position = 0.005
1458
            emiss1_node = material_cosmic8.node_tree.nodes.new('ShaderNodeEmission')
1459
            emiss1_node.location = (600, -200)
1460
            emiss1_node.inputs[0].default_value= self.i_atmos_col
1461
            emiss1_node.inputs[1].default_value= self.i_atmos_glow
1462
            mixs_node = material_cosmic8.node_tree.nodes.new('ShaderNodeMixShader')
1463
            mixs_node.location = (800, 0)
1464
            if self.i_atmos == False:
1465
                mixs_node.mute= True
1466
            link = material_cosmic8.node_tree.links.new
1467
            link(mus_node.outputs[0], cr1_node.inputs[0])
1468
            link(mus_node.outputs[0], cr2_node.inputs[0])
1469
            link(mus_node.outputs[0], math2_node.inputs[0])
1470
            link(math2_node.outputs[0], cr4_node.inputs[0])
1471
            link(noise_node.outputs[0], math2_node.inputs[1])
1472
            link(mus_node.outputs[0], bump_node.inputs[2])
1473
            link(cr1_node.outputs[0], math1_node.inputs[0])
1474
            link(cr2_node.outputs[0], math1_node.inputs[1])
1475
            link(math1_node.outputs[0], cr3_node.inputs[0])
1476
            link(math1_node.outputs[0], multiply1_node.inputs[1])
1477
            link(multiply1_node.outputs[0], mix1_node.inputs[1])
1478
            link(cr4_node.outputs[0], mix1_node.inputs[2])
1479
            link(mix1_node.outputs[0], bw1_node.inputs[0])
1480
            link(bw1_node.outputs[0], cr5_node.inputs[0])
1481
            link(cr5_node.outputs[0], mix2_node.inputs[0])
1482
            link(cr5_node.outputs[0], cr6_node.inputs[0])
1483
            link(mix1_node.outputs[0], mix2_node.inputs[2])
1484
            link(mix2_node.outputs[0], bsdf_node.inputs[0])
1485
            link(cr6_node.outputs[0], bsdf_node.inputs[7])
1486
            link(bump_node.outputs[0], bsdf_node.inputs[19])
1487
            link(lw_node.outputs[0], cr7_node.inputs[0])
1488
            link(cr7_node.outputs[0], mixs_node.inputs[0])
1489
            link(emiss1_node.outputs[0], mixs_node.inputs[2])
1490
            link(bsdf_node.outputs[0], mixs_node.inputs[1])
1491
            link(cr3_node.outputs[0], material_output.inputs[2])
1492
            link(mixs_node.outputs[0], material_output.inputs[0])
1493
            bpy.context.object.active_material = material_cosmic8
1494
            bpy.context.object.active_material.diffuse_color = (0.100548, 0.562905, 0.8, 1)
1495
            bpy.context.object.active_material.metallic = 0.3
1496
            
1497
        return {'FINISHED'}
1498
    
1499
    def invoke(self, context, event):
1500
        return context.window_manager.invoke_props_dialog(self, width= 210)
1501
1502
class SHADER_OT_DIAMOND(Operator):
1503
    """Open the Diamond Dialog box"""
1504
    bl_label = "             Diamond Operator"
1505
    bl_idname = "wm.diamondop"
1506
    bl_options = {'REGISTER', 'UNDO'}
1507
    
1508
    col : FloatVectorProperty(name='Color Tint',subtype='COLOR_GAMMA',size=4,default=(1,1,1,1), min= 0, max= 1)
1509
    
1510
    def execute(self, context):
1511
        c = self.col
1512
        material_diamond = bpy.data.materials.new(name= "Diamond")
1513
        material_diamond.use_nodes = True
1514
        material_diamond.node_tree.nodes.remove(material_diamond.node_tree.nodes.get('Principled BSDF'))
1515
        material_output = material_diamond.node_tree.nodes.get('Material Output')
1516
        material_output.location = (400,0)
1517
        glass1_node = material_diamond.node_tree.nodes.new('ShaderNodeBsdfGlass')
1518
        glass1_node.location = (-600,0)
1519
        glass1_node.inputs[0].default_value = (1, 0, 0, 1)
1520
        glass1_node.inputs[2].default_value = 1.446
1521
        glass2_node = material_diamond.node_tree.nodes.new('ShaderNodeBsdfGlass')
1522
        glass2_node.location = (-600,-150)
1523
        glass2_node.inputs[0].default_value = (0, 1, 0, 1)
1524
        glass2_node.inputs[2].default_value = 1.450
1525
        glass3_node = material_diamond.node_tree.nodes.new('ShaderNodeBsdfGlass')
1526
        glass3_node.location = (-600,-300)
1527
        glass3_node.inputs[0].default_value = (0, 0, 1, 1)
1528
        glass3_node.inputs[2].default_value = 1.545        
1529
        add1_node = material_diamond.node_tree.nodes.new('ShaderNodeAddShader')
1530
        add1_node.location = (-400,-50)
1531
        add1_node.label = "Add 1"
1532
        add1_node.hide = True
1533
        add1_node.select = False       
1534
        add2_node = material_diamond.node_tree.nodes.new('ShaderNodeAddShader')
1535
        add2_node.location = (-100,0)
1536
        add2_node.label = "Add 2"
1537
        add2_node.hide = True
1538
        add2_node.select = False      
1539
        glass4_node = material_diamond.node_tree.nodes.new('ShaderNodeBsdfGlass')
1540
        glass4_node.location = (-150,-150)
1541
        glass4_node.inputs[2].default_value = 1.450
1542
        glass4_node.select = False      
1543
        mix1_node = material_diamond.node_tree.nodes.new('ShaderNodeMixShader')
1544
        mix1_node.location = (200,0)
1545
        mix1_node.select = False
1546
        material_diamond.node_tree.links.new(glass1_node.outputs[0], add1_node.inputs[0])
1547
        material_diamond.node_tree.links.new(glass2_node.outputs[0], add1_node.inputs[1])
1548
        material_diamond.node_tree.links.new(add1_node.outputs[0], add2_node.inputs[0])
1549
        material_diamond.node_tree.links.new(glass3_node.outputs[0], add2_node.inputs[1])
1550
        material_diamond.node_tree.links.new(add2_node.outputs[0], mix1_node.inputs[1])
1551
        material_diamond.node_tree.links.new(glass4_node.outputs[0], mix1_node.inputs[2])
1552
        material_diamond.node_tree.links.new(mix1_node.outputs[0], material_output.inputs[0])
1553
        bpy.context.object.active_material = material_diamond
1554
        bpy.context.object.active_material.diffuse_color = c
1555
        bpy.context.object.active_material.metallic = 0.3
1556
        if context.scene.render.engine == 'BLENDER_EEVEE':
1557
            context.object.active_material.blend_method = 'HASHED'
1558
        return {'FINISHED'}
1559
    
1560
    def invoke(self, context, event):
1561
        return context.window_manager.invoke_props_dialog(self, width= 210)
1562
1563
1564
class SHADER_OT_GOLD(Operator):
1565
    """Add the Basic Gold Shader to your selected Object."""
1566
    bl_label = "Gold"
1567
    bl_idname = 'shader.gold_operator'
1568
    bl_options = {'REGISTER', 'UNDO'}
1569
    
1570
    roughness : FloatProperty(name='Roughness', default= 0.5, min= 0, max= 1)
1571
    preset_bool : BoolProperty(name= "Set Roughness", default= False)
1572
    
1573
    def draw(self, context):
1574
        layout= self.layout
1575
        layout.separator(factor= 0.1)
1576
        box = layout.box()
1577
        box.prop(self, "preset_bool")
1578
        if self.preset_bool == True:
1579
            box.label(text= "0 - Glossy                              1 - Rough")
1580
            box.prop(self, "roughness", slider= True)
1581
        layout.separator(factor= 1)    
1582
    
1583
    def execute(self, context):
1584
        r = self.roughness
1585
        material_gold = bpy.data.materials.new(name= "Gold")
1586
        material_gold.use_nodes = True
1587
        material_output = material_gold.node_tree.nodes.get('Material Output')
1588
        material_output.location = (600,0)
1589
        material_output.select = False     
1590
        rgb_node = material_gold.node_tree.nodes.new('ShaderNodeRGB')
1591
        rgb_node.location = (0,-100)
1592
        rgb_node.outputs[0].default_value = (1, 0.766, 0.336, 1)
1593
        rgb_node.select = False
1594
        rgb_node.hide = True
1595
        principled = material_gold.node_tree.nodes.get('Principled BSDF')
1596
        principled.location = (200,0)
1597
        principled.select = False
1598
        principled.inputs[4].default_value = 1
1599
        principled.inputs[7].default_value = r
1600
        material_gold.node_tree.links.new(rgb_node.outputs[0], principled.inputs[0])
1601
        bpy.context.object.active_material = material_gold
1602
        bpy.context.object.active_material.diffuse_color = (1, 0.766, 0.336, 1)
1603
        bpy.context.object.active_material.metallic = 0.45082
1604
        return {'FINISHED'}
1605
    
1606
    def invoke(self, context, event):
1607
        return context.window_manager.invoke_props_dialog(self, width= 210)
1608
1609
1610
class SHADER_OT_SILVER(Operator):
1611
    """Add the Basic Silver Shader to your selected Object."""
1612
    bl_label = "Silver"
1613
    bl_idname = 'shader.silver_operator'
1614
    bl_options = {'REGISTER', 'UNDO'}
1615
    
1616
    roughness : FloatProperty(name='Roughness', default= 0.5, min= 0, max= 1)
1617
    preset_bool : BoolProperty(name= "Set Roughness", default= False)
1618
    
1619
    def draw(self, context):
1620
        layout= self.layout
1621
        layout.separator(factor= 0.1)
1622
        box = layout.box()
1623
        box.prop(self, "preset_bool")
1624
        if self.preset_bool == True:
1625
            box.label(text= "0 - Glossy                              1 - Rough")
1626
            box.prop(self, "roughness", slider= True)
1627
        layout.separator(factor= 1)    
1628
    
1629
    def execute(self, context):
1630
        r = self.roughness
1631
        material_silver = bpy.data.materials.new(name= "Silver")
1632
        material_silver.use_nodes = True
1633
        material_output = material_silver.node_tree.nodes.get('Material Output')
1634
        material_output.location = (600,0)
1635
        material_output.select = False       
1636
        rgb_node = material_silver.node_tree.nodes.new('ShaderNodeRGB')
1637
        rgb_node.location = (0,-100)
1638
        rgb_node.outputs[0].default_value = (0.972, 0.960, 0.915, 1)
1639
        rgb_node.select = False
1640
        rgb_node.hide = True
1641
        principled = material_silver.node_tree.nodes.get('Principled BSDF')
1642
        principled.location = (200,0)
1643
        principled.select = False
1644
        principled.inputs[4].default_value = 1.0
1645
        principled.inputs[7].default_value = r
1646
        material_silver.node_tree.links.new(rgb_node.outputs[0], principled.inputs[0])
1647
        bpy.context.object.active_material = material_silver
1648
        bpy.context.object.active_material.diffuse_color = (0.972, 0.960, 0.915, 1)
1649
        bpy.context.object.active_material.metallic = 0.45082
1650
        return {'FINISHED'}
1651
    
1652
    def invoke(self, context, event):
1653
        return context.window_manager.invoke_props_dialog(self, width= 210)
1654
1655
1656
class SHADER_OT_COPPER(Operator):
1657
    """Add the Basic Copper Shader to your selected Object."""
1658
    bl_label = "Copper"
1659
    bl_idname = 'shader.copper_operator'
1660
    bl_options = {'REGISTER', 'UNDO'}
1661
    
1662
    roughness : FloatProperty(name='Roughness', default= 0.5, min= 0, max= 1)
1663
    preset_bool : BoolProperty(name= "Set Roughness", default= False)
1664
    
1665
    def draw(self, context):
1666
        layout= self.layout
1667
        layout.separator(factor= 0.1)
1668
        box = layout.box()
1669
        box.prop(self, "preset_bool")
1670
        if self.preset_bool == True:
1671
            box.label(text= "0 - Glossy                              1 - Rough")
1672
            box.prop(self, "roughness", slider= True)
1673
        layout.separator(factor= 1)    
1674
    
1675
    def execute(self, context):
1676
        r = self.roughness
1677
        material_copper = bpy.data.materials.new(name= "Copper")
1678
        material_copper.use_nodes = True
1679
        material_output = material_copper.node_tree.nodes.get('Material Output')
1680
        material_output.location = (600,0)
1681
        material_output.select = False    
1682
        rgb_node = material_copper.node_tree.nodes.new('ShaderNodeRGB')
1683
        rgb_node.location = (0,-100)
1684
        rgb_node.outputs[0].default_value = (0.955, 0.637, 0.538, 1)
1685
        rgb_node.select = False
1686
        rgb_node.hide = True
1687
        principled = material_copper.node_tree.nodes.get('Principled BSDF')
1688
        principled.location = (200,0)
1689
        principled.select = False
1690
        principled.inputs[4].default_value = 1.0
1691
        principled.inputs[7].default_value = r
1692
        material_copper.node_tree.links.new(rgb_node.outputs[0], principled.inputs[0])
1693
        bpy.context.object.active_material = material_copper
1694
        bpy.context.object.active_material.diffuse_color = (0.955, 0.637, 0.538, 1)
1695
        bpy.context.object.active_material.metallic = 0.45082
1696
        return {'FINISHED'}
1697
    
1698
    def invoke(self, context, event):
1699
        return context.window_manager.invoke_props_dialog(self, width= 210)
1700
1701
1702
class WM_OT_ghostOp(Operator):
1703
    """Open the Ghost Dialog box"""
1704
    bl_label = "                  Ghost Operator"
1705
    bl_idname = "wm.ghostop"
1706
    bl_options = {'REGISTER', 'UNDO'}
1707
    
1708
    col1 : FloatVectorProperty(name='Outer Color',subtype='COLOR_GAMMA',size=4,default=(0.224322, 0.812741, 1, 1), min= 0, max= 1)
1709
    col2 : FloatVectorProperty(name='Inner Color',subtype='COLOR_GAMMA',size=4,default=(0.137478, 0.345533, 1, 1), min= 0, max= 1)
1710
    trans : FloatProperty(min= 0, max= 1, default= 0.5, description= "Transparancy Value. At 0 the Shader will still have some transparancy but at 1 the Shader will fully Transparent")
1711
    enable_bool : BoolProperty(default= False, description= "This Option will add a subtle effect to the shader. The Whole Object will be Visible through itself.")
1712
    
1713
    def draw(self, context):
1714
        layout = self.layout
1715
        layout.separator(factor=2)
1716
        layout.prop(self, "col1")
1717
        layout.prop(self, "col2")
1718
        layout.prop(self, "trans", text= "Transparency:", slider= True)
1719
        if context.scene.render.engine == 'CYCLES':
1720
            layout.separator(factor=0.5)
1721
            box = layout.box()
1722
            box.prop(self, "enable_bool", text= "Variant")
1723
            if self.enable_bool == True:
1724
                box.label(text= "This Option will add a subtle effect")
1725
                box.label(text= "to the shader. ")
1726
                box.label(text= "The Whole Object will be Visible.")
1727
        layout.separator(factor=1)
1728
    
1729
    def execute(self, context):
1730
        c1 = self.col1
1731
        c2 = self.col2
1732
        a = self.trans
1733
        material_ghost = bpy.data.materials.new(name= "Ghost")
1734
        material_ghost.use_nodes = True
1735
        material_output = material_ghost.node_tree.nodes.get('Material Output')
1736
        material_output.location = (1000,0)
1737
        material_output.select = False
1738
        material_ghost.node_tree.nodes.remove(material_ghost.node_tree.nodes.get('Principled BSDF'))       
1739
        emiss_node = material_ghost.node_tree.nodes.new('ShaderNodeEmission')
1740
        emiss_node.location = (-200,-90)
1741
        emiss_node.inputs[0].default_value = c1
1742
        emiss_node.inputs[1].default_value = 2
1743
        emiss_node.select = False        
1744
        trans_node = material_ghost.node_tree.nodes.new('ShaderNodeBsdfTransparent')
1745
        trans_node.location = (-200,10)
1746
        trans_node.inputs[0].default_value = c2
1747
        trans_node.select = False       
1748
        mix_node = material_ghost.node_tree.nodes.new('ShaderNodeMixShader')
1749
        mix_node.location = (400,50)
1750
        mix_node.select = False      
1751
        layerw_node = material_ghost.node_tree.nodes.new('ShaderNodeLayerWeight')
1752
        layerw_node.location = (0,150)
1753
        layerw_node.inputs[0].default_value = 0.1
1754
        layerw_node.select = False      
1755
        math_node = material_ghost.node_tree.nodes.new('ShaderNodeMath')
1756
        math_node.location = (200,100)
1757
        math_node.inputs[0].default_value = 0.1
1758
        math_node.select = False
1759
        math_node.hide = True      
1760
        mix2_node = material_ghost.node_tree.nodes.new('ShaderNodeMixShader')
1761
        mix2_node.location = (800,50)
1762
        mix2_node.select = False       
1763
        trans2_node = material_ghost.node_tree.nodes.new('ShaderNodeBsdfTransparent')
1764
        trans2_node.location = (500,-100)
1765
        trans2_node.inputs[0].default_value = (1, 1, 1, 1)
1766
        trans2_node.select = False      
1767
        light_node = material_ghost.node_tree.nodes.new('ShaderNodeLightPath')
1768
        light_node.location = (500,500)
1769
        light_node.select = False
1770
        colramp_node = material_ghost.node_tree.nodes.new('ShaderNodeValToRGB')
1771
        colramp_node.location = (700, 200)
1772
        colramp_node.select = False
1773
        colramp_node.color_ramp.elements[0].color = (a, a, a, 1)
1774
        if self.enable_bool == True:
1775
            colramp_node.color_ramp.elements[1].color = (0.85, 0.85, 0.85, 1)
1776
        material_ghost.node_tree.links.new(trans_node.outputs[0], mix_node.inputs[1])
1777
        material_ghost.node_tree.links.new(emiss_node.outputs[0], mix_node.inputs[2])
1778
        material_ghost.node_tree.links.new(layerw_node.outputs[0], math_node.inputs[0])
1779
        material_ghost.node_tree.links.new(layerw_node.outputs[1], math_node.inputs[1])
1780
        material_ghost.node_tree.links.new(math_node.outputs[0], mix_node.inputs[0])
1781
        material_ghost.node_tree.links.new(mix_node.outputs[0], mix2_node.inputs[1])
1782
        material_ghost.node_tree.links.new(trans2_node.outputs[0], mix2_node.inputs[2])
1783
        material_ghost.node_tree.links.new(light_node.outputs[11], colramp_node.inputs[0])
1784
        material_ghost.node_tree.links.new(colramp_node.outputs[0], mix2_node.inputs[0])
1785
        material_ghost.node_tree.links.new(mix2_node.outputs[0], material_output.inputs[0])
1786
        bpy.context.object.active_material = material_ghost
1787
        bpy.context.object.active_material.diffuse_color = c1
1788
        if context.scene.render.engine == 'BLENDER_EEVEE':
1789
            context.object.active_material.blend_method = 'HASHED'
1790
        return {'FINISHED'}
1791
    
1792
    def invoke(self, context, event):
1793
        return context.window_manager.invoke_props_dialog(self, width= 200)
1794
1795
1796
class WM_OT_hologramOp(Operator):
1797
    """Open the Hologram Dialog box"""
1798
    bl_label = "       Hologram Operator"
1799
    bl_idname = "wm.hologramop"
1800
    bl_options = {'REGISTER', 'UNDO'}
1801
    
1802
    col1 : FloatVectorProperty(name='Color 1',subtype='COLOR_GAMMA',size=4,default=(0.0927682, 1, 0.566671, 1), min= 0, max= 1)
1803
    col2 : FloatVectorProperty(name='Color 2',subtype='COLOR_GAMMA',size=4,default=(0.381055, 1, 0.697353, 1), min= 0, max= 1)
1804
    wire_amount : FloatProperty(default= 0.050, min= 0, soft_max= 1)
1805
    
1806
    def draw(self, context):
1807
        layout = self.layout
1808
        layout.separator(factor=2)
1809
        layout.prop(self, "col1")
1810
        layout.prop(self, "col2")
1811
        layout.prop(self, "wire_amount", slider= True, text= "Wireframe Size:")
1812
        layout.separator(factor=1)
1813
    
1814
    def execute(self, context):
1815
        c1 = self.col1
1816
        c2 = self.col2
1817
        material_hologram = bpy.data.materials.new(name= "Hologram")
1818
        material_hologram.use_nodes = True
1819
        material_output = material_hologram.node_tree.nodes.get('Material Output')
1820
        material_output.location = (1000,0)
1821
        material_output.select = False
1822
        material_hologram.node_tree.nodes.remove(material_hologram.node_tree.nodes.get('Principled BSDF'))     
1823
        emiss_node = material_hologram.node_tree.nodes.new('ShaderNodeEmission')
1824
        emiss_node.location = (-200,-90)
1825
        emiss_node.inputs[0].default_value = c1        
1826
        emiss_node.inputs[1].default_value = 2
1827
        emiss_node.select = False   
1828
        trans1_node = material_hologram.node_tree.nodes.new('ShaderNodeBsdfTransparent')
1829
        trans1_node.location = (-200,10)
1830
        trans1_node.inputs[0].default_value = c2
1831
        trans1_node.select = False      
1832
        mix1_node = material_hologram.node_tree.nodes.new('ShaderNodeMixShader')
1833
        mix1_node.location = (400,50)
1834
        mix1_node.select = False        
1835
        layerw_node = material_hologram.node_tree.nodes.new('ShaderNodeLayerWeight')
1836
        layerw_node.location = (0,150)
1837
        layerw_node.inputs[0].default_value = 0.1
1838
        layerw_node.select = False       
1839
        math_node = material_hologram.node_tree.nodes.new('ShaderNodeMath')
1840
        math_node.location = (200,100)
1841
        math_node.inputs[0].default_value = 0.1
1842
        math_node.select = False
1843
        math_node.hide = True       
1844
        mix2_node = material_hologram.node_tree.nodes.new('ShaderNodeMixShader')
1845
        mix2_node.location = (600,50)
1846
        mix2_node.select = False      
1847
        wire_node = material_hologram.node_tree.nodes.new('ShaderNodeWireframe')
1848
        wire_node.location = (100,200)
1849
        wire_node.select = False
1850
        wire_node.use_pixel_size = True
1851
        wire_node.inputs[0].default_value = self.wire_amount
1852
        reroute = material_hologram.node_tree.nodes.new('NodeReroute')
1853
        reroute.location = (-150,-90)
1854
        material_hologram.node_tree.links.new(trans1_node.outputs[0], mix1_node.inputs[1])
1855
        material_hologram.node_tree.links.new(emiss_node.outputs[0], reroute.inputs[0])
1856
        material_hologram.node_tree.links.new(reroute.outputs[0], mix1_node.inputs[2])
1857
        material_hologram.node_tree.links.new(reroute.outputs[0], mix2_node.inputs[2])
1858
        material_hologram.node_tree.links.new(layerw_node.outputs[0], math_node.inputs[0])
1859
        material_hologram.node_tree.links.new(layerw_node.outputs[1], math_node.inputs[1])
1860
        material_hologram.node_tree.links.new(math_node.outputs[0], mix1_node.inputs[0])
1861
        material_hologram.node_tree.links.new(mix1_node.outputs[0], mix2_node.inputs[1])
1862
        material_hologram.node_tree.links.new(wire_node.outputs[0], mix2_node.inputs[0])
1863
        material_hologram.node_tree.links.new(mix2_node.outputs[0], material_output.inputs[0])
1864
        bpy.context.object.active_material = material_hologram
1865
        bpy.context.object.active_material.diffuse_color = c1
1866
        if context.scene.render.engine == 'BLENDER_EEVEE':
1867
            context.object.active_material.blend_method = 'HASHED'
1868
        return {'FINISHED'}
1869
    
1870
    def invoke(self, context, event):
1871
        return context.window_manager.invoke_props_dialog(self, width= 180)
1872
1873
1874
class WM_OT_neonOp(Operator):
1875
    """Open the Neon Dialog box"""
1876
    bl_label = "         Neon Operator"
1877
    bl_idname = "wm.neonop"
1878
    bl_options = {'REGISTER', 'UNDO'}
1879
    
1880
    col : FloatVectorProperty(name='Color',subtype='COLOR_GAMMA',size=4,default=(0.269619, 0.601632, 0.8, 1), min= 0, max= 1)
1881
    
1882
    def execute(self, context):
1883
        c = self.col
1884
        cur_frame = bpy.context.scene.frame_current
1885
        material_neon = bpy.data.materials.new(name= "Neon")
1886
        material_neon.use_nodes = True
1887
        tree = material_neon.node_tree
1888
        material_neon.node_tree.nodes.remove(material_neon.node_tree.nodes.get('Principled BSDF'))
1889
        material_output = material_neon.node_tree.nodes.get('Material Output')
1890
        material_output.location = (400,0)
1891
        emiss_node = material_neon.node_tree.nodes.new('ShaderNodeEmission')
1892
        emiss_node.location = (200,0)
1893
        emiss_node.inputs[0].default_value = c
1894
        emiss_node.inputs[1].default_value = 1.5
1895
        emiss_node.inputs[1].keyframe_insert("default_value", frame= cur_frame)
1896
        data_path = f'nodes["{emiss_node.name}"].inputs[1].default_value'
1897
        fcurves = tree.animation_data.action.fcurves
1898
        fc = fcurves.find(data_path)
1899
        if fc:
1900
            new_mod = fc.modifiers.new('NOISE')
1901
            new_mod.strength = 10
1902
            new_mod.depth = 1
1903
        material_neon.node_tree.links.new(emiss_node.outputs[0], material_output.inputs[0])
1904
        bpy.context.object.active_material = material_neon
1905
        bpy.context.object.active_material.diffuse_color = c
1906
        return {'FINISHED'}
1907
    
1908
    def invoke(self, context, event):
1909
        return context.window_manager.invoke_props_dialog(self, width= 150)
1910
1911
1912
class WM_OT_potionOp(Operator):
1913
    """Open the Stylized Potion Dialog box"""
1914
    bl_label = "                       Stylized Potion Operator"
1915
    bl_idname = "wm.potionop"
1916
    bl_options = {'REGISTER', 'UNDO'}
1917
    
1918
    col1 : FloatVectorProperty(name='',subtype='COLOR_GAMMA',size=4,default=(1, 0, 0.0018755, 1), min= 0, max= 1, description= "Select the First Color")
1919
    col2 : FloatVectorProperty(name='',subtype='COLOR_GAMMA',size=4,default=(0.255103, 0, 0.000564289, 1), min= 0, max= 1, description= "Select the Second Color")
1920
    animate : BoolProperty(name= "Animate Shader", default= False, description= "Enable the Animation for the Shader")
1921
    start : IntProperty(name= "Start Frame", default = 0, description= "Set the Start Frame for your animation")
1922
    end : IntProperty(name= "End Frame", default = 250, description= "Set the End Frame for your Animation")
1923
    
1924
    def invoke(self, context, event):
1925
        return context.window_manager.invoke_props_dialog(self)
1926
    
1927
    def draw(self, context):
1928
        layout = self.layout
1929
        layout.separator(factor= 2)
1930
        row= layout.row()
1931
        split = row.split(factor= 0.7)
1932
        split.label(text= "                                             Color 1: ")
1933
        split.prop(self, "col1")
1934
        row= layout.row()
1935
        split = row.split(factor= 0.7)
1936
        split.label(text= "                                             Color 2:" )
1937
        split.prop(self, "col2")   
1938
        row= layout.row()
1939
        row.separator(factor= 2)
1940
        box = layout.box()
1941
        row = box.row()
1942
        row.prop(self, "animate")
1943
        if self.animate == False:
1944
            row.label(text= "(Shader is Not Animated)")
1945
        if self.animate == True:
1946
            row.label(text= "(Shader is Animated)")  
1947
            row = box.row()  
1948
            box.prop(self, "start")
1949
            box.prop(self, "end")
1950
        layout.separator(factor= 1)
1951
    
1952
    def execute(self, context):
1953
        s = self.start
1954
        e = self.end
1955
        c1 = self.col1
1956
        c2 = self.col2
1957
        a = self.animate
1958
        m1 = " : (animated)" 
1959
        if a == True:    
1960
            material_potion = bpy.data.materials.new(name= "Stylized Potion" + m1)
1961
        else:
1962
            material_potion = bpy.data.materials.new(name= "Stylized Potion")    
1963
        material_potion.use_nodes = True
1964
        tree = material_potion.node_tree
1965
        prin_node = material_potion.node_tree.nodes.get('Principled BSDF')
1966
        prin_node.location = (200,0)
1967
        prin_node.inputs[0].default_value = (0.8, 0.000897912, 0, 1)
1968
        prin_node.inputs[3].default_value = (0.8, 0.1332, 0.0936454, 1)
1969
        prin_node.inputs[7].default_value = 0.076
1970
        prin_node.inputs[15].default_value = 0.947
1971
        material_output = material_potion.node_tree.nodes.get('Material Output')
1972
        material_output.location = (500,0)
1973
        rgb1_node = material_potion.node_tree.nodes.new('ShaderNodeRGB')
1974
        rgb1_node.location = (-200,0)
1975
        rgb1_node.outputs[0].default_value = c1   
1976
        rgb2_node = material_potion.node_tree.nodes.new('ShaderNodeRGB')
1977
        rgb2_node.location = (-200,-200)
1978
        rgb2_node.outputs[0].default_value = c2
1979
        mix_node = material_potion.node_tree.nodes.new('ShaderNodeMixRGB')
1980
        mix_node.location = (0,0)
1981
        noise_node = material_potion.node_tree.nodes.new('ShaderNodeTexNoise')
1982
        noise_node.location = (-500, 200)
1983
        noise_node.inputs[2].default_value = 5
1984
        noise_node.inputs[3].default_value = 5
1985
        noise_node.inputs[5].default_value = 0.2
1986
        if a == True:
1987
            noise_node.inputs[5].keyframe_insert("default_value", frame= s-150)
1988
            noise_node.inputs[5].default_value = 1.2
1989
            noise_node.inputs[5].keyframe_insert("default_value", frame= e+50)
1990
        ramp_node = material_potion.node_tree.nodes.new('ShaderNodeValToRGB')
1991
        ramp_node.location = (-300, 200)
1992
        ramp_node.color_ramp.elements[0].position = 0.454
1993
        ramp_node.color_ramp.elements[1].position = 0.522
1994
        link = material_potion.node_tree.links.new
1995
        link(rgb1_node.outputs[0], mix_node.inputs[1])
1996
        link(rgb2_node.outputs[0], mix_node.inputs[2])
1997
        link(noise_node.outputs[0], ramp_node.inputs[0])
1998
        link(ramp_node.outputs[0], mix_node.inputs[0])
1999
        link(mix_node.outputs[0], prin_node.inputs[0])
2000
        link(prin_node.outputs[0], material_output.inputs[0])
2001
        bpy.context.object.active_material = material_potion
2002
        bpy.context.object.active_material.diffuse_color = c1
2003
        return {'FINISHED'}
2004
2005
2006
class SHADER_OT_LEATHER(Operator):
2007
    """Open the Leather Shader Dialog box"""
2008
    bl_label = "             Leather Operator"
2009
    bl_idname = "wm.leatherop"
2010
    bl_options = {'REGISTER', 'UNDO'}
2011
    
2012
    col : FloatVectorProperty(name='Color',subtype='COLOR_GAMMA',size=4,default=(0.123239, 0.071147, 0.0570714, 1), min= 0, max= 1)
2013
    
2014
    def execute(self, context):
2015
        c = self.col
2016
        material_leather = bpy.data.materials.new(name= "Leather")
2017
        material_leather.use_nodes = True
2018
        principled = material_leather.node_tree.nodes.get('Principled BSDF')
2019
        principled.inputs[0].default_value = c
2020
        principled.inputs[5].default_value = 0.161
2021
        principled.inputs[7].default_value = 0.367
2022
        material_output = material_leather.node_tree.nodes.get('Material Output')
2023
        material_output.location = (400,0)
2024
        mus_node = material_leather.node_tree.nodes.new('ShaderNodeTexMusgrave')
2025
        mus_node.location = (-600,0)
2026
        mus_node.musgrave_type = 'MULTIFRACTAL'
2027
        mus_node.inputs[2].default_value = 148
2028
        mus_node.inputs[3].default_value = 12.6
2029
        mus_node.inputs[4].default_value = 92
2030
        mus_node.inputs[5].default_value = 2.3
2031
        disp_node = material_leather.node_tree.nodes.new('ShaderNodeDisplacement')
2032
        disp_node.location = (-400,0)
2033
        disp_node.inputs[2].default_value= 0.190
2034
        material_leather.node_tree.links.new(mus_node.outputs[0], disp_node.inputs[0])
2035
        material_leather.node_tree.links.new(disp_node.outputs[0], material_output.inputs[2])
2036
        bpy.context.object.active_material = material_leather
2037
        bpy.context.object.active_material.diffuse_color = c
2038
        bpy.context.object.active_material.metallic = 0.3
2039
        return {'FINISHED'}
2040
    
2041
    def invoke(self, context, event):
2042
        return context.window_manager.invoke_props_dialog(self, width= 210)
2043
2044
2045
class SHADER_OT_CLOUD(Operator):
2046
    """Add the Basic Cloud Shader to your selected Object."""
2047
    bl_label = "Cloud"
2048
    bl_idname = 'shader.cloud_operator'
2049
    bl_options = {'REGISTER', 'UNDO'}
2050
    
2051
    def execute(self, context):
2052
        material_cloud = bpy.data.materials.new(name= "Clouds")
2053
        material_cloud.use_nodes = True
2054
        material_output = material_cloud.node_tree.nodes.get('Material Output')
2055
        material_output.location = (100,0)
2056
        material_output.select = False
2057
        material_cloud.node_tree.nodes.remove(material_cloud.node_tree.nodes.get('Principled BSDF'))
2058
        volume_node = material_cloud.node_tree.nodes.new('ShaderNodeVolumePrincipled')
2059
        volume_node.location = (-200,0)
2060
        volume_node.select = False
2061
        colramp_node = material_cloud.node_tree.nodes.new('ShaderNodeValToRGB')
2062
        colramp_node.location = (-500,0)
2063
        colramp_node.color_ramp.elements[0].position = 0.503798
2064
        colramp_node.color_ramp.elements[1].position = 0.58481
2065
        noise_node = material_cloud.node_tree.nodes.new('ShaderNodeTexNoise')
2066
        noise_node.location = (-700,0)
2067
        noise_node.inputs[2].default_value = 1
2068
        noise_node.inputs[3].default_value = 20
2069
        mapping_node = material_cloud.node_tree.nodes.new('ShaderNodeMapping')
2070
        mapping_node.location = (-900, 0)
2071
        coord_node = material_cloud.node_tree.nodes.new('ShaderNodeTexCoord')
2072
        coord_node.location = (-1100,0)
2073
        material_cloud.node_tree.links.new(colramp_node.outputs[0], volume_node.inputs[2])
2074
        material_cloud.node_tree.links.new(noise_node.outputs[1], colramp_node.inputs[0])
2075
        material_cloud.node_tree.links.new(mapping_node.outputs[0], noise_node.inputs[0])
2076
        material_cloud.node_tree.links.new(coord_node.outputs[3], mapping_node.inputs[0])
2077
        material_cloud.node_tree.links.new(volume_node.outputs[0], material_output.inputs[1])
2078
        bpy.context.object.active_material = material_cloud
2079
        return {'FINISHED'}
2080
2081
2082
class SHADER_OT_SCIFIGOLD(Operator):
2083
    """Add the Basic Scifi Gold Shader to your selected Object."""
2084
    bl_label = "Sci-fi Gold"
2085
    bl_idname = 'shader.scifigold_operator'
2086
    bl_options = {'REGISTER', 'UNDO'}
2087
    
2088
    def execute(self, context):
2089
        material_scifigold = bpy.data.materials.new(name= "Sci-fi Gold")
2090
        material_scifigold.use_nodes = True
2091
        material_output = material_scifigold.node_tree.nodes.get('Material Output')
2092
        material_output.location = (600,0)
2093
        material_output.select = False      
2094
        rgb_node = material_scifigold.node_tree.nodes.new('ShaderNodeRGB')
2095
        rgb_node.location = (-200,0)
2096
        rgb_node.outputs[0].default_value = (1, 0.766, 0.336, 1)
2097
        rgb_node.select = False
2098
        rgb_node.hide = True
2099
        principled = material_scifigold.node_tree.nodes.get('Principled BSDF')
2100
        principled.location = (200,0)
2101
        principled.select = False
2102
        principled.inputs[4].default_value = 1.0
2103
        bump_node = material_scifigold.node_tree.nodes.new('ShaderNodeBump')
2104
        bump_node.location = (0, -600)
2105
        bump_node.inputs[0].default_value = 0.270
2106
        brick_node = material_scifigold.node_tree.nodes.new('ShaderNodeTexBrick')
2107
        brick_node.location = (-400, -600)
2108
        noise_node = material_scifigold.node_tree.nodes.new('ShaderNodeTexNoise')
2109
        noise_node.location = (-600, -800)
2110
        colramp_node = material_scifigold.node_tree.nodes.new('ShaderNodeValToRGB')
2111
        colramp_node.location = (-100, -300)
2112
        colramp_node.color_ramp.elements[0].color = (0.293851, 0.293851, 0.293851, 1)
2113
        colramp_node.color_ramp.elements[1].color = (0.373086, 0.373086, 0.373086, 1)
2114
        mix_node = material_scifigold.node_tree.nodes.new('ShaderNodeMixRGB')
2115
        mix_node.location = (0, 0)
2116
        mix_node.blend_type = 'MULTIPLY'
2117
        mix_node.inputs[2].default_value = (0.412679, 0.412679, 0.412679, 1)
2118
        mix_node.use_clamp = True
2119
        link = material_scifigold.node_tree.links.new
2120
        link(mix_node.outputs[0], principled.inputs[0])
2121
        link(rgb_node.outputs[0], mix_node.inputs[1])
2122
        link(colramp_node.outputs[0], principled.inputs[7])
2123
        link(bump_node.outputs[0], principled.inputs[19])
2124
        link(brick_node.outputs[0], bump_node.inputs[2])
2125
        link(brick_node.outputs[1], colramp_node.inputs[0])
2126
        link(brick_node.outputs[1], mix_node.inputs[0])
2127
        link(noise_node.outputs[0], brick_node.inputs[0])
2128
        bpy.context.object.active_material = material_scifigold
2129
        return {'FINISHED'}
2130
2131
2132
class SHADER_OT_BRICK(Operator):
2133
    """Add the Basic Brick Shader to your selected Object."""
2134
    bl_label = "Brick"
2135
    bl_idname = 'shader.brick_operator'
2136
    bl_options = {'REGISTER', 'UNDO'}
2137
    
2138
    def execute(self, context):
2139
        material_brick = bpy.data.materials.new(name= "Brick")
2140
        material_brick.use_nodes = True
2141
        material_output = material_brick.node_tree.nodes.get('Material Output')
2142
        material_output.location = (600,0)
2143
        material_output.select = False       
2144
        rgb_node = material_brick.node_tree.nodes.new('ShaderNodeRGB')
2145
        rgb_node.location = (-400,0)
2146
        rgb_node.outputs[0].default_value = (1, 0.90445, 0.70086, 1)
2147
        rgb_node.select = False
2148
        rgb_node.hide = True
2149
        principled = material_brick.node_tree.nodes.get('Principled BSDF')
2150
        principled.location = (200,0)
2151
        principled.select = False
2152
        principled.inputs[7].default_value = 0.796203
2153
        bump_node = material_brick.node_tree.nodes.new('ShaderNodeBump')
2154
        bump_node.location = (0, -600)
2155
        bump_node.inputs[0].default_value = 0.5
2156
        brick_node = material_brick.node_tree.nodes.new('ShaderNodeTexBrick')
2157
        brick_node.location = (-400, -600)
2158
        brick_node.inputs[4].default_value = 2.9
2159
        brick_node.inputs[5].default_value = 0.01
2160
        noise_node = material_brick.node_tree.nodes.new('ShaderNodeTexNoise')
2161
        noise_node.location = (-400, -200)
2162
        noise_node.inputs[1].default_value = -9.740
2163
        noise_node.inputs[2].default_value = 4.5
2164
        noise_node.inputs[3].default_value = 0
2165
        mix_node = material_brick.node_tree.nodes.new('ShaderNodeMixRGB')
2166
        mix_node.location = (0, 0)
2167
        mix_node.blend_type = 'MULTIPLY'
2168
        mix_node.inputs[2].default_value = (0.440389, 0.440389, 0.440389, 1)
2169
        mix_node.use_clamp = True
2170
        mix2_node = material_brick.node_tree.nodes.new('ShaderNodeMixRGB')
2171
        mix2_node.location = (-200, 0)
2172
        mix_node.use_clamp = True
2173
        mix_node.inputs[0].default_value = 0.4
2174
        coord_node = material_brick.node_tree.nodes.new('ShaderNodeTexCoord')
2175
        coord_node.location = (-1000,-600)
2176
        mapping_node = material_brick.node_tree.nodes.new('ShaderNodeMapping')
2177
        mapping_node.location = (-800,-600)
2178
        mapping_node.inputs[3].default_value[0] = 2.5
2179
        mapping_node.inputs[3].default_value[1] = 2.5
2180
        mapping_node.inputs[3].default_value[2] = 2.5
2181
        link = material_brick.node_tree.links.new
2182
        link(mix_node.outputs[0], principled.inputs[0])
2183
        link(bump_node.outputs[0], principled.inputs[19])
2184
        link(brick_node.outputs[0], bump_node.inputs[2])
2185
        link(brick_node.outputs[1], mix_node.inputs[0])
2186
        link(mapping_node.outputs[0], brick_node.inputs[0])
2187
        link(coord_node.outputs[2], mapping_node.inputs[0])
2188
        link(mix2_node.outputs[0], mix_node.inputs[1])
2189
        link(rgb_node.outputs[0], mix2_node.inputs[1])
2190
        link(noise_node.outputs[0], mix2_node.inputs[2])
2191
        bpy.context.object.active_material = material_brick
2192
        return {'FINISHED'}
2193
2194
2195
class NODE_MT_materials(Menu):
2196
    """The Materials section contains: Leather."""
2197
    bl_label = "Materials"
2198
    bl_idname = "node.mat_MT_menu"
2199
2200
    def draw(self, context):
2201
        layout = self.layout
2202
        layout.operator("wm.leatherop", text= "Leather Shader", icon= 'OUTLINER_OB_SURFACE') 
2203
2204
2205
class NODE_MT_metallics(Menu):
2206
    """The Metallics section contains: Gold, Silver and Copper."""
2207
    bl_label = "Metallics"
2208
    bl_idname = "node.met_MT_menu"
2209
2210
    def draw(self, context):
2211
        layout = self.layout
2212
        layout.operator("shader.gold_operator", text= "Gold Shader", icon= 'KEYTYPE_KEYFRAME_VEC')
2213
        layout.operator("shader.silver_operator", text= "Silver Shader", icon= 'HANDLETYPE_FREE_VEC')
2214
        layout.operator("shader.copper_operator", text= "Copper Shader", icon= 'KEYTYPE_EXTREME_VEC')
2215
2216
2217
class NODE_MT_gems(Menu):
2218
    """The Gemstones section contains: The Diamond Shader."""
2219
    bl_label = "Gemstones"
2220
    bl_idname = "node.gem_MT_menu"
2221
2222
    def draw(self, context):
2223
        layout = self.layout
2224
        layout.operator("wm.diamondop", text= "Diamond Shader", icon= 'DECORATE_ANIMATE')
2225
2226
2227
class NODE_MT_stylized(Menu):
2228
    """The Stylized section contains: The Ghost Shader, The Hologram Shader, The Neon Shader and the Stylized Potion Shader."""
2229
    bl_label = "Stylized"
2230
    bl_idname = "node.stylized_MT_menu"
2231
2232
    def draw(self, context):
2233
        layout = self.layout
2234
        layout.operator("wm.ghostop", text= "Ghost Shader", icon= 'GHOST_ENABLED')   
2235
        layout.operator("wm.hologramop", text= "Hologram Shader", icon= 'USER') 
2236
        layout.operator("wm.neonop", text= "Neon Shader", icon= 'MOD_SMOOTH') 
2237
        layout.operator("wm.potionop", text= "Potion Shader", icon= 'SORTTIME')      
2238
2239
2240
class WM_OT_Shortcut(Operator):
2241
    """Custom Operator"""
2242
    bl_label = "Add Shader Menu"
2243
    bl_idname = "wm.call_shader_menu"
2244
    bl_options = {'REGISTER', 'UNDO'}
2245
2246
    def draw(self, context):
2247
        layout = self.layout
2248
        box = layout.box()
2249
        box.menu("node.gem_MT_menu")
2250
        box.menu("node.mat_MT_menu")
2251
        box.menu("node.met_MT_menu")
2252
        box.menu("node.stylized_MT_menu")
2253
        
2254
    def execute(self, context):
2255
        return {'FINISHED'}
2256
    
2257
    def invoke(self, context, event):
2258
        wm = context.window_manager
2259
        return wm.invoke_props_dialog(self)
2260
2261
2262
addon_keymaps = []
2263
2264
classes = [ShaderLibraryProperties, WM_OT_Shortcut, NODE_MT_gems, NODE_MT_materials, NODE_MT_metallics, NODE_MT_stylized, ShaderMainPanel, SubPanelCosmic, SubPanelMaterials, SubPanelMetals, SubPanelPreciousMetals, SubPanelStylized, SHADER_OT_LEATHER, SHADER_OT_DIAMOND, SHADER_OT_GOLD, SHADER_OT_SILVER, SHADER_OT_COPPER, SHADER_OT_CLOUD, SHADER_OT_SCIFIGOLD, SHADER_OT_BRICK, WM_OT_ghostOp, WM_OT_hologramOp, WM_OT_neonOp, WM_OT_potionOp, SHADER_OT_COSMIC]
2265
2266
  
2267
def register():
2268
    for cls in classes:
2269
        bpy.utils.register_class(cls)
2270
    wm = bpy.context.window_manager
2271
    kc = wm.keyconfigs.addon
2272
    if kc:
2273
        km = kc.keymaps.new(name='3D View', space_type= 'VIEW_3D')
2274
        kmi = km.keymap_items.new("wm.call_shader_menu", type= 'F', value= 'PRESS', shift= True)
2275
        addon_keymaps.append((km, kmi))
2276
    bpy.types.Scene.my_tool = PointerProperty(type= ShaderLibraryProperties)    
2277
    
2278
2279
2280
def unregister():
2281
    del bpy.types.Scene.my_tool
2282
    for km,kmi in addon_keymaps:
2283
        km.keymap_items.remove(kmi)
2284
    addon_keymaps.clear()
2285
    for cls in classes:
2286
        bpy.utils.unregister_class(cls)
2287
        
2288
2289
if __name__ == "__main__":
2290
    register()