diff options
| -rw-r--r-- | 3ner.shader | 290 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/FoldNodeSerialized.cs | 4 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/KeyframeNodeView.cs | 53 | ||||
| -rw-r--r-- | Scripts/Fold/Editor/PointAlignNode.cs | 2 | ||||
| -rw-r--r-- | features.cginc | 27 | ||||
| -rw-r--r-- | globals.cginc | 255 | ||||
| -rw-r--r-- | vertex.cginc | 890 |
7 files changed, 1024 insertions, 497 deletions
diff --git a/3ner.shader b/3ner.shader index d8ec8fe..8815801 100644 --- a/3ner.shader +++ b/3ner.shader @@ -179,121 +179,181 @@ Shader "yum_food/3ner" [ThryToggle(_VERTEX_DEFORMATION_FRAGMENT_NORMALS)] _Vertex_Deformation_Fragment_Normals_Enabled("Fragment normals", Float) = 0 [ThryToggle(_VERTEX_DEFORMATION_TESSELLATION)] _Vertex_Deformation_Tessellation_Enabled("Tesellation support", Float) = 1 - //ifex _Vertex_Deformation_Tubes_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Tubes("Tubes", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_TUBES)] _Vertex_Deformation_Tubes_Enabled("Enable", Float) = 0 - - //ifex _Vertex_Deformation_Tube_To_Plane_0_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Tube_To_Plane_0("Tube to Plane 0", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_TUBE_TO_PLANE_0)] _Vertex_Deformation_Tube_To_Plane_0_Enabled("Enable", Float) = 0 - _Vertex_Deformation_Tube_To_Plane_0_p("p", Vector) = (0, 0, 0.3183099) - _Vertex_Deformation_Tube_To_Plane_0_r("r", Vector) = (0, 0, -1) - _Vertex_Deformation_Tube_To_Plane_0_s("s", Vector) = (0, 1, 0) - _Vertex_Deformation_Tube_To_Plane_0_t("t", Range(0,1)) = 0 - [HideInInspector] m_end_Vertex_Deformation_Tube_To_Plane_0("Tube to Plane 0", Float) = 0 - //endex - - //ifex _Vertex_Deformation_Axis_Align_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Axis_Align("Axis Align", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_AXIS_ALIGN)] _Vertex_Deformation_Axis_Align_Enabled("Enable", Float) = 0 - _Vertex_Deformation_Axis_Align_po("po", Vector) = (0, 0, 0) - _Vertex_Deformation_Axis_Align_pp("pp", Vector) = (0, 0, 1) - _Vertex_Deformation_Axis_Align_r("r", Vector) = (0, 1, 0) - _Vertex_Deformation_Axis_Align_t("t", Range(0,1)) = 0 - [HideInInspector] m_end_Vertex_Deformation_Axis_Align("Axis Align", Float) = 0 - //endex - - //ifex _Vertex_Deformation_Tube_To_Plane_1_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Tube_To_Plane_1("Tube to Plane 1", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_TUBE_TO_PLANE_1)] _Vertex_Deformation_Tube_To_Plane_1_Enabled("Enable", Float) = 0 - _Vertex_Deformation_Tube_To_Plane_1_p("p", Vector) = (0, 0, 0.3183099) - _Vertex_Deformation_Tube_To_Plane_1_r("r", Vector) = (0, 0, -1) - _Vertex_Deformation_Tube_To_Plane_1_s("s", Vector) = (0, 1, 0) - _Vertex_Deformation_Tube_To_Plane_1_t("t", Range(0,1)) = 0 - [HideInInspector] m_end_Vertex_Deformation_Tube_To_Plane_1("Tube to Plane 1", Float) = 0 - //endex - - //ifex _Vertex_Deformation_Point_Align_0_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Point_Align_0("Point Align 0", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_POINT_ALIGN_0)] _Vertex_Deformation_Point_Align_0_Enabled("Enable", Float) = 0 - _Vertex_Deformation_Point_Align_0_po("po", Vector) = (0, 0, 0) - _Vertex_Deformation_Point_Align_0_pp("pp", Vector) = (0, 0, 1) - _Vertex_Deformation_Point_Align_0_r("r", Vector) = (0, 1, 0) - _Vertex_Deformation_Point_Align_0_t("t", Range(0,1)) = 0 - [HideInInspector] m_end_Vertex_Deformation_Point_Align_0("Point Align 0", Float) = 0 - //endex - - //ifex _Vertex_Deformation_Plane_To_Tube_0_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Plane_To_Tube_0("Plane to Tube 0", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_PLANE_TO_TUBE_0)] _Vertex_Deformation_Plane_To_Tube_0_Enabled("Enable", Float) = 0 - _Vertex_Deformation_Plane_To_Tube_0_p("p", Vector) = (0, 0, 1) - _Vertex_Deformation_Plane_To_Tube_0_r("r", Vector) = (0, 0, -1) - _Vertex_Deformation_Plane_To_Tube_0_s("s", Vector) = (0, 0, -1) - _Vertex_Deformation_Plane_To_Tube_0_t("t", Range(0,1)) = 0 - [HideInInspector] m_end_Vertex_Deformation_Plane_To_Tube_0("Plane to Tube 0", Float) = 0 - //endex - - //ifex _Vertex_Deformation_Point_Align_1_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Point_Align_1("Point Align 0", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_POINT_ALIGN_1)] _Vertex_Deformation_Point_Align_1_Enabled("Enable", Float) = 0 - _Vertex_Deformation_Point_Align_1_po("po", Vector) = (0, 0, 0) - _Vertex_Deformation_Point_Align_1_pp("pp", Vector) = (0, 0, 1) - _Vertex_Deformation_Point_Align_1_r("r", Vector) = (0, 1, 0) - _Vertex_Deformation_Point_Align_1_t("t", Range(0,1)) = 0 - [HideInInspector] m_end_Vertex_Deformation_Point_Align_1("Point Align 0", Float) = 0 - //endex - - //ifex _Vertex_Deformation_Plane_To_Tube_1_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Plane_To_Tube_1("Plane to Tube 1", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_PLANE_TO_TUBE_1)] _Vertex_Deformation_Plane_To_Tube_1_Enabled("Enable", Float) = 0 - _Vertex_Deformation_Plane_To_Tube_1_p("p", Vector) = (0, 0, 1) - _Vertex_Deformation_Plane_To_Tube_1_r("r", Vector) = (0, 0, -1) - _Vertex_Deformation_Plane_To_Tube_1_s("s", Vector) = (0, 0, -1) - _Vertex_Deformation_Plane_To_Tube_1_t("t", Range(0,1)) = 0 - [HideInInspector] m_end_Vertex_Deformation_Plane_To_Tube_1("Plane to Tube 1", Float) = 0 - //endex - [HideInInspector] m_end_Vertex_Deformation_Tubes("Tubes", Float) = 0 - //endex - - //ifex _Vertex_Deformation_Norm_Conversion_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Norm_Conversion("Norm Conversion", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_NORM_CONVERSION)] _Vertex_Deformation_Norm_Conversion_Enabled("Enable", Float) = 0 - _Vertex_Deformation_Norm_Conversion_Input_k("Input norm", Range(-10, 10)) = 2 - _Vertex_Deformation_Norm_Conversion_Output_k("Output norm", Range(-10, 10)) = 1 - _Vertex_Deformation_Norm_Conversion_t("t", Range(0,1)) = 0 - [HideInInspector] m_end_Vertex_Deformation_Norm_Conversion("Norm Conversion", Float) = 0 - //endex - - //ifex _Vertex_Deformation_Seal_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Seal("Seal", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_SEAL)] _Vertex_Deformation_Seal_Enabled("Enable", Float) = 0 - _Vertex_Deformation_Seal_A("A", Range(0,1)) = 0.1 - _Vertex_Deformation_Seal_k("k", Range(0,3)) = 1 - _Vertex_Deformation_Seal_t("t", Range(0,1)) = 0.1 - [HideInInspector] m_end_Vertex_Deformation_Seal("Seal", Float) = 0 - //endex - - //ifex _Vertex_Deformation_Sine_Waves_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_Sine_Waves("Sine Waves", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_SINE_WAVES)] _Vertex_Deformation_Sine_Waves_Enabled("Enable", Float) = 0 - _Vertex_Deformation_Sine_Waves_Amplitude("Amplitude (4 waves)", Vector) = (0.1, 0, 0, 0) - _Vertex_Deformation_Sine_Waves_Direction("Direction", Vector) = (1, 0, 0, 0) - _Vertex_Deformation_Sine_Waves_k("Spatial frequency k", Vector) = (6.28, 0, 0) - _Vertex_Deformation_Sine_Waves_omega("Temporal frequency omega", Vector) = (6.28, 0, 0) - [HideInInspector] m_end_Vertex_Deformation_Sine_Waves("Sine Waves", Float) = 0 - //endex - - //ifex _Vertex_Deformation_FBM_Enabled==0 - [HideInInspector] m_start_Vertex_Deformation_FBM("FBM", Float) = 0 - [ThryToggle(_VERTEX_DEFORMATION_FBM)] _Vertex_Deformation_FBM_Enabled("Enable", Float) = 0 - _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", Vector) = (1, 1, 1, 0) - _Vertex_Deformation_FBM_Period("Period", Vector) = (1, 1, 1, 0) - [IntRange] _Vertex_Deformation_FBM_Octaves("Octaves", Range(1, 5)) = 3 - [HideInInspector] m_end_Vertex_Deformation_FBM("FBM", Float) = 0 - //endex + _Vertex_Deformation_Slot_0_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_0_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_0_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_0_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_0_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_0_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_0_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_0_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_0_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_0_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_1_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_1_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_1_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_1_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_1_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_1_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_1_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_1_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_1_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_1_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_2_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_2_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_2_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_2_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_2_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_2_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_2_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_2_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_2_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_2_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_3_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_3_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_3_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_3_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_3_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_3_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_3_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_3_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_3_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_3_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_4_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_4_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_4_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_4_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_4_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_4_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_4_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_4_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_4_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_4_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_5_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_5_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_5_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_5_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_5_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_5_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_5_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_5_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_5_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_5_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_6_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_6_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_6_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_6_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_6_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_6_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_6_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_6_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_6_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_6_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_7_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_7_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_7_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_7_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_7_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_7_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_7_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_7_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_7_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_7_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_8_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_8_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_8_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_8_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_8_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_8_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_8_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_8_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_8_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_8_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_9_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_9_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_9_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_9_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_9_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_9_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_9_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_9_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_9_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_9_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_10_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_10_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_10_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_10_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_10_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_10_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_10_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_10_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_10_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_10_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_11_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_11_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_11_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_11_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_11_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_11_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_11_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_11_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_11_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_11_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_12_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_12_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_12_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_12_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_12_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_12_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_12_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_12_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_12_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_12_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_13_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_13_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_13_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_13_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_13_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_13_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_13_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_13_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_13_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_13_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_14_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_14_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_14_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_14_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_14_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_14_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_14_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_14_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_14_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_14_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) + + _Vertex_Deformation_Slot_15_Enabled("Enabled", Float) = 0 + _Vertex_Deformation_Slot_15_Opcode("Opcode", Integer) = 0 + _Vertex_Deformation_Slot_15_Float_0("Float 0", Float) = 0 + _Vertex_Deformation_Slot_15_Float_1("Float 1", Float) = 0 + _Vertex_Deformation_Slot_15_Float_2("Float 2", Float) = 0 + _Vertex_Deformation_Slot_15_Float_3("Float 3", Float) = 0 + _Vertex_Deformation_Slot_15_Vector_0("Vector 0", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_15_Vector_1("Vector 1", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_15_Vector_2("Vector 2", Vector) = (0, 0, 0, 0) + _Vertex_Deformation_Slot_15_Vector_3("Vector 3", Vector) = (0, 0, 0, 0) [HideInInspector] m_end_Vertex_Deformation("Vertex Deformation", Float) = 0 //endex diff --git a/Scripts/Fold/Editor/FoldNodeSerialized.cs b/Scripts/Fold/Editor/FoldNodeSerialized.cs index 4836811..62431ae 100644 --- a/Scripts/Fold/Editor/FoldNodeSerialized.cs +++ b/Scripts/Fold/Editor/FoldNodeSerialized.cs @@ -2,11 +2,15 @@ using UnityEngine; public class FoldNodeSerialized { + public int opcode; + + // Correspond to _Vertex_Deformation_Float_0, etc. public float float0; public float float1; public float float2; public float float3; + // _Vertex_Deformation_Vector_0, etc. public Vector4 vec0; public Vector4 vec1; public Vector4 vec2; diff --git a/Scripts/Fold/Editor/KeyframeNodeView.cs b/Scripts/Fold/Editor/KeyframeNodeView.cs index fd90c75..225b5b6 100644 --- a/Scripts/Fold/Editor/KeyframeNodeView.cs +++ b/Scripts/Fold/Editor/KeyframeNodeView.cs @@ -2,6 +2,7 @@ using GraphProcessor; using UnityEngine.UIElements; using UnityEngine; using System.Linq; +using System.Collections.Generic; [NodeCustomEditor(typeof(KeyframeNode))] public class KeyframeNodeView : BaseNodeView @@ -25,10 +26,58 @@ public class KeyframeNodeView : BaseNodeView void OnGenerateClick() { var go = GetConnectedGameObject(); - if (go?.GetComponent<MeshRenderer>() == null) return; + if (go == null) return; + var rend = go.GetComponent<MeshRenderer>(); + if (rend == null) return; var foldNode = GetConnectedFoldNode(); - Debug.Log($"Generating Keyframe for '{go.name}' using Fold Data: {(foldNode?.name ?? "None")}"); + + // Accumulate nodes. We are going backwards from the output node + // (KeyframeNode) to the root node. + var foldNodes = new Stack<BaseFoldNode>(); + var cur = foldNode; + while (cur != null) { + foldNodes.Push(cur); + cur = GetInputFoldNode(cur); + } + + var mpb = new MaterialPropertyBlock(); + rend.GetPropertyBlock(mpb); + + // Set material properties for all 16 slots. + for (int i = 0; i < 16; i++) { + string slotPrefix = $"_Vertex_Deformation_Slot_{i}_"; + BaseFoldNode node = (foldNodes.Count > 0) ? foldNodes.Pop() : null; + FoldNodeSerialized data = node?.Serialize(); + + bool active = data != null; + mpb.SetFloat(slotPrefix + "Enabled", active ? 1.0f : 0.0f); + mpb.SetInt(slotPrefix + "Opcode", active ? data.opcode : 0); + + mpb.SetFloat(slotPrefix + "Float_0", active ? data.float0 : 0.0f); + mpb.SetFloat(slotPrefix + "Float_1", active ? data.float1 : 0.0f); + mpb.SetFloat(slotPrefix + "Float_2", active ? data.float2 : 0.0f); + mpb.SetFloat(slotPrefix + "Float_3", active ? data.float3 : 0.0f); + + mpb.SetVector(slotPrefix + "Vector_0", active ? data.vec0 : Vector4.zero); + mpb.SetVector(slotPrefix + "Vector_1", active ? data.vec1 : Vector4.zero); + mpb.SetVector(slotPrefix + "Vector_2", active ? data.vec2 : Vector4.zero); + mpb.SetVector(slotPrefix + "Vector_3", active ? data.vec3 : Vector4.zero); + } + + rend.SetPropertyBlock(mpb); + Debug.Log($"Generated Keyframe for '{go.name}' with properties applied to all 16 slots."); + } + + BaseFoldNode GetInputFoldNode(BaseFoldNode node) + { + // Traverse via edges in the graph model, as 'input' field might not be populated in Editor + var port = node.GetPort(nameof(BaseFoldNode.input), null); + if (port == null) return null; + + // Find the edge connected to this input port + var edge = node.graph.edges.FirstOrDefault(e => e.inputPort == port); + return edge?.outputNode as BaseFoldNode; } T GetConnectedNode<T>(string fieldName) where T : class diff --git a/Scripts/Fold/Editor/PointAlignNode.cs b/Scripts/Fold/Editor/PointAlignNode.cs index 7ab094b..c113928 100644 --- a/Scripts/Fold/Editor/PointAlignNode.cs +++ b/Scripts/Fold/Editor/PointAlignNode.cs @@ -15,7 +15,7 @@ public class PointAlignNode : BaseFoldNode public override FoldNodeSerialized Serialize() { - return new FoldNodeSerialized { vec0 = po }; + return new FoldNodeSerialized { opcode = 0, vec0 = po }; } } diff --git a/features.cginc b/features.cginc index 17f0566..f693049 100644 --- a/features.cginc +++ b/features.cginc @@ -37,33 +37,6 @@ #pragma shader_feature_local _VERTEX_DEFORMATION_TESSELLATION //endex -//ifex _Vertex_Deformation_Tubes_Enabled==0 -#pragma shader_feature_local _VERTEX_DEFORMATION_TUBES -#pragma shader_feature_local _VERTEX_DEFORMATION_TUBE_TO_PLANE_0 -#pragma shader_feature_local _VERTEX_DEFORMATION_AXIS_ALIGN -#pragma shader_feature_local _VERTEX_DEFORMATION_TUBE_TO_PLANE_1 -#pragma shader_feature_local _VERTEX_DEFORMATION_PLANE_TO_TUBE_0 -#pragma shader_feature_local _VERTEX_DEFORMATION_POINT_ALIGN_0 -#pragma shader_feature_local _VERTEX_DEFORMATION_POINT_ALIGN_1 -#pragma shader_feature_local _VERTEX_DEFORMATION_PLANE_TO_TUBE_1 -//endex - -//ifex _Vertex_Deformation_L2_L1_Enabled==0 -#pragma shader_feature_local _VERTEX_DEFORMATION_NORM_CONVERSION -//endex - -//ifex _Vertex_Deformation_Seal_Enabled==0 -#pragma shader_feature_local _VERTEX_DEFORMATION_SEAL -//endex - -//ifex _Vertex_Deformation_Sine_Waves_Enabled==0 -#pragma shader_feature_local _VERTEX_DEFORMATION_SINE_WAVES -//endex - -//ifex _Vertex_Deformation_FBM_Enabled==0 -#pragma shader_feature_local _VERTEX_DEFORMATION_FBM -//endex - //ifex _Unlit==0 #pragma shader_feature_local _UNLIT //endex diff --git a/globals.cginc b/globals.cginc index ddb126c..911aceb 100644 --- a/globals.cginc +++ b/globals.cginc @@ -75,83 +75,6 @@ float3 _Cloth_Sheen_Color; texture2D _Cloth_Sheen_DFG_LUT; #endif // _CLOTH_SHEEN -#if defined(_VERTEX_DEFORMATION_TUBE_TO_PLANE_0) -float3 _Vertex_Deformation_Tube_To_Plane_0_p; -float3 _Vertex_Deformation_Tube_To_Plane_0_r; -float3 _Vertex_Deformation_Tube_To_Plane_0_s; -float _Vertex_Deformation_Tube_To_Plane_0_t; -#endif // _VERTEX_DEFORMATION_TUBE_TO_PLANE_0 - -#if defined(_VERTEX_DEFORMATION_AXIS_ALIGN) -float3 _Vertex_Deformation_Axis_Align_po; -float3 _Vertex_Deformation_Axis_Align_pp; -float3 _Vertex_Deformation_Axis_Align_r; -float _Vertex_Deformation_Axis_Align_t; -#endif // _VERTEX_DEFORMATION_AXIS_ALIGN - -#if defined(_VERTEX_DEFORMATION_TUBE_TO_PLANE_1) -float3 _Vertex_Deformation_Tube_To_Plane_1_p; -float3 _Vertex_Deformation_Tube_To_Plane_1_r; -float3 _Vertex_Deformation_Tube_To_Plane_1_s; -float _Vertex_Deformation_Tube_To_Plane_1_t; -#endif // _VERTEX_DEFORMATION_TUBE_TO_PLANE_1 - -#if defined(_VERTEX_DEFORMATION_PLANE_TO_TUBE_0) -float3 _Vertex_Deformation_Plane_To_Tube_0_p; -float3 _Vertex_Deformation_Plane_To_Tube_0_r; -float3 _Vertex_Deformation_Plane_To_Tube_0_s; -float _Vertex_Deformation_Plane_To_Tube_0_t; -#endif // _VERTEX_DEFORMATION_PLANE_TO_TUBE_0 - -#if defined(_VERTEX_DEFORMATION_POINT_ALIGN_0) -float3 _Vertex_Deformation_Point_Align_0_po; -float3 _Vertex_Deformation_Point_Align_0_pp; -float3 _Vertex_Deformation_Point_Align_0_r; -float _Vertex_Deformation_Point_Align_0_t; -#endif // _VERTEX_DEFORMATION_POINT_ALIGN_0 - -#if defined(_VERTEX_DEFORMATION_POINT_ALIGN_1) -float3 _Vertex_Deformation_Point_Align_1_po; -float3 _Vertex_Deformation_Point_Align_1_pp; -float3 _Vertex_Deformation_Point_Align_1_r; -float _Vertex_Deformation_Point_Align_1_t; -#endif // _VERTEX_DEFORMATION_POINT_ALIGN_1 - -#if defined(_VERTEX_DEFORMATION_PLANE_TO_TUBE_1) -float3 _Vertex_Deformation_Plane_To_Tube_1_p; -float3 _Vertex_Deformation_Plane_To_Tube_1_r; -float3 _Vertex_Deformation_Plane_To_Tube_1_s; -float _Vertex_Deformation_Plane_To_Tube_1_t; -#endif // _VERTEX_DEFORMATION_PLANE_TO_TUBE_1 - -#if defined(_VERTEX_DEFORMATION_NORM_CONVERSION) -float _Vertex_Deformation_Norm_Conversion_Input_k; -float _Vertex_Deformation_Norm_Conversion_Output_k; -float _Vertex_Deformation_Norm_Conversion_t; -#endif // _VERTEX_DEFORMATION_NORM_CONVERSION - -#if defined(_VERTEX_DEFORMATION_SEAL) -float _Vertex_Deformation_Seal_A; -float _Vertex_Deformation_Seal_k; -float _Vertex_Deformation_Seal_t; -#endif // _VERTEX_DEFORMATION_SEAL - -#if defined(_VERTEX_DEFORMATION_SINE_WAVES) -float3 _Vertex_Deformation_Sine_Waves_Amplitude; -float3 _Vertex_Deformation_Sine_Waves_Direction; -float3 _Vertex_Deformation_Sine_Waves_k; -float3 _Vertex_Deformation_Sine_Waves_omega; -#endif // _VERTEX_DEFORMATION_SINE_WAVES - -#if defined(_VERTEX_DEFORMATION_FBM) -float3 _Vertex_Deformation_FBM_Velocity; -float3 _Vertex_Deformation_FBM_Amplitude; -float _Vertex_Deformation_FBM_Gain; -float _Vertex_Deformation_FBM_Lacunarity; -float3 _Vertex_Deformation_FBM_Period; -float _Vertex_Deformation_FBM_Octaves; -#endif // _VERTEX_DEFORMATION_FBM - #if defined(_UV_SCROLL) float2 _UV_Scroll_Speed; #endif // _UV_SCROLL @@ -243,4 +166,182 @@ float _Ray_Marching_Hexagon_Radius; float _Ray_Marching_Hexagon_Height; #endif // _RAY_MARCHING_HEXAGON +#if defined(_VERTEX_DEFORMATION) +float _Vertex_Deformation_Slot_0_Enabled; +int _Vertex_Deformation_Slot_0_Opcode; +float _Vertex_Deformation_Slot_0_Float_0; +float _Vertex_Deformation_Slot_0_Float_1; +float _Vertex_Deformation_Slot_0_Float_2; +float _Vertex_Deformation_Slot_0_Float_3; +float4 _Vertex_Deformation_Slot_0_Vector_0; +float4 _Vertex_Deformation_Slot_0_Vector_1; +float4 _Vertex_Deformation_Slot_0_Vector_2; +float4 _Vertex_Deformation_Slot_0_Vector_3; + +float _Vertex_Deformation_Slot_1_Enabled; +int _Vertex_Deformation_Slot_1_Opcode; +float _Vertex_Deformation_Slot_1_Float_0; +float _Vertex_Deformation_Slot_1_Float_1; +float _Vertex_Deformation_Slot_1_Float_2; +float _Vertex_Deformation_Slot_1_Float_3; +float4 _Vertex_Deformation_Slot_1_Vector_0; +float4 _Vertex_Deformation_Slot_1_Vector_1; +float4 _Vertex_Deformation_Slot_1_Vector_2; +float4 _Vertex_Deformation_Slot_1_Vector_3; + +float _Vertex_Deformation_Slot_2_Enabled; +int _Vertex_Deformation_Slot_2_Opcode; +float _Vertex_Deformation_Slot_2_Float_0; +float _Vertex_Deformation_Slot_2_Float_1; +float _Vertex_Deformation_Slot_2_Float_2; +float _Vertex_Deformation_Slot_2_Float_3; +float4 _Vertex_Deformation_Slot_2_Vector_0; +float4 _Vertex_Deformation_Slot_2_Vector_1; +float4 _Vertex_Deformation_Slot_2_Vector_2; +float4 _Vertex_Deformation_Slot_2_Vector_3; + +float _Vertex_Deformation_Slot_3_Enabled; +int _Vertex_Deformation_Slot_3_Opcode; +float _Vertex_Deformation_Slot_3_Float_0; +float _Vertex_Deformation_Slot_3_Float_1; +float _Vertex_Deformation_Slot_3_Float_2; +float _Vertex_Deformation_Slot_3_Float_3; +float4 _Vertex_Deformation_Slot_3_Vector_0; +float4 _Vertex_Deformation_Slot_3_Vector_1; +float4 _Vertex_Deformation_Slot_3_Vector_2; +float4 _Vertex_Deformation_Slot_3_Vector_3; + +float _Vertex_Deformation_Slot_4_Enabled; +int _Vertex_Deformation_Slot_4_Opcode; +float _Vertex_Deformation_Slot_4_Float_0; +float _Vertex_Deformation_Slot_4_Float_1; +float _Vertex_Deformation_Slot_4_Float_2; +float _Vertex_Deformation_Slot_4_Float_3; +float4 _Vertex_Deformation_Slot_4_Vector_0; +float4 _Vertex_Deformation_Slot_4_Vector_1; +float4 _Vertex_Deformation_Slot_4_Vector_2; +float4 _Vertex_Deformation_Slot_4_Vector_3; + +float _Vertex_Deformation_Slot_5_Enabled; +int _Vertex_Deformation_Slot_5_Opcode; +float _Vertex_Deformation_Slot_5_Float_0; +float _Vertex_Deformation_Slot_5_Float_1; +float _Vertex_Deformation_Slot_5_Float_2; +float _Vertex_Deformation_Slot_5_Float_3; +float4 _Vertex_Deformation_Slot_5_Vector_0; +float4 _Vertex_Deformation_Slot_5_Vector_1; +float4 _Vertex_Deformation_Slot_5_Vector_2; +float4 _Vertex_Deformation_Slot_5_Vector_3; + +float _Vertex_Deformation_Slot_6_Enabled; +int _Vertex_Deformation_Slot_6_Opcode; +float _Vertex_Deformation_Slot_6_Float_0; +float _Vertex_Deformation_Slot_6_Float_1; +float _Vertex_Deformation_Slot_6_Float_2; +float _Vertex_Deformation_Slot_6_Float_3; +float4 _Vertex_Deformation_Slot_6_Vector_0; +float4 _Vertex_Deformation_Slot_6_Vector_1; +float4 _Vertex_Deformation_Slot_6_Vector_2; +float4 _Vertex_Deformation_Slot_6_Vector_3; + +float _Vertex_Deformation_Slot_7_Enabled; +int _Vertex_Deformation_Slot_7_Opcode; +float _Vertex_Deformation_Slot_7_Float_0; +float _Vertex_Deformation_Slot_7_Float_1; +float _Vertex_Deformation_Slot_7_Float_2; +float _Vertex_Deformation_Slot_7_Float_3; +float4 _Vertex_Deformation_Slot_7_Vector_0; +float4 _Vertex_Deformation_Slot_7_Vector_1; +float4 _Vertex_Deformation_Slot_7_Vector_2; +float4 _Vertex_Deformation_Slot_7_Vector_3; + +float _Vertex_Deformation_Slot_8_Enabled; +int _Vertex_Deformation_Slot_8_Opcode; +float _Vertex_Deformation_Slot_8_Float_0; +float _Vertex_Deformation_Slot_8_Float_1; +float _Vertex_Deformation_Slot_8_Float_2; +float _Vertex_Deformation_Slot_8_Float_3; +float4 _Vertex_Deformation_Slot_8_Vector_0; +float4 _Vertex_Deformation_Slot_8_Vector_1; +float4 _Vertex_Deformation_Slot_8_Vector_2; +float4 _Vertex_Deformation_Slot_8_Vector_3; + +float _Vertex_Deformation_Slot_9_Enabled; +int _Vertex_Deformation_Slot_9_Opcode; +float _Vertex_Deformation_Slot_9_Float_0; +float _Vertex_Deformation_Slot_9_Float_1; +float _Vertex_Deformation_Slot_9_Float_2; +float _Vertex_Deformation_Slot_9_Float_3; +float4 _Vertex_Deformation_Slot_9_Vector_0; +float4 _Vertex_Deformation_Slot_9_Vector_1; +float4 _Vertex_Deformation_Slot_9_Vector_2; +float4 _Vertex_Deformation_Slot_9_Vector_3; + +float _Vertex_Deformation_Slot_10_Enabled; +int _Vertex_Deformation_Slot_10_Opcode; +float _Vertex_Deformation_Slot_10_Float_0; +float _Vertex_Deformation_Slot_10_Float_1; +float _Vertex_Deformation_Slot_10_Float_2; +float _Vertex_Deformation_Slot_10_Float_3; +float4 _Vertex_Deformation_Slot_10_Vector_0; +float4 _Vertex_Deformation_Slot_10_Vector_1; +float4 _Vertex_Deformation_Slot_10_Vector_2; +float4 _Vertex_Deformation_Slot_10_Vector_3; + +float _Vertex_Deformation_Slot_11_Enabled; +int _Vertex_Deformation_Slot_11_Opcode; +float _Vertex_Deformation_Slot_11_Float_0; +float _Vertex_Deformation_Slot_11_Float_1; +float _Vertex_Deformation_Slot_11_Float_2; +float _Vertex_Deformation_Slot_11_Float_3; +float4 _Vertex_Deformation_Slot_11_Vector_0; +float4 _Vertex_Deformation_Slot_11_Vector_1; +float4 _Vertex_Deformation_Slot_11_Vector_2; +float4 _Vertex_Deformation_Slot_11_Vector_3; + +float _Vertex_Deformation_Slot_12_Enabled; +int _Vertex_Deformation_Slot_12_Opcode; +float _Vertex_Deformation_Slot_12_Float_0; +float _Vertex_Deformation_Slot_12_Float_1; +float _Vertex_Deformation_Slot_12_Float_2; +float _Vertex_Deformation_Slot_12_Float_3; +float4 _Vertex_Deformation_Slot_12_Vector_0; +float4 _Vertex_Deformation_Slot_12_Vector_1; +float4 _Vertex_Deformation_Slot_12_Vector_2; +float4 _Vertex_Deformation_Slot_12_Vector_3; + +float _Vertex_Deformation_Slot_13_Enabled; +int _Vertex_Deformation_Slot_13_Opcode; +float _Vertex_Deformation_Slot_13_Float_0; +float _Vertex_Deformation_Slot_13_Float_1; +float _Vertex_Deformation_Slot_13_Float_2; +float _Vertex_Deformation_Slot_13_Float_3; +float4 _Vertex_Deformation_Slot_13_Vector_0; +float4 _Vertex_Deformation_Slot_13_Vector_1; +float4 _Vertex_Deformation_Slot_13_Vector_2; +float4 _Vertex_Deformation_Slot_13_Vector_3; + +float _Vertex_Deformation_Slot_14_Enabled; +int _Vertex_Deformation_Slot_14_Opcode; +float _Vertex_Deformation_Slot_14_Float_0; +float _Vertex_Deformation_Slot_14_Float_1; +float _Vertex_Deformation_Slot_14_Float_2; +float _Vertex_Deformation_Slot_14_Float_3; +float4 _Vertex_Deformation_Slot_14_Vector_0; +float4 _Vertex_Deformation_Slot_14_Vector_1; +float4 _Vertex_Deformation_Slot_14_Vector_2; +float4 _Vertex_Deformation_Slot_14_Vector_3; + +float _Vertex_Deformation_Slot_15_Enabled; +int _Vertex_Deformation_Slot_15_Opcode; +float _Vertex_Deformation_Slot_15_Float_0; +float _Vertex_Deformation_Slot_15_Float_1; +float _Vertex_Deformation_Slot_15_Float_2; +float _Vertex_Deformation_Slot_15_Float_3; +float4 _Vertex_Deformation_Slot_15_Vector_0; +float4 _Vertex_Deformation_Slot_15_Vector_1; +float4 _Vertex_Deformation_Slot_15_Vector_2; +float4 _Vertex_Deformation_Slot_15_Vector_3; +#endif // _VERTEX_DEFORMATION + #endif // __GLOBALS_INC 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); |
