diff --git a/material_maker/panels/preview_3d/preview_3d.gd b/material_maker/panels/preview_3d/preview_3d.gd index 0cede511b..7a00abf95 100644 --- a/material_maker/panels/preview_3d/preview_3d.gd +++ b/material_maker/panels/preview_3d/preview_3d.gd @@ -29,8 +29,8 @@ const MENU = [ { menu="Model/Rotate/Slow", command="set_rotate_model_speed", command_parameter=0.01 }, { menu="Model/Rotate/Medium", command="set_rotate_model_speed", command_parameter=0.05 }, { menu="Model/Rotate/Fast", command="set_rotate_model_speed", command_parameter=0.1 }, - { menu="Model/Generate map/Mesh normal", submenu="generate_mesh_normal_map" }, - { menu="Model/Generate map/Inverse UV", submenu="generate_inverse_uv_map" }, + { menu="Model/Generate map/Position", submenu="generate_position_map" }, + { menu="Model/Generate map/Normal", submenu="generate_normal_map" }, { menu="Model/Generate map/Curvature", submenu="generate_curvature_map" }, { menu="Model/Generate map/Ambient Occlusion", submenu="generate_ao_map" }, { menu="Model/Generate map/Thickness", submenu="generate_thickness_map" }, @@ -262,14 +262,14 @@ func generate_map(generate_function : String, size : int) -> void: call(generate_function, files[0], size) func do_generate_map(file_name : String, map : String, size : int) -> void: - var mesh_normal_mapper = load("res://material_maker/tools/map_renderer/map_renderer.tscn").instance() - add_child(mesh_normal_mapper) + var map_renderer = load("res://material_maker/tools/map_renderer/map_renderer.tscn").instance() + add_child(map_renderer) var id = objects.get_child_count()-1 var object : MeshInstance = objects.get_child(id) - var result = mesh_normal_mapper.gen(object.mesh, map, "save_to_file", [ file_name ], size) + var result = map_renderer.gen(object.mesh, map, "save_to_file", [ file_name ], size) while result is GDScriptFunctionState: result = yield(result, "completed") - mesh_normal_mapper.queue_free() + map_renderer.queue_free() OS.clipboard = "{\"name\":\"image\",\"parameters\":{\"image\":\"%s\"},\"type\":\"image\"}" % file_name func create_menu_map(menu : PopupMenu, function : String) -> void: @@ -279,23 +279,23 @@ func create_menu_map(menu : PopupMenu, function : String) -> void: if !menu.is_connected("id_pressed", self, function): menu.connect("id_pressed", self, function) -func create_menu_generate_mesh_normal_map(menu) -> void: - create_menu_map(menu, "generate_mesh_normal_map") +func create_menu_generate_normal_map(menu) -> void: + create_menu_map(menu, "generate_normal_map") -func generate_mesh_normal_map(i : int) -> void: - generate_map("do_generate_mesh_normal_map", 256 << i) +func generate_normal_map(i : int) -> void: + generate_map("do_generate_normal_map", 256 << i) -func do_generate_mesh_normal_map(file_name : String, size : int) -> void: - do_generate_map(file_name, "mesh_normal", size) +func do_generate_normal_map(file_name : String, size : int) -> void: + do_generate_map(file_name, "normal", size) -func create_menu_generate_inverse_uv_map(menu) -> void: - create_menu_map(menu, "generate_inverse_uv_map") +func create_menu_generate_position_map(menu) -> void: + create_menu_map(menu, "generate_position_map") -func generate_inverse_uv_map(i : int) -> void: - generate_map("do_generate_inverse_uv_map", 256 << i) +func generate_position_map(i : int) -> void: + generate_map("do_generate_position_map", 256 << i) -func do_generate_inverse_uv_map(file_name : String, size : int) -> void: - do_generate_map(file_name, "inv_uv", size) +func do_generate_position_map(file_name : String, size : int) -> void: + do_generate_map(file_name, "position", size) func create_menu_generate_curvature_map(menu) -> void: create_menu_map(menu, "generate_curvature_map") diff --git a/material_maker/tools/map_renderer/map_renderer.gd b/material_maker/tools/map_renderer/map_renderer.gd index fc76de7e9..38914ec0d 100644 --- a/material_maker/tools/map_renderer/map_renderer.gd +++ b/material_maker/tools/map_renderer/map_renderer.gd @@ -1,7 +1,8 @@ extends Viewport -export(ShaderMaterial) var mesh_normal_material -export(ShaderMaterial) var mesh_tangent_material +export(ShaderMaterial) var position_material +export(ShaderMaterial) var normal_material +export(ShaderMaterial) var tangent_material export(ShaderMaterial) var inv_uv_material export(ShaderMaterial) var white_material export(ShaderMaterial) var curvature_material @@ -18,13 +19,13 @@ func _ready(): func gen(mesh: Mesh, map : String, renderer_method : String, arguments : Array, map_size = 512) -> void: var bake_passes = { - mesh_normal = { first=mesh_normal_material, second=dilate_pass1, third=dilate_pass2 }, - mesh_tangent = { first=mesh_tangent_material, second=dilate_pass1, third=dilate_pass2 }, - inv_uv = { first=inv_uv_material, second=dilate_pass1, third=dilate_pass2 }, - curvature = { first=curvature_material, second=dilate_pass1, third=dilate_pass2 }, - thickness = { first=thickness_material, second=dilate_pass1, third=dilate_pass2, map_name="Thickness" }, - ao = { first=ao_material, second=dilate_pass1, third=dilate_pass2, map_name="Ambient Occlusion" }, - seams = { first=white_material, second=seams_pass1, third=seams_pass2 } + position = { first=position_material, second=dilate_pass1, third=dilate_pass2 }, + normal = { first=normal_material, second=dilate_pass1, third=dilate_pass2 }, + tangent = { first=tangent_material, second=dilate_pass1, third=dilate_pass2 }, + curvature = { first=curvature_material, second=dilate_pass1, third=dilate_pass2 }, + thickness = { first=thickness_material, second=dilate_pass1, third=dilate_pass2, map_name="Thickness" }, + ao = { first=ao_material, second=dilate_pass1, third=dilate_pass2, map_name="Ambient Occlusion" }, + seams = { first=white_material, second=seams_pass1, third=seams_pass2 } } var passes = bake_passes[map] size = Vector2(map_size, map_size) diff --git a/material_maker/tools/map_renderer/map_renderer.tscn b/material_maker/tools/map_renderer/map_renderer.tscn index 26bab6830..663119cf9 100644 --- a/material_maker/tools/map_renderer/map_renderer.tscn +++ b/material_maker/tools/map_renderer/map_renderer.tscn @@ -6,33 +6,39 @@ [sub_resource type="World" id=1] -[sub_resource type="Shader" id=2] +[sub_resource type="Shader" id=4] code = "shader_type spatial; render_mode depth_test_disable,depth_draw_always,unshaded,cull_disabled,world_vertex_coords; +uniform vec3 position = vec3(0.0); +uniform vec3 size = vec3(1.0); + varying vec3 p; void vertex() { - p = NORMAL; + p = (VERTEX-position)/size; VERTEX=vec3(UV, 0.5); } + void fragment() { - ALBEDO = 0.5*normalize(p)+vec3(0.5); + ALBEDO = p; } " -[sub_resource type="ShaderMaterial" id=3] -shader = SubResource( 2 ) +[sub_resource type="ShaderMaterial" id=5] +shader = SubResource( 4 ) +shader_param/position = Vector3( 0, 0, 0 ) +shader_param/size = Vector3( 1, 1, 1 ) -[sub_resource type="Shader" id=24] +[sub_resource type="Shader" id=2] code = "shader_type spatial; render_mode depth_test_disable,depth_draw_always,unshaded,cull_disabled,world_vertex_coords; varying vec3 p; void vertex() { - p = TANGENT; + p = NORMAL; VERTEX=vec3(UV, 0.5); } @@ -41,33 +47,27 @@ void fragment() { } " -[sub_resource type="ShaderMaterial" id=25] -shader = SubResource( 24 ) +[sub_resource type="ShaderMaterial" id=3] +shader = SubResource( 2 ) -[sub_resource type="Shader" id=4] +[sub_resource type="Shader" id=24] code = "shader_type spatial; render_mode depth_test_disable,depth_draw_always,unshaded,cull_disabled,world_vertex_coords; -uniform vec3 position = vec3(0.0); -uniform vec3 size = vec3(1.0); - varying vec3 p; void vertex() { - p = (VERTEX-position)/size; + p = TANGENT; VERTEX=vec3(UV, 0.5); } - void fragment() { - ALBEDO = p; + ALBEDO = 0.5*normalize(p)+vec3(0.5); } " -[sub_resource type="ShaderMaterial" id=5] -shader = SubResource( 4 ) -shader_param/position = Vector3( 0, 0, 0 ) -shader_param/size = Vector3( 1, 1, 1 ) +[sub_resource type="ShaderMaterial" id=25] +shader = SubResource( 24 ) [sub_resource type="Shader" id=6] code = "shader_type spatial; @@ -896,8 +896,9 @@ transparent_bg = true keep_3d_linear = true render_target_update_mode = 0 script = ExtResource( 2 ) -mesh_normal_material = SubResource( 3 ) -mesh_tangent_material = SubResource( 25 ) +position_material = SubResource( 5 ) +normal_material = SubResource( 3 ) +tangent_material = SubResource( 25 ) inv_uv_material = SubResource( 5 ) white_material = SubResource( 7 ) curvature_material = SubResource( 9 ) diff --git a/material_maker/tools/painter/painter.gd b/material_maker/tools/painter/painter.gd index 06c9b4f37..718a73d45 100644 --- a/material_maker/tools/painter/painter.gd +++ b/material_maker/tools/painter/painter.gd @@ -92,17 +92,17 @@ func update_inv_uv_texture(m : Mesh) -> void: add_child(map_renderer) if mesh_inv_uv_tex == null: mesh_inv_uv_tex = ImageTexture.new() - var result = map_renderer.gen(m, "inv_uv", "copy_to_texture", [ mesh_inv_uv_tex ], texture_size) + var result = map_renderer.gen(m, "position", "copy_to_texture", [ mesh_inv_uv_tex ], texture_size) while result is GDScriptFunctionState: result = yield(result, "completed") if mesh_normal_tex == null: mesh_normal_tex = ImageTexture.new() - result = map_renderer.gen(m, "mesh_normal", "copy_to_texture", [ mesh_normal_tex ], texture_size) + result = map_renderer.gen(m, "normal", "copy_to_texture", [ mesh_normal_tex ], texture_size) while result is GDScriptFunctionState: result = yield(result, "completed") if mesh_tangent_tex == null: mesh_tangent_tex = ImageTexture.new() - result = map_renderer.gen(m, "mesh_tangent", "copy_to_texture", [ mesh_tangent_tex ], texture_size) + result = map_renderer.gen(m, "tangent", "copy_to_texture", [ mesh_tangent_tex ], texture_size) while result is GDScriptFunctionState: result = yield(result, "completed") map_renderer.queue_free()