From f7c5e546c220f0f7be8ec3a9cccdb4641114cfe1 Mon Sep 17 00:00:00 2001 From: yum Date: Thu, 18 Dec 2025 01:00:14 -0800 Subject: screw with operator ordering --- 3ner.shader | 4 +-- globals.cginc | 4 +-- vertex.cginc | 68 +++++++++++++++++++++++++++--------------------- vertex_deformation.slang | 32 +++++++++++------------ 4 files changed, 58 insertions(+), 50 deletions(-) diff --git a/3ner.shader b/3ner.shader index caf1809..442b493 100644 --- a/3ner.shader +++ b/3ner.shader @@ -279,8 +279,8 @@ Shader "yum_food/3ner" _Vertex_Deformation_FBM_Velocity("Velocity", Vector) = (0, 0, .01) _Vertex_Deformation_FBM_Gain("Gain", Range(0,1)) = 0.5 _Vertex_Deformation_FBM_Lacunarity("Lacunarity", Range(1,10)) = 2 - _Vertex_Deformation_FBM_Amplitude("Amplitude", Range(0,1)) = 1 - _Vertex_Deformation_FBM_Scale("Scale", Float) = 1 + _Vertex_Deformation_FBM_Amplitude("Amplitude", Vector) = (1, 1, 1, 0) + _Vertex_Deformation_FBM_Period("Period", Vector) = (1, 1, 1, 0) _Vertex_Deformation_FBM_Octaves("Octaves", Range(1, 5.1)) = 3 [HideInInspector] m_end_Vertex_Deformation_FBM("FBM", Float) = 0 //endex diff --git a/globals.cginc b/globals.cginc index f872847..c096e89 100644 --- a/globals.cginc +++ b/globals.cginc @@ -138,10 +138,10 @@ float3 _Vertex_Deformation_Sine_Waves_omega; #if defined(_VERTEX_DEFORMATION_FBM) float3 _Vertex_Deformation_FBM_Velocity; -float _Vertex_Deformation_FBM_Amplitude; +float3 _Vertex_Deformation_FBM_Amplitude; float _Vertex_Deformation_FBM_Gain; float _Vertex_Deformation_FBM_Lacunarity; -float _Vertex_Deformation_FBM_Scale; +float3 _Vertex_Deformation_FBM_Period; float _Vertex_Deformation_FBM_Octaves; #endif // _VERTEX_DEFORMATION_FBM diff --git a/vertex.cginc b/vertex.cginc index 40c283f..9a1ed2f 100644 --- a/vertex.cginc +++ b/vertex.cginc @@ -152,16 +152,16 @@ #if defined(_VERTEX_DEFORMATION_FBM) #define VERTEX_DEFORM_FBM_PREAMBLE \ float st = t; \ - float amplitude = _Vertex_Deformation_FBM_Amplitude; \ + float3 amplitude = _Vertex_Deformation_FBM_Amplitude; \ float gain = _Vertex_Deformation_FBM_Gain; \ float lacunarity = _Vertex_Deformation_FBM_Lacunarity; \ - float scale = _Vertex_Deformation_FBM_Scale; \ + float3 period = _Vertex_Deformation_FBM_Period; \ float octaves = _Vertex_Deformation_FBM_Octaves; \ float3 velocity = _Vertex_Deformation_FBM_Velocity #define VERTEX_DEFORM_FBM_POS \ - objPos = fbm(objPos, st, amplitude, gain, lacunarity, scale, octaves, velocity) + objPos = fbm(objPos, st, amplitude, gain, lacunarity, period, octaves, velocity) #define VERTEX_DEFORM_FBM_NORM \ - fbm_normal(objPos, objNorm, objTan, st, amplitude, gain, lacunarity, scale, octaves, velocity) + fbm_normal(objPos, objNorm, objTan, st, amplitude, gain, lacunarity, period, octaves, velocity) #else #define VERTEX_DEFORM_FBM_PREAMBLE #define VERTEX_DEFORM_FBM_POS @@ -170,29 +170,40 @@ void deform(inout float3 objPos) { const float t = getTime(); + // Tube to plane. { - VERTEX_DEFORM_TUBE_TO_PLANE_0_PREAMBLE; - VERTEX_DEFORM_TUBE_TO_PLANE_0_POS; - } - { - VERTEX_DEFORM_AXIS_ALIGN_PREAMBLE; - VERTEX_DEFORM_AXIS_ALIGN_POS; - } - { - VERTEX_DEFORM_TUBE_TO_PLANE_1_PREAMBLE; - VERTEX_DEFORM_TUBE_TO_PLANE_1_POS; + { + VERTEX_DEFORM_TUBE_TO_PLANE_0_PREAMBLE; + VERTEX_DEFORM_TUBE_TO_PLANE_0_POS; + } + { + VERTEX_DEFORM_AXIS_ALIGN_PREAMBLE; + VERTEX_DEFORM_AXIS_ALIGN_POS; + } + { + VERTEX_DEFORM_TUBE_TO_PLANE_1_PREAMBLE; + VERTEX_DEFORM_TUBE_TO_PLANE_1_POS; + } } + // Here we're a plane. { - VERTEX_DEFORM_PLANE_TO_TUBE_0_PREAMBLE; - VERTEX_DEFORM_PLANE_TO_TUBE_0_POS; - } - { - VERTEX_DEFORM_POINT_ALIGN_PREAMBLE; - VERTEX_DEFORM_POINT_ALIGN_POS; + VERTEX_DEFORM_FBM_PREAMBLE; + VERTEX_DEFORM_FBM_POS; } + // Plane to tube. { - VERTEX_DEFORM_PLANE_TO_TUBE_1_PREAMBLE; - VERTEX_DEFORM_PLANE_TO_TUBE_1_POS; + { + VERTEX_DEFORM_PLANE_TO_TUBE_0_PREAMBLE; + VERTEX_DEFORM_PLANE_TO_TUBE_0_POS; + } + { + VERTEX_DEFORM_POINT_ALIGN_PREAMBLE; + VERTEX_DEFORM_POINT_ALIGN_POS; + } + { + VERTEX_DEFORM_PLANE_TO_TUBE_1_PREAMBLE; + VERTEX_DEFORM_PLANE_TO_TUBE_1_POS; + } } { VERTEX_DEFORM_NORM_CONVERSION_PREAMBLE; @@ -206,10 +217,6 @@ void deform(inout float3 objPos) { VERTEX_DEFORM_SINE_WAVES_PREAMBLE; VERTEX_DEFORM_SINE_WAVES_POS; } - { - VERTEX_DEFORM_FBM_PREAMBLE; - VERTEX_DEFORM_FBM_POS; - } } void deform_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan) { @@ -226,6 +233,11 @@ void deform_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTa VERTEX_DEFORM_TUBE_TO_PLANE_1_PREAMBLE; VERTEX_DEFORM_TUBE_TO_PLANE_1_NORM; } + // Here we're a plane. + { + VERTEX_DEFORM_FBM_PREAMBLE; + VERTEX_DEFORM_FBM_NORM; + } { VERTEX_DEFORM_PLANE_TO_TUBE_0_PREAMBLE; VERTEX_DEFORM_PLANE_TO_TUBE_0_NORM; @@ -250,10 +262,6 @@ void deform_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTa VERTEX_DEFORM_SINE_WAVES_PREAMBLE; VERTEX_DEFORM_SINE_WAVES_NORM; } - { - VERTEX_DEFORM_FBM_PREAMBLE; - VERTEX_DEFORM_FBM_NORM; - } } void propagateObjPos(inout v2f i) { diff --git a/vertex_deformation.slang b/vertex_deformation.slang index d3f46bc..9ac88db 100644 --- a/vertex_deformation.slang +++ b/vertex_deformation.slang @@ -474,18 +474,18 @@ float3 value_noise(float3 xyz, out float3 dx, out float3 dy, out float3 dz) { float3 fbm_with_derivatives(float3 xyz, no_diff float t, - no_diff float amplitude, + no_diff float3 amplitude, no_diff float gain, no_diff float lacunarity, - no_diff float scale, + no_diff float3 period, no_diff float octaves, no_diff float3 velocity, out float3 dx, out float3 dy, out float3 dz) { float3 noise = float3(0.0f, 0.0f, 0.0f); - float gain_i = amplitude; - float freq_i = scale; + float3 gain_i = amplitude; + float3 freq_i = 1.0f / period; dx = float3(0.0f, 0.0f, 0.0f); dy = float3(0.0f, 0.0f, 0.0f); @@ -495,9 +495,9 @@ float3 fbm_with_derivatives(float3 xyz, float3 dx_i, dy_i, dz_i; float3 octave_noise = value_noise((xyz - velocity * t) * freq_i, dx_i, dy_i, dz_i); noise += gain_i * octave_noise; - dx += gain_i * freq_i * dx_i; - dy += gain_i * freq_i * dy_i; - dz += gain_i * freq_i * dz_i; + dx += gain_i * freq_i.x * dx_i; + dy += gain_i * freq_i.y * dy_i; + dz += gain_i * freq_i.z * dz_i; freq_i *= lacunarity; gain_i *= gain; } @@ -511,23 +511,23 @@ float3 fbm_with_derivatives(float3 xyz, public float3 fbm(float3 xyz, no_diff float t, - no_diff float amplitude, + no_diff float3 amplitude, no_diff float gain, no_diff float lacunarity, - no_diff float scale, + no_diff float3 period, no_diff float octaves, no_diff float3 velocity) { float3 dx_unused, dy_unused, dz_unused; - return fbm_with_derivatives(xyz, t, amplitude, gain, lacunarity, scale, octaves, + return fbm_with_derivatives(xyz, t, amplitude, gain, lacunarity, period, octaves, velocity, dx_unused, dy_unused, dz_unused); } public void fbm_normal(inout float3 xyz, inout float3 normal, inout float3 tangent, no_diff float t, - no_diff float amplitude, no_diff float gain, no_diff float lacunarity, - no_diff float scale, no_diff float octaves, no_diff float3 velocity) { + no_diff float3 amplitude, no_diff float gain, no_diff float lacunarity, + no_diff float3 period, no_diff float octaves, no_diff float3 velocity) { float3 dx, dy, dz; - xyz = fbm_with_derivatives(xyz, t, amplitude, gain, lacunarity, scale, octaves, + xyz = fbm_with_derivatives(xyz, t, amplitude, gain, lacunarity, period, octaves, velocity, dx, dy, dz); float3x3 jac = float3x3( dx.x, dy.x, dz.x, @@ -540,11 +540,11 @@ public void fbm_normal(inout float3 xyz, inout float3 normal, inout float3 tange } public void fbm_undeform_normal(float3 xyz, float t, - float amplitude, float gain, float lacunarity, - float scale, float octaves, float3 velocity, + float3 amplitude, float gain, float lacunarity, + float3 period, float octaves, float3 velocity, inout float3 normal, inout float3 tangent) { float3 dx, dy, dz; - fbm_with_derivatives(xyz, t, amplitude, gain, lacunarity, scale, octaves, + fbm_with_derivatives(xyz, t, amplitude, gain, lacunarity, period, octaves, velocity, dx, dy, dz); float3x3 jac = float3x3( dx.x, dy.x, dz.x, -- cgit v1.2.3