#ifndef __VERTEX_INC #define __VERTEX_INC #include "globals.cginc" #include "vertex_deformation.hlsl" #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 #define OPCODE_PLANE_TO_HEMI_OCTAHEDRON 9 #define OPCODE_HEMI_OCTAHEDRON_TO_PLANE 10 #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 apply_plane_to_hemi_octahedron(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_hemi_octahedron(objPos, p, r, s, t); } void apply_plane_to_hemi_octahedron_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_hemi_octahedron_normal(objPos, objNorm, objTan, p, r, s, t); } void apply_hemi_octahedron_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 = hemi_octahedron_to_plane(objPos, p, r, s, t); } void apply_hemi_octahedron_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; hemi_octahedron_to_plane_normal(objPos, objNorm, objTan, p, r, s, t); } void deform(inout float3 objPos) { const float t = getTime(); [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; } 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; case OPCODE_PLANE_TO_HEMI_OCTAHEDRON: apply_plane_to_hemi_octahedron(objPos, v0, v1, v2, f0); break; case OPCODE_HEMI_OCTAHEDRON_TO_PLANE: apply_hemi_octahedron_to_plane(objPos, v0, v1, v2, f0); break; } } } } void deform_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan) { const float t = getTime(); [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; } [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; case OPCODE_PLANE_TO_HEMI_OCTAHEDRON: apply_plane_to_hemi_octahedron_normal(objPos, objNorm, objTan, v0, v1, v2, f0); break; case OPCODE_HEMI_OCTAHEDRON_TO_PLANE: apply_hemi_octahedron_to_plane_normal(objPos, objNorm, objTan, v0, v1, v2, f0); break; } } } } #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); i.eyeVec.xyz = i.worldPos - _WorldSpaceCameraPos; } #endif // __VERTEX_INC