From 193ff43f69b808560b5dc5ea5628a79744f88494 Mon Sep 17 00:00:00 2001 From: Rodolphe Suescun Date: Fri, 10 Aug 2018 12:31:15 +0200 Subject: [PATCH] Added ambient occlusion and parameters for the material node --- addons/procedural_material/graph_edit.gd | 2 +- addons/procedural_material/main_window.gd | 48 +- addons/procedural_material/main_window.tscn | 2 +- addons/procedural_material/node_base.gd | 4 +- addons/procedural_material/nodes/material.gd | 51 ++- .../procedural_material/nodes/material.tscn | 413 ++++++++++++++++-- addons/procedural_material/preview.gd | 2 +- addons/procedural_material/preview.tscn | 123 +++++- examples/bricks.ptex | 2 +- examples/crocodile_skin.ptex | 2 +- examples/dry_earth.ptex | 2 +- examples/floor1.ptex | 2 +- examples/floor2.ptex | 2 +- examples/grass_with_flowers.ptex | 2 +- examples/lava.ptex | 2 +- examples/metal_pattern_2.ptex | 1 + examples/rock.ptex | 2 +- icon.png | Bin 3498 -> 7888 bytes project.godot | 4 +- 19 files changed, 573 insertions(+), 93 deletions(-) create mode 100644 examples/metal_pattern_2.ptex diff --git a/addons/procedural_material/graph_edit.gd b/addons/procedural_material/graph_edit.gd index 43a991e..18e0265 100644 --- a/addons/procedural_material/graph_edit.gd +++ b/addons/procedural_material/graph_edit.gd @@ -155,7 +155,7 @@ func do_save_file(filename): func export_textures(size = 512): if save_path != null: var prefix = save_path.left(save_path.rfind(".")) - $GraphEdit/Material.export_textures(prefix) + $Material.export_textures(prefix) func send_changed_signal(): set_need_save(true) diff --git a/addons/procedural_material/main_window.gd b/addons/procedural_material/main_window.gd index 46d1cc3..ff070b1 100644 --- a/addons/procedural_material/main_window.gd +++ b/addons/procedural_material/main_window.gd @@ -88,25 +88,36 @@ func do_load_material(filename): graph_edit.do_load_file(filename) func save_material(): - $VBoxContainer/HBoxContainer/Projects.get_current_tab_control().save_file() + var graph_edit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() + if graph_edit != null: + graph_edit.save_file() func save_material_as(): - $VBoxContainer/HBoxContainer/Projects.get_current_tab_control().save_file_as() + var graph_edit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() + if graph_edit != null: + graph_edit.save_file_as() func close_material(): - $VBoxContainer/HBoxContainer/Projects.get_current_tab_control().queue_free() + var graph_edit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() + if graph_edit != null: + graph_edit.queue_free() + +func export_material(): + var graph_edit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() + if graph_edit != null: + graph_edit.export_textures(1024) func save_icons(): - var graphedit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() - if graphedit != null and graphedit is GraphEdit: - for n in graphedit.get_children(): + var graph_edit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() + if graph_edit != null and graph_edit is GraphEdit: + for n in graph_edit.get_children(): if n is GraphNode and n.selected: - graphedit.export_texture(n, "res://addons/procedural_material/library/icons/"+n.name+".png", 64) + graph_edit.export_texture(n, "res://addons/procedural_material/library/icons/"+n.name+".png", 64) func add_to_user_library(): - var graphedit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() - if graphedit != null and graphedit is GraphEdit: - for n in graphedit.get_children(): + var graph_edit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() + if graph_edit != null and graph_edit is GraphEdit: + for n in graph_edit.get_children(): if n is GraphNode and n.selected: var dialog = preload("res://addons/procedural_material/widgets/line_dialog.tscn").instance() add_child(dialog) @@ -123,8 +134,8 @@ func do_add_to_user_library(name, node): data.library = "user://library/user.json" data.icon = name.right(name.rfind("/")+1).to_lower() $VBoxContainer/HBoxContainer/VBoxContainer/Library.add_item(data, name) - var graphedit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() - graphedit.export_texture(node, "user://library/user/"+data.icon+".png", 64) + var graph_edit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() + graph_edit.export_texture(node, "user://library/user/"+data.icon+".png", 64) func save_user_library(): print("Saving user library") @@ -136,7 +147,9 @@ func quit(): func _on_PopupMenu_id_pressed(id): var node_type = null if MENU[id].has("command"): - call(MENU[id].command) + var command = MENU[id].command + if has_method(command): + call(command) # Preview @@ -147,18 +160,21 @@ func update_preview(): update_preview_2d() func update_preview_2d(node = null): - var graphedit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() + var graph_edit = $VBoxContainer/HBoxContainer/Projects.get_current_tab_control() var preview = $VBoxContainer/HBoxContainer/VBoxContainer/Preview if node == null: - for n in graphedit.get_children(): + for n in graph_edit.get_children(): if n is GraphNode and n.selected: node = n break if node != null: - graphedit.setup_material(preview.get_2d_material(), node.get_textures(), node.generate_shader()) + graph_edit.setup_material(preview.get_2d_material(), node.get_textures(), node.generate_shader()) func _on_Projects_tab_changed(tab): if tab != current_tab: + for c in get_incoming_connections(): + if c.method_name == "update_preview" or c.method_name == "update_preview_2d": + c.source.disconnect(c.signal_name, self, c.method_name) $VBoxContainer/HBoxContainer/Projects.get_current_tab_control().connect("graph_changed", self, "update_preview") $VBoxContainer/HBoxContainer/Projects.get_current_tab_control().connect("node_selected", self, "update_preview_2d") current_tab = tab diff --git a/addons/procedural_material/main_window.tscn b/addons/procedural_material/main_window.tscn index 73fd352..f3e47ee 100644 --- a/addons/procedural_material/main_window.tscn +++ b/addons/procedural_material/main_window.tscn @@ -4,7 +4,7 @@ [ext_resource path="res://addons/procedural_material/library.gd" type="Script" id=2] [ext_resource path="res://addons/procedural_material/preview.tscn" type="PackedScene" id=3] -[node name="MainWindow" type="Panel"] +[node name="MainWindow" type="Panel" index="0"] anchor_left = 0.0 anchor_top = 0.0 diff --git a/addons/procedural_material/node_base.gd b/addons/procedural_material/node_base.gd index 12fbdd8..a29c636 100644 --- a/addons/procedural_material/node_base.gd +++ b/addons/procedural_material/node_base.gd @@ -25,7 +25,9 @@ func _ready(): func initialize_properties(object_list): property_widgets = object_list for o in object_list: - if o is LineEdit: + if o == null: + print("error in node "+name) + elif o is LineEdit: set(o.name, float(o.text)) o.connect("text_changed", self, "_on_text_changed", [ o.name ]) elif o is SpinBox: diff --git a/addons/procedural_material/nodes/material.gd b/addons/procedural_material/nodes/material.gd index 2608c0b..9be1d0f 100644 --- a/addons/procedural_material/nodes/material.gd +++ b/addons/procedural_material/nodes/material.gd @@ -1,12 +1,21 @@ tool extends "res://addons/procedural_material/node_base.gd" -var texture_albedo = null -var texture_metallic = null -var texture_roughness = null -var texture_emission = null -var texture_normal_map = null -var texture_depth_map = null +var albedo_color +var metallic +var roughness +var emission_energy +var normal_scale +var ao_light_affect +var depth_scale + +var texture_albedo = null +var texture_metallic = null +var texture_roughness = null +var texture_emission = null +var texture_normal_map = null +var texture_ambient_occlusion = null +var texture_depth_map = null const TEXTURE_LIST = [ { port= 0, texture= "albedo" }, @@ -14,46 +23,51 @@ const TEXTURE_LIST = [ { port= 2, texture= "roughness" }, { port= 3, texture= "emission" }, { port= 4, texture= "normal_map" }, - { port= 5, texture= "depth_map" } + { port= 5, texture= "ambient_occlusion" }, + { port= 6, texture= "depth_map" } ] func _ready(): - pass + initialize_properties([ $Albedo/albedo_color, $Metallic/metallic, $Roughness/roughness, $Emission/emission_energy, $NormalMap/normal_scale, $AmbientOcclusion/ao_light_affect, $DepthMap/depth_scale ]) func _get_shader_code(uv): var rv = { defs="", code="", f="0.0" } var src = get_source() if src != null: rv = src.get_shader_code(uv) - rv.albedo = get_source_rgb(rv) - src = get_source(1) - if src != null: - var src_code = src.get_shader_code(uv) - rv.defs += src_code.defs - rv.code += src_code.code - rv.normal_map = get_source_rgb(src_code) return rv func _get_state_variables(): return [ ] func update_materials(material_list): + var has_textures = false for t in TEXTURE_LIST: var source = get_source(t.port) if source == null: set("texture_"+t.texture, null) else: get_parent().precalculate_texture(source, 1024, self, "store_texture", [ t.texture, material_list ]) + has_textures = true + if !has_textures: + do_update_materials(material_list) func store_texture(texture_name, material_list, texture): set("texture_"+texture_name, texture) + do_update_materials(material_list) + +func do_update_materials(material_list): for m in material_list: if m is SpatialMaterial: + m.albedo_color = albedo_color m.albedo_texture = texture_albedo + m.metallic = metallic m.metallic_texture = texture_metallic + m.roughness = roughness m.roughness_texture = texture_roughness if texture_emission != null: m.emission_enabled = true + m.emission_energy = emission_energy m.emission_texture = texture_emission else: m.emission_enabled = false @@ -62,8 +76,15 @@ func store_texture(texture_name, material_list, texture): m.normal_texture = texture_normal_map else: m.normal_enabled = false + if texture_ambient_occlusion != null: + m.ao_enabled = true + m.ao_light_affect = ao_light_affect + m.ao_texture = texture_ambient_occlusion + else: + m.ao_enabled = false if texture_depth_map != null: m.depth_enabled = true + m.depth_scale = depth_scale m.depth_texture = texture_depth_map else: m.depth_enabled = false diff --git a/addons/procedural_material/nodes/material.tscn b/addons/procedural_material/nodes/material.tscn index ecd1c2e..3bb0d4f 100644 --- a/addons/procedural_material/nodes/material.tscn +++ b/addons/procedural_material/nodes/material.tscn @@ -5,14 +5,14 @@ [sub_resource type="Theme" id=1] -[node name="Material" type="GraphNode"] +[node name="Material" type="GraphNode" index="0"] anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 -margin_right = 84.0 -margin_bottom = 43.0 +margin_right = 230.0 +margin_bottom = 199.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false mouse_filter = 1 @@ -63,133 +63,482 @@ slot/5/left_color = Color( 0.498039, 0.498039, 1, 1 ) slot/5/right_enabled = false slot/5/right_type = 0 slot/5/right_color = Color( 0.498039, 0.498039, 1, 1 ) +slot/6/left_enabled = true +slot/6/left_type = 0 +slot/6/left_color = Color( 0.494118, 0.494118, 1, 1 ) +slot/6/right_enabled = false +slot/6/right_type = 0 +slot/6/right_color = Color( 0.494118, 0.494118, 1, 1 ) script = ExtResource( 1 ) -_sections_unfolded = [ "Theme", "slot", "slot/2", "slot/3", "slot/4", "slot/5" ] +_sections_unfolded = [ "Theme", "slot" ] -[node name="Label1" type="Label" parent="." index="0"] +[node name="Albedo" type="HBoxContainer" parent="." index="0"] +editor/display_folded = true anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 margin_left = 16.0 margin_top = 24.0 -margin_right = 95.0 -margin_bottom = 38.0 +margin_right = 214.0 +margin_bottom = 44.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="Label" type="Label" parent="Albedo" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 3.0 +margin_right = 114.0 +margin_bottom = 17.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false mouse_filter = 2 mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 +size_flags_horizontal = 3 size_flags_vertical = 4 text = "Albedo" percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] -[node name="Label2" type="Label" parent="." index="1"] +[node name="albedo_color" type="ColorPickerButton" parent="Albedo" index="1"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 118.0 +margin_right = 198.0 +margin_bottom = 20.0 +rect_min_size = Vector2( 80, 0 ) +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +focus_mode = 2 +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +toggle_mode = false +enabled_focus_mode = 2 +shortcut = null +group = null +flat = false +align = 1 +color = Color( 1, 1, 1, 1 ) +edit_alpha = true +_sections_unfolded = [ "Rect", "Size Flags" ] + +[node name="Metallic" type="HBoxContainer" parent="." index="1"] + +editor/display_folded = true anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 margin_left = 16.0 -margin_top = 38.0 -margin_right = 95.0 -margin_bottom = 52.0 +margin_top = 44.0 +margin_right = 214.0 +margin_bottom = 68.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="Label" type="Label" parent="Metallic" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 5.0 +margin_right = 120.0 +margin_bottom = 19.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false mouse_filter = 2 mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 +size_flags_horizontal = 3 size_flags_vertical = 4 text = "Metallic" percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] -[node name="Label3" type="Label" parent="." index="2"] +[node name="metallic" type="SpinBox" parent="Metallic" index="1"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 124.0 +margin_right = 198.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +min_value = 0.0 +max_value = 1.0 +step = 0.05 +page = 0.0 +value = 1.0 +exp_edit = false +rounded = false +editable = true +prefix = "" +suffix = "" +_sections_unfolded = [ "Rect" ] + +[node name="Roughness" type="HBoxContainer" parent="." index="2"] + +editor/display_folded = true anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 margin_left = 16.0 -margin_top = 53.0 -margin_right = 95.0 -margin_bottom = 67.0 +margin_top = 69.0 +margin_right = 214.0 +margin_bottom = 93.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="Label" type="Label" parent="Roughness" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 5.0 +margin_right = 120.0 +margin_bottom = 19.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false mouse_filter = 2 mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 +size_flags_horizontal = 3 size_flags_vertical = 4 text = "Roughness" percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] -[node name="Label4" type="Label" parent="." index="3"] +[node name="roughness" type="SpinBox" parent="Roughness" index="1"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 124.0 +margin_right = 198.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +min_value = 0.0 +max_value = 1.0 +step = 0.05 +page = 0.0 +value = 1.0 +exp_edit = false +rounded = false +editable = true +prefix = "" +suffix = "" +_sections_unfolded = [ "Rect" ] + +[node name="Emission" type="HBoxContainer" parent="." index="3"] + +editor/display_folded = true anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 margin_left = 16.0 -margin_top = 68.0 -margin_right = 95.0 -margin_bottom = 82.0 +margin_top = 94.0 +margin_right = 214.0 +margin_bottom = 118.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="Label" type="Label" parent="Emission" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 5.0 +margin_right = 120.0 +margin_bottom = 19.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false mouse_filter = 2 mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 +size_flags_horizontal = 3 size_flags_vertical = 4 text = "Emission" percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] -[node name="Label5" type="Label" parent="." index="4"] +[node name="emission_energy" type="SpinBox" parent="Emission" index="1"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 124.0 +margin_right = 198.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +min_value = 0.0 +max_value = 5.0 +step = 0.05 +page = 0.0 +value = 1.0 +exp_edit = false +rounded = false +editable = true +prefix = "" +suffix = "" +_sections_unfolded = [ "Rect" ] + +[node name="NormalMap" type="HBoxContainer" parent="." index="4"] + +editor/display_folded = true anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 margin_left = 16.0 -margin_top = 83.0 -margin_right = 95.0 -margin_bottom = 97.0 +margin_top = 119.0 +margin_right = 214.0 +margin_bottom = 143.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="Label" type="Label" parent="NormalMap" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 5.0 +margin_right = 120.0 +margin_bottom = 19.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false mouse_filter = 2 mouse_default_cursor_shape = 0 -size_flags_horizontal = 1 +size_flags_horizontal = 3 size_flags_vertical = 4 text = "Normal map" percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] -[node name="Label6" type="Label" parent="." index="5"] +[node name="normal_scale" type="SpinBox" parent="NormalMap" index="1"] +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 124.0 +margin_right = 198.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +min_value = 0.0 +max_value = 5.0 +step = 0.05 +page = 0.0 +value = 1.0 +exp_edit = false +rounded = false +editable = true +prefix = "" +suffix = "" +_sections_unfolded = [ "Rect" ] + +[node name="AmbientOcclusion" type="HBoxContainer" parent="." index="5"] + +editor/display_folded = true anchor_left = 0.0 anchor_top = 0.0 anchor_right = 0.0 anchor_bottom = 0.0 margin_left = 16.0 -margin_top = 98.0 -margin_right = 95.0 -margin_bottom = 112.0 +margin_top = 144.0 +margin_right = 214.0 +margin_bottom = 168.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="Label" type="Label" parent="AmbientOcclusion" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 5.0 +margin_right = 120.0 +margin_bottom = 19.0 rect_pivot_offset = Vector2( 0, 0 ) rect_clip_content = false mouse_filter = 2 mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 +size_flags_vertical = 4 +text = "Ambient occlusion" +percent_visible = 1.0 +lines_skipped = 0 +max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] + +[node name="ao_light_affect" type="SpinBox" parent="AmbientOcclusion" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 124.0 +margin_right = 198.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 size_flags_horizontal = 1 +size_flags_vertical = 1 +min_value = 0.0 +max_value = 5.0 +step = 0.05 +page = 0.0 +value = 1.0 +exp_edit = false +rounded = false +editable = true +prefix = "" +suffix = "" +_sections_unfolded = [ "Rect" ] + +[node name="DepthMap" type="HBoxContainer" parent="." index="6"] + +editor/display_folded = true +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 16.0 +margin_top = 169.0 +margin_right = 214.0 +margin_bottom = 193.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 1 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +alignment = 0 + +[node name="Label" type="Label" parent="DepthMap" index="0"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_top = 5.0 +margin_right = 120.0 +margin_bottom = 19.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 2 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 3 size_flags_vertical = 4 text = "Depth map" percent_visible = 1.0 lines_skipped = 0 max_lines_visible = -1 +_sections_unfolded = [ "Size Flags" ] + +[node name="depth_scale" type="SpinBox" parent="DepthMap" index="1"] + +anchor_left = 0.0 +anchor_top = 0.0 +anchor_right = 0.0 +anchor_bottom = 0.0 +margin_left = 124.0 +margin_right = 198.0 +margin_bottom = 24.0 +rect_pivot_offset = Vector2( 0, 0 ) +rect_clip_content = false +mouse_filter = 0 +mouse_default_cursor_shape = 0 +size_flags_horizontal = 1 +size_flags_vertical = 1 +min_value = 0.0 +max_value = 5.0 +step = 0.05 +page = 0.0 +value = 1.0 +exp_edit = false +rounded = false +editable = true +prefix = "" +suffix = "" +_sections_unfolded = [ "Rect" ] diff --git a/addons/procedural_material/preview.gd b/addons/procedural_material/preview.gd index a8a3ffc..85712f4 100644 --- a/addons/procedural_material/preview.gd +++ b/addons/procedural_material/preview.gd @@ -25,7 +25,7 @@ func _on_Model_item_selected(id): c.visible = (c.get_name() == model) func get_materials(): - return [ $MaterialPreview/Objects/Cube.get_surface_material(0) ] + return [ $MaterialPreview/Objects/Cube.get_surface_material(0), $MaterialPreview/Objects/Sphere.get_surface_material(0) ] func get_2d_material(): return $Preview2D.material diff --git a/addons/procedural_material/preview.tscn b/addons/procedural_material/preview.tscn index 87df1a4..465babf 100644 --- a/addons/procedural_material/preview.tscn +++ b/addons/procedural_material/preview.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=11 format=2] +[gd_scene load_steps=13 format=2] [ext_resource path="res://addons/procedural_material/preview.gd" type="Script" id=1] [ext_resource path="res://addons/procedural_material/panoramas/park.hdr" type="Texture" id=2] @@ -73,10 +73,15 @@ normal_enabled = false rim_enabled = false clearcoat_enabled = false anisotropy_enabled = false -ao_enabled = false +ao_enabled = true +ao_light_affect = 0.0 +ao_on_uv2 = false +ao_texture_channel = 0 depth_enabled = true -depth_scale = 0.05 -depth_deep_parallax = false +depth_scale = 0.5 +depth_deep_parallax = true +depth_min_layers = 8 +depth_max_layers = 32 subsurf_scatter_enabled = false transmission_enabled = false refraction_enabled = false @@ -91,7 +96,7 @@ uv2_triplanar = false uv2_triplanar_sharpness = 1.0 proximity_fade_enable = false distance_fade_enable = false -_sections_unfolded = [ "Depth", "Metallic" ] +_sections_unfolded = [ "Ambient Occlusion", "Depth" ] [sub_resource type="ArrayMesh" id=4] @@ -110,15 +115,83 @@ surfaces/0 = { } _sections_unfolded = [ "surface_1" ] -[sub_resource type="PanoramaSky" id=5] +[sub_resource type="SphereMesh" id=5] + +custom_aabb = AABB( 0, 0, 0, 0, 0, 0 ) +radius = 1.5 +height = 3.0 +radial_segments = 64 +rings = 32 +is_hemisphere = false + +[sub_resource type="SpatialMaterial" id=6] + +render_priority = 0 +flags_transparent = false +flags_unshaded = false +flags_vertex_lighting = false +flags_no_depth_test = false +flags_use_point_size = false +flags_world_triplanar = false +flags_fixed_size = false +flags_albedo_tex_force_srgb = false +vertex_color_use_as_albedo = false +vertex_color_is_srgb = false +params_diffuse_mode = 0 +params_specular_mode = 0 +params_blend_mode = 0 +params_cull_mode = 0 +params_depth_draw_mode = 0 +params_line_width = 1.0 +params_point_size = 1.0 +params_billboard_mode = 0 +params_grow = false +params_use_alpha_scissor = false +albedo_color = Color( 1, 1, 1, 1 ) +metallic = 1.0 +metallic_specular = 1.0 +metallic_texture_channel = 0 +roughness = 1.0 +roughness_texture_channel = 0 +emission_enabled = false +normal_enabled = false +rim_enabled = false +clearcoat_enabled = false +anisotropy_enabled = false +ao_enabled = true +ao_light_affect = 0.0 +ao_on_uv2 = false +ao_texture_channel = 0 +depth_enabled = true +depth_scale = 0.5 +depth_deep_parallax = true +depth_min_layers = 8 +depth_max_layers = 32 +subsurf_scatter_enabled = false +transmission_enabled = false +refraction_enabled = false +detail_enabled = false +uv1_scale = Vector3( -5, -5, 5 ) +uv1_offset = Vector3( 0, 0, 0 ) +uv1_triplanar = false +uv1_triplanar_sharpness = 1.0 +uv2_scale = Vector3( 1, 1, 1 ) +uv2_offset = Vector3( 0, 0, 0 ) +uv2_triplanar = false +uv2_triplanar_sharpness = 1.0 +proximity_fade_enable = false +distance_fade_enable = false +_sections_unfolded = [ "Ambient Occlusion", "Depth", "UV1" ] + +[sub_resource type="PanoramaSky" id=7] radiance_size = 2 panorama = ExtResource( 2 ) -[sub_resource type="Environment" id=6] +[sub_resource type="Environment" id=8] background_mode = 2 -background_sky = SubResource( 5 ) +background_sky = SubResource( 7 ) background_sky_custom_fov = 0.0 background_color = Color( 0, 0, 0, 1 ) background_energy = 1.0 @@ -195,15 +268,15 @@ adjustment_contrast = 1.0 adjustment_saturation = 1.0 _sections_unfolded = [ "Background" ] -[sub_resource type="Shader" id=7] +[sub_resource type="Shader" id=9] code = "shader_type canvas_item; " -[sub_resource type="ShaderMaterial" id=8] +[sub_resource type="ShaderMaterial" id=10] render_priority = 0 -shader = SubResource( 7 ) +shader = SubResource( 9 ) [node name="Preview" type="ViewportContainer"] @@ -267,7 +340,7 @@ _sections_unfolded = [ "GUI", "Render Target" ] [node name="Objects" type="Spatial" parent="MaterialPreview" index="0"] -transform = Transform( -0.376032, 0, -0.926603, 0, 1, 0, 0.926603, 0, -0.376032, 0, 0, 0 ) +transform = Transform( -0.407451, 0, -0.913223, 0, 1, 0, 0.913223, 0, -0.407451, 0, 0, 0 ) _sections_unfolded = [ "Transform" ] [node name="Cube" type="MeshInstance" parent="MaterialPreview/Objects" index="0"] @@ -303,6 +376,23 @@ skeleton = NodePath("..") material/0 = SubResource( 3 ) _sections_unfolded = [ "Geometry", "Transform", "material" ] +[node name="Sphere" type="MeshInstance" parent="MaterialPreview/Objects" index="2"] + +visible = false +layers = 1 +material_override = null +cast_shadow = 1 +extra_cull_margin = 0.0 +use_in_baked_light = false +lod_min_distance = 0.0 +lod_min_hysteresis = 0.0 +lod_max_distance = 0.0 +lod_max_hysteresis = 0.0 +mesh = SubResource( 5 ) +skeleton = NodePath("..") +material/0 = SubResource( 6 ) +_sections_unfolded = [ "Geometry", "Transform", "material" ] + [node name="OmniLight" type="OmniLight" parent="MaterialPreview" index="1"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 1.04729, 1.80471, -2.51024 ) @@ -331,7 +421,7 @@ _sections_unfolded = [ "Shadow" ] transform = Transform( 1, 0, 0, 0, 0.766044, 0.642787, 0, -0.642787, 0.766044, 0, 1.83022, 2.2549 ) keep_aspect = 1 cull_mask = 1048575 -environment = SubResource( 6 ) +environment = SubResource( 8 ) h_offset = 0.0 v_offset = 0.0 doppler_tracking = 0 @@ -345,11 +435,10 @@ _sections_unfolded = [ "Transform" ] [node name="WorldEnvironment" type="WorldEnvironment" parent="MaterialPreview" index="3"] -environment = SubResource( 6 ) +environment = SubResource( 8 ) [node name="Config" type="HBoxContainer" parent="." index="2"] -editor/display_folded = true anchor_left = 0.0 anchor_top = 0.0 anchor_right = 1.0 @@ -387,7 +476,7 @@ group = null text = "Cube" flat = false align = 0 -items = [ "Cube", null, false, 0, null, "Cylinder", null, false, 1, null ] +items = [ "Cube", null, false, 0, null, "Cylinder", null, false, 1, null, "Sphere", null, false, 2, null ] selected = 0 _sections_unfolded = [ "Margin", "Rect" ] @@ -422,7 +511,7 @@ _sections_unfolded = [ "Rect" ] [node name="Preview2D" type="ColorRect" parent="." index="3"] -material = SubResource( 8 ) +material = SubResource( 10 ) anchor_left = 0.0 anchor_top = 1.0 anchor_right = 0.0 diff --git a/examples/bricks.ptex b/examples/bricks.ptex index c6ff8f9..d9f6643 100644 --- a/examples/bricks.ptex +++ b/examples/bricks.ptex @@ -1 +1 @@ -{"connections":[{"from":"Perlin","from_port":0,"to":"Warp","to_port":1},{"from":"Warp","from_port":0,"to":"colorize_2","to_port":0},{"from":"colorize_2","from_port":0,"to":"blend_0","to_port":2},{"from":"colorize_1","from_port":0,"to":"blend_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"blend_0","to_port":1},{"from":"blend_0","from_port":0,"to":"Material","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"colorize_2","from_port":0,"to":"colorize_4","to_port":0},{"from":"colorize_4","from_port":0,"to":"Material","to_port":2},{"from":"Bricks","from_port":0,"to":"Warp","to_port":0},{"from":"blend_1","from_port":0,"to":"colorize_1","to_port":0},{"from":"Bricks","from_port":1,"to":"blend_1","to_port":1},{"from":"Warp","from_port":0,"to":"blend_2","to_port":0},{"from":"Perlin","from_port":0,"to":"blend_2","to_port":1},{"from":"blend_2","from_port":0,"to":"colorize_3","to_port":0},{"from":"blend_2","from_port":0,"to":"colorize_6","to_port":0},{"from":"colorize_6","from_port":0,"to":"normal_map_0","to_port":0},{"from":"Perlin","from_port":0,"to":"blend_1","to_port":0},{"from":"Perlin","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_3","from_port":0,"to":"Material","to_port":5},{"from":"uniform_0","from_port":0,"to":"Material","to_port":1}],"nodes":[{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":1,"g":1,"pos":1,"r":1}],"name":"colorize_0","node_position":{"x":560.943665,"y":50},"type":"colorize"},{"gradient":[{"b":0.0016,"g":0.0016,"pos":0,"r":0.307292},{"b":0,"g":0.180135,"pos":0.2,"r":0.606771},{"b":0,"g":0,"pos":0.345455,"r":0.3125},{"b":0,"g":0.19869,"pos":0.545455,"r":0.669271},{"b":0.019368,"g":0.060224,"pos":0.736364,"r":0.309896},{"b":0,"g":0.180135,"pos":1,"r":0.606771}],"name":"colorize_1","node_position":{"x":562.943665,"y":-65},"type":"colorize"},{"bevel":0.2,"columns":3,"mortar":0.05,"name":"Bricks","node_position":{"x":118,"y":-22},"row_offset":0.5,"rows":6,"type":"bricks"},{"amount":0.04,"name":"Warp","node_position":{"x":384,"y":10.75},"type":"warp"},{"name":"Material","node_position":{"x":1081,"y":208},"type":"material"},{"gradient":[{"b":1,"g":1,"pos":0,"r":1},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_6","node_position":{"x":743,"y":291},"type":"colorize"},{"amount":0.5,"blend_type":0,"name":"blend_2","node_position":{"x":536,"y":331},"type":"blend"},{"gradient":[{"b":1,"g":1,"pos":0,"r":1},{"b":0.463542,"g":0.463542,"pos":1,"r":0.463542}],"name":"colorize_4","node_position":{"x":708,"y":224},"type":"colorize"},{"amount":0.5,"blend_type":0,"name":"blend_0","node_position":{"x":836.943726,"y":-71},"type":"blend"},{"gradient":[{"b":0.289063,"g":0.289063,"pos":0,"r":0.289063},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_3","node_position":{"x":774,"y":400},"type":"colorize"},{"color":{"a":1,"b":0,"g":0,"r":0,"type":"Color"},"name":"uniform_0","node_position":{"x":892,"y":179},"type":"uniform"},{"amount":0.5,"name":"normal_map_0","node_position":{"x":913,"y":278},"type":"normal_map"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":1,"g":1,"pos":0.1,"r":1}],"name":"colorize_2","node_position":{"x":544.943665,"y":159},"type":"colorize"},{"amount":0.5,"blend_type":6,"name":"blend_1","node_position":{"x":349,"y":215},"type":"blend"},{"iterations":6,"name":"Perlin","node_position":{"x":115,"y":194},"persistence":0.85,"scale_x":4,"scale_y":4,"type":"perlin"}]} \ No newline at end of file +{"connections":[{"from":"Perlin","from_port":0,"to":"Warp","to_port":1},{"from":"Warp","from_port":0,"to":"colorize_2","to_port":0},{"from":"colorize_2","from_port":0,"to":"blend_0","to_port":2},{"from":"colorize_1","from_port":0,"to":"blend_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"blend_0","to_port":1},{"from":"blend_0","from_port":0,"to":"Material","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"colorize_2","from_port":0,"to":"colorize_4","to_port":0},{"from":"colorize_4","from_port":0,"to":"Material","to_port":2},{"from":"Bricks","from_port":0,"to":"Warp","to_port":0},{"from":"blend_1","from_port":0,"to":"colorize_1","to_port":0},{"from":"Bricks","from_port":1,"to":"blend_1","to_port":1},{"from":"Warp","from_port":0,"to":"blend_2","to_port":0},{"from":"Perlin","from_port":0,"to":"blend_2","to_port":1},{"from":"blend_2","from_port":0,"to":"colorize_3","to_port":0},{"from":"blend_2","from_port":0,"to":"colorize_6","to_port":0},{"from":"colorize_6","from_port":0,"to":"normal_map_0","to_port":0},{"from":"Perlin","from_port":0,"to":"blend_1","to_port":0},{"from":"Perlin","from_port":0,"to":"colorize_0","to_port":0},{"from":"uniform_0","from_port":0,"to":"Material","to_port":1},{"from":"colorize_3","from_port":0,"to":"Material","to_port":5}],"nodes":[{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":1,"g":1,"pos":1,"r":1}],"name":"colorize_0","node_position":{"x":560.943665,"y":50},"type":"colorize"},{"gradient":[{"b":0.0016,"g":0.0016,"pos":0,"r":0.307292},{"b":0,"g":0.180135,"pos":0.2,"r":0.606771},{"b":0,"g":0,"pos":0.363636,"r":0.3125},{"b":0,"g":0.19869,"pos":0.563636,"r":0.669271},{"b":0.019368,"g":0.060224,"pos":0.763636,"r":0.309896},{"b":0,"g":0.180135,"pos":1,"r":0.606771}],"name":"colorize_1","node_position":{"x":562.943665,"y":-65},"type":"colorize"},{"bevel":0.2,"columns":3,"mortar":0.05,"name":"Bricks","node_position":{"x":118,"y":-22},"row_offset":0.5,"rows":6,"type":"bricks"},{"amount":0.04,"name":"Warp","node_position":{"x":384,"y":10.75},"type":"warp"},{"albedo_color":{"a":1,"b":1,"g":1,"r":1,"type":"Color"},"ao_light_affect":1,"depth_scale":0,"emission_energy":1,"metallic":1,"name":"Material","node_position":{"x":1081,"y":208},"normal_scale":1,"roughness":1,"type":"material"},{"amount":0.5,"blend_type":0,"name":"blend_2","node_position":{"x":536,"y":331},"type":"blend"},{"gradient":[{"b":1,"g":1,"pos":0,"r":1},{"b":0.463542,"g":0.463542,"pos":1,"r":0.463542}],"name":"colorize_4","node_position":{"x":708,"y":224},"type":"colorize"},{"amount":0.5,"blend_type":0,"name":"blend_0","node_position":{"x":836.943726,"y":-71},"type":"blend"},{"color":{"a":1,"b":0,"g":0,"r":0,"type":"Color"},"name":"uniform_0","node_position":{"x":892,"y":179},"type":"uniform"},{"amount":0.5,"name":"normal_map_0","node_position":{"x":913,"y":278},"type":"normal_map"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":1,"g":1,"pos":0.1,"r":1}],"name":"colorize_2","node_position":{"x":544.943665,"y":159},"type":"colorize"},{"amount":0.5,"blend_type":6,"name":"blend_1","node_position":{"x":349,"y":215},"type":"blend"},{"iterations":6,"name":"Perlin","node_position":{"x":115,"y":194},"persistence":0.85,"scale_x":4,"scale_y":4,"type":"perlin"},{"gradient":[{"b":1,"g":1,"pos":0,"r":1},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_6","node_position":{"x":743,"y":291},"type":"colorize"},{"gradient":[{"b":0.677083,"g":0.677083,"pos":0.254545,"r":0.677083},{"b":1,"g":1,"pos":0.536364,"r":1}],"name":"colorize_3","node_position":{"x":753,"y":364},"type":"colorize"}]} \ No newline at end of file diff --git a/examples/crocodile_skin.ptex b/examples/crocodile_skin.ptex index 3606cad..55d81fc 100644 --- a/examples/crocodile_skin.ptex +++ b/examples/crocodile_skin.ptex @@ -1 +1 @@ -{"connections":[{"from":"voronoi_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"voronoi_0","from_port":0,"to":"colorize_1","to_port":0},{"from":"colorize_1","from_port":0,"to":"Material","to_port":0},{"from":"voronoi_0","from_port":0,"to":"colorize_3","to_port":0},{"from":"colorize_3","from_port":0,"to":"Material","to_port":2},{"from":"uniform_0","from_port":0,"to":"Material","to_port":1}],"nodes":[{"name":"Material","node_position":{"x":674,"y":164},"type":"material"},{"gradient":[{"b":0.010715,"g":0.411458,"pos":0,"r":0.22361},{"b":0,"g":1,"pos":1,"r":0.9375}],"name":"colorize_1","node_position":{"x":384,"y":137},"type":"colorize"},{"gradient":[{"b":0.505208,"g":0.505208,"pos":0,"r":0.505208},{"b":0.78125,"g":0.78125,"pos":1,"r":0.78125}],"name":"colorize_3","node_position":{"x":384,"y":258},"type":"colorize"},{"color":{"a":1,"b":0,"g":0,"r":0,"type":"Color"},"name":"uniform_0","node_position":{"x":413,"y":208},"type":"uniform"},{"intensity":0.4,"name":"voronoi_0","node_position":{"x":71,"y":216},"scale_x":16,"scale_y":16,"type":"voronoi"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":0.5,"g":0.5,"pos":0.345455,"r":0.5},{"b":1,"g":1,"pos":0.618182,"r":1}],"name":"colorize_0","node_position":{"x":300,"y":330},"type":"colorize"},{"amount":0.5,"name":"normal_map_0","node_position":{"x":479,"y":334},"type":"normal_map"}]} \ No newline at end of file +{"connections":[{"from":"voronoi_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"voronoi_0","from_port":0,"to":"colorize_1","to_port":0},{"from":"colorize_1","from_port":0,"to":"Material","to_port":0},{"from":"voronoi_0","from_port":0,"to":"colorize_3","to_port":0},{"from":"colorize_3","from_port":0,"to":"Material","to_port":2},{"from":"uniform_0","from_port":0,"to":"Material","to_port":1}],"nodes":[{"albedo_color":{"a":1,"b":1,"g":1,"r":1,"type":"Color"},"emission_energy":1,"metallic":1,"name":"Material","node_position":{"x":674,"y":164},"roughness":1,"type":"material"},{"gradient":[{"b":0.010715,"g":0.411458,"pos":0,"r":0.22361},{"b":0,"g":1,"pos":1,"r":0.9375}],"name":"colorize_1","node_position":{"x":384,"y":137},"type":"colorize"},{"gradient":[{"b":0.505208,"g":0.505208,"pos":0,"r":0.505208},{"b":0.78125,"g":0.78125,"pos":1,"r":0.78125}],"name":"colorize_3","node_position":{"x":384,"y":258},"type":"colorize"},{"color":{"a":1,"b":0,"g":0,"r":0,"type":"Color"},"name":"uniform_0","node_position":{"x":413,"y":208},"type":"uniform"},{"intensity":0.4,"name":"voronoi_0","node_position":{"x":71,"y":216},"scale_x":16,"scale_y":16,"type":"voronoi"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":0.5,"g":0.5,"pos":0.345455,"r":0.5},{"b":1,"g":1,"pos":0.618182,"r":1}],"name":"colorize_0","node_position":{"x":300,"y":330},"type":"colorize"},{"amount":0.5,"name":"normal_map_0","node_position":{"x":479,"y":334},"type":"normal_map"}]} \ No newline at end of file diff --git a/examples/dry_earth.ptex b/examples/dry_earth.ptex index 4f2de30..7354ea9 100644 --- a/examples/dry_earth.ptex +++ b/examples/dry_earth.ptex @@ -1 +1 @@ -{"connections":[{"from":"perlin_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"voronoi_0","from_port":1,"to":"colorize_1","to_port":0},{"from":"colorize_0","from_port":0,"to":"blend_0","to_port":1},{"from":"blend_0","from_port":0,"to":"Material","to_port":0},{"from":"colorize_1","from_port":0,"to":"warp_0","to_port":0},{"from":"perlin_1","from_port":0,"to":"warp_0","to_port":1},{"from":"warp_0","from_port":0,"to":"blend_0","to_port":0},{"from":"colorize_3","from_port":0,"to":"Material","to_port":1},{"from":"perlin_1","from_port":0,"to":"colorize_3","to_port":0},{"from":"warp_0","from_port":0,"to":"colorize_4","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"colorize_4","from_port":0,"to":"blend_1","to_port":1},{"from":"blend_1","from_port":0,"to":"normal_map_0","to_port":0},{"from":"perlin_0","from_port":0,"to":"blend_1","to_port":0},{"from":"uniform_0","from_port":0,"to":"Material","to_port":2}],"nodes":[{"intensity":0.6,"name":"voronoi_0","node_position":{"x":-165,"y":-96.75},"scale_x":4,"scale_y":4,"type":"voronoi"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":1,"g":1,"pos":0.072727,"r":1}],"name":"colorize_1","node_position":{"x":93,"y":-117.75},"type":"colorize"},{"iterations":3,"name":"perlin_1","node_position":{"x":-144,"y":50.25},"persistence":0.5,"scale_x":4,"scale_y":4,"type":"perlin"},{"gradient":[{"b":0.200277,"g":0.378784,"pos":0.245455,"r":0.557292},{"b":0.03776,"g":0.150513,"pos":0.654545,"r":0.25}],"name":"colorize_0","node_position":{"x":338,"y":-237.75},"type":"colorize"},{"iterations":10,"name":"perlin_0","node_position":{"x":56,"y":-361.75},"persistence":0.9,"scale_x":2,"scale_y":2,"type":"perlin"},{"name":"Material","node_position":{"x":786,"y":53},"type":"material"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":0.171875,"g":0.171875,"pos":1,"r":0.171875}],"name":"colorize_3","node_position":{"x":465,"y":33.25},"type":"colorize"},{"amount":0.4,"blend_type":2,"name":"blend_0","node_position":{"x":541,"y":-82.75},"type":"blend"},{"amount":0.4,"name":"warp_0","node_position":{"x":264,"y":-13.75},"type":"warp"},{"color":{"a":1,"b":1,"g":1,"r":1,"type":"Color"},"name":"uniform_0","node_position":{"x":490,"y":110},"type":"uniform"},{"amount":0.5,"blend_type":0,"name":"blend_1","node_position":{"x":458,"y":173.25},"type":"blend"},{"amount":0.35,"name":"normal_map_0","node_position":{"x":639,"y":147.25},"type":"normal_map"},{"gradient":[{"b":1,"g":1,"pos":0,"r":1},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_4","node_position":{"x":252,"y":178.25},"type":"colorize"}]} \ No newline at end of file +{"connections":[{"from":"perlin_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"voronoi_0","from_port":1,"to":"colorize_1","to_port":0},{"from":"colorize_0","from_port":0,"to":"blend_0","to_port":1},{"from":"blend_0","from_port":0,"to":"Material","to_port":0},{"from":"colorize_1","from_port":0,"to":"warp_0","to_port":0},{"from":"perlin_1","from_port":0,"to":"warp_0","to_port":1},{"from":"warp_0","from_port":0,"to":"blend_0","to_port":0},{"from":"colorize_3","from_port":0,"to":"Material","to_port":1},{"from":"perlin_1","from_port":0,"to":"colorize_3","to_port":0},{"from":"warp_0","from_port":0,"to":"colorize_4","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"colorize_4","from_port":0,"to":"blend_1","to_port":1},{"from":"blend_1","from_port":0,"to":"normal_map_0","to_port":0},{"from":"perlin_0","from_port":0,"to":"blend_1","to_port":0}],"nodes":[{"intensity":0.6,"name":"voronoi_0","node_position":{"x":-165,"y":-96.75},"scale_x":4,"scale_y":4,"type":"voronoi"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":1,"g":1,"pos":0.063636,"r":1}],"name":"colorize_1","node_position":{"x":93,"y":-117.75},"type":"colorize"},{"iterations":3,"name":"perlin_1","node_position":{"x":-144,"y":50.25},"persistence":0.5,"scale_x":4,"scale_y":4,"type":"perlin"},{"gradient":[{"b":0.200277,"g":0.378784,"pos":0.245455,"r":0.557292},{"b":0.03776,"g":0.150513,"pos":0.645455,"r":0.25}],"name":"colorize_0","node_position":{"x":338,"y":-237.75},"type":"colorize"},{"iterations":10,"name":"perlin_0","node_position":{"x":56,"y":-361.75},"persistence":0.9,"scale_x":2,"scale_y":2,"type":"perlin"},{"albedo_color":{"a":1,"b":1,"g":1,"r":1,"type":"Color"},"emission_energy":1,"metallic":1,"name":"Material","node_position":{"x":786,"y":53},"roughness":1,"type":"material"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":0.520833,"g":0.520833,"pos":1,"r":0.520833}],"name":"colorize_3","node_position":{"x":465,"y":33.25},"type":"colorize"},{"amount":0.4,"blend_type":2,"name":"blend_0","node_position":{"x":541,"y":-82.75},"type":"blend"},{"amount":0.4,"name":"warp_0","node_position":{"x":264,"y":-13.75},"type":"warp"},{"amount":0.5,"blend_type":0,"name":"blend_1","node_position":{"x":458,"y":173.25},"type":"blend"},{"amount":0.35,"name":"normal_map_0","node_position":{"x":639,"y":147.25},"type":"normal_map"},{"gradient":[{"b":1,"g":1,"pos":0,"r":1},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_4","node_position":{"x":252,"y":178.25},"type":"colorize"}]} \ No newline at end of file diff --git a/examples/floor1.ptex b/examples/floor1.ptex index eeae806..fb9f695 100644 --- a/examples/floor1.ptex +++ b/examples/floor1.ptex @@ -1 +1 @@ -{"connections":[{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"pattern_0","from_port":0,"to":"transform_0","to_port":0},{"from":"transform_0","from_port":0,"to":"transform_1","to_port":0},{"from":"transform_0","from_port":0,"to":"blend_0","to_port":0},{"from":"transform_1","from_port":0,"to":"blend_0","to_port":1},{"from":"blend_0","from_port":0,"to":"transform_2","to_port":0},{"from":"transform_2","from_port":0,"to":"colorize_2","to_port":0},{"from":"bricks_0","from_port":0,"to":"blend_1","to_port":0},{"from":"colorize_2","from_port":0,"to":"blend_1","to_port":1},{"from":"blend_1","from_port":0,"to":"blend_2","to_port":0},{"from":"transform_2","from_port":0,"to":"colorize_3","to_port":0},{"from":"colorize_3","from_port":0,"to":"blend_2","to_port":1},{"from":"perlin_1","from_port":0,"to":"colorize_5","to_port":0},{"from":"perlin_1","from_port":0,"to":"colorize_6","to_port":0},{"from":"colorize_5","from_port":0,"to":"blend_3","to_port":0},{"from":"colorize_6","from_port":0,"to":"blend_3","to_port":1},{"from":"blend_1","from_port":0,"to":"blend_3","to_port":2},{"from":"blend_2","from_port":0,"to":"blend_4","to_port":1},{"from":"perlin_1","from_port":0,"to":"blend_4","to_port":0},{"from":"uniform_0","from_port":0,"to":"Material","to_port":1},{"from":"uniform_1","from_port":0,"to":"Material","to_port":2},{"from":"blend_4","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"perlin_1","from_port":0,"to":"colorize_1","to_port":0},{"from":"blend_5","from_port":0,"to":"Material","to_port":0},{"from":"colorize_3","from_port":0,"to":"blend_5","to_port":2},{"from":"blend_3","from_port":0,"to":"blend_5","to_port":1},{"from":"colorize_1","from_port":0,"to":"blend_5","to_port":0}],"nodes":[{"name":"Material","node_position":{"x":916,"y":424},"type":"material"},{"mix":0,"name":"pattern_0","node_position":{"x":-358,"y":630},"type":"pattern","x_scale":1,"x_wave":0,"y_scale":1,"y_wave":0},{"name":"transform_0","node_position":{"x":-349,"y":730},"repeat":false,"rotate":0,"scale_x":0.5,"scale_y":1,"translate_x":0,"translate_y":0,"type":"transform"},{"name":"transform_1","node_position":{"x":-147,"y":781},"repeat":true,"rotate":90,"scale_x":1,"scale_y":1,"translate_x":0,"translate_y":0,"type":"transform"},{"amount":1,"blend_type":9,"name":"blend_0","node_position":{"x":-127,"y":673},"type":"blend"},{"name":"transform_2","node_position":{"x":49,"y":634},"repeat":true,"rotate":0,"scale_x":0.5,"scale_y":0.5,"translate_x":0,"translate_y":0,"type":"transform"},{"bevel":0.05,"columns":6,"mortar":0.05,"name":"bricks_0","node_position":{"x":-146,"y":455},"row_offset":0,"rows":6,"type":"bricks"},{"gradient":[{"b":1,"g":1,"pos":0.5,"r":1},{"b":0,"g":0,"pos":0.6,"r":0}],"name":"colorize_2","node_position":{"x":63,"y":549},"type":"colorize"},{"iterations":7,"name":"perlin_1","node_position":{"x":-146,"y":108},"persistence":0.95,"scale_x":4,"scale_y":4,"type":"perlin"},{"amount":0.65,"name":"normal_map_0","node_position":{"x":706,"y":533},"type":"normal_map"},{"color":{"a":1,"b":0.554688,"g":0.554688,"r":0.554688,"type":"Color"},"name":"uniform_1","node_position":{"x":727.308594,"y":472},"type":"uniform"},{"gradient":[{"b":1,"g":1,"pos":0,"r":1},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_0","node_position":{"x":630.308655,"y":598},"type":"colorize"},{"gradient":[{"b":0,"g":0.071615,"pos":0,"r":0.208333},{"b":0,"g":0.42041,"pos":0.936364,"r":0.640625}],"name":"colorize_5","node_position":{"x":95,"y":85},"type":"colorize"},{"gradient":[{"b":0.583333,"g":0.583333,"pos":0,"r":0.583333},{"b":0.244792,"g":0.244792,"pos":1,"r":0.244792}],"name":"colorize_6","node_position":{"x":95,"y":159},"type":"colorize"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0.78125},{"b":0,"g":0,"pos":1,"r":0.25}],"name":"colorize_1","node_position":{"x":101.308655,"y":249},"type":"colorize"},{"amount":1,"blend_type":9,"name":"blend_2","node_position":{"x":294,"y":514},"type":"blend"},{"amount":1,"blend_type":10,"name":"blend_1","node_position":{"x":115,"y":425},"type":"blend"},{"gradient":[{"b":0,"g":0,"pos":0.609091,"r":0},{"b":1,"g":1,"pos":0.672727,"r":1}],"name":"colorize_3","node_position":{"x":280,"y":637},"type":"colorize"},{"amount":0.5,"blend_type":0,"name":"blend_3","node_position":{"x":294.308655,"y":144},"type":"blend"},{"amount":0.5,"blend_type":0,"name":"blend_5","node_position":{"x":490.308655,"y":309},"type":"blend"},{"color":{"a":1,"b":0,"g":0,"r":0,"type":"Color"},"name":"uniform_0","node_position":{"x":700.308594,"y":404},"type":"uniform"},{"amount":0.5,"blend_type":0,"name":"blend_4","node_position":{"x":489.308655,"y":477},"type":"blend"}]} \ No newline at end of file +{"connections":[{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"pattern_0","from_port":0,"to":"transform_0","to_port":0},{"from":"transform_0","from_port":0,"to":"transform_1","to_port":0},{"from":"transform_0","from_port":0,"to":"blend_0","to_port":0},{"from":"transform_1","from_port":0,"to":"blend_0","to_port":1},{"from":"blend_0","from_port":0,"to":"transform_2","to_port":0},{"from":"transform_2","from_port":0,"to":"colorize_2","to_port":0},{"from":"bricks_0","from_port":0,"to":"blend_1","to_port":0},{"from":"colorize_2","from_port":0,"to":"blend_1","to_port":1},{"from":"blend_1","from_port":0,"to":"blend_2","to_port":0},{"from":"transform_2","from_port":0,"to":"colorize_3","to_port":0},{"from":"colorize_3","from_port":0,"to":"blend_2","to_port":1},{"from":"perlin_1","from_port":0,"to":"colorize_5","to_port":0},{"from":"perlin_1","from_port":0,"to":"colorize_6","to_port":0},{"from":"colorize_5","from_port":0,"to":"blend_3","to_port":0},{"from":"colorize_6","from_port":0,"to":"blend_3","to_port":1},{"from":"blend_1","from_port":0,"to":"blend_3","to_port":2},{"from":"blend_2","from_port":0,"to":"blend_4","to_port":1},{"from":"perlin_1","from_port":0,"to":"blend_4","to_port":0},{"from":"uniform_0","from_port":0,"to":"Material","to_port":1},{"from":"uniform_1","from_port":0,"to":"Material","to_port":2},{"from":"blend_4","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"perlin_1","from_port":0,"to":"colorize_1","to_port":0},{"from":"blend_5","from_port":0,"to":"Material","to_port":0},{"from":"colorize_3","from_port":0,"to":"blend_5","to_port":2},{"from":"blend_3","from_port":0,"to":"blend_5","to_port":1},{"from":"colorize_1","from_port":0,"to":"blend_5","to_port":0}],"nodes":[{"albedo_color":{"a":1,"b":1,"g":1,"r":1,"type":"Color"},"emission_energy":1,"metallic":1,"name":"Material","node_position":{"x":916,"y":424},"roughness":1,"type":"material"},{"mix":0,"name":"pattern_0","node_position":{"x":-358,"y":630},"type":"pattern","x_scale":1,"x_wave":0,"y_scale":1,"y_wave":0},{"name":"transform_0","node_position":{"x":-349,"y":730},"repeat":false,"rotate":0,"scale_x":0.5,"scale_y":1,"translate_x":0,"translate_y":0,"type":"transform"},{"name":"transform_1","node_position":{"x":-147,"y":781},"repeat":true,"rotate":90,"scale_x":1,"scale_y":1,"translate_x":0,"translate_y":0,"type":"transform"},{"amount":1,"blend_type":9,"name":"blend_0","node_position":{"x":-127,"y":673},"type":"blend"},{"name":"transform_2","node_position":{"x":49,"y":634},"repeat":true,"rotate":0,"scale_x":0.5,"scale_y":0.5,"translate_x":0,"translate_y":0,"type":"transform"},{"bevel":0.05,"columns":6,"mortar":0.05,"name":"bricks_0","node_position":{"x":-146,"y":455},"row_offset":0,"rows":6,"type":"bricks"},{"gradient":[{"b":1,"g":1,"pos":0.5,"r":1},{"b":0,"g":0,"pos":0.6,"r":0}],"name":"colorize_2","node_position":{"x":63,"y":549},"type":"colorize"},{"iterations":7,"name":"perlin_1","node_position":{"x":-146,"y":108},"persistence":0.95,"scale_x":4,"scale_y":4,"type":"perlin"},{"amount":0.65,"name":"normal_map_0","node_position":{"x":706,"y":533},"type":"normal_map"},{"color":{"a":1,"b":0.554688,"g":0.554688,"r":0.554688,"type":"Color"},"name":"uniform_1","node_position":{"x":727.308594,"y":472},"type":"uniform"},{"gradient":[{"b":1,"g":1,"pos":0,"r":1},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_0","node_position":{"x":630.308655,"y":598},"type":"colorize"},{"gradient":[{"b":0,"g":0.071615,"pos":0,"r":0.208333},{"b":0,"g":0.42041,"pos":0.936364,"r":0.640625}],"name":"colorize_5","node_position":{"x":95,"y":85},"type":"colorize"},{"gradient":[{"b":0.583333,"g":0.583333,"pos":0,"r":0.583333},{"b":0.244792,"g":0.244792,"pos":1,"r":0.244792}],"name":"colorize_6","node_position":{"x":95,"y":159},"type":"colorize"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0.78125},{"b":0,"g":0,"pos":1,"r":0.25}],"name":"colorize_1","node_position":{"x":101.308655,"y":249},"type":"colorize"},{"amount":1,"blend_type":9,"name":"blend_2","node_position":{"x":294,"y":514},"type":"blend"},{"amount":1,"blend_type":10,"name":"blend_1","node_position":{"x":115,"y":425},"type":"blend"},{"gradient":[{"b":0,"g":0,"pos":0.609091,"r":0},{"b":1,"g":1,"pos":0.663636,"r":1}],"name":"colorize_3","node_position":{"x":280,"y":637},"type":"colorize"},{"amount":0.5,"blend_type":0,"name":"blend_3","node_position":{"x":294.308655,"y":144},"type":"blend"},{"amount":0.5,"blend_type":0,"name":"blend_5","node_position":{"x":490.308655,"y":309},"type":"blend"},{"color":{"a":1,"b":0,"g":0,"r":0,"type":"Color"},"name":"uniform_0","node_position":{"x":700.308594,"y":404},"type":"uniform"},{"amount":0.5,"blend_type":0,"name":"blend_4","node_position":{"x":489.308655,"y":477},"type":"blend"}]} \ No newline at end of file diff --git a/examples/floor2.ptex b/examples/floor2.ptex index 2cfce59..5f3e2ab 100644 --- a/examples/floor2.ptex +++ b/examples/floor2.ptex @@ -1 +1 @@ -{"connections":[{"from":"perlin_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"blend_0","to_port":1},{"from":"bricks_0","from_port":0,"to":"blend_0","to_port":0},{"from":"blend_0","from_port":0,"to":"Material","to_port":0},{"from":"bricks_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"colorize_1","from_port":0,"to":"Material","to_port":2},{"from":"blend_0","from_port":0,"to":"colorize_1","to_port":0},{"from":"uniform_0","from_port":0,"to":"Material","to_port":1}],"nodes":[{"name":"Material","node_position":{"x":773,"y":290},"type":"material"},{"iterations":7,"name":"perlin_0","node_position":{"x":7,"y":263},"persistence":0.85,"scale_x":8,"scale_y":8,"type":"perlin"},{"bevel":0.01,"columns":4,"mortar":0.01,"name":"bricks_0","node_position":{"x":242,"y":382},"row_offset":0,"rows":4,"type":"bricks"},{"amount":0.2,"name":"normal_map_0","node_position":{"x":516,"y":466},"type":"normal_map"},{"gradient":[{"b":1,"g":1,"pos":0,"r":1},{"b":0.484375,"g":0.484375,"pos":1,"r":0.484375}],"name":"colorize_1","node_position":{"x":510,"y":386},"type":"colorize"},{"gradient":[{"b":0.588542,"g":0.742839,"pos":0,"r":1},{"b":1,"g":1,"pos":0.663636,"r":1}],"name":"colorize_0","node_position":{"x":232,"y":286},"type":"colorize"},{"amount":1,"blend_type":2,"name":"blend_0","node_position":{"x":419,"y":186},"type":"blend"},{"color":{"a":1,"b":0.128906,"g":0.128906,"r":0.128906,"type":"Color"},"name":"uniform_0","node_position":{"x":563,"y":314},"type":"uniform"}]} \ No newline at end of file +{"connections":[{"from":"perlin_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"blend_0","to_port":1},{"from":"bricks_0","from_port":0,"to":"blend_0","to_port":0},{"from":"blend_0","from_port":0,"to":"Material","to_port":0},{"from":"bricks_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"colorize_1","from_port":0,"to":"Material","to_port":2},{"from":"blend_0","from_port":0,"to":"colorize_1","to_port":0},{"from":"uniform_0","from_port":0,"to":"Material","to_port":1}],"nodes":[{"albedo_color":{"a":1,"b":1,"g":1,"r":1,"type":"Color"},"emission_energy":1,"metallic":1,"name":"Material","node_position":{"x":773,"y":290},"roughness":1,"type":"material"},{"iterations":7,"name":"perlin_0","node_position":{"x":7,"y":263},"persistence":0.85,"scale_x":8,"scale_y":8,"type":"perlin"},{"bevel":0.01,"columns":4,"mortar":0.01,"name":"bricks_0","node_position":{"x":242,"y":382},"row_offset":0,"rows":4,"type":"bricks"},{"amount":0.2,"name":"normal_map_0","node_position":{"x":516,"y":466},"type":"normal_map"},{"gradient":[{"b":1,"g":1,"pos":0,"r":1},{"b":0.484375,"g":0.484375,"pos":1,"r":0.484375}],"name":"colorize_1","node_position":{"x":510,"y":386},"type":"colorize"},{"gradient":[{"b":0.588542,"g":0.742839,"pos":0,"r":1},{"b":1,"g":1,"pos":0.654545,"r":1}],"name":"colorize_0","node_position":{"x":232,"y":286},"type":"colorize"},{"amount":1,"blend_type":2,"name":"blend_0","node_position":{"x":419,"y":186},"type":"blend"},{"color":{"a":1,"b":0.128906,"g":0.128906,"r":0.128906,"type":"Color"},"name":"uniform_0","node_position":{"x":563,"y":314},"type":"uniform"}]} \ No newline at end of file diff --git a/examples/grass_with_flowers.ptex b/examples/grass_with_flowers.ptex index 67aabaf..39443fa 100644 --- a/examples/grass_with_flowers.ptex +++ b/examples/grass_with_flowers.ptex @@ -1 +1 @@ -{"connections":[{"from":"perlin_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"voronoi_0","from_port":0,"to":"colorize_1","to_port":0},{"from":"colorize_0","from_port":0,"to":"blend_0","to_port":0},{"from":"colorize_1","from_port":0,"to":"blend_0","to_port":2},{"from":"perlin_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"colorize_3","from_port":0,"to":"Material","to_port":1},{"from":"colorize_1","from_port":0,"to":"colorize_3","to_port":0},{"from":"colorize_3","from_port":0,"to":"Material","to_port":2},{"from":"voronoi_0","from_port":2,"to":"blend_0","to_port":1},{"from":"voronoi_0","from_port":0,"to":"colorize_2","to_port":0},{"from":"blend_0","from_port":0,"to":"blend_1","to_port":0},{"from":"blend_1","from_port":0,"to":"Material","to_port":0},{"from":"colorize_2","from_port":0,"to":"blend_1","to_port":2},{"from":"uniform_0","from_port":0,"to":"blend_1","to_port":1}],"nodes":[{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_3","node_position":{"x":655,"y":93.25},"type":"colorize"},{"gradient":[{"b":0.15682,"g":0.734375,"pos":0.445455,"r":0.247062},{"b":0.112522,"g":0.317708,"pos":0.872727,"r":0.144582}],"name":"colorize_0","node_position":{"x":335,"y":-261.75},"type":"colorize"},{"iterations":9,"name":"perlin_0","node_position":{"x":-25,"y":-27.75},"persistence":0.8,"scale_x":6,"scale_y":6,"type":"perlin"},{"intensity":1,"name":"voronoi_0","node_position":{"x":269,"y":-104.75},"scale_x":14,"scale_y":14,"type":"voronoi"},{"name":"Material","node_position":{"x":996,"y":22},"type":"material"},{"amount":0.8,"name":"normal_map_0","node_position":{"x":494,"y":258.25},"type":"normal_map"},{"gradient":[{"b":0,"g":0,"pos":0.254545,"r":0},{"b":1,"g":1,"pos":0.436364,"r":1}],"name":"colorize_1","node_position":{"x":524,"y":-26.75},"type":"colorize"},{"gradient":[{"b":0,"g":0,"pos":0.118182,"r":0},{"b":1,"g":1,"pos":0.181818,"r":1}],"name":"colorize_2","node_position":{"x":413,"y":71.25},"type":"colorize"},{"amount":0.5,"blend_type":0,"name":"blend_0","node_position":{"x":643,"y":-244.75},"type":"blend"},{"amount":0.5,"blend_type":0,"name":"blend_1","node_position":{"x":826,"y":-119.75},"type":"blend"},{"color":{"a":1,"b":0,"g":0.984375,"r":1,"type":"Color"},"name":"uniform_0","node_position":{"x":690,"y":-104},"type":"uniform"}]} \ No newline at end of file +{"connections":[{"from":"perlin_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"voronoi_0","from_port":0,"to":"colorize_1","to_port":0},{"from":"colorize_0","from_port":0,"to":"blend_0","to_port":0},{"from":"colorize_1","from_port":0,"to":"blend_0","to_port":2},{"from":"perlin_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"voronoi_0","from_port":2,"to":"blend_0","to_port":1},{"from":"voronoi_0","from_port":0,"to":"colorize_2","to_port":0},{"from":"blend_0","from_port":0,"to":"blend_1","to_port":0},{"from":"blend_1","from_port":0,"to":"Material","to_port":0},{"from":"colorize_2","from_port":0,"to":"blend_1","to_port":2},{"from":"uniform_0","from_port":0,"to":"blend_1","to_port":1},{"from":"colorize_1","from_port":0,"to":"Material","to_port":2}],"nodes":[{"gradient":[{"b":0.15682,"g":0.734375,"pos":0.445455,"r":0.247062},{"b":0.112522,"g":0.317708,"pos":0.863636,"r":0.144582}],"name":"colorize_0","node_position":{"x":335,"y":-261.75},"type":"colorize"},{"albedo_color":{"a":1,"b":1,"g":1,"r":1,"type":"Color"},"emission_energy":0,"metallic":0,"name":"Material","node_position":{"x":996,"y":22},"roughness":1,"type":"material"},{"amount":0.8,"name":"normal_map_0","node_position":{"x":494,"y":258.25},"type":"normal_map"},{"gradient":[{"b":0,"g":0,"pos":0.245455,"r":0},{"b":1,"g":1,"pos":0.436364,"r":1}],"name":"colorize_1","node_position":{"x":524,"y":-26.75},"type":"colorize"},{"gradient":[{"b":0,"g":0,"pos":0.118182,"r":0},{"b":1,"g":1,"pos":0.172727,"r":1}],"name":"colorize_2","node_position":{"x":413,"y":71.25},"type":"colorize"},{"amount":0.5,"blend_type":0,"name":"blend_1","node_position":{"x":826,"y":-119.75},"type":"blend"},{"color":{"a":1,"b":0,"g":0.984375,"r":1,"type":"Color"},"name":"uniform_0","node_position":{"x":690,"y":-104},"type":"uniform"},{"iterations":9,"name":"perlin_0","node_position":{"x":-25,"y":-27.75},"persistence":0.8,"scale_x":6,"scale_y":6,"type":"perlin"},{"intensity":1,"name":"voronoi_0","node_position":{"x":269,"y":-104.75},"scale_x":14,"scale_y":14,"type":"voronoi"},{"amount":0.5,"blend_type":0,"name":"blend_0","node_position":{"x":643,"y":-244.75},"type":"blend"}]} \ No newline at end of file diff --git a/examples/lava.ptex b/examples/lava.ptex index 21c050b..a811dd6 100644 --- a/examples/lava.ptex +++ b/examples/lava.ptex @@ -1 +1 @@ -{"connections":[{"from":"perlin_0","from_port":0,"to":"blend_0","to_port":0},{"from":"blend_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"Material","to_port":0},{"from":"perlin_0","from_port":0,"to":"warp_0","to_port":1},{"from":"voronoi_0","from_port":0,"to":"warp_0","to_port":0},{"from":"warp_0","from_port":0,"to":"blend_0","to_port":1},{"from":"warp_0","from_port":0,"to":"colorize_1","to_port":0},{"from":"warp_0","from_port":0,"to":"colorize_2","to_port":0},{"from":"colorize_2","from_port":0,"to":"Material","to_port":2},{"from":"warp_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"colorize_1","from_port":0,"to":"Material","to_port":3},{"from":"colorize_2","from_port":0,"to":"Material","to_port":1},{"from":"colorize_3","from_port":0,"to":"Material","to_port":5},{"from":"warp_0","from_port":0,"to":"colorize_3","to_port":0}],"nodes":[{"name":"Material","node_position":{"x":956,"y":271},"type":"material"},{"gradient":[{"b":0.032597,"g":0.032597,"pos":0.054545,"r":0.032597},{"b":0.111979,"g":0.111979,"pos":0.3,"r":0.111979},{"b":0.029781,"g":0.029781,"pos":0.518182,"r":0.029781},{"b":0.069093,"g":0.069093,"pos":0.818182,"r":0.069093},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_0","node_position":{"x":666,"y":27},"type":"colorize"},{"gradient":[{"b":1,"g":1,"pos":0.272727,"r":1},{"b":0,"g":0,"pos":0.8,"r":0}],"name":"colorize_2","node_position":{"x":653,"y":140.5},"type":"colorize"},{"gradient":[{"b":0,"g":0.765625,"pos":0,"r":1},{"b":0,"g":0,"pos":0.163636,"r":1},{"b":0,"g":0,"pos":0.245455,"r":0}],"name":"colorize_1","node_position":{"x":646,"y":223},"type":"colorize"},{"amount":0.9,"name":"normal_map_0","node_position":{"x":658,"y":309.5},"type":"normal_map"},{"gradient":[{"b":0.345455,"g":0.345455,"pos":0,"r":0.345455},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_3","node_position":{"x":658,"y":404.25},"type":"colorize"},{"amount":0.45,"blend_type":1,"name":"blend_0","node_position":{"x":475,"y":-30},"type":"blend"},{"amount":0.3,"name":"warp_0","node_position":{"x":338,"y":196},"type":"warp"},{"intensity":0.55,"name":"voronoi_0","node_position":{"x":130,"y":299},"scale_x":6,"scale_y":6,"type":"voronoi"},{"iterations":8,"name":"perlin_0","node_position":{"x":190,"y":-14},"persistence":0.75,"scale_x":4,"scale_y":4,"type":"perlin"}]} \ No newline at end of file +{"connections":[{"from":"perlin_0","from_port":0,"to":"blend_0","to_port":0},{"from":"blend_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"Material","to_port":0},{"from":"perlin_0","from_port":0,"to":"warp_0","to_port":1},{"from":"voronoi_0","from_port":0,"to":"warp_0","to_port":0},{"from":"warp_0","from_port":0,"to":"blend_0","to_port":1},{"from":"warp_0","from_port":0,"to":"colorize_1","to_port":0},{"from":"warp_0","from_port":0,"to":"colorize_2","to_port":0},{"from":"colorize_2","from_port":0,"to":"Material","to_port":2},{"from":"warp_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"colorize_1","from_port":0,"to":"Material","to_port":3},{"from":"colorize_2","from_port":0,"to":"Material","to_port":1},{"from":"colorize_3","from_port":0,"to":"Material","to_port":5},{"from":"warp_0","from_port":0,"to":"colorize_3","to_port":0}],"nodes":[{"albedo_color":{"a":1,"b":1,"g":1,"r":1,"type":"Color"},"emission_energy":2,"metallic":1,"name":"Material","node_position":{"x":956,"y":271},"roughness":1,"type":"material"},{"gradient":[{"b":0.032597,"g":0.032597,"pos":0.045455,"r":0.032597},{"b":0.111979,"g":0.111979,"pos":0.3,"r":0.111979},{"b":0.029781,"g":0.029781,"pos":0.518182,"r":0.029781},{"b":0.069093,"g":0.069093,"pos":0.818182,"r":0.069093},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_0","node_position":{"x":666,"y":27},"type":"colorize"},{"gradient":[{"b":1,"g":1,"pos":0.263636,"r":1},{"b":0,"g":0,"pos":0.8,"r":0}],"name":"colorize_2","node_position":{"x":653,"y":140.5},"type":"colorize"},{"gradient":[{"b":0,"g":0.765625,"pos":0,"r":1},{"b":0,"g":0,"pos":0.154545,"r":1},{"b":0,"g":0,"pos":0.245455,"r":0}],"name":"colorize_1","node_position":{"x":646,"y":223},"type":"colorize"},{"amount":0.9,"name":"normal_map_0","node_position":{"x":658,"y":309.5},"type":"normal_map"},{"gradient":[{"b":0.345455,"g":0.345455,"pos":0,"r":0.345455},{"b":0,"g":0,"pos":1,"r":0}],"name":"colorize_3","node_position":{"x":658,"y":404.25},"type":"colorize"},{"amount":0.45,"blend_type":1,"name":"blend_0","node_position":{"x":475,"y":-30},"type":"blend"},{"amount":0.3,"name":"warp_0","node_position":{"x":338,"y":196},"type":"warp"},{"intensity":0.55,"name":"voronoi_0","node_position":{"x":130,"y":299},"scale_x":6,"scale_y":6,"type":"voronoi"},{"iterations":8,"name":"perlin_0","node_position":{"x":190,"y":-14},"persistence":0.75,"scale_x":4,"scale_y":4,"type":"perlin"}]} \ No newline at end of file diff --git a/examples/metal_pattern_2.ptex b/examples/metal_pattern_2.ptex new file mode 100644 index 0000000..d48a4d8 --- /dev/null +++ b/examples/metal_pattern_2.ptex @@ -0,0 +1 @@ +{"connections":[{"from":"pattern_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"transform_0","to_port":0},{"from":"transform_0","from_port":0,"to":"transform_1","to_port":0},{"from":"transform_1","from_port":0,"to":"transform_2","to_port":0},{"from":"transform_1","from_port":0,"to":"blend_0","to_port":1},{"from":"transform_2","from_port":0,"to":"blend_0","to_port":0},{"from":"pattern_1","from_port":0,"to":"blend_0","to_port":2},{"from":"blend_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4}],"nodes":[{"name":"transform_1","node_position":{"x":241,"y":384},"repeat":true,"rotate":0,"scale_x":0.25,"scale_y":0.125,"translate_x":0,"translate_y":0.5,"type":"transform"},{"mix":4,"name":"pattern_1","node_position":{"x":218,"y":574},"type":"pattern","x_scale":4,"x_wave":2,"y_scale":4,"y_wave":2},{"name":"transform_0","node_position":{"x":27,"y":577},"repeat":false,"rotate":0,"scale_x":1,"scale_y":1.35,"translate_x":0,"translate_y":0,"type":"transform"},{"gradient":[{"b":1,"g":1,"pos":0.309091,"r":1},{"b":0,"g":0,"pos":0.645455,"r":0}],"name":"colorize_0","node_position":{"x":43,"y":510},"type":"colorize"},{"mix":0,"name":"pattern_0","node_position":{"x":8,"y":410},"type":"pattern","x_scale":10,"x_wave":1,"y_scale":1,"y_wave":1},{"name":"transform_2","node_position":{"x":436,"y":499},"repeat":true,"rotate":90,"scale_x":1,"scale_y":1,"translate_x":0,"translate_y":0,"type":"transform"},{"albedo_color":{"a":1,"b":0.953125,"g":0.834013,"r":0.822815,"type":"Color"},"emission_energy":1,"metallic":1,"name":"Material","node_position":{"x":955,"y":197},"roughness":0.75,"type":"material"},{"amount":0.5,"name":"normal_map_0","node_position":{"x":730,"y":341},"type":"normal_map"},{"amount":0.5,"blend_type":0,"name":"blend_0","node_position":{"x":456,"y":390},"type":"blend"}]} \ No newline at end of file diff --git a/examples/rock.ptex b/examples/rock.ptex index 21c80e1..edd0164 100644 --- a/examples/rock.ptex +++ b/examples/rock.ptex @@ -1 +1 @@ -{"connections":[{"from":"voronoi_0","from_port":0,"to":"blend_0","to_port":0},{"from":"voronoi_0","from_port":1,"to":"blend_0","to_port":1},{"from":"perlin_0","from_port":0,"to":"blend_0","to_port":2},{"from":"blend_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"Material","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"perlin_0","from_port":0,"to":"colorize_1","to_port":0},{"from":"colorize_1","from_port":0,"to":"Material","to_port":1},{"from":"perlin_0","from_port":0,"to":"colorize_2","to_port":0},{"from":"colorize_2","from_port":0,"to":"Material","to_port":2},{"from":"perlin_0","from_port":0,"to":"normal_map_0","to_port":0}],"nodes":[{"name":"Material","node_position":{"x":768,"y":239},"type":"material"},{"intensity":1,"name":"voronoi_0","node_position":{"x":128,"y":394},"scale_x":4,"scale_y":4,"type":"voronoi"},{"amount":0.5,"name":"normal_map_0","node_position":{"x":531,"y":432},"type":"normal_map"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":0.260417,"g":0.260417,"pos":1,"r":0.260417}],"name":"colorize_1","node_position":{"x":533,"y":343},"type":"colorize"},{"amount":0.5,"blend_type":0,"name":"blend_0","node_position":{"x":327,"y":411},"type":"blend"},{"gradient":[{"b":0.391927,"g":0.523519,"pos":0,"r":0.583333},{"b":0.240885,"g":0.276693,"pos":0.354545,"r":0.3125},{"b":0.391927,"g":0.523519,"pos":0.681818,"r":0.583333},{"b":0.240885,"g":0.276693,"pos":0.963636,"r":0.3125}],"name":"colorize_0","node_position":{"x":530,"y":171},"type":"colorize"},{"iterations":6,"name":"perlin_0","node_position":{"x":122,"y":191},"persistence":0.85,"scale_x":4,"scale_y":4,"type":"perlin"},{"gradient":[{"b":0.364583,"g":0.364583,"pos":0,"r":0.364583},{"b":1,"g":1,"pos":1,"r":1}],"name":"colorize_2","node_position":{"x":526,"y":258},"type":"colorize"}]} \ No newline at end of file +{"connections":[{"from":"voronoi_0","from_port":0,"to":"blend_0","to_port":0},{"from":"voronoi_0","from_port":1,"to":"blend_0","to_port":1},{"from":"perlin_0","from_port":0,"to":"blend_0","to_port":2},{"from":"blend_0","from_port":0,"to":"colorize_0","to_port":0},{"from":"colorize_0","from_port":0,"to":"Material","to_port":0},{"from":"normal_map_0","from_port":0,"to":"Material","to_port":4},{"from":"perlin_0","from_port":0,"to":"colorize_1","to_port":0},{"from":"colorize_1","from_port":0,"to":"Material","to_port":1},{"from":"perlin_0","from_port":0,"to":"colorize_2","to_port":0},{"from":"colorize_2","from_port":0,"to":"Material","to_port":2},{"from":"perlin_1","from_port":0,"to":"warp_0","to_port":1},{"from":"voronoi_1","from_port":1,"to":"warp_0","to_port":0},{"from":"warp_0","from_port":0,"to":"normal_map_0","to_port":0},{"from":"warp_0","from_port":0,"to":"colorize_3","to_port":0},{"from":"colorize_3","from_port":0,"to":"Material","to_port":5}],"nodes":[{"amount":0.5,"name":"normal_map_0","node_position":{"x":531,"y":432},"type":"normal_map"},{"gradient":[{"b":0,"g":0,"pos":0,"r":0},{"b":0.260417,"g":0.260417,"pos":1,"r":0.260417}],"name":"colorize_1","node_position":{"x":533,"y":343},"type":"colorize"},{"amount":0.5,"blend_type":0,"name":"blend_0","node_position":{"x":327,"y":411},"type":"blend"},{"gradient":[{"b":0.391927,"g":0.523519,"pos":0,"r":0.583333},{"b":0.240885,"g":0.276693,"pos":0.345455,"r":0.3125},{"b":0.391927,"g":0.523519,"pos":0.654545,"r":0.583333},{"b":0.240885,"g":0.276693,"pos":0.945455,"r":0.3125}],"name":"colorize_0","node_position":{"x":530,"y":171},"type":"colorize"},{"gradient":[{"b":0.364583,"g":0.364583,"pos":0,"r":0.364583},{"b":1,"g":1,"pos":1,"r":1}],"name":"colorize_2","node_position":{"x":526,"y":258},"type":"colorize"},{"intensity":1,"name":"voronoi_0","node_position":{"x":117,"y":448},"scale_x":4,"scale_y":4,"type":"voronoi"},{"iterations":6,"name":"perlin_0","node_position":{"x":105,"y":305},"persistence":0.85,"scale_x":4,"scale_y":4,"type":"perlin"},{"iterations":3,"name":"perlin_1","node_position":{"x":102,"y":166},"persistence":0.65,"scale_x":4,"scale_y":4,"type":"perlin"},{"intensity":0.85,"name":"voronoi_1","node_position":{"x":115,"y":63},"scale_x":4,"scale_y":4,"type":"voronoi"},{"name":"Material","node_position":{"x":768,"y":239},"type":"material"},{"amount":0.3,"name":"warp_0","node_position":{"x":317,"y":139},"type":"warp"},{"gradient":[{"b":1,"g":1,"pos":0.127273,"r":1},{"b":0,"g":0,"pos":0.236364,"r":0}],"name":"colorize_3","node_position":{"x":327,"y":238},"type":"colorize"}]} \ No newline at end of file diff --git a/icon.png b/icon.png index a0b64eee944cb4cfb2aa8dc0d8d78faf6ca44dc1..af5f09a6aa43344da74ddcf9d8831ba07f601de7 100644 GIT binary patch literal 7888 zcmV;>9xvgEP)e zSad^gZEa<4bO1wgWnpw>WFU8GbZ8()Nlj2!fese{03J9=L_t(|+U=WJ(0%Du)_-fg z!`}N$-|(M1-JR}EPa#D}0+A#nP-q|+q#QsftDM22O1RKMxw6!bp4S?7g1-uJu0a zSw z?lW5*uy^SiuX*#A-28)I^QV5ch`#F||D%8SQ-9;{{=M;~j^DkMzxHKM9zOcyeS3ei zbF=S9!=IO7`)c}=1$jhkhEkCVVn$tEqKpHS47DOTQKv2A=9FoesIwJ=_=TU%UcK5s z{JNEwZ+hg?-nB3O;xGKjfB3myxc5>$^GgE2S3c+-ePk8Bvn($DGd(zb-0&ly*tO$Q|sQi^7OEcd)V6m9936X_&EK{a4 zsJURZpj0Rm+dMHn@dWOJA7UznmP9KRr$VlV2;^$iW=6leoMZ0OezM>F*PlhA9#%0FMgaizwxa+_Slo`U%15j z_?Vymf$!nD551S%&Y5=|`!ReZFZm1q`agc`KmVQq@THgeR)cTTiuXV&!YCfOc!hXz zkLHC>A_-#fXlSrH(NNf=Osa*f5s8spfwsk|XQo2iw1f~4ANhi}|1sYCf%i~v++jFd zvw7|*I$zOdL7jR|GL$&O1${)K}-D<(LDF)M?c zq4&Rx?r=u=;4?UlMDJNdhX|N&usl(!aaM%WVi>~EZ}4JR&0wH;popWf#C@-Q3vYS* z+xf8{dk6B7k5Q+Q-~?5n^-wEJ)i^G~q7BSqq-~oYST8qU|5HD|onG=H_?DON&#pG( zk9(0nVMWMA&@dx5GwOp6;1+@AqtCI3EhcUkNYfCS7PUgEa7JVjhsOxrjFKmcK`aCF zCO|DT&gh(Q>&55U7NuRynVjJ_r?d(~HcqpGfpdzPur5ZRB354A*!)dzc>SaAdfziQ z(@O@xn;+h5I@OkY{F25Mhc?~5ADV9%4-kr{m@50d1}8S0A6>Xf6IsP&D-SxtL-TX zkNOUO^(yIb$?T&aqFr2J)W{^BK|R{eNX|1;$T@R|z$l8)G`w=JB=_E%!@vJ+ z1Mt-kbzi>F^v~-w$#Crf)J1H&rtDu~_T+=)r=KSH6M5%^~G9jpQG+H@ynRIYS zFOCKy4%;`s_JP@dec#RTqrYVU{^$eE!G6d;)2OXVQ9?gb9)Fy=Skc~hiL)1O5Qa)S zTQG`eFsN-yMJTWf-U?oXu|gCjI3o%f_3z3Yl3QA}L!{sX!Q63vN?5lFSI*B&D^;IuF{FhI?xEX#+0DQqE_fG=# zi&d0)2-KlxeDN;f+EtpvJtSB9(>0Y!$pdq(2q0=yz$~LwiYUX>qhbs>6YEGIlS`@eC5ir{Sbo5NYp;paTUb~2`+FokSQ1HLwVd<5W4x6<010&d5@zo zm;((=CTvqiuN<=Xz!lQz2I(TRc}LmyO6MJ$ZVx}6*+Xm}es`rdBBC`fj&ulfLXJJJSxU%sx&3B3}D)_o-YaOd;j&P)AYuBpZpB~_}T~kTj!CVi2|K( zD5c_^vSx;hEy=Z1b%3%N2Z9fTal^PhW$R{mDb%*3SD~&JoRvx`6%7vO9AXtUqiGvz zKVW9y9U22JIBGTWFrXr|T}xhXXjIT?qTD$mZ`VXsq7$G}oWqMTRl}o1fw5FtGL1qm z1-E~dGcksf<1ha=A0K|^SH|oAcK~Klzcr}QDwr8g1=QhyO);XYsKJQQHIY^-<`*zq zlBS7JMpjNqX(Hb_V%7JkQ!)e3UVeZl`T@p~LZ#*r?^>oZk*A&@mC&rnRftWC=M+sn z!8?Zjh$2Gl1VW^sm>Jay)s!g4Pzrr9Jdh2{gigWMcj3wdG-LlQ@R%D<6N(0^6&eAo(pMu{W$vN%imI^}jjoNvdO}sl@!ka< z9D6P{j*!mq2y;zzQkX}Nm(0w8*+3%`uC8eVM9DO+ufT}Ma)PhD26(Ri4v%E z4pao8?g*JxT&mcWE04TvrSJIYt?lurV%A>?z~P0%uZv=$a=w+RAyTo>;Z$hIv?R2Q z*l>bP8@8n~)=DfrttF~Ba;jMcyeoNoxu(W!FScI>w;!Fd`dG!C2-regT<3_~P7%R=Jv@jFHrY%+zGc~S8;ff}rR3eoiupNh8 z^;YOgWfeS4Y-zmUozl2Ms|BlxsNgZiDim?MUZN(jin>5lM^vFvW#Ju-3NxuRKH^nq zNz9zGXd<117{aG1a;=r-#tpXKf9u( zi>MVZl?jIvrIbX<6XHBsBhg1(h_p?EiJ+=XRk-6LU4KR+@}|!MpmF-7)xwxE*DpSd z6+x>pl>(O83rbtJ2!+v%b#bh-5>;7*K(K^a-ietQcK+51LRDpU@euY_1TuRuuxMwP zM5bC%5zH!6&O}#fHBl`i5)e^>2n~YNLN;M41t*SHcK1g;UAKpGfw^SNjFc;?yE>Bb zoIdyp!Z@%OK!sO+1^{mnT%&w$u0lLH;-)Fj@88dmjjpDhqFVqm{Mxl(JWQUV#UGX3RI{l+dPq`Ef<=|(zjHDECF0($i~)`B0D)PieLuY zVq~kdnyD)ECX5DSDOB;4nlY;c?+LMEFtARQi7f8122n|DZH%my>XjF&-r9#n2be^bS z2uUJU1X2&VXDY(@+ShSfKtA*lS}*KMC`~*1{ZBK&wsj8{6GotlvbcO1Uou-Cc;?a1 z>oWxwF!yy^Tz^9Tb7|^NIlUhMH&hYFPUNnHDRX6Y)R8LlnSE+a>?XkM1@44 zU=*qN^J<@KAv%XsMFDRab%A6`!FG+Zy4~lULu;lW1RJS2lS}5_p}lnrLSRz@Q%RUOtW21|Xv$dfjzy+Q;~Y`peCx-F;K`^u znAYT8NK<0t8^*;2&MsbHtQB{1hQD!>y*A*w2A|I;24?JnH&9r88i1(^iwHrCZ5dhZ zt+;u%CWeGhr*uSQGjaO!{|&i%8C@>f|ANm)k4_jiThhrH`()_$@HNrQ8@AJgm5H-7 zl0xA0=!|@>8BJ`NawcI!ugpRuW7yOKmATU$HLr;&C3>q=a~#btuzvV5 zch9z{Q<`z&@{8A*@YKZ~-ZltE5v4Cis79$fk!28Xp9Y{*+mv&ieRlC0>$}Ia&ZuTY z3RW+|&whgD%0;Yc;L1hl2lo4crfq3+VXqqVZXc^heE1{J5@s{5 zRzoxrT)@v(I5P%=A&p#E&PcVw<_@7$y7@j;98-VF#)LDJzFlx{*^z3ckC8AX^!Xd) zqf^@ZF4Mj23UccfbAiE(B9T-RjRe-!@M$Df-RY0xbn?GaplgpxEexd~ZOgdX?#R%2 zOFWpPQ(+#2eLJHQ&qPae^F?}7gi0@t7hR+-X2iV(eM-!i3!1AJ$+_SJHWw}soJYOG z`hhx(glm^EFP!EKqKtKq+bZN?VzY)#oH3=0Zz4KPgv}Ordc@+KQg4Y!&D8C{Y&B<4 z#pg_sf}=7M#{^iN*dnAV1QG1u@Qj-`b^r{s)pPCCW77btxZ@K#XDmEqGX`Xrt93$~ z6&JK8S%z+(152b*C}!LpC-O;VJUU}uGx_d4#tuQyEnc_lwRL&p(!a*q}zDpaeO1~xc?3+%Z9rJ&w1ot|)V@06ecDFfnmGC888 zs!S+T{uDJ)+U?25KfMC#)1SEKUUh#jY3eKnmU^Ko(@-U!LzqQ%Cp=n#vFfw3t6@m(yVMvLwD8BPV3c)#Q9#GeS^O(u50nwd^ zsil&vp`gSvKrzfUbe2&yswpA(oorqpL`9s#3G8SM)KbW1G-SNrX_3@~w~B_q?POpB zUILR8`lAzaF5KB}xfmU)JGN-W@KqTz1m~E0-uI&)NcI`M!0PUcAMjVMG2dU|REZ{> zCgC)}P%6E7OdNemOeRdGL=~J=B87;NCD0dPGbK*4kqz=RqGDuGq!h#l!~}H_ae?9^ zt63y|ir0&y8VEa0K=Z)dI}C@VfeSKn5cOOMD%3n-qKFf6Dm1GF`)(K5P+-hP$>%K7 zpxv9(l=9y{s~L(V{pTw-(abugTo5rR#!!T0%9so4BVtBhDq|5w^Ngi3mP$34a$z)> zH0*LbC;Yi=ws6KgD9(%!9BuH32vREpN_Gwe7FsxTLU0b1N(hn36qkGUy`XVMUkuA5 zZJl<`5;H;-`g7&FccO@-#lMHZHz)OUXt040^5T^-+`+_*{VmTWWR zx|{AQP=M26;LemetB#Ec1xLXn>PeVnd0?*4guplr30gYnBYr+bDAtvhHR86q4!}7F zIAYT=iyh9lH1j3FMN-{8Koc7}?`hRx>e-mmn~pf>mNrj>}FU z4Jqx4Y7y`iUy;+)6NmYiwJwmo2yNSz(vXZs8#Q>uXmOaoRj^D@yn&q3pvO(V76 z(gw%=e8Eg%6#|{}xX|K7X+lSpz=?LOQ>K_QzEN68qcLauceKnSc>3(jig zPA}BQ9%31U@jdUOq>728O>BSQ*PIKy=d_%>`5=656?v8Aio1QCGF!6u+E-JDOu2ar zRY%j#Fx?H6!g;@b(6q$hIhZeKXDd=QVy(=Vd!%8*vh>WN$6-Y8nS2XvM-(GXnUc38 zbBv<6niLbKp?Tp2 zQlD_n;l$qcjt?Dw@2@)@{=$9#@y^R%GBZgzlW$&UINi`a^dNHW8g8>C-MLFDMwqXt zVYi(*@0rGd?e+{APC0b2XdBEbZ8KxQQF5Y|vYQ7sk(qOd8R{c(HmBK5agS11l!4ebP!e06v0hJ% z>%w&5B9~tODlS~!hYvkNym1{pJws~6Ib{`;BJz{p{jtq={D%I3>%g1#-20=~Z|u}` zEW$PyT8uUq+LN0|F4Rkx*WEZkAppjto&m==PNdTlnvxg>A*~1UVnukx!?ce-#9|%^pZFNf zjTZ^0r?_b%o3IGV+&c=IH!*zm`)~KRf73p}Z+&9*?Xx=lwQ9y`GJ5gM!cL&6(U3$=nu?9UfwLk8t#SEj{u94d}=+XwAGL|ZXIVupHBdCH18y~;ppMU7+ zum6^el3)9I4|NYur|)CfJ|5H9II7^QrVb; zFhk2kj!U}b9?PaB=R_L=QySUk-Gpco;RP2sTkUbNB(!9TbGWW0jT1E`q!uJb>TFj?QXW6e2yw- z-5xhJeA5sA_vioV@5m?kp&LiPbpO>$EA5tV48s{?GCHXgpwF4w?lJRFQ$o|gczQ${ zd(t>Cot<#f&bTX%eD9d9?qe6~l<6Rs4zWn{O) zu~eC+f{K7a71#~zcER6mSKO=eoj?4`FaF)%u~W1FkJYoEEx3oLOZR`?YT6=J$hp!f zwANFLL77ldssz$`J{Ey>({a|cT&RV;T3E~$gr*_19sb-)+$>i#U5hSOl$6jsq1D)~ zPjGoey=P1lQVY&@#?M@LDlf9Tm#9)h!>#2-wwv)Cn_>NzKXRJwCGiS>aBKFs&p+X| z>-)D4KKfeUE(rYzLlMSQ@f1WHS_T9tC?!qgG%{52Li9Y&;96x-Qis^AnRgTa&-0>knGcj6p5J^Po#Fnq&L zzA)66)Ghw>w%Glf{1eM`r+`M{3DvO=JmZ888E7H$sbgzU&e3p5tbZ zyP@IUkZCULpLJ$m|AYVKfBfL@$)TzDt;^F7HTpw~?a}KNo1+JFm~*^1q>mlqTU<>{ zrIJde&KAs`cpS-v&9l#8C7tK*uFak5PCVI66TT)qMkg6z7j)ymsUvG(X!p3aIOKUE z+hOG7WQ)w&cef&Mf7g4S`A@&6r^cS%dlyb_v}yCko@g4Dj zxe)gDqyKtU`G#V=GFRIj?g282hK7V=LJ;qFEKrqND`vKn)oVe|8J<5Mjv|72_d$ez zu^EQ%{;})B$^X$uXTK2Sf%}%P#p)kNC z<9*rqcNu=<-M3EO`$CVs)X)06es~(-ZIRjj)&18;>XRb!xK|FT^^&PxM1)-G9Vc?z uRPLGa;Sv2G{jGby@Z%e{{Qv8B_xhhiR=`i;7?>{r0000%dvH`$n!tbO-hQU@>JCZgK>`UR0Wu_jNB~7F zAPOkpus*=C*qH%bc6M=ecWTDjftr2Pz(}c6<;w?x@~ zMuC9S>3Pf9YsKA00=6|E`N)quFQIJmsi%M55ts^_o`Mc&lQq{KEa4ut4ES#gb=-mzx@$HAW1SR zwHB2|OTgzrz#t*(%^qLyBQf;eCyUiOz7ino6HQ36>Q?LAuLJ{rTy0hqlz`7I#zI(jqXVQWwwcu)eefbYcD@8CLH zvm}9t2l}>b$kiAS>|5z<_+y=&)5F;`{BhrvFOq1Ed09%*md|6?{417sdKe4)ipg%)Kj{ z-+wP#(&c@#!^@VVbs@`i$h^LeSP@ePv|VeO2|6|44w=X83-Z$TGnkWfw7J@yl&DwJ z*y_gP5B4a#UFJ7+#EO_Ypw;F8+6@ZF;S1KNWp~Kzs3TTH-3REjYO>P@giOm$PX)gD zTCt=}>mGnk8-2Y|wSZqf{TSb$Hh&R--G|Hh-MgE)bomN;t%jd3dX$GI-%WLs zoytaA)Qa>*WuuMiCOiN6%u|$>6te2gjkr8sveO6f?1DK=8v8u}{=8!!E8o}B*g!pd?qTiRtt zQt_11VwTLC$^a{#>ZB*>Sbs8aCbjhzK0k1xSDC%G0P}!k*1!03YMQ+~zu_3Z zK-aIEZ;r>|2~gkS>Z5tlk(sQ=pp~g?w0C*0mIc3kY!rix8s`6O6^&O~LYD7n0ljvD z%a_bUlGUu*cDkGK0F{mQZ{2u+`W9C=;{kjDg;m>5Bgtx(FPYb?oUjghZr=E772}EvnLVX6Y~HXA7@CvGMXQtTCmUj_;J3l{lMP(7IvJXi z88%;72Q)NU$u`9?sUY;&dpk3!AeC%W91Tt3CtYD3@Zrb1DX*+y>9hh&22D&A>`zPv z4NIpLP+nQXhac|_n>VZjf`7pvzy8BI)RMw;4;IE$$^PWI2MbY43cvotI)cHT*B21M zC~&di3a_l)!ri$kloj3S{8Hp^In9Ifu8=3X+Z05{||Ci zEM@h=QcALuyQNPZVP@aHy}bU~>o}e5L6EAd^DO(-a@=k=6Mu%J5U=ZdIHS)F7@T52 z2th?f1s02?Tl%hDyBRznzT5kJa{`hikR(CAIib7U0rBkG)qM!FSS(ajR3L<4a7y3z z4*KkXrfY#utyUW{U8B*^WQ%?p-DGp4(S)9Rbkx;k>wA2#&kks8b93>kgZ%t_3JSXZ zE+t7~=FAx!u78d`1a`RE%FLNFkfg3E78DkcpP$dgtB#ngPht`lf9aD76a*`OyMnT^ zGSbt{6crV*V&!je>dovt-59mZou?ad>dmZJ`5TIgibzj4Q}#d^D_5>SLGaQi6|qn~ zHbK!d4Q>4N{jYdtS^>}h@)rmpaC-f0JzB@Q&E+A>*nd6#kk8liADhd0YQkV%c==`G zG%6HD;p}A_%Rc&wDogjJ@XZjjsBo3V&QIU}3cXs!6tAJKIed&@$JduJURz)6ICVK> z9$!FV&7Nx3?5QTpsK;ve;_?MT=Dk^BzBlOd1$s3ez#mXp|7A_YawCy>Gu+uHpkhG8 zEkFpt6Mvn6lEnbI>*>!I>6D| zW=_@hd=_BEqa|eAuqeA~_h5B+Io;64fCMc$#($m{Z8s8CA8?@RD(~#A?()uf&GS#+ zKZFsPNny)B`#=HNrtq`3$-`1vyyj4k=>rn99KYDi8(&mmb$DrZbX^er{XMzlj2+mE zCEpOS1AKu1D!Kb|sQH=_bygQ8*+z6K33rI4sw@dIlJxAYY~qhQE4!rw{L|EYO7l{X zC4WI6#O8`lC83rj>a4CFhe5S0@cBaztD%Uv6KrjBV2tZIEN1hx|LzLX+kc-oy2_lW zLnTYpTyb>v88`mbTydb1CCoRh5C!dFu7dQ$E_H>%Xwc9S#Rh7`Eui8;9m9v_^_Xt8 zw>QOAPkeKL!Rhhi@cLyLJR(c1+{z{~T;kg69v^3VT;#~XeqjCgCT1CQ6oi)%J9 zEF+2M9w_8?I!7%;dn9;RMj|h*+0?7?*Avw+xMSZja?(>-GH)g-S>omGXZmd`JW^DW z;9sT>W6E$duYItM9s7?(S3cSbSATE%44>c6(x+yVZ;t2Hos}G|?OWvcW*ME6%ulA~ zlWj8a%Gxcg+xnNNWyq;{BmW&hqmMkibfV${<&`x|966M^r9&8!7LVQI<8nVwgQ2~- zj~#4c@#G==a8e$vEiEj6Wi8uw9ga$l&)q&$M%)R8LakEqgIV`8|Dnkk6My4rvbp*E zbR#EfTR2tUirW`{S0++)YKfxEB#LvAnKIl=YJ!gDHaqJ-`hxd9`U0On`XzElC)g(k zbfA)DCf!xUtSRFdUos4pEE5PSR9S3PUvW_1?4q&Fjit>^tILPW8z2x=XuWn!E=jLO zmIQi@Op;zrTA~hfqK+)1o`1mu3=Bz2K$ZmlK!7igongyg4zlM+IsU-SJ2<8exE`HW zO>to^C55?^49g=o%S@^%{2HMrnyjr<*EMqd%z2JiRCD4?HSQ>S_;5sZMkpHG9v=r! zoaNw&vz_lWY84r&CNffuB*q(v(`!*l62_$VaJjYBP9PY>>GIHKcYn~()J#K@6|XPy zIsMI|Qc&yy5w9ppzug(|`uxX{$oL&-A1|j`z#!7<$KYwm}3n&Usm-ns4bLDT!euouZqUlq8eDY*a2KhZM6eWld5<-YO z{`P45)mcA2w-c|^28u!ucH6Gj&2K$_EYN9P+VDwQ{deK=w9B*F*=$+b^mY5?=}to( zS84-ZpMR?^C1s13fKM${CZQ-ggt&8#hlQg3`h1Nu=y^X7^dkRbd;Dlb^38j00000NkvXXu0mjf