diff options
Diffstat (limited to 'vertex.cginc')
| -rw-r--r-- | vertex.cginc | 890 |
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); |
