diff options
| author | yum <yum.food.vr@gmail.com> | 2026-03-24 17:23:40 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2026-03-24 17:23:40 -0700 |
| commit | 81637c1a3fab4f92e6da7517dd118d5bb4526865 (patch) | |
| tree | d01e3ee10c5992460982767101dda070c46801ae | |
| parent | 043de4d0360c54a507b90369e1afe1d1d6ace28f (diff) | |
Encapsulate ssfd and letter grid inside pbr.cginc
| -rwxr-xr-x | 3ner.cginc | 18 | ||||
| -rwxr-xr-x | 3ner.shader | 1 | ||||
| -rwxr-xr-x | brdf.cginc | 2 | ||||
| -rw-r--r-- | data.cginc | 2 | ||||
| -rw-r--r-- | decal.cginc | 1 | ||||
| -rwxr-xr-x | globals.cginc | 1 | ||||
| -rwxr-xr-x | pbr.cginc | 27 |
7 files changed, 31 insertions, 21 deletions
@@ -20,8 +20,6 @@ #include "ray_marching.cginc" #include "vertex.cginc" #include "matcap.cginc" -#include "letter_grid.cginc" -#include "ssfd.cginc" v2f vert(appdata v) { #if defined(SHADOW_CASTER_PASS) && !defined(_SHADOW_CASTER) @@ -313,18 +311,6 @@ float4 frag(v2f i, uint facing : SV_IsFrontFace Pbr pbr = getPbr(i); -#if defined(_SSFD) - float ssfd_mask = ssfd(i.uv01.xy, _SSFD_Scale, _SSFD_Max_Fwidth, 0, _SSFD_Noise); - pbr.albedo *= (ssfd_mask > _SSFD_Threshold); -#endif - -#if defined(_LETTER_GRID) - LetterGridOutput letter_grid_output = LetterGrid(i); - pbr.albedo.rgb = lerp(pbr.albedo.rgb, letter_grid_output.albedo, letter_grid_output.albedo.a); - pbr.metallic = lerp(pbr.metallic, letter_grid_output.metallic, letter_grid_output.albedo.a); - pbr.roughness = lerp(pbr.roughness, letter_grid_output.roughness, letter_grid_output.albedo.a); -#endif - [branch] if (_Mode == 1) { clip(pbr.albedo.a - 0.5); @@ -337,10 +323,6 @@ float4 frag(v2f i, uint facing : SV_IsFrontFace BrdfData bd; float4 lit = brdf(pbr, light_data, bd); -#if defined(_LETTER_GRID) - lit.rgb += letter_grid_output.emission * letter_grid_output.albedo.a; -#endif - return apply_debug_view(i, pbr, light_data, bd, lit); } diff --git a/3ner.shader b/3ner.shader index e52e936..3435c1f 100755 --- a/3ner.shader +++ b/3ner.shader @@ -1075,6 +1075,7 @@ Shader "yum_food/3ner" //ifex _SSFD_Enabled==0 [HideInInspector] m_start_SSFD("SSFD", Float) = 0 [ThryToggle(_SSFD)] _SSFD_Enabled("Enable", Float) = 0 + [HDR] _SSFD_Tint("Tint", Color) = (1, 1, 1, 1) _SSFD_Scale("Scale", Float) = 1.0 _SSFD_Max_Fwidth("Max fwidth", Float) = 1.0 _SSFD_Noise("Noise", 3D) = "black" {} @@ -245,7 +245,7 @@ float4 brdf(Pbr pbr, LightData data, out BrdfData bd) { diffuse *= data.common.ao; specular *= data.common.spec_ao; -#if defined(_EMISSIONS) && defined(FORWARD_BASE_PASS) +#if (defined(_EMISSIONS) || defined(_LETTER_GRID)) && defined(FORWARD_BASE_PASS) float3 emission = pbr.emission; #else float3 emission = 0; @@ -18,7 +18,7 @@ struct Pbr { float roughness_perceptual; float roughness; float metallic; -#if defined(_EMISSIONS) && defined(FORWARD_BASE_PASS) +#if (defined(_EMISSIONS) || defined(_LETTER_GRID)) && defined(FORWARD_BASE_PASS) float3 emission; #endif #if defined(_BENT_NORMALS) diff --git a/decal.cginc b/decal.cginc index 9203d5f..a2092da 100644 --- a/decal.cginc +++ b/decal.cginc @@ -3,6 +3,7 @@ #include "data.cginc" #include "interpolators.cginc" +#include "math.cginc" #include "texture_utils.cginc" float4 decal_sample(texture2D tex, float2 uv, int uv_mode) { diff --git a/globals.cginc b/globals.cginc index b2f798f..ef26ca7 100755 --- a/globals.cginc +++ b/globals.cginc @@ -565,6 +565,7 @@ float4 _Vertex_Deformation_Slot_15_Vector_3; #endif // _VERTEX_DEFORMATION #if defined(_SSFD) +float4 _SSFD_Tint; float _SSFD_Scale; float _SSFD_Max_Fwidth; texture3D _SSFD_Noise; @@ -1,11 +1,13 @@ #ifndef __PBR_INC #define __PBR_INC -#include "filamented.cginc" #include "data.cginc" #include "decal.cginc" +#include "filamented.cginc" #include "instancing.cginc" #include "interpolators.cginc" +#include "letter_grid.cginc" +#include "ssfd.cginc" #include "texture_utils.cginc" #if defined(_PARALLAX_HEIGHTMAP) @@ -168,6 +170,27 @@ void apply_kintsugi(float3 world_pos, inout float3 albedo, inout float smoothnes #endif // _KINTSUGI } +void apply_letter_grid(v2f i, inout Pbr pbr) { +#if defined(_LETTER_GRID) + LetterGridOutput lg = LetterGrid(i); + pbr.albedo.rgb = lerp(pbr.albedo.rgb, lg.albedo, lg.albedo.a); + pbr.metallic = lerp(pbr.metallic, lg.metallic, lg.albedo.a); + pbr.roughness = lerp(pbr.roughness, lg.roughness, lg.albedo.a); +#if defined(FORWARD_BASE_PASS) + pbr.emission += lg.emission * lg.albedo.a; +#endif +#endif +} + +void apply_ssfd(float2 uv, inout float3 albedo) { +#if defined(_SSFD) + float ssfd_mask = ssfd(uv, _SSFD_Scale, _SSFD_Max_Fwidth, 0, _SSFD_Noise); + float ssfd_mask_fw = fwidth(ssfd_mask); + ssfd_mask = smoothstep(_SSFD_Threshold - ssfd_mask_fw * 0.5, _SSFD_Threshold + ssfd_mask_fw * 0.5, ssfd_mask); + albedo += ssfd_mask * _SSFD_Tint.rgb; +#endif +} + Pbr getPbr(v2f i) { Pbr pbr = (Pbr) 0; @@ -213,6 +236,8 @@ Pbr getPbr(v2f i) { apply_marble(i.worldPos, pbr.albedo.xyz); apply_kintsugi(i.worldPos, pbr.albedo.xyz, pbr.smoothness, pbr.metallic); + apply_ssfd(i.uv01.xy, pbr.albedo.xyz); + apply_letter_grid(i, pbr); applyDecals(i, pbr, normal_tangent); |
