diff options
| author | yum <yum.food.vr@gmail.com> | 2025-12-06 19:09:42 -0800 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2025-12-06 19:10:03 -0800 |
| commit | 036919d692fda532bfba508f77ea9dba37d5c4f9 (patch) | |
| tree | ce12c65635cda34f4a71de690fa33cbff98fbc33 /vertex.cginc | |
| parent | 0663fa9713e1fc44395401a96f60aca7a947bdbb (diff) | |
begin work on "un-tube" feature
essentially the inverse of the sheet -> tube transform.
Diffstat (limited to 'vertex.cginc')
| -rw-r--r-- | vertex.cginc | 135 |
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; } |
