summaryrefslogtreecommitdiffstats
path: root/vertex.cginc
diff options
context:
space:
mode:
Diffstat (limited to 'vertex.cginc')
-rw-r--r--vertex.cginc135
1 files changed, 135 insertions, 0 deletions
diff --git a/vertex.cginc b/vertex.cginc
index 9cdbead..f82fad6 100644
--- a/vertex.cginc
+++ b/vertex.cginc
@@ -6,6 +6,59 @@
#define FOO(x) (x)
+#if defined(_VERTEX_DEFORMATION_XZ_UNTUBE)
+#define VERTEX_DEFORM_XZ_UNTUBE_PREAMBLE \
+ float t = _Vertex_Deformation_XZ_Untube_t
+#define VERTEX_DEFORM_XZ_UNTUBE_POS \
+ objPos = tube_to_plane(objPos.xyz, t)
+#define VERTEX_DEFORM_XZ_UNTUBE_NORM \
+ tube_to_plane_normal(objPos, objNorm, objTan, t)
+#else
+#define VERTEX_DEFORM_XZ_UNTUBE_PREAMBLE
+#define VERTEX_DEFORM_XZ_UNTUBE_POS
+#define VERTEX_DEFORM_XZ_UNTUBE_NORM
+#endif // VERTEX_DEFORMATION_XZ_UNTUBE
+
+#if defined(_VERTEX_DEFORMATION_YZ_UNTUBE)
+#define VERTEX_DEFORM_YZ_UNTUBE_PREAMBLE \
+ float t = _Vertex_Deformation_YZ_Untube_t
+#define VERTEX_DEFORM_YZ_UNTUBE_POS \
+ objPos = tube_to_plane(objPos.yxz, t); \
+ objPos = objPos.yxz
+#define VERTEX_DEFORM_YZ_UNTUBE_NORM \
+ float3 yzPos = objPos.yxz; \
+ float3 yzNorm = objNorm.yxz; \
+ float3 yzTan = objTan.yxz; \
+ tube_to_plane_normal(yzPos, yzNorm, yzTan, t); \
+ objPos = yzPos.yxz; \
+ objNorm = yzNorm.yxz; \
+ objTan = yzTan.yxz
+#else
+#define VERTEX_DEFORM_YZ_UNTUBE_PREAMBLE
+#define VERTEX_DEFORM_YZ_UNTUBE_POS
+#define VERTEX_DEFORM_YZ_UNTUBE_NORM
+#endif // VERTEX_DEFORMATION_YZ_UNTUBE
+
+#if defined(_VERTEX_DEFORMATION_XY_UNTUBE)
+#define VERTEX_DEFORM_XY_UNTUBE_PREAMBLE \
+ float t = _Vertex_Deformation_XY_Untube_t
+#define VERTEX_DEFORM_XY_UNTUBE_POS \
+ objPos = tube_to_plane(objPos.xzy, t); \
+ objPos = objPos.xzy
+#define VERTEX_DEFORM_XY_UNTUBE_NORM \
+ float3 xyPos = objPos.xzy; \
+ float3 xyNorm = objNorm.xzy; \
+ float3 xyTan = objTan.xzy; \
+ tube_to_plane_normal(xyPos, xyNorm, xyTan, t); \
+ objPos = xyPos.xzy; \
+ objNorm = xyNorm.xzy; \
+ objTan = xyTan.xzy
+#else
+#define VERTEX_DEFORM_XY_UNTUBE_PREAMBLE
+#define VERTEX_DEFORM_XY_UNTUBE_POS
+#define VERTEX_DEFORM_XY_UNTUBE_NORM
+#endif // VERTEX_DEFORMATION_XY_UNTUBE
+
#if defined(_VERTEX_DEFORMATION_XZ_TUBE)
#define VERTEX_DEFORM_XZ_TUBE_PREAMBLE \
float t = _Vertex_Deformation_XZ_Tube_t
@@ -128,6 +181,18 @@
void deform(inout float3 objPos) {
const float t = getTime();
{
+ VERTEX_DEFORM_XZ_UNTUBE_PREAMBLE;
+ VERTEX_DEFORM_XZ_UNTUBE_POS;
+ }
+ {
+ VERTEX_DEFORM_YZ_UNTUBE_PREAMBLE;
+ VERTEX_DEFORM_YZ_UNTUBE_POS;
+ }
+ {
+ VERTEX_DEFORM_XY_UNTUBE_PREAMBLE;
+ VERTEX_DEFORM_XY_UNTUBE_POS;
+ }
+ {
VERTEX_DEFORM_XZ_TUBE_PREAMBLE;
VERTEX_DEFORM_XZ_TUBE_POS;
}
@@ -160,6 +225,18 @@ void deform(inout float3 objPos) {
void deform_normal(inout float3 objPos, inout float3 objNorm, inout float3 objTan) {
const float t = getTime();
{
+ VERTEX_DEFORM_XZ_UNTUBE_PREAMBLE;
+ VERTEX_DEFORM_XZ_UNTUBE_NORM;
+ }
+ {
+ VERTEX_DEFORM_YZ_UNTUBE_PREAMBLE;
+ VERTEX_DEFORM_YZ_UNTUBE_NORM;
+ }
+ {
+ VERTEX_DEFORM_XY_UNTUBE_PREAMBLE;
+ VERTEX_DEFORM_XY_UNTUBE_NORM;
+ }
+ {
VERTEX_DEFORM_XZ_TUBE_PREAMBLE;
VERTEX_DEFORM_XZ_TUBE_NORM;
}
@@ -209,6 +286,27 @@ void undeform_normal(inout float3 objPos, inout float3 objNorm, inout float3 obj
int posCount = 0;
posHistory[posCount++] = objPos;
+#if defined(_VERTEX_DEFORMATION_XZ_UNTUBE)
+ {
+ VERTEX_DEFORM_XZ_UNTUBE_PREAMBLE;
+ VERTEX_DEFORM_XZ_UNTUBE_POS;
+ posHistory[posCount++] = objPos;
+ }
+#endif
+#if defined(_VERTEX_DEFORMATION_YZ_UNTUBE)
+ {
+ VERTEX_DEFORM_YZ_UNTUBE_PREAMBLE;
+ VERTEX_DEFORM_YZ_UNTUBE_POS;
+ posHistory[posCount++] = objPos;
+ }
+#endif
+#if defined(_VERTEX_DEFORMATION_XY_UNTUBE)
+ {
+ VERTEX_DEFORM_XY_UNTUBE_PREAMBLE;
+ VERTEX_DEFORM_XY_UNTUBE_POS;
+ posHistory[posCount++] = objPos;
+ }
+#endif
#if defined(_VERTEX_DEFORMATION_XZ_TUBE)
{
VERTEX_DEFORM_XZ_TUBE_PREAMBLE;
@@ -338,6 +436,43 @@ void undeform_normal(inout float3 objPos, inout float3 objNorm, inout float3 obj
cursor -= 1;
}
#endif
+#if defined(_VERTEX_DEFORMATION_XY_UNTUBE)
+ if (cursor > 0) {
+ VERTEX_DEFORM_XY_UNTUBE_PREAMBLE;
+ float3 stageInput = posHistory[cursor - 1];
+ float3 xyPos = stageInput.xzy;
+ float3 xyNorm = objNorm.xzy;
+ float3 xyTan = objTan.xzy;
+ tube_to_plane_undeform_normal(xyPos, xyNorm, xyTan, t);
+ objNorm = xyNorm.xzy;
+ objTan = xyTan.xzy;
+ objPos = stageInput;
+ cursor -= 1;
+ }
+#endif
+#if defined(_VERTEX_DEFORMATION_YZ_UNTUBE)
+ if (cursor > 0) {
+ VERTEX_DEFORM_YZ_UNTUBE_PREAMBLE;
+ float3 stageInput = posHistory[cursor - 1];
+ float3 yzPos = stageInput.yxz;
+ float3 yzNorm = objNorm.yxz;
+ float3 yzTan = objTan.yxz;
+ tube_to_plane_undeform_normal(yzPos, yzNorm, yzTan, t);
+ objNorm = yzNorm.yxz;
+ objTan = yzTan.yxz;
+ objPos = stageInput;
+ cursor -= 1;
+ }
+#endif
+#if defined(_VERTEX_DEFORMATION_XZ_UNTUBE)
+ if (cursor > 0) {
+ VERTEX_DEFORM_XZ_UNTUBE_PREAMBLE;
+ float3 stageInput = posHistory[cursor - 1];
+ tube_to_plane_undeform_normal(stageInput, objNorm, objTan, t);
+ objPos = stageInput;
+ cursor -= 1;
+ }
+#endif
objPos = objPos_deformed;
}