summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2026-03-24 17:23:40 -0700
committeryum <yum.food.vr@gmail.com>2026-03-24 17:23:40 -0700
commit81637c1a3fab4f92e6da7517dd118d5bb4526865 (patch)
treed01e3ee10c5992460982767101dda070c46801ae
parent043de4d0360c54a507b90369e1afe1d1d6ace28f (diff)
Encapsulate ssfd and letter grid inside pbr.cginc
-rwxr-xr-x3ner.cginc18
-rwxr-xr-x3ner.shader1
-rwxr-xr-xbrdf.cginc2
-rw-r--r--data.cginc2
-rw-r--r--decal.cginc1
-rwxr-xr-xglobals.cginc1
-rwxr-xr-xpbr.cginc27
7 files changed, 31 insertions, 21 deletions
diff --git a/3ner.cginc b/3ner.cginc
index 3a27153..e5dd027 100755
--- a/3ner.cginc
+++ b/3ner.cginc
@@ -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" {}
diff --git a/brdf.cginc b/brdf.cginc
index 4081d49..54340aa 100755
--- a/brdf.cginc
+++ b/brdf.cginc
@@ -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;
diff --git a/data.cginc b/data.cginc
index d7883a8..b2ddb25 100644
--- a/data.cginc
+++ b/data.cginc
@@ -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;
diff --git a/pbr.cginc b/pbr.cginc
index 47ef00c..f81f95e 100755
--- a/pbr.cginc
+++ b/pbr.cginc
@@ -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);