143 lines
3.8 KiB
Plaintext
143 lines
3.8 KiB
Plaintext
[gd_scene load_steps=7 format=2]
|
|
|
|
[ext_resource path="res://material_maker/windows/sdf_builder/preview_3d.gd" type="Script" id=1]
|
|
[ext_resource path="res://material_maker/windows/sdf_builder/gizmo.tscn" type="PackedScene" id=2]
|
|
|
|
[sub_resource type="QuadMesh" id=2]
|
|
size = Vector2( 100, 100 )
|
|
|
|
[sub_resource type="Shader" id=3]
|
|
code = "shader_type spatial;
|
|
|
|
varying float elapsed_time;
|
|
|
|
varying vec3 world_camera;
|
|
varying vec3 world_position;
|
|
|
|
const int MAX_STEPS = 100;
|
|
const float MAX_DIST = 100.0;
|
|
const float SURF_DIST = 1e-3;
|
|
|
|
float box3d(vec3 uv, vec3 s) {
|
|
vec3 q = abs(uv) - s;
|
|
return length(max(q, 0.0))+min(max(q.x, max(q.y, q.z)), 0.0);
|
|
}
|
|
|
|
vec2 GetDist(vec3 p) {
|
|
float _seed_variation_ = 0.0;
|
|
vec2 d = vec2(box3d(p, vec3(0.5)), 0.0);
|
|
|
|
return d;
|
|
}
|
|
|
|
vec2 RayMarch(vec3 ro, vec3 rd) {
|
|
float dO = 0.0;
|
|
float color = 0.0;
|
|
vec2 dS;
|
|
|
|
for (int i = 0; i < MAX_STEPS; i++)
|
|
{
|
|
vec3 p = ro + dO * rd;
|
|
dS = GetDist(p);
|
|
dO += dS.x;
|
|
|
|
if (dS.x < SURF_DIST || dO > MAX_DIST) {
|
|
color = dS.y;
|
|
break;
|
|
}
|
|
}
|
|
return vec2(dO, color);
|
|
}
|
|
|
|
vec3 GetNormal(vec3 p) {
|
|
vec2 e = vec2(1e-2, 0);
|
|
|
|
vec3 n = GetDist(p).x - vec3(
|
|
GetDist(p - e.xyy).x,
|
|
GetDist(p - e.yxy).x,
|
|
GetDist(p - e.yyx).x
|
|
);
|
|
|
|
return normalize(n);
|
|
}
|
|
|
|
void vertex() {
|
|
elapsed_time = TIME;
|
|
vec4 world_position_xyzw = WORLD_MATRIX*vec4(VERTEX, 1.0);
|
|
world_position = world_position_xyzw.xyz/world_position_xyzw.w;
|
|
vec4 world_camera_xyzw = CAMERA_MATRIX * vec4(0, 0, 0, 1);
|
|
world_camera = world_camera_xyzw.xyz/world_camera_xyzw.w;
|
|
}
|
|
|
|
void fragment() {
|
|
float _seed_variation_ = 0.0;
|
|
vec3 ro = world_camera;
|
|
vec3 rd = normalize(world_position - ro);
|
|
|
|
vec2 rm = RayMarch(ro, rd);
|
|
float d = rm.x;
|
|
|
|
if (d >= MAX_DIST) {
|
|
discard;
|
|
} else {
|
|
vec3 p = ro + rd * d;
|
|
ALBEDO = vec3(1.0);
|
|
ROUGHNESS = 1.0;
|
|
METALLIC = 0.0;
|
|
NORMAL = (INV_CAMERA_MATRIX*WORLD_MATRIX*vec4(GetNormal(p), 0.0)).xyz;
|
|
}
|
|
}
|
|
"
|
|
|
|
[sub_resource type="ShaderMaterial" id=4]
|
|
shader = SubResource( 3 )
|
|
|
|
[sub_resource type="PlaneShape" id=5]
|
|
margin = 1.0
|
|
plane = Plane( 0, 0, 1, 0 )
|
|
|
|
[node name="Preview3D" type="ViewportContainer" groups=["preview"]]
|
|
margin_right = 1280.0
|
|
margin_bottom = 720.0
|
|
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="."]
|
|
handle_input_locally = false
|
|
render_target_update_mode = 3
|
|
physics_object_picking = true
|
|
|
|
[node name="Gizmo" parent="Viewport" instance=ExtResource( 2 )]
|
|
|
|
[node name="CameraPosition" type="Spatial" parent="Viewport"]
|
|
|
|
[node name="CameraRotation1" type="Spatial" parent="Viewport/CameraPosition"]
|
|
|
|
[node name="CameraRotation2" type="Spatial" parent="Viewport/CameraPosition/CameraRotation1"]
|
|
|
|
[node name="Camera" type="Camera" parent="Viewport/CameraPosition/CameraRotation1/CameraRotation2"]
|
|
transform = Transform( 1, 0, 0, 0, 0.866025, 0.5, 0, -0.5, 0.866025, 0, 2, 4 )
|
|
current = true
|
|
|
|
[node name="Plane" type="MeshInstance" parent="Viewport/CameraPosition/CameraRotation1/CameraRotation2/Camera"]
|
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -50 )
|
|
mesh = SubResource( 2 )
|
|
material/0 = SubResource( 4 )
|
|
|
|
[node name="Area" type="Area" parent="Viewport/CameraPosition/CameraRotation1/CameraRotation2/Camera/Plane"]
|
|
input_capture_on_drag = true
|
|
|
|
[node name="CollisionShape" type="CollisionShape" parent="Viewport/CameraPosition/CameraRotation1/CameraRotation2/Camera/Plane/Area"]
|
|
shape = SubResource( 5 )
|
|
|
|
[node name="OmniLight" type="DirectionalLight" parent="Viewport"]
|
|
transform = Transform( 0.999941, -0.00199387, -0.01067, 0.0106636, -0.00320327, 0.999938, -0.00202793, -0.999993, -0.00318182, 0, 3.40578, 0 )
|
|
|
|
[connection signal="resized" from="." to="." method="_on_Preview3D_resized"]
|
|
[connection signal="input_event" from="Viewport/CameraPosition/CameraRotation1/CameraRotation2/Camera/Plane/Area" to="." method="_on_Background_input_event"]
|