From e70d2cb317295571c57abd229846424754dff937 Mon Sep 17 00:00:00 2001 From: yum Date: Thu, 25 Dec 2025 13:09:39 -0800 Subject: more vertex deformation tweaks; unwrapping the donut --- vertex.cginc | 98 +++++++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 64 insertions(+), 34 deletions(-) (limited to 'vertex.cginc') diff --git a/vertex.cginc b/vertex.cginc index 9a1ed2f..acc6d60 100644 --- a/vertex.cginc +++ b/vertex.cginc @@ -70,21 +70,37 @@ #define VERTEX_DEFORM_PLANE_TO_TUBE_0_NORM #endif // VERTEX_DEFORMATION_PLANE_TO_TUBE_0 -#if defined(_VERTEX_DEFORMATION_POINT_ALIGN) -#define VERTEX_DEFORM_POINT_ALIGN_PREAMBLE \ - float3 po = _Vertex_Deformation_Point_Align_po; \ - float3 pp = _Vertex_Deformation_Point_Align_pp; \ - float3 r = _Vertex_Deformation_Point_Align_r; \ - float t = _Vertex_Deformation_Point_Align_t -#define VERTEX_DEFORM_POINT_ALIGN_POS \ +#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_NORM \ +#define VERTEX_DEFORM_POINT_ALIGN_1_NORM \ point_align_normal(objPos, objNorm, objTan, po, pp, r, t) #else -#define VERTEX_DEFORM_POINT_ALIGN_PREAMBLE -#define VERTEX_DEFORM_POINT_ALIGN_POS -#define VERTEX_DEFORM_POINT_ALIGN_NORM -#endif // VERTEX_DEFORMATION_POINT_ALIGN +#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 \ @@ -192,13 +208,17 @@ void deform(inout float3 objPos) { } // 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_PREAMBLE; - VERTEX_DEFORM_POINT_ALIGN_POS; + VERTEX_DEFORM_POINT_ALIGN_1_PREAMBLE; + VERTEX_DEFORM_POINT_ALIGN_1_POS; } { VERTEX_DEFORM_PLANE_TO_TUBE_1_PREAMBLE; @@ -221,34 +241,44 @@ void deform(inout float3 objPos) { 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; + { + 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_PLANE_TO_TUBE_0_PREAMBLE; - VERTEX_DEFORM_PLANE_TO_TUBE_0_NORM; - } - { - VERTEX_DEFORM_POINT_ALIGN_PREAMBLE; - VERTEX_DEFORM_POINT_ALIGN_NORM; - } - { - VERTEX_DEFORM_PLANE_TO_TUBE_1_PREAMBLE; - VERTEX_DEFORM_PLANE_TO_TUBE_1_NORM; + { + 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; + } + { + VERTEX_DEFORM_PLANE_TO_TUBE_1_PREAMBLE; + VERTEX_DEFORM_PLANE_TO_TUBE_1_NORM; + } } { VERTEX_DEFORM_NORM_CONVERSION_PREAMBLE; -- cgit v1.2.3