diff options
| author | yum <yum.food.vr@gmail.com> | 2026-01-02 16:21:34 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2026-01-02 17:32:14 -0800 |
| commit | fcc76b257ef5cfb4514669df3b0144f8e8dd76ef (patch) | |
| tree | bb6e73c8f199699b3e88afb85e24e2c8b3df5aab | |
| parent | 43d81e11992c11eda06e4b67d2c5bd0b9c4b729b (diff) | |
Fold: implement dynamic branching in shader
Switch from static branching approach using per-op data and fixed
execution order to dynamic branching approach using dynamic data.
This confers the main benefit of letting us dynamically reorder ops and
duplicate them. It also lets us eliminate some of the plumbing tedium
whenever we want to add new ops.
| -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); |
