summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoryum <yum.food.vr@gmail.com>2025-12-18 01:00:14 -0800
committeryum <yum.food.vr@gmail.com>2025-12-18 01:00:14 -0800
commitf7c5e546c220f0f7be8ec3a9cccdb4641114cfe1 (patch)
treeb287927c2d8a0d7781a56550066f222bac96b745
parent55a9113a1b7bc23a810606c2ed03d56c55aca060 (diff)
screw with operator ordering
-rw-r--r--3ner.shader4
-rw-r--r--globals.cginc4
-rw-r--r--vertex.cginc68
-rw-r--r--vertex_deformation.slang32
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,