summaryrefslogtreecommitdiffstats
path: root/vertex.cginc
diff options
context:
space:
mode:
Diffstat (limited to 'vertex.cginc')
-rw-r--r--vertex.cginc890
1 files changed, 615 insertions, 275 deletions
diff --git a/vertex.cginc b/vertex.cginc
index acc6d60..ac2c6aa 100644
--- a/vertex.cginc
+++ b/vertex.cginc
@@ -4,296 +4,636 @@
#include "globals.cginc"
#include "vertex_deformation.hlsl"
-#define FOO(x) (x)
-
-#if defined(_VERTEX_DEFORMATION_TUBE_TO_PLANE_0)
-#define VERTEX_DEFORM_TUBE_TO_PLANE_0_PREAMBLE \
- float3 p = _Vertex_Deformation_Tube_To_Plane_0_p; \
- float3 r = _Vertex_Deformation_Tube_To_Plane_0_r; \
- float3 s = _Vertex_Deformation_Tube_To_Plane_0_s; \
- float t = _Vertex_Deformation_Tube_To_Plane_0_t
-#define VERTEX_DEFORM_TUBE_TO_PLANE_0_POS \
- objPos = tube_to_plane(objPos, p, r, s, t)
-#define VERTEX_DEFORM_TUBE_TO_PLANE_0_NORM \
- tube_to_plane_normal(objPos, objNorm, objTan, p, r, s, t)
-#else
-#define VERTEX_DEFORM_TUBE_TO_PLANE_0_PREAMBLE
-#define VERTEX_DEFORM_TUBE_TO_PLANE_0_POS
-#define VERTEX_DEFORM_TUBE_TO_PLANE_0_NORM
-#endif // VERTEX_DEFORMATION_TUBE_TO_PLANE_0
-
-#if defined(_VERTEX_DEFORMATION_AXIS_ALIGN)
-#define VERTEX_DEFORM_AXIS_ALIGN_PREAMBLE \
- float3 po = _Vertex_Deformation_Axis_Align_po; \
- float3 pp = _Vertex_Deformation_Axis_Align_pp; \
- float3 r = _Vertex_Deformation_Axis_Align_r; \
- float t = _Vertex_Deformation_Axis_Align_t
-#define VERTEX_DEFORM_AXIS_ALIGN_POS \
- objPos = axis_align(objPos, po, pp, r, t)
-#define VERTEX_DEFORM_AXIS_ALIGN_NORM \
- axis_align_normal(objPos, objNorm, objTan, po, pp, r, t)
-#else
-#define VERTEX_DEFORM_AXIS_ALIGN_PREAMBLE
-#define VERTEX_DEFORM_AXIS_ALIGN_POS
-#define VERTEX_DEFORM_AXIS_ALIGN_NORM
-#endif // VERTEX_DEFORMATION_AXIS_ALIGN
-
-#if defined(_VERTEX_DEFORMATION_TUBE_TO_PLANE_1)
-#define VERTEX_DEFORM_TUBE_TO_PLANE_1_PREAMBLE \
- float3 p = _Vertex_Deformation_Tube_To_Plane_1_p; \
- float3 r = _Vertex_Deformation_Tube_To_Plane_1_r; \
- float3 s = _Vertex_Deformation_Tube_To_Plane_1_s; \
- float t = _Vertex_Deformation_Tube_To_Plane_1_t
-#define VERTEX_DEFORM_TUBE_TO_PLANE_1_POS \
- objPos = tube_to_plane(objPos, p, r, s, t)
-#define VERTEX_DEFORM_TUBE_TO_PLANE_1_NORM \
- tube_to_plane_normal(objPos, objNorm, objTan, p, r, s, t)
-#else
-#define VERTEX_DEFORM_TUBE_TO_PLANE_1_PREAMBLE
-#define VERTEX_DEFORM_TUBE_TO_PLANE_1_POS
-#define VERTEX_DEFORM_TUBE_TO_PLANE_1_NORM
-#endif // VERTEX_DEFORMATION_TUBE_TO_PLANE_1
-
-#if defined(_VERTEX_DEFORMATION_PLANE_TO_TUBE_0)
-#define VERTEX_DEFORM_PLANE_TO_TUBE_0_PREAMBLE \
- float3 p = _Vertex_Deformation_Plane_To_Tube_0_p; \
- float3 r = _Vertex_Deformation_Plane_To_Tube_0_r; \
- float3 s = _Vertex_Deformation_Plane_To_Tube_0_s; \
- float t = _Vertex_Deformation_Plane_To_Tube_0_t
-#define VERTEX_DEFORM_PLANE_TO_TUBE_0_POS \
- objPos = plane_to_tube(objPos, p, r, s, t)
-#define VERTEX_DEFORM_PLANE_TO_TUBE_0_NORM \
- plane_to_tube_normal(objPos, objNorm, objTan, p, r, s, t)
-#else
-#define VERTEX_DEFORM_PLANE_TO_TUBE_0_PREAMBLE
-#define VERTEX_DEFORM_PLANE_TO_TUBE_0_POS
-#define VERTEX_DEFORM_PLANE_TO_TUBE_0_NORM
-#endif // VERTEX_DEFORMATION_PLANE_TO_TUBE_0
-
-#if defined(_VERTEX_DEFORMATION_POINT_ALIGN_0)
-#define VERTEX_DEFORM_POINT_ALIGN_0_PREAMBLE \
- float3 po = _Vertex_Deformation_Point_Align_0_po; \
- float3 pp = _Vertex_Deformation_Point_Align_0_pp; \
- float3 r = _Vertex_Deformation_Point_Align_0_r; \
- float t = _Vertex_Deformation_Point_Align_0_t
-#define VERTEX_DEFORM_POINT_ALIGN_0_POS \
- objPos = point_align_0(objPos, po, pp, r, t)
-#define VERTEX_DEFORM_POINT_ALIGN_0_NORM \
- point_align_normal(objPos, objNorm, objTan, po, pp, r, t)
-#else
-#define VERTEX_DEFORM_POINT_ALIGN_0_PREAMBLE
-#define VERTEX_DEFORM_POINT_ALIGN_0_POS
-#define VERTEX_DEFORM_POINT_ALIGN_0_NORM
-#endif // VERTEX_DEFORMATION_POINT_ALIGN_0
-
-#if defined(_VERTEX_DEFORMATION_POINT_ALIGN_1)
-#define VERTEX_DEFORM_POINT_ALIGN_1_PREAMBLE \
- float3 po = _Vertex_Deformation_Point_Align_1_po; \
- float3 pp = _Vertex_Deformation_Point_Align_1_pp; \
- float3 r = _Vertex_Deformation_Point_Align_1_r; \
- float t = _Vertex_Deformation_Point_Align_1_t
-#define VERTEX_DEFORM_POINT_ALIGN_1_POS \
- objPos = point_align(objPos, po, pp, r, t)
-#define VERTEX_DEFORM_POINT_ALIGN_1_NORM \
- point_align_normal(objPos, objNorm, objTan, po, pp, r, t)
-#else
-#define VERTEX_DEFORM_POINT_ALIGN_1_PREAMBLE
-#define VERTEX_DEFORM_POINT_ALIGN_1_POS
-#define VERTEX_DEFORM_POINT_ALIGN_1_NORM
-#endif // VERTEX_DEFORMATION_POINT_ALIGN_1
-
-#if defined(_VERTEX_DEFORMATION_PLANE_TO_TUBE_1)
-#define VERTEX_DEFORM_PLANE_TO_TUBE_1_PREAMBLE \
- float3 p = _Vertex_Deformation_Plane_To_Tube_1_p; \
- float3 r = _Vertex_Deformation_Plane_To_Tube_1_r; \
- float3 s = _Vertex_Deformation_Plane_To_Tube_1_s; \
- float t = _Vertex_Deformation_Plane_To_Tube_1_t
-#define VERTEX_DEFORM_PLANE_TO_TUBE_1_POS \
- objPos = plane_to_tube(objPos, p, r, s, t)
-#define VERTEX_DEFORM_PLANE_TO_TUBE_1_NORM \
- plane_to_tube_normal(objPos, objNorm, objTan, p, r, s, t)
-#else
-#define VERTEX_DEFORM_PLANE_TO_TUBE_1_PREAMBLE
-#define VERTEX_DEFORM_PLANE_TO_TUBE_1_POS
-#define VERTEX_DEFORM_PLANE_TO_TUBE_1_NORM
-#endif // VERTEX_DEFORMATION_PLANE_TO_TUBE_1
-
-#if defined(_VERTEX_DEFORMATION_NORM_CONVERSION)
-#define VERTEX_DEFORM_NORM_CONVERSION_PREAMBLE \
- float t = _Vertex_Deformation_Norm_Conversion_t; \
- float input_k = _Vertex_Deformation_Norm_Conversion_Input_k; \
- float output_k = _Vertex_Deformation_Norm_Conversion_Output_k
-#define VERTEX_DEFORM_NORM_CONVERSION_POS \
- objPos = norm_conversion(objPos, input_k, output_k, t)
-#define VERTEX_DEFORM_NORM_CONVERSION_NORM \
- norm_conversion_normal(objPos, objNorm, objTan, input_k, output_k, t)
-#else
-#define VERTEX_DEFORM_NORM_CONVERSION_PREAMBLE
-#define VERTEX_DEFORM_NORM_CONVERSION_POS
-#define VERTEX_DEFORM_NORM_CONVERSION_NORM
-#endif // _VERTEX_DEFORMATION_NORM_CONVERSION
-
-#if defined(_VERTEX_DEFORMATION_SEAL)
-#define VERTEX_DEFORM_SEAL_PREAMBLE \
- float A = _Vertex_Deformation_Seal_A; \
- float k = _Vertex_Deformation_Seal_k; \
- float st = t * _Vertex_Deformation_Seal_t
-#define VERTEX_DEFORM_SEAL_POS \
- objPos = seal(objPos, A, k, st)
-#define VERTEX_DEFORM_SEAL_NORM \
- seal_normal(objPos, objNorm, objTan, A, k, st)
-#else
-#define VERTEX_DEFORM_SEAL_PREAMBLE
-#define VERTEX_DEFORM_SEAL_POS
-#define VERTEX_DEFORM_SEAL_NORM
-#endif // _VERTEX_DEFORMATION_SEAL
-
-#if defined(_VERTEX_DEFORMATION_SINE_WAVES)
-#define VERTEX_DEFORM_SINE_WAVES_PREAMBLE \
- float st = t * 10; \
- float3 amplitude = _Vertex_Deformation_Sine_Waves_Amplitude; \
- float3 direction = _Vertex_Deformation_Sine_Waves_Direction; \
- float3 k = _Vertex_Deformation_Sine_Waves_k; \
- float3 omega = _Vertex_Deformation_Sine_Waves_omega
-#define VERTEX_DEFORM_SINE_WAVES_POS \
- objPos = sine_wave(objPos, amplitude, direction, k, omega, st)
-#define VERTEX_DEFORM_SINE_WAVES_NORM \
- sine_wave_normal(objPos, objNorm, objTan, amplitude, direction, k, omega, st)
-#else
-#define VERTEX_DEFORM_SINE_WAVES_PREAMBLE
-#define VERTEX_DEFORM_SINE_WAVES_POS
-#define VERTEX_DEFORM_SINE_WAVES_NORM
-#endif // _VERTEX_DEFORMATION_SINE_WAVES
-
-#if defined(_VERTEX_DEFORMATION_FBM)
-#define VERTEX_DEFORM_FBM_PREAMBLE \
- float st = t; \
- float3 amplitude = _Vertex_Deformation_FBM_Amplitude; \
- float gain = _Vertex_Deformation_FBM_Gain; \
- float lacunarity = _Vertex_Deformation_FBM_Lacunarity; \
- 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, period, octaves, velocity)
-#define VERTEX_DEFORM_FBM_NORM \
- fbm_normal(objPos, objNorm, objTan, st, amplitude, gain, lacunarity, period, octaves, velocity)
-#else
-#define VERTEX_DEFORM_FBM_PREAMBLE
-#define VERTEX_DEFORM_FBM_POS
-#define VERTEX_DEFORM_FBM_NORM
-#endif // _VERTEX_DEFORMATION_FBM
+#define OPCODE_NONE 0
+#define OPCODE_TUBE_TO_PLANE 1
+#define OPCODE_PLANE_TO_TUBE 2
+#define OPCODE_POINT_ALIGN 3
+#define OPCODE_AXIS_ALIGN 4
+#define OPCODE_NORM_CONVERSION 5
+#define OPCODE_SEAL 6
+#define OPCODE_SINE_WAVES 7
+#define OPCODE_FBM 8
+
+#if defined(_VERTEX_DEFORMATION)
+
+void apply_tube_to_plane(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) {
+ float3 p = v0.xyz;
+ float3 r = v1.xyz;
+ float3 s = v2.xyz;
+ float t = f0;
+ objPos = tube_to_plane(objPos, p, r, s, t);
+}
+
+void apply_tube_to_plane_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) {
+ float3 p = v0.xyz;
+ float3 r = v1.xyz;
+ float3 s = v2.xyz;
+ float t = f0;
+ tube_to_plane_normal(objPos, objNorm, objTan, p, r, s, t);
+}
+
+void apply_plane_to_tube(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) {
+ float3 p = v0.xyz;
+ float3 r = v1.xyz;
+ float3 s = v2.xyz;
+ float t = f0;
+ objPos = plane_to_tube(objPos, p, r, s, t);
+}
+
+void apply_plane_to_tube_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) {
+ float3 p = v0.xyz;
+ float3 r = v1.xyz;
+ float3 s = v2.xyz;
+ float t = f0;
+ plane_to_tube_normal(objPos, objNorm, objTan, p, r, s, t);
+}
+
+void apply_point_align(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) {
+ float3 po = v0.xyz;
+ float3 pp = v1.xyz;
+ float3 r = v2.xyz;
+ float t = f0;
+ objPos = point_align(objPos, po, pp, r, t);
+}
+
+void apply_point_align_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) {
+ float3 po = v0.xyz;
+ float3 pp = v1.xyz;
+ float3 r = v2.xyz;
+ float t = f0;
+ point_align_normal(objPos, objNorm, objTan, po, pp, r, t);
+}
+
+void apply_axis_align(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0) {
+ float3 po = v0.xyz;
+ float3 pp = v1.xyz;
+ float3 r = v2.xyz;
+ float t = f0;
+ objPos = axis_align(objPos, po, pp, r, t);
+}
+
+void apply_axis_align_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0) {
+ float3 po = v0.xyz;
+ float3 pp = v1.xyz;
+ float3 r = v2.xyz;
+ float t = f0;
+ axis_align_normal(objPos, objNorm, objTan, po, pp, r, t);
+}
+
+void apply_norm_conversion(inout float3 objPos, float f0, float f1, float f2) {
+ float input_k = f0;
+ float output_k = f1;
+ float t = f2;
+ objPos = norm_conversion(objPos, input_k, output_k, t);
+}
+
+void apply_norm_conversion_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float f0, float f1, float f2) {
+ float input_k = f0;
+ float output_k = f1;
+ float t = f2;
+ norm_conversion_normal(objPos, objNorm, objTan, input_k, output_k, t);
+}
+
+void apply_seal(inout float3 objPos, float f0, float f1, float f2, float t) {
+ float A = f0;
+ float k = f1;
+ float st = t * f2;
+ objPos = seal(objPos, A, k, st);
+}
+
+void apply_seal_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float f0, float f1, float f2, float t) {
+ float A = f0;
+ float k = f1;
+ float st = t * f2;
+ seal_normal(objPos, objNorm, objTan, A, k, st);
+}
+
+void apply_sine_waves(inout float3 objPos, float4 v0, float4 v1, float4 v2, float4 v3, float t) {
+ float st = t * 10;
+ float3 amplitude = v0.xyz;
+ float3 direction = v1.xyz;
+ float3 k = v2.xyz;
+ float3 omega = v3.xyz;
+ objPos = sine_wave(objPos, amplitude, direction, k, omega, st);
+}
+
+void apply_sine_waves_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float4 v3, float t) {
+ float st = t * 10;
+ float3 amplitude = v0.xyz;
+ float3 direction = v1.xyz;
+ float3 k = v2.xyz;
+ float3 omega = v3.xyz;
+ sine_wave_normal(objPos, objNorm, objTan, amplitude, direction, k, omega, st);
+}
+
+void apply_fbm(inout float3 objPos, float4 v0, float4 v1, float4 v2, float f0, float f1, float f2, float t) {
+ float st = t;
+ float3 amplitude = v0.xyz;
+ float3 velocity = v1.xyz;
+ float3 period = v2.xyz;
+ float gain = f0;
+ float lacunarity = f1;
+ float octaves = f2;
+ objPos = fbm(objPos, st, amplitude, gain, lacunarity, period, octaves, velocity);
+}
+
+void apply_fbm_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan, float4 v0, float4 v1, float4 v2, float f0, float f1, float f2, float t) {
+ float st = t;
+ float3 amplitude = v0.xyz;
+ float3 velocity = v1.xyz;
+ float3 period = v2.xyz;
+ float gain = f0;
+ float lacunarity = f1;
+ float octaves = f2;
+ fbm_normal(objPos, objNorm, objTan, st, amplitude, gain, lacunarity, period, octaves, velocity);
+}
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;
- }
- }
- // Here we're a plane.
- {
- VERTEX_DEFORM_FBM_PREAMBLE;
- VERTEX_DEFORM_FBM_POS;
- }
- // Plane to tube.
- {
- {
- VERTEX_DEFORM_POINT_ALIGN_0_PREAMBLE;
- VERTEX_DEFORM_POINT_ALIGN_0_POS;
- }
- {
- VERTEX_DEFORM_PLANE_TO_TUBE_0_PREAMBLE;
- VERTEX_DEFORM_PLANE_TO_TUBE_0_POS;
- }
- {
- VERTEX_DEFORM_POINT_ALIGN_1_PREAMBLE;
- VERTEX_DEFORM_POINT_ALIGN_1_POS;
+
+ [loop]
+ for (int i = 0; i < 16; i++) {
+ float enabled;
+ int opcode;
+ float f0, f1, f2, f3;
+ float4 v0, v1, v2, v3;
+
+ [forcecase]
+ switch (i) {
+ case 0:
+ enabled = _Vertex_Deformation_Slot_0_Enabled;
+ opcode = _Vertex_Deformation_Slot_0_Opcode;
+ f0 = _Vertex_Deformation_Slot_0_Float_0;
+ f1 = _Vertex_Deformation_Slot_0_Float_1;
+ f2 = _Vertex_Deformation_Slot_0_Float_2;
+ f3 = _Vertex_Deformation_Slot_0_Float_3;
+ v0 = _Vertex_Deformation_Slot_0_Vector_0;
+ v1 = _Vertex_Deformation_Slot_0_Vector_1;
+ v2 = _Vertex_Deformation_Slot_0_Vector_2;
+ v3 = _Vertex_Deformation_Slot_0_Vector_3;
+ break;
+ case 1:
+ enabled = _Vertex_Deformation_Slot_1_Enabled;
+ opcode = _Vertex_Deformation_Slot_1_Opcode;
+ f0 = _Vertex_Deformation_Slot_1_Float_0;
+ f1 = _Vertex_Deformation_Slot_1_Float_1;
+ f2 = _Vertex_Deformation_Slot_1_Float_2;
+ f3 = _Vertex_Deformation_Slot_1_Float_3;
+ v0 = _Vertex_Deformation_Slot_1_Vector_0;
+ v1 = _Vertex_Deformation_Slot_1_Vector_1;
+ v2 = _Vertex_Deformation_Slot_1_Vector_2;
+ v3 = _Vertex_Deformation_Slot_1_Vector_3;
+ break;
+ case 2:
+ enabled = _Vertex_Deformation_Slot_2_Enabled;
+ opcode = _Vertex_Deformation_Slot_2_Opcode;
+ f0 = _Vertex_Deformation_Slot_2_Float_0;
+ f1 = _Vertex_Deformation_Slot_2_Float_1;
+ f2 = _Vertex_Deformation_Slot_2_Float_2;
+ f3 = _Vertex_Deformation_Slot_2_Float_3;
+ v0 = _Vertex_Deformation_Slot_2_Vector_0;
+ v1 = _Vertex_Deformation_Slot_2_Vector_1;
+ v2 = _Vertex_Deformation_Slot_2_Vector_2;
+ v3 = _Vertex_Deformation_Slot_2_Vector_3;
+ break;
+ case 3:
+ enabled = _Vertex_Deformation_Slot_3_Enabled;
+ opcode = _Vertex_Deformation_Slot_3_Opcode;
+ f0 = _Vertex_Deformation_Slot_3_Float_0;
+ f1 = _Vertex_Deformation_Slot_3_Float_1;
+ f2 = _Vertex_Deformation_Slot_3_Float_2;
+ f3 = _Vertex_Deformation_Slot_3_Float_3;
+ v0 = _Vertex_Deformation_Slot_3_Vector_0;
+ v1 = _Vertex_Deformation_Slot_3_Vector_1;
+ v2 = _Vertex_Deformation_Slot_3_Vector_2;
+ v3 = _Vertex_Deformation_Slot_3_Vector_3;
+ break;
+ case 4:
+ enabled = _Vertex_Deformation_Slot_4_Enabled;
+ opcode = _Vertex_Deformation_Slot_4_Opcode;
+ f0 = _Vertex_Deformation_Slot_4_Float_0;
+ f1 = _Vertex_Deformation_Slot_4_Float_1;
+ f2 = _Vertex_Deformation_Slot_4_Float_2;
+ f3 = _Vertex_Deformation_Slot_4_Float_3;
+ v0 = _Vertex_Deformation_Slot_4_Vector_0;
+ v1 = _Vertex_Deformation_Slot_4_Vector_1;
+ v2 = _Vertex_Deformation_Slot_4_Vector_2;
+ v3 = _Vertex_Deformation_Slot_4_Vector_3;
+ break;
+ case 5:
+ enabled = _Vertex_Deformation_Slot_5_Enabled;
+ opcode = _Vertex_Deformation_Slot_5_Opcode;
+ f0 = _Vertex_Deformation_Slot_5_Float_0;
+ f1 = _Vertex_Deformation_Slot_5_Float_1;
+ f2 = _Vertex_Deformation_Slot_5_Float_2;
+ f3 = _Vertex_Deformation_Slot_5_Float_3;
+ v0 = _Vertex_Deformation_Slot_5_Vector_0;
+ v1 = _Vertex_Deformation_Slot_5_Vector_1;
+ v2 = _Vertex_Deformation_Slot_5_Vector_2;
+ v3 = _Vertex_Deformation_Slot_5_Vector_3;
+ break;
+ case 6:
+ enabled = _Vertex_Deformation_Slot_6_Enabled;
+ opcode = _Vertex_Deformation_Slot_6_Opcode;
+ f0 = _Vertex_Deformation_Slot_6_Float_0;
+ f1 = _Vertex_Deformation_Slot_6_Float_1;
+ f2 = _Vertex_Deformation_Slot_6_Float_2;
+ f3 = _Vertex_Deformation_Slot_6_Float_3;
+ v0 = _Vertex_Deformation_Slot_6_Vector_0;
+ v1 = _Vertex_Deformation_Slot_6_Vector_1;
+ v2 = _Vertex_Deformation_Slot_6_Vector_2;
+ v3 = _Vertex_Deformation_Slot_6_Vector_3;
+ break;
+ case 7:
+ enabled = _Vertex_Deformation_Slot_7_Enabled;
+ opcode = _Vertex_Deformation_Slot_7_Opcode;
+ f0 = _Vertex_Deformation_Slot_7_Float_0;
+ f1 = _Vertex_Deformation_Slot_7_Float_1;
+ f2 = _Vertex_Deformation_Slot_7_Float_2;
+ f3 = _Vertex_Deformation_Slot_7_Float_3;
+ v0 = _Vertex_Deformation_Slot_7_Vector_0;
+ v1 = _Vertex_Deformation_Slot_7_Vector_1;
+ v2 = _Vertex_Deformation_Slot_7_Vector_2;
+ v3 = _Vertex_Deformation_Slot_7_Vector_3;
+ break;
+ case 8:
+ enabled = _Vertex_Deformation_Slot_8_Enabled;
+ opcode = _Vertex_Deformation_Slot_8_Opcode;
+ f0 = _Vertex_Deformation_Slot_8_Float_0;
+ f1 = _Vertex_Deformation_Slot_8_Float_1;
+ f2 = _Vertex_Deformation_Slot_8_Float_2;
+ f3 = _Vertex_Deformation_Slot_8_Float_3;
+ v0 = _Vertex_Deformation_Slot_8_Vector_0;
+ v1 = _Vertex_Deformation_Slot_8_Vector_1;
+ v2 = _Vertex_Deformation_Slot_8_Vector_2;
+ v3 = _Vertex_Deformation_Slot_8_Vector_3;
+ break;
+ case 9:
+ enabled = _Vertex_Deformation_Slot_9_Enabled;
+ opcode = _Vertex_Deformation_Slot_9_Opcode;
+ f0 = _Vertex_Deformation_Slot_9_Float_0;
+ f1 = _Vertex_Deformation_Slot_9_Float_1;
+ f2 = _Vertex_Deformation_Slot_9_Float_2;
+ f3 = _Vertex_Deformation_Slot_9_Float_3;
+ v0 = _Vertex_Deformation_Slot_9_Vector_0;
+ v1 = _Vertex_Deformation_Slot_9_Vector_1;
+ v2 = _Vertex_Deformation_Slot_9_Vector_2;
+ v3 = _Vertex_Deformation_Slot_9_Vector_3;
+ break;
+ case 10:
+ enabled = _Vertex_Deformation_Slot_10_Enabled;
+ opcode = _Vertex_Deformation_Slot_10_Opcode;
+ f0 = _Vertex_Deformation_Slot_10_Float_0;
+ f1 = _Vertex_Deformation_Slot_10_Float_1;
+ f2 = _Vertex_Deformation_Slot_10_Float_2;
+ f3 = _Vertex_Deformation_Slot_10_Float_3;
+ v0 = _Vertex_Deformation_Slot_10_Vector_0;
+ v1 = _Vertex_Deformation_Slot_10_Vector_1;
+ v2 = _Vertex_Deformation_Slot_10_Vector_2;
+ v3 = _Vertex_Deformation_Slot_10_Vector_3;
+ break;
+ case 11:
+ enabled = _Vertex_Deformation_Slot_11_Enabled;
+ opcode = _Vertex_Deformation_Slot_11_Opcode;
+ f0 = _Vertex_Deformation_Slot_11_Float_0;
+ f1 = _Vertex_Deformation_Slot_11_Float_1;
+ f2 = _Vertex_Deformation_Slot_11_Float_2;
+ f3 = _Vertex_Deformation_Slot_11_Float_3;
+ v0 = _Vertex_Deformation_Slot_11_Vector_0;
+ v1 = _Vertex_Deformation_Slot_11_Vector_1;
+ v2 = _Vertex_Deformation_Slot_11_Vector_2;
+ v3 = _Vertex_Deformation_Slot_11_Vector_3;
+ break;
+ case 12:
+ enabled = _Vertex_Deformation_Slot_12_Enabled;
+ opcode = _Vertex_Deformation_Slot_12_Opcode;
+ f0 = _Vertex_Deformation_Slot_12_Float_0;
+ f1 = _Vertex_Deformation_Slot_12_Float_1;
+ f2 = _Vertex_Deformation_Slot_12_Float_2;
+ f3 = _Vertex_Deformation_Slot_12_Float_3;
+ v0 = _Vertex_Deformation_Slot_12_Vector_0;
+ v1 = _Vertex_Deformation_Slot_12_Vector_1;
+ v2 = _Vertex_Deformation_Slot_12_Vector_2;
+ v3 = _Vertex_Deformation_Slot_12_Vector_3;
+ break;
+ case 13:
+ enabled = _Vertex_Deformation_Slot_13_Enabled;
+ opcode = _Vertex_Deformation_Slot_13_Opcode;
+ f0 = _Vertex_Deformation_Slot_13_Float_0;
+ f1 = _Vertex_Deformation_Slot_13_Float_1;
+ f2 = _Vertex_Deformation_Slot_13_Float_2;
+ f3 = _Vertex_Deformation_Slot_13_Float_3;
+ v0 = _Vertex_Deformation_Slot_13_Vector_0;
+ v1 = _Vertex_Deformation_Slot_13_Vector_1;
+ v2 = _Vertex_Deformation_Slot_13_Vector_2;
+ v3 = _Vertex_Deformation_Slot_13_Vector_3;
+ break;
+ case 14:
+ enabled = _Vertex_Deformation_Slot_14_Enabled;
+ opcode = _Vertex_Deformation_Slot_14_Opcode;
+ f0 = _Vertex_Deformation_Slot_14_Float_0;
+ f1 = _Vertex_Deformation_Slot_14_Float_1;
+ f2 = _Vertex_Deformation_Slot_14_Float_2;
+ f3 = _Vertex_Deformation_Slot_14_Float_3;
+ v0 = _Vertex_Deformation_Slot_14_Vector_0;
+ v1 = _Vertex_Deformation_Slot_14_Vector_1;
+ v2 = _Vertex_Deformation_Slot_14_Vector_2;
+ v3 = _Vertex_Deformation_Slot_14_Vector_3;
+ break;
+ case 15:
+ enabled = _Vertex_Deformation_Slot_15_Enabled;
+ opcode = _Vertex_Deformation_Slot_15_Opcode;
+ f0 = _Vertex_Deformation_Slot_15_Float_0;
+ f1 = _Vertex_Deformation_Slot_15_Float_1;
+ f2 = _Vertex_Deformation_Slot_15_Float_2;
+ f3 = _Vertex_Deformation_Slot_15_Float_3;
+ v0 = _Vertex_Deformation_Slot_15_Vector_0;
+ v1 = _Vertex_Deformation_Slot_15_Vector_1;
+ v2 = _Vertex_Deformation_Slot_15_Vector_2;
+ v3 = _Vertex_Deformation_Slot_15_Vector_3;
+ break;
}
- {
- VERTEX_DEFORM_PLANE_TO_TUBE_1_PREAMBLE;
- VERTEX_DEFORM_PLANE_TO_TUBE_1_POS;
+
+ if (enabled > 0.5) {
+ switch (opcode) {
+ case OPCODE_TUBE_TO_PLANE:
+ apply_tube_to_plane(objPos, v0, v1, v2, f0);
+ break;
+ case OPCODE_PLANE_TO_TUBE:
+ apply_plane_to_tube(objPos, v0, v1, v2, f0);
+ break;
+ case OPCODE_POINT_ALIGN:
+ apply_point_align(objPos, v0, v1, v2, f0);
+ break;
+ case OPCODE_AXIS_ALIGN:
+ apply_axis_align(objPos, v0, v1, v2, f0);
+ break;
+ case OPCODE_NORM_CONVERSION:
+ apply_norm_conversion(objPos, f0, f1, f2);
+ break;
+ case OPCODE_SEAL:
+ apply_seal(objPos, f0, f1, f2, t);
+ break;
+ case OPCODE_SINE_WAVES:
+ apply_sine_waves(objPos, v0, v1, v2, v3, t);
+ break;
+ case OPCODE_FBM:
+ apply_fbm(objPos, v0, v1, v2, f0, f1, f2, t);
+ break;
+ }
}
}
- {
- VERTEX_DEFORM_NORM_CONVERSION_PREAMBLE;
- VERTEX_DEFORM_NORM_CONVERSION_POS;
- }
- {
- VERTEX_DEFORM_SEAL_PREAMBLE;
- VERTEX_DEFORM_SEAL_POS;
- }
- {
- VERTEX_DEFORM_SINE_WAVES_PREAMBLE;
- VERTEX_DEFORM_SINE_WAVES_POS;
- }
}
void deform_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan) {
const float t = getTime();
- // Tube to plane.
- {
- {
- VERTEX_DEFORM_TUBE_TO_PLANE_0_PREAMBLE;
- VERTEX_DEFORM_TUBE_TO_PLANE_0_NORM;
- }
- {
- VERTEX_DEFORM_AXIS_ALIGN_PREAMBLE;
- VERTEX_DEFORM_AXIS_ALIGN_NORM;
- }
- {
- 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;
- }
- // Plane to tube.
- {
- {
- VERTEX_DEFORM_POINT_ALIGN_0_PREAMBLE;
- VERTEX_DEFORM_POINT_ALIGN_0_NORM;
- }
- {
- VERTEX_DEFORM_PLANE_TO_TUBE_0_PREAMBLE;
- VERTEX_DEFORM_PLANE_TO_TUBE_0_NORM;
- }
- {
- VERTEX_DEFORM_POINT_ALIGN_1_PREAMBLE;
- VERTEX_DEFORM_POINT_ALIGN_1_NORM;
+
+ [loop]
+ for (int i = 0; i < 16; i++) {
+ float enabled;
+ int opcode;
+ float f0, f1, f2, f3;
+ float4 v0, v1, v2, v3;
+
+ [forcecase]
+ switch (i) {
+ case 0:
+ enabled = _Vertex_Deformation_Slot_0_Enabled;
+ opcode = _Vertex_Deformation_Slot_0_Opcode;
+ f0 = _Vertex_Deformation_Slot_0_Float_0;
+ f1 = _Vertex_Deformation_Slot_0_Float_1;
+ f2 = _Vertex_Deformation_Slot_0_Float_2;
+ f3 = _Vertex_Deformation_Slot_0_Float_3;
+ v0 = _Vertex_Deformation_Slot_0_Vector_0;
+ v1 = _Vertex_Deformation_Slot_0_Vector_1;
+ v2 = _Vertex_Deformation_Slot_0_Vector_2;
+ v3 = _Vertex_Deformation_Slot_0_Vector_3;
+ break;
+ case 1:
+ enabled = _Vertex_Deformation_Slot_1_Enabled;
+ opcode = _Vertex_Deformation_Slot_1_Opcode;
+ f0 = _Vertex_Deformation_Slot_1_Float_0;
+ f1 = _Vertex_Deformation_Slot_1_Float_1;
+ f2 = _Vertex_Deformation_Slot_1_Float_2;
+ f3 = _Vertex_Deformation_Slot_1_Float_3;
+ v0 = _Vertex_Deformation_Slot_1_Vector_0;
+ v1 = _Vertex_Deformation_Slot_1_Vector_1;
+ v2 = _Vertex_Deformation_Slot_1_Vector_2;
+ v3 = _Vertex_Deformation_Slot_1_Vector_3;
+ break;
+ case 2:
+ enabled = _Vertex_Deformation_Slot_2_Enabled;
+ opcode = _Vertex_Deformation_Slot_2_Opcode;
+ f0 = _Vertex_Deformation_Slot_2_Float_0;
+ f1 = _Vertex_Deformation_Slot_2_Float_1;
+ f2 = _Vertex_Deformation_Slot_2_Float_2;
+ f3 = _Vertex_Deformation_Slot_2_Float_3;
+ v0 = _Vertex_Deformation_Slot_2_Vector_0;
+ v1 = _Vertex_Deformation_Slot_2_Vector_1;
+ v2 = _Vertex_Deformation_Slot_2_Vector_2;
+ v3 = _Vertex_Deformation_Slot_2_Vector_3;
+ break;
+ case 3:
+ enabled = _Vertex_Deformation_Slot_3_Enabled;
+ opcode = _Vertex_Deformation_Slot_3_Opcode;
+ f0 = _Vertex_Deformation_Slot_3_Float_0;
+ f1 = _Vertex_Deformation_Slot_3_Float_1;
+ f2 = _Vertex_Deformation_Slot_3_Float_2;
+ f3 = _Vertex_Deformation_Slot_3_Float_3;
+ v0 = _Vertex_Deformation_Slot_3_Vector_0;
+ v1 = _Vertex_Deformation_Slot_3_Vector_1;
+ v2 = _Vertex_Deformation_Slot_3_Vector_2;
+ v3 = _Vertex_Deformation_Slot_3_Vector_3;
+ break;
+ case 4:
+ enabled = _Vertex_Deformation_Slot_4_Enabled;
+ opcode = _Vertex_Deformation_Slot_4_Opcode;
+ f0 = _Vertex_Deformation_Slot_4_Float_0;
+ f1 = _Vertex_Deformation_Slot_4_Float_1;
+ f2 = _Vertex_Deformation_Slot_4_Float_2;
+ f3 = _Vertex_Deformation_Slot_4_Float_3;
+ v0 = _Vertex_Deformation_Slot_4_Vector_0;
+ v1 = _Vertex_Deformation_Slot_4_Vector_1;
+ v2 = _Vertex_Deformation_Slot_4_Vector_2;
+ v3 = _Vertex_Deformation_Slot_4_Vector_3;
+ break;
+ case 5:
+ enabled = _Vertex_Deformation_Slot_5_Enabled;
+ opcode = _Vertex_Deformation_Slot_5_Opcode;
+ f0 = _Vertex_Deformation_Slot_5_Float_0;
+ f1 = _Vertex_Deformation_Slot_5_Float_1;
+ f2 = _Vertex_Deformation_Slot_5_Float_2;
+ f3 = _Vertex_Deformation_Slot_5_Float_3;
+ v0 = _Vertex_Deformation_Slot_5_Vector_0;
+ v1 = _Vertex_Deformation_Slot_5_Vector_1;
+ v2 = _Vertex_Deformation_Slot_5_Vector_2;
+ v3 = _Vertex_Deformation_Slot_5_Vector_3;
+ break;
+ case 6:
+ enabled = _Vertex_Deformation_Slot_6_Enabled;
+ opcode = _Vertex_Deformation_Slot_6_Opcode;
+ f0 = _Vertex_Deformation_Slot_6_Float_0;
+ f1 = _Vertex_Deformation_Slot_6_Float_1;
+ f2 = _Vertex_Deformation_Slot_6_Float_2;
+ f3 = _Vertex_Deformation_Slot_6_Float_3;
+ v0 = _Vertex_Deformation_Slot_6_Vector_0;
+ v1 = _Vertex_Deformation_Slot_6_Vector_1;
+ v2 = _Vertex_Deformation_Slot_6_Vector_2;
+ v3 = _Vertex_Deformation_Slot_6_Vector_3;
+ break;
+ case 7:
+ enabled = _Vertex_Deformation_Slot_7_Enabled;
+ opcode = _Vertex_Deformation_Slot_7_Opcode;
+ f0 = _Vertex_Deformation_Slot_7_Float_0;
+ f1 = _Vertex_Deformation_Slot_7_Float_1;
+ f2 = _Vertex_Deformation_Slot_7_Float_2;
+ f3 = _Vertex_Deformation_Slot_7_Float_3;
+ v0 = _Vertex_Deformation_Slot_7_Vector_0;
+ v1 = _Vertex_Deformation_Slot_7_Vector_1;
+ v2 = _Vertex_Deformation_Slot_7_Vector_2;
+ v3 = _Vertex_Deformation_Slot_7_Vector_3;
+ break;
+ case 8:
+ enabled = _Vertex_Deformation_Slot_8_Enabled;
+ opcode = _Vertex_Deformation_Slot_8_Opcode;
+ f0 = _Vertex_Deformation_Slot_8_Float_0;
+ f1 = _Vertex_Deformation_Slot_8_Float_1;
+ f2 = _Vertex_Deformation_Slot_8_Float_2;
+ f3 = _Vertex_Deformation_Slot_8_Float_3;
+ v0 = _Vertex_Deformation_Slot_8_Vector_0;
+ v1 = _Vertex_Deformation_Slot_8_Vector_1;
+ v2 = _Vertex_Deformation_Slot_8_Vector_2;
+ v3 = _Vertex_Deformation_Slot_8_Vector_3;
+ break;
+ case 9:
+ enabled = _Vertex_Deformation_Slot_9_Enabled;
+ opcode = _Vertex_Deformation_Slot_9_Opcode;
+ f0 = _Vertex_Deformation_Slot_9_Float_0;
+ f1 = _Vertex_Deformation_Slot_9_Float_1;
+ f2 = _Vertex_Deformation_Slot_9_Float_2;
+ f3 = _Vertex_Deformation_Slot_9_Float_3;
+ v0 = _Vertex_Deformation_Slot_9_Vector_0;
+ v1 = _Vertex_Deformation_Slot_9_Vector_1;
+ v2 = _Vertex_Deformation_Slot_9_Vector_2;
+ v3 = _Vertex_Deformation_Slot_9_Vector_3;
+ break;
+ case 10:
+ enabled = _Vertex_Deformation_Slot_10_Enabled;
+ opcode = _Vertex_Deformation_Slot_10_Opcode;
+ f0 = _Vertex_Deformation_Slot_10_Float_0;
+ f1 = _Vertex_Deformation_Slot_10_Float_1;
+ f2 = _Vertex_Deformation_Slot_10_Float_2;
+ f3 = _Vertex_Deformation_Slot_10_Float_3;
+ v0 = _Vertex_Deformation_Slot_10_Vector_0;
+ v1 = _Vertex_Deformation_Slot_10_Vector_1;
+ v2 = _Vertex_Deformation_Slot_10_Vector_2;
+ v3 = _Vertex_Deformation_Slot_10_Vector_3;
+ break;
+ case 11:
+ enabled = _Vertex_Deformation_Slot_11_Enabled;
+ opcode = _Vertex_Deformation_Slot_11_Opcode;
+ f0 = _Vertex_Deformation_Slot_11_Float_0;
+ f1 = _Vertex_Deformation_Slot_11_Float_1;
+ f2 = _Vertex_Deformation_Slot_11_Float_2;
+ f3 = _Vertex_Deformation_Slot_11_Float_3;
+ v0 = _Vertex_Deformation_Slot_11_Vector_0;
+ v1 = _Vertex_Deformation_Slot_11_Vector_1;
+ v2 = _Vertex_Deformation_Slot_11_Vector_2;
+ v3 = _Vertex_Deformation_Slot_11_Vector_3;
+ break;
+ case 12:
+ enabled = _Vertex_Deformation_Slot_12_Enabled;
+ opcode = _Vertex_Deformation_Slot_12_Opcode;
+ f0 = _Vertex_Deformation_Slot_12_Float_0;
+ f1 = _Vertex_Deformation_Slot_12_Float_1;
+ f2 = _Vertex_Deformation_Slot_12_Float_2;
+ f3 = _Vertex_Deformation_Slot_12_Float_3;
+ v0 = _Vertex_Deformation_Slot_12_Vector_0;
+ v1 = _Vertex_Deformation_Slot_12_Vector_1;
+ v2 = _Vertex_Deformation_Slot_12_Vector_2;
+ v3 = _Vertex_Deformation_Slot_12_Vector_3;
+ break;
+ case 13:
+ enabled = _Vertex_Deformation_Slot_13_Enabled;
+ opcode = _Vertex_Deformation_Slot_13_Opcode;
+ f0 = _Vertex_Deformation_Slot_13_Float_0;
+ f1 = _Vertex_Deformation_Slot_13_Float_1;
+ f2 = _Vertex_Deformation_Slot_13_Float_2;
+ f3 = _Vertex_Deformation_Slot_13_Float_3;
+ v0 = _Vertex_Deformation_Slot_13_Vector_0;
+ v1 = _Vertex_Deformation_Slot_13_Vector_1;
+ v2 = _Vertex_Deformation_Slot_13_Vector_2;
+ v3 = _Vertex_Deformation_Slot_13_Vector_3;
+ break;
+ case 14:
+ enabled = _Vertex_Deformation_Slot_14_Enabled;
+ opcode = _Vertex_Deformation_Slot_14_Opcode;
+ f0 = _Vertex_Deformation_Slot_14_Float_0;
+ f1 = _Vertex_Deformation_Slot_14_Float_1;
+ f2 = _Vertex_Deformation_Slot_14_Float_2;
+ f3 = _Vertex_Deformation_Slot_14_Float_3;
+ v0 = _Vertex_Deformation_Slot_14_Vector_0;
+ v1 = _Vertex_Deformation_Slot_14_Vector_1;
+ v2 = _Vertex_Deformation_Slot_14_Vector_2;
+ v3 = _Vertex_Deformation_Slot_14_Vector_3;
+ break;
+ case 15:
+ enabled = _Vertex_Deformation_Slot_15_Enabled;
+ opcode = _Vertex_Deformation_Slot_15_Opcode;
+ f0 = _Vertex_Deformation_Slot_15_Float_0;
+ f1 = _Vertex_Deformation_Slot_15_Float_1;
+ f2 = _Vertex_Deformation_Slot_15_Float_2;
+ f3 = _Vertex_Deformation_Slot_15_Float_3;
+ v0 = _Vertex_Deformation_Slot_15_Vector_0;
+ v1 = _Vertex_Deformation_Slot_15_Vector_1;
+ v2 = _Vertex_Deformation_Slot_15_Vector_2;
+ v3 = _Vertex_Deformation_Slot_15_Vector_3;
+ break;
}
- {
- VERTEX_DEFORM_PLANE_TO_TUBE_1_PREAMBLE;
- VERTEX_DEFORM_PLANE_TO_TUBE_1_NORM;
+
+ [branch]
+ if (enabled > 0.5) {
+ [forcecase]
+ switch (opcode) {
+ case OPCODE_TUBE_TO_PLANE:
+ apply_tube_to_plane_normal(objPos, objNorm, objTan, v0, v1, v2, f0);
+ break;
+ case OPCODE_PLANE_TO_TUBE:
+ apply_plane_to_tube_normal(objPos, objNorm, objTan, v0, v1, v2, f0);
+ break;
+ case OPCODE_POINT_ALIGN:
+ apply_point_align_normal(objPos, objNorm, objTan, v0, v1, v2, f0);
+ break;
+ case OPCODE_AXIS_ALIGN:
+ apply_axis_align_normal(objPos, objNorm, objTan, v0, v1, v2, f0);
+ break;
+ case OPCODE_NORM_CONVERSION:
+ apply_norm_conversion_normal(objPos, objNorm, objTan, f0, f1, f2);
+ break;
+ case OPCODE_SEAL:
+ apply_seal_normal(objPos, objNorm, objTan, f0, f1, f2, t);
+ break;
+ case OPCODE_SINE_WAVES:
+ apply_sine_waves_normal(objPos, objNorm, objTan, v0, v1, v2, v3, t);
+ break;
+ case OPCODE_FBM:
+ apply_fbm_normal(objPos, objNorm, objTan, v0, v1, v2, f0, f1, f2, t);
+ break;
+ }
}
}
- {
- VERTEX_DEFORM_NORM_CONVERSION_PREAMBLE;
- VERTEX_DEFORM_NORM_CONVERSION_NORM;
- }
- {
- VERTEX_DEFORM_SEAL_PREAMBLE;
- VERTEX_DEFORM_SEAL_NORM;
- }
- {
- VERTEX_DEFORM_SINE_WAVES_PREAMBLE;
- VERTEX_DEFORM_SINE_WAVES_NORM;
- }
}
+#else
+
+void deform(inout float3 objPos) {
+}
+
+void deform_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan) {
+}
+
+#endif // _VERTEX_DEFORMATION
+
void propagateObjPos(inout v2f i) {
i.worldPos = mul(unity_ObjectToWorld, float4(i.objPos, 1));
i.pos = UnityObjectToClipPos(i.objPos);