summaryrefslogtreecommitdiffstats
path: root/yum_pbr.cginc
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-04-18 16:10:12 -0700
committeryum <yum.food.vr@gmail.com>2025-04-18 16:10:12 -0700
commit4e8de4d6f93bce6d4951ad85fe4ae31b9e0cdedd (patch)
tree488434a08b1418ec0ff30a1d7016ad056407999f /yum_pbr.cginc
parent66c73e2634fb9e652728a405a9104318d051bb00 (diff)
Add 3d sdf feature
Diffstat (limited to 'yum_pbr.cginc')
-rw-r--r--yum_pbr.cginc37
1 files changed, 34 insertions, 3 deletions
diff --git a/yum_pbr.cginc b/yum_pbr.cginc
index 71d7f2e..662ee1c 100644
--- a/yum_pbr.cginc
+++ b/yum_pbr.cginc
@@ -32,9 +32,28 @@ YumPbr GetYumPbr(v2f i) {
float2 raw_uv = i.uv01.xy;
#if defined(_UV_DOMAIN_WARPING)
- i.uv01.xy = domainWarp2(i.uv01.xy, _UV_Domain_Warping_Spatial_Octaves,
- _UV_Domain_Warping_Spatial_Strength, _UV_Domain_Warping_Spatial_Scale,
- _UV_Domain_Warping_Spatial_Speed);
+ {
+ float2 warped_uv = raw_uv;
+ float amplitude = _UV_Domain_Warping_Spatial_Strength;
+ float frequency = _UV_Domain_Warping_Spatial_Scale;
+
+ float2 speed_direction = _UV_Domain_Warping_Spatial_Direction;
+ float2 time_offset = speed_direction * _Time.y * _UV_Domain_Warping_Spatial_Speed;
+
+ const float lacunarity = 2.0;
+ const float persistence = 0.5;
+
+ [loop]
+ for (uint ii = 0; ii < _UV_Domain_Warping_Spatial_Octaves; ii++) {
+ float2 noise_uv = warped_uv * frequency + time_offset;
+ float2 offset_sample = _UV_Domain_Warping_Noise.SampleLevel(trilinear_repeat_s, noise_uv, 0).rg;
+ offset_sample = (offset_sample * 2.0 - 1.0);
+ warped_uv += offset_sample * amplitude;
+ frequency *= lacunarity;
+ amplitude *= persistence;
+ }
+ i.uv01.xy = warped_uv;
+ }
#endif
#if defined(OUTLINE_PASS)
@@ -46,6 +65,18 @@ YumPbr GetYumPbr(v2f i) {
UV_SCOFF(i, _MainTex_ST, /*which_channel=*/0)) * _Color;
#endif
+#if defined(_3D_SDF)
+ {
+ float3 sdf_uv = float3(i.uv01.xy, _3D_SDF_Z + _Time.y * _3D_SDF_Z_Speed);
+ float sdf_value = _3D_SDF_Texture.SampleLevel(trilinear_repeat_s, sdf_uv, 0).r;
+ float4 is_lit = sdf_value < _3D_SDF_Thresholds;
+ result.albedo.rgb = lerp(result.albedo.rgb, _3D_SDF_Color_3, is_lit.w);
+ result.albedo.rgb = lerp(result.albedo.rgb, _3D_SDF_Color_2, is_lit.z);
+ result.albedo.rgb = lerp(result.albedo.rgb, _3D_SDF_Color_1, is_lit.y);
+ result.albedo.rgb = lerp(result.albedo.rgb, _3D_SDF_Color_0, is_lit.x);
+ }
+#endif
+
float3 normal_tangent = UnpackScaleNormal(
tex2D(_BumpMap, UV_SCOFF(i, _BumpMap_ST, /*which_channel=*/0)),
_BumpScale);