Started preparing color support in easysdf node

This commit is contained in:
Rodolphe Suescun 2022-07-24 09:27:50 +02:00
parent 55a562c464
commit d94c4bb4a7
10 changed files with 172 additions and 11 deletions

View File

@ -27,14 +27,26 @@ func get_filtered_parameter_defs(parameters_filter : String) -> Array:
return defs
func get_output_defs(_show_hidden : bool = false) -> Array:
var outputs : Array
var color_output : String
var gs_output : String
match get_scene_type():
"SDF3D":
return [ { type="sdf3d" } ]
outputs = [ { type="sdf3d" } ]
color_output = "tex3d"
gs_output = "tex3d_gs"
_:
if editor:
return [ { type="rgb" } ]
outputs = [ { type="rgb" } ]
else:
return [ { type="sdf2d" } ]
outputs = [ { type="sdf2d" } ]
color_output = "rgba"
gs_output = "float"
outputs.push_back({type=color_output, channel="albedo"})
outputs.push_back({type=gs_output, channel="metallic"})
outputs.push_back({type=gs_output, channel="roughness"})
outputs.push_back({type=color_output, channel="emission"})
return outputs
func get_scene_type() -> String:
if scene.empty():

File diff suppressed because one or more lines are too long

View File

@ -0,0 +1,20 @@
extends "res://addons/material_maker/sdf_builder/sdf2d/union.gd"
export var channel_name : String
export(int, "greyscale", "rgba") var type : int
func _ready():
pass # Replace with function body.
func get_children_types():
return [ "TEX" ]
func get_parameter_defs():
return [
]
func get_includes():
return [ ]
func scene_to_shader_model(scene : Dictionary, uv : String = "$uv", editor : bool = false) -> Dictionary:
return {}

View File

@ -90,7 +90,8 @@ func scene_to_shader_model(scene : Dictionary, uv : String = "$uv", editor = fal
_:
print("Unsupported parameter %s of type %s" % [ p.name, p.type ])
return {}
shader_model.includes = get_includes(scene)
if ! shader_model.empty():
shader_model.includes = get_includes(scene)
return shader_model
func generate_rotate_3d(variable, _scene) -> String:

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=50 format=2]
[gd_scene load_steps=51 format=2]
[ext_resource path="res://addons/material_maker/sdf_builder/sdf2d/circle.gd" type="Script" id=1]
[ext_resource path="res://addons/material_maker/sdf_builder/sdf_builder.gd" type="Script" id=2]
@ -36,6 +36,7 @@
[ext_resource path="res://addons/material_maker/sdf_builder/sdf3d/revolution.gd" type="Script" id=34]
[ext_resource path="res://addons/material_maker/sdf_builder/sdf3d/cylinder.gd" type="Script" id=35]
[ext_resource path="res://addons/material_maker/sdf_builder/sdf2d/polygon.gd" type="Script" id=36]
[ext_resource path="res://addons/material_maker/sdf_builder/sdf2d/color.gd" type="Script" id=37]
[sub_resource type="AtlasTexture" id=1]
flags = 4
@ -246,6 +247,34 @@ script = ExtResource( 13 )
item_type = "Morph"
item_category = "SDF2D"
[node name="Color" type="Node" parent="SDF2D"]
[node name="Albedo" type="Node" parent="SDF2D/Color"]
script = ExtResource( 37 )
item_type = "Albedo2D"
item_category = "SDF2D"
channel_name = "albedo"
type = 1
[node name="Metallic" type="Node" parent="SDF2D/Color"]
script = ExtResource( 37 )
item_type = "Metallic2D"
item_category = "SDF2D"
channel_name = "metallic"
[node name="Roughness" type="Node" parent="SDF2D/Color"]
script = ExtResource( 37 )
item_type = "Roughness2D"
item_category = "SDF2D"
channel_name = "roughness"
[node name="Emission" type="Node" parent="SDF2D/Color"]
script = ExtResource( 37 )
item_type = "Albedo2D"
item_category = "SDF2D"
channel_name = "emission"
type = 1
[node name="SDF3D" type="Node" parent="."]
[node name="Shape" type="Node" parent="SDF3D"]

View File

@ -0,0 +1,5 @@
extends "res://material_maker/panels/preview_2d/preview_2d_panel.gd"
func _ready():
pass # Replace with function body.

View File

@ -0,0 +1,91 @@
[gd_scene load_steps=7 format=2]
[ext_resource path="res://material_maker/panels/preview_2d/preview_2d_panel.tscn" type="PackedScene" id=1]
[sub_resource type="Shader" id=2]
resource_local_to_scene = true
code = "shader_type canvas_item;
void fragment() {
COLOR = vec4(0.0, 0.0, 0.0, 1.0);
}
"
[sub_resource type="ShaderMaterial" id=3]
resource_local_to_scene = true
shader = SubResource( 2 )
[sub_resource type="GDScript" id=1]
script/source = "extends \"res://material_maker/panels/preview_2d/preview_2d_panel.gd\"
func _ready():
pass # Replace with function body.
"
[sub_resource type="Shader" id=4]
resource_local_to_scene = true
[sub_resource type="ShaderMaterial" id=5]
resource_local_to_scene = true
shader = SubResource( 4 )
[node name="Preview2D" instance=ExtResource( 1 )]
material = SubResource( 3 )
script = SubResource( 1 )
shader = "uniform vec2 preview_2d_size = vec2(100.0);
uniform float preview_2d_scale = 1.2;
uniform vec2 preview_2d_center = vec2(0.5);
uniform int mode = 0;
uniform vec4 background_color_1 = vec4(0.0);
uniform vec4 background_color_2 = vec4(1.0);
void fragment() {
vec2 ratio = preview_2d_size;
vec2 uv = preview_2d_center+(UV-0.5)*preview_2d_scale*ratio/min(ratio.x, ratio.y);
if (mode == 2 && (uv.x < 0.0 || uv.x > 1.0 || uv.y < 0.0 || uv.y > 1.0)) {
COLOR = vec4(0.0);
} else {
if (mode == 1) {
uv = fract(uv);
}
vec4 image = preview_2d_postprocessed(uv);
float checkerboard = mod(floor(uv.x*32.0)+floor(uv.y*32.0), 2.0);
vec3 image_with_background = mix(mix(background_color_1, background_color_2, checkerboard).rgb, image.rgb, image.a);
COLOR = vec4(image_with_background, 1.0);
}
}
"
shader_accumulate = "uniform sampler2D sum;
uniform bool clear = false;
uniform vec2 preview_2d_size = vec2(100.0);
uniform float preview_2d_scale = 1.2;
uniform vec2 preview_2d_center = vec2(0.5);
void fragment() {
vec2 ratio = preview_2d_size;
vec2 jitter_uv = UV+0.75*fract(sin(vec2(TIME, TIME*0.5)*43758.5453123))/preview_2d_size;
vec2 uv = preview_2d_center+(jitter_uv-0.5)*preview_2d_scale*ratio/min(ratio.x, ratio.y);
if (clear) {
COLOR = preview_2d(uv);
} else {
COLOR = textureLod(sum, UV, 0.0)+preview_2d(uv);
}
}
"
shader_divide = "shader_type canvas_item;
uniform sampler2D sum;
uniform int divide = 1;
void fragment() {
COLOR = vec4(texture(sum, UV).rgb/float(divide), 1.0);
}"
[node name="ContextMenu" parent="." index="15"]
items = [ "Reset view", null, 0, false, false, 0, 0, null, "", false ]
[node name="View" parent="ContextMenu" index="0"]
items = [ "Extend", null, 2, true, false, 0, 0, null, "", false, "Repeat", null, 2, false, false, 1, 0, null, "", false, "Clamp", null, 2, false, false, 2, 0, null, "", false, "Temporal AA", null, 2, false, false, 3, 0, null, "", false ]
[node name="Iteration" parent="Accumulate" index="0"]
material = SubResource( 5 )

View File

@ -104,7 +104,6 @@ func on_float_parameters_changed(parameter_changes : Dictionary) -> bool:
break
return return_value
func _on_Preview3D_resized():
if viewport != null:
viewport.size = rect_size

View File

@ -103,8 +103,12 @@ mouse_filter = 1
size_flags_horizontal = 3
size_flags_vertical = 3
script = ExtResource( 1 )
__meta__ = {
"_edit_use_anchors_": false
}
[node name="Viewport" type="Viewport" parent="."]
size = Vector2( 1, 1 )
handle_input_locally = false
render_target_update_mode = 3
physics_object_picking = true

View File

@ -1,7 +1,7 @@
[gd_scene load_steps=8 format=2]
[ext_resource path="res://addons/material_maker/engine/gen_sdf.gd" type="Script" id=1]
[ext_resource path="res://material_maker/panels/preview_2d/preview_2d_panel.tscn" type="PackedScene" id=2]
[ext_resource path="res://material_maker/windows/sdf_builder/preview_2d.tscn" type="PackedScene" id=2]
[ext_resource path="res://material_maker/windows/sdf_builder/sdf_builder.gd" type="Script" id=3]
[ext_resource path="res://material_maker/windows/sdf_builder/sdf_builder_tree.gd" type="Script" id=4]
[ext_resource path="res://material_maker/windows/sdf_builder/preview_3d.tscn" type="PackedScene" id=5]