Gunk mask filtering & related shader uniform settings

This commit is contained in:
Rob Kelly 2025-09-08 17:15:51 -06:00
parent c38502d351
commit b90bd93f61
14 changed files with 98 additions and 87 deletions

BIN
assets/black.png (Stored with Git LFS)

Binary file not shown.

View File

@ -1,36 +0,0 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://cm1jrvx7ftx4c"
path.s3tc="res://.godot/imported/black.png-0c928088330c4cddf9e28b960b6ccae3.s3tc.ctex"
path.etc2="res://.godot/imported/black.png-0c928088330c4cddf9e28b960b6ccae3.etc2.ctex"
metadata={
"imported_formats": ["s3tc_bptc", "etc2_astc"],
"vram_texture": true
}
[deps]
source_file="res://assets/black.png"
dest_files=["res://.godot/imported/black.png-0c928088330c4cddf9e28b960b6ccae3.s3tc.ctex", "res://.godot/imported/black.png-0c928088330c4cddf9e28b960b6ccae3.etc2.ctex"]
[params]
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=0

View File

@ -92,6 +92,7 @@ shader_parameter/overlay_emission_scale = 1.0
shader_parameter/edge_bleed = 0.25
shader_parameter/gunk_mask = ExtResource("3_3t4ks")
shader_parameter/base_uv_scale = Vector3(1, 1, 1)
shader_parameter/base_normal_scale = 1.0
shader_parameter/normal_blend = 1.0
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_gpcv6"]
@ -246,6 +247,7 @@ shader_parameter/overlay_emission_scale = 1.0
shader_parameter/edge_bleed = 0.25
shader_parameter/gunk_mask = ExtResource("31_753oq")
shader_parameter/base_uv_scale = Vector3(1, 1, 1)
shader_parameter/base_normal_scale = 1.0
shader_parameter/normal_blend = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k52xx"]

Binary file not shown.

File diff suppressed because one or more lines are too long

View File

@ -40,7 +40,7 @@ uniform float overlay_emission_scale = 1.0;
#if defined(USE_MASK)
group_uniforms gunk_mask;
uniform float edge_bleed = 0.25;
uniform sampler2D gunk_mask;
uniform sampler2D gunk_mask: hint_default_black, filter_linear_mipmap_anisotropic, repeat_disable;
#endif

View File

@ -7,7 +7,8 @@ render_mode depth_prepass_alpha;
group_uniforms base_material;
uniform vec3 base_uv_scale = vec3(1.0);
uniform sampler2D base_normal_map: filter_linear;
uniform sampler2D base_normal_map: hint_normal, filter_linear;
uniform float base_normal_scale = 0.8;
uniform float normal_blend = 1.0;
void fragment() {
@ -21,20 +22,25 @@ void fragment() {
mat3 TBN = mat3(TANGENT, BINORMAL, NORMAL);
mat3 inv_TBN = transpose(TBN);
vec3 base_nmap = texture(base_normal_map, UV * base_uv_scale.xy).rgb * 2.0 - 1.0;
vec3 base_nmap = textureLod(base_normal_map, UV * base_uv_scale.xy, 0).rgb * 2.0 - 1.0;
vec3 base_world_normal = TBN * base_nmap;
vec3 gunk_nmap = sobel_convolution(UV, uvt);
vec3 gunk_world_normal = TBN * gunk_nmap;
// Unity blending
// see https://blog.selfshadow.com/publications/blending-in-detail/
vec3 n = base_nmap;
// note that there are actually cheaper alternatives to this, if needed
vec3 n = base_nmap * vec3(1.0, 1.0, 1.0 / base_normal_scale);
vec3 n2 = gunk_nmap;
mat3 basis = mat3(
vec3(n.z, n.y, -n.x),
vec3(n.x, n.z, -n.y),
vec3(n.x, n.y, n.z)
);
vec3 nmap = normalize(gunk_nmap.x * basis[0] + gunk_nmap.y * basis[1] + gunk_nmap.z * basis[2]);
vec3 nmap = normalize(n2.x * basis[0] + n2.y * basis[1] + n2.z * basis[2]);
// UDN blending
// vec3 nmap = normalize(vec3(base_nmap.xy + gunk_nmap.xy, base_nmap.z));
vec3 world_normal = TBN * nmap;
NORMAL_MAP = nmap / 2.0 + 0.5;

View File

@ -1,4 +1,4 @@
[gd_scene load_steps=16 format=3 uid="uid://d2664rpg4losx"]
[gd_scene load_steps=14 format=3 uid="uid://d2664rpg4losx"]
[ext_resource type="PackedScene" uid="uid://bi5mxt5s4aq1a" path="res://assets/npc/grunk_beast/grunk_beast.gltf" id="1_hoss2"]
[ext_resource type="Script" uid="uid://dkll8s6kwb41r" path="res://src/world/grunk_beast/procedural_grunk_beast/start_ik.gd" id="2_qic24"]
@ -7,7 +7,6 @@
[ext_resource type="Script" uid="uid://7is3sa00qejh" path="res://src/world/grunk_beast/procedural_grunk_beast/ik_target.gd" id="4_3gbao"]
[ext_resource type="Script" uid="uid://bpyovjodpxjpb" path="res://src/world/grunk_beast/procedural_grunk_beast/step_ray.gd" id="4_faau1"]
[ext_resource type="Script" uid="uid://c1gitpy7s78ev" path="res://src/world/grunk_beast/procedural_grunk_beast/target_container.gd" id="5_wffas"]
[ext_resource type="Texture2D" uid="uid://cm1jrvx7ftx4c" path="res://assets/black.png" id="5_xuag8"]
[ext_resource type="FastNoiseLite" uid="uid://cnlvdtx68giv6" path="res://assets/materials/gunk_noise.tres" id="6_mbqcc"]
[sub_resource type="NoiseTexture3D" id="NoiseTexture3D_2roq2"]
@ -18,14 +17,6 @@ seamless = true
seamless_blend_skirt = 0.5
noise = ExtResource("6_mbqcc")
[sub_resource type="NoiseTexture3D" id="NoiseTexture3D_fk1xc"]
width = 256
height = 256
depth = 32
seamless = true
seamless_blend_skirt = 0.5
noise = ExtResource("6_mbqcc")
[sub_resource type="FastNoiseLite" id="FastNoiseLite_7fplw"]
frequency = 0.0703
@ -35,48 +26,60 @@ height = 32
depth = 128
noise = SubResource("FastNoiseLite_7fplw")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_vvw1q"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ren1j"]
resource_local_to_scene = true
render_priority = 0
shader = ExtResource("4_0gxpq")
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_2roq2")
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
shader_parameter/emission_color = Color(0.25, 0.88, 1, 1)
shader_parameter/uv_scale = Vector2(2, 2)
shader_parameter/pan_speed = Vector2(0, 0)
shader_parameter/time_scale = 0.2
shader_parameter/pixellation = 128.0
shader_parameter/time_pixellation = 30.0
shader_parameter/roughness = 0.15
shader_parameter/specular_contribution = 0.8
shader_parameter/emission_strength = 0.02
shader_parameter/uv_scale = Vector2(2, 2)
shader_parameter/time_scale = 0.2
shader_parameter/edge_bleed = 0.25
shader_parameter/gunk_mask = ExtResource("5_xuag8")
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_2roq2")
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_fk1xc")
shader_parameter/bump_strength = 1.0
shader_parameter/fresnel_color = Color(1, 1, 1, 1)
shader_parameter/fresnel_power = 4.0
shader_parameter/fresnel_intensity = 0.0
shader_parameter/iridescence_color = Color(1, 1, 1, 1)
shader_parameter/iridescence_power = 4.0
shader_parameter/iridescence_intensity = 0.0
shader_parameter/overlay_emission_scale = 1.0
shader_parameter/jitter_magnitude = 0.3
shader_parameter/jitter_time_scale = 0.6
shader_parameter/jitter_noise = SubResource("NoiseTexture3D_omayi")
shader_parameter/vertex_inflation = 0.0
shader_parameter/inflation_pixellation = 10.0
[sub_resource type="ShaderMaterial" id="ShaderMaterial_ml8dd"]
[sub_resource type="ShaderMaterial" id="ShaderMaterial_7gi2a"]
resource_local_to_scene = true
render_priority = 0
shader = ExtResource("4_0gxpq")
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_2roq2")
shader_parameter/color_1 = Color(0, 0.03, 0.1, 1)
shader_parameter/color_2 = Color(0, 0.1, 0.3, 1)
shader_parameter/emission_color = Color(0.25, 0.88, 1, 1)
shader_parameter/uv_scale = Vector2(2, 2)
shader_parameter/pan_speed = Vector2(0, 0)
shader_parameter/time_scale = 0.2
shader_parameter/pixellation = 128.0
shader_parameter/time_pixellation = 30.0
shader_parameter/roughness = 0.15
shader_parameter/specular_contribution = 0.8
shader_parameter/emission_strength = 0.02
shader_parameter/uv_scale = Vector2(2, 2)
shader_parameter/time_scale = 0.2
shader_parameter/edge_bleed = 0.25
shader_parameter/gunk_mask = ExtResource("5_xuag8")
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_2roq2")
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_fk1xc")
shader_parameter/bump_strength = 1.0
shader_parameter/fresnel_color = Color(1, 1, 1, 1)
shader_parameter/fresnel_power = 4.0
shader_parameter/fresnel_intensity = 0.0
shader_parameter/iridescence_color = Color(1, 1, 1, 1)
shader_parameter/iridescence_power = 4.0
shader_parameter/iridescence_intensity = 0.0
shader_parameter/overlay_emission_scale = 1.0
shader_parameter/jitter_magnitude = 0.1
shader_parameter/jitter_time_scale = 0.6
shader_parameter/jitter_noise = SubResource("NoiseTexture3D_omayi")
@ -93,10 +96,10 @@ transform = Transform3D(-4.37114e-08, 0, -1, 0, 1, 0, 1, 0, -4.37114e-08, 0, 0,
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
[node name="Body" parent="Armature/Skeleton3D" index="0"]
surface_material_override/0 = SubResource("ShaderMaterial_vvw1q")
surface_material_override/0 = SubResource("ShaderMaterial_ren1j")
[node name="Leg" parent="Armature/Skeleton3D" index="1"]
surface_material_override/0 = SubResource("ShaderMaterial_ml8dd")
surface_material_override/0 = SubResource("ShaderMaterial_7gi2a")
[node name="FrontLeftLeg" type="SkeletonIK3D" parent="Armature/Skeleton3D" index="2"]
root_bone = &"Leg1.F.L"