diff options
| author | yum <yum.food.vr@gmail.com> | 2025-03-25 19:12:49 -0700 |
|---|---|---|
| committer | yum <yum.food.vr@gmail.com> | 2025-03-25 19:12:49 -0700 |
| commit | 274f601c9c49f69e4acef24b56982190b5b0bf93 (patch) | |
| tree | 8c241e6cb0310485edb7db96d42d164189753c4b /tessellation.cginc | |
| parent | ccdda956f7de812bb9c318161c6852301a60d413 (diff) | |
Continue work on tessellation
Diffstat (limited to 'tessellation.cginc')
| -rw-r--r-- | tessellation.cginc | 36 |
1 files changed, 28 insertions, 8 deletions
diff --git a/tessellation.cginc b/tessellation.cginc index c77cd83..92aca3a 100644 --- a/tessellation.cginc +++ b/tessellation.cginc @@ -3,6 +3,7 @@ #include "globals.cginc" #include "interpolators.cginc" +#include "shatter_wave.cginc" //ifex _Tessellation_Enabled==0 @@ -14,10 +15,10 @@ struct tess_factors { tess_factors patch_constant(InputPatch<v2f, 3> patch) { tess_factors f; #if defined(_TESSELLATION) - f.edge[0] = _Tessellation_Edge_Factors[0]; - f.edge[1] = _Tessellation_Edge_Factors[1]; - f.edge[2] = _Tessellation_Edge_Factors[2]; - f.inside = _Tessellation_Inside_Factor; + f.edge[0] = _Tessellation_Factor; + f.edge[1] = _Tessellation_Factor; + f.edge[2] = _Tessellation_Factor; + f.inside = _Tessellation_Factor; #else f.edge[0] = 1; f.edge[1] = 1; @@ -50,16 +51,35 @@ v2f domain( patch[0].fieldName * baryc.x + \ patch[1].fieldName * baryc.y + \ patch[2].fieldName * baryc.z - o.pos = DOMAIN_INTERP(pos); - o.uv01 = DOMAIN_INTERP(uv01); +#if defined(_TESSELLATION) + o.objPos = DOMAIN_INTERP(tpos); +#else o.objPos = DOMAIN_INTERP(pos); - o.worldPos = DOMAIN_INTERP(worldPos); +#endif o.normal = DOMAIN_INTERP(normal); o.tangent = DOMAIN_INTERP(tangent); o.binormal = DOMAIN_INTERP(binormal); - o.eyeVec = DOMAIN_INTERP(eyeVec); + o.uv01 = DOMAIN_INTERP(uv01); + +#if defined(_SHATTER_WAVE) + shatterWaveVert(o.objPos.xyz, o.normal, o.tangent); + o.binormal = cross(o.normal, o.tangent); +#endif + +#if defined(_TESSELLATION_HEIGHTMAP) + float height = _Tessellation_Heightmap.SampleLevel(linear_repeat_s, o.uv01.xy * _Tessellation_Heightmap_ST.xy + _Tessellation_Heightmap_ST.zw, 0).r * _Tessellation_Heightmap_Scale; + o.objPos.xyz += o.normal * height; +#endif + + o.pos = UnityObjectToClipPos(o.objPos); + o.worldPos = mul(unity_ObjectToWorld, o.objPos); + o.eyeVec.xyz = normalize(o.worldPos - _WorldSpaceCameraPos); + o.eyeVec.w = 1; // TODO what about UNITY_LIGHTING_COORDS(7,8) and instance id and shit? + //UNITY_TRANSFER_LIGHTING(o, DOMAIN_INTERP(_unity_lightcoords)); + UNITY_TRANSFER_INSTANCE_ID(patch[0], o); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); return o; } |
