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/edge_bleed = 0.25
shader_parameter/gunk_mask = ExtResource("3_3t4ks") shader_parameter/gunk_mask = ExtResource("3_3t4ks")
shader_parameter/base_uv_scale = Vector3(1, 1, 1) shader_parameter/base_uv_scale = Vector3(1, 1, 1)
shader_parameter/base_normal_scale = 1.0
shader_parameter/normal_blend = 1.0 shader_parameter/normal_blend = 1.0
[sub_resource type="ConcavePolygonShape3D" id="ConcavePolygonShape3D_gpcv6"] [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/edge_bleed = 0.25
shader_parameter/gunk_mask = ExtResource("31_753oq") shader_parameter/gunk_mask = ExtResource("31_753oq")
shader_parameter/base_uv_scale = Vector3(1, 1, 1) shader_parameter/base_uv_scale = Vector3(1, 1, 1)
shader_parameter/base_normal_scale = 1.0
shader_parameter/normal_blend = 1.0 shader_parameter/normal_blend = 1.0
[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_k52xx"] [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) #if defined(USE_MASK)
group_uniforms gunk_mask; group_uniforms gunk_mask;
uniform float edge_bleed = 0.25; uniform float edge_bleed = 0.25;
uniform sampler2D gunk_mask; uniform sampler2D gunk_mask: hint_default_black, filter_linear_mipmap_anisotropic, repeat_disable;
#endif #endif

View File

@ -7,7 +7,8 @@ render_mode depth_prepass_alpha;
group_uniforms base_material; group_uniforms base_material;
uniform vec3 base_uv_scale = vec3(1.0); 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; uniform float normal_blend = 1.0;
void fragment() { void fragment() {
@ -21,20 +22,25 @@ void fragment() {
mat3 TBN = mat3(TANGENT, BINORMAL, NORMAL); mat3 TBN = mat3(TANGENT, BINORMAL, NORMAL);
mat3 inv_TBN = transpose(TBN); 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 base_world_normal = TBN * base_nmap;
vec3 gunk_nmap = sobel_convolution(UV, uvt); vec3 gunk_nmap = sobel_convolution(UV, uvt);
vec3 gunk_world_normal = TBN * gunk_nmap; vec3 gunk_world_normal = TBN * gunk_nmap;
// Unity blending // Unity blending
// see https://blog.selfshadow.com/publications/blending-in-detail/ // 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( mat3 basis = mat3(
vec3(n.z, n.y, -n.x), vec3(n.z, n.y, -n.x),
vec3(n.x, n.z, -n.y), vec3(n.x, n.z, -n.y),
vec3(n.x, n.y, n.z) 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; vec3 world_normal = TBN * nmap;
NORMAL_MAP = nmap / 2.0 + 0.5; 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="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"] [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://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://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="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"] [ext_resource type="FastNoiseLite" uid="uid://cnlvdtx68giv6" path="res://assets/materials/gunk_noise.tres" id="6_mbqcc"]
[sub_resource type="NoiseTexture3D" id="NoiseTexture3D_2roq2"] [sub_resource type="NoiseTexture3D" id="NoiseTexture3D_2roq2"]
@ -18,14 +17,6 @@ seamless = true
seamless_blend_skirt = 0.5 seamless_blend_skirt = 0.5
noise = ExtResource("6_mbqcc") 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"] [sub_resource type="FastNoiseLite" id="FastNoiseLite_7fplw"]
frequency = 0.0703 frequency = 0.0703
@ -35,48 +26,60 @@ height = 32
depth = 128 depth = 128
noise = SubResource("FastNoiseLite_7fplw") noise = SubResource("FastNoiseLite_7fplw")
[sub_resource type="ShaderMaterial" id="ShaderMaterial_vvw1q"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_ren1j"]
resource_local_to_scene = true resource_local_to_scene = true
render_priority = 0 render_priority = 0
shader = ExtResource("4_0gxpq") 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_1 = Color(0, 0.03, 0.1, 1)
shader_parameter/color_2 = Color(0, 0.1, 0.3, 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/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/pixellation = 128.0
shader_parameter/time_pixellation = 30.0 shader_parameter/time_pixellation = 30.0
shader_parameter/roughness = 0.15 shader_parameter/roughness = 0.15
shader_parameter/specular_contribution = 0.8 shader_parameter/specular_contribution = 0.8
shader_parameter/emission_strength = 0.02 shader_parameter/emission_strength = 0.02
shader_parameter/uv_scale = Vector2(2, 2) shader_parameter/bump_strength = 1.0
shader_parameter/time_scale = 0.2 shader_parameter/fresnel_color = Color(1, 1, 1, 1)
shader_parameter/edge_bleed = 0.25 shader_parameter/fresnel_power = 4.0
shader_parameter/gunk_mask = ExtResource("5_xuag8") shader_parameter/fresnel_intensity = 0.0
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_2roq2") shader_parameter/iridescence_color = Color(1, 1, 1, 1)
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_fk1xc") 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_magnitude = 0.3
shader_parameter/jitter_time_scale = 0.6 shader_parameter/jitter_time_scale = 0.6
shader_parameter/jitter_noise = SubResource("NoiseTexture3D_omayi") shader_parameter/jitter_noise = SubResource("NoiseTexture3D_omayi")
shader_parameter/vertex_inflation = 0.0 shader_parameter/vertex_inflation = 0.0
shader_parameter/inflation_pixellation = 10.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 resource_local_to_scene = true
render_priority = 0 render_priority = 0
shader = ExtResource("4_0gxpq") 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_1 = Color(0, 0.03, 0.1, 1)
shader_parameter/color_2 = Color(0, 0.1, 0.3, 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/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/pixellation = 128.0
shader_parameter/time_pixellation = 30.0 shader_parameter/time_pixellation = 30.0
shader_parameter/roughness = 0.15 shader_parameter/roughness = 0.15
shader_parameter/specular_contribution = 0.8 shader_parameter/specular_contribution = 0.8
shader_parameter/emission_strength = 0.02 shader_parameter/emission_strength = 0.02
shader_parameter/uv_scale = Vector2(2, 2) shader_parameter/bump_strength = 1.0
shader_parameter/time_scale = 0.2 shader_parameter/fresnel_color = Color(1, 1, 1, 1)
shader_parameter/edge_bleed = 0.25 shader_parameter/fresnel_power = 4.0
shader_parameter/gunk_mask = ExtResource("5_xuag8") shader_parameter/fresnel_intensity = 0.0
shader_parameter/gunk_noise = SubResource("NoiseTexture3D_2roq2") shader_parameter/iridescence_color = Color(1, 1, 1, 1)
shader_parameter/gunk_normal_map = SubResource("NoiseTexture3D_fk1xc") 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_magnitude = 0.1
shader_parameter/jitter_time_scale = 0.6 shader_parameter/jitter_time_scale = 0.6
shader_parameter/jitter_noise = SubResource("NoiseTexture3D_omayi") 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) transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -1, 0)
[node name="Body" parent="Armature/Skeleton3D" index="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"] [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"] [node name="FrontLeftLeg" type="SkeletonIK3D" parent="Armature/Skeleton3D" index="2"]
root_bone = &"Leg1.F.L" root_bone = &"Leg1.F.L"