diff options
Diffstat (limited to 'include/GFSDK_WaveWorks_Quadtree.fxh')
| -rw-r--r-- | include/GFSDK_WaveWorks_Quadtree.fxh | 136 |
1 files changed, 68 insertions, 68 deletions
diff --git a/include/GFSDK_WaveWorks_Quadtree.fxh b/include/GFSDK_WaveWorks_Quadtree.fxh index b06e437..a3d5fc0 100644 --- a/include/GFSDK_WaveWorks_Quadtree.fxh +++ b/include/GFSDK_WaveWorks_Quadtree.fxh @@ -40,78 +40,78 @@ #endif #if defined( GFSDK_WAVEWORKS_USE_TESSELLATION ) - GFSDK_WAVEWORKS_BEGIN_GEOM_HS_CBUFFER(nvsf_eyepos_buffer) - GFSDK_WAVEWORKS_DECLARE_GEOM_HS_CONSTANT(float4, nvsf_g_hsWorldEye, 0) - GFSDK_WAVEWORKS_DECLARE_GEOM_HS_CONSTANT(float4, nvsf_g_tessellationParams, 1) + GFSDK_WAVEWORKS_BEGIN_GEOM_HS_CBUFFER(eyepos_buffer) + GFSDK_WAVEWORKS_DECLARE_GEOM_HS_CONSTANT(float4, g_hsWorldEye, 0) + GFSDK_WAVEWORKS_DECLARE_GEOM_HS_CONSTANT(float4, g_tessellationParams, 1) GFSDK_WAVEWORKS_END_GEOM_HS_CBUFFER #endif -GFSDK_WAVEWORKS_BEGIN_GEOM_VS_CBUFFER(nvsf_geom_buffer) -GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4x3, nvsf_g_matLocalWorld, 0) -GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4, nvsf_g_vsEyePos, 3) -GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4, nvsf_g_MorphParam, 4) +GFSDK_WAVEWORKS_BEGIN_GEOM_VS_CBUFFER(geom_buffer) +GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4x3, g_matLocalWorld, 0) +GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4, g_vsEyePos, 3) +GFSDK_WAVEWORKS_DECLARE_GEOM_VS_CONSTANT(float4, g_MorphParam, 4) GFSDK_WAVEWORKS_END_GEOM_VS_CBUFFER struct GFSDK_WAVEWORKS_VERTEX_INPUT { - float4 nvsf_vPos SEMANTIC(POSITION); + float4 vPos SEMANTIC(POSITION); }; #if !defined(GFSDK_WAVEWORKS_USE_TESSELLATION) float3 GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(GFSDK_WAVEWORKS_VERTEX_INPUT In) { - float2 nvsf_vpos = In.nvsf_vPos.xy; + float2 vpos = In.vPos.xy; // Use multiple levels of geo-morphing to smooth away LOD boundaries - float nvsf_geomorph_scale = 0.25f; + float geomorph_scale = 0.25f; - float2 nvsf_geomorph_offset = float2(nvsf_g_MorphParam.w,nvsf_g_MorphParam.w); - float2 nvsf_vpos_src = nvsf_vpos; - float2 nvsf_vpos_target = nvsf_vpos_src; - float nvsf_geomorph_amount = 0.f; + float2 geomorph_offset = float2(g_MorphParam.w,g_MorphParam.w); + float2 vpos_src = vpos; + float2 vpos_target = vpos_src; + float geomorph_amount = 0.f; - for(int nvsf_geomorph_level = 0; nvsf_geomorph_level != 4; ++nvsf_geomorph_level) { + for(int geomorph_level = 0; geomorph_level != 4; ++geomorph_level) { - float2 nvsf_intpart; - float2 nvsf_rempart = modf(nvsf_geomorph_scale*nvsf_vpos_src.xy,nvsf_intpart); + float2 intpart; + float2 rempart = modf(geomorph_scale*vpos_src.xy,intpart); - float2 nvsf_mirror = float2(1.0f, 1.0f); + float2 mirror = float2(1.0f, 1.0f); - if(nvsf_rempart.x > 0.5f) + if(rempart.x > 0.5f) { - nvsf_rempart.x = 1.0f - nvsf_rempart.x; - nvsf_mirror.x = -nvsf_mirror.x; + rempart.x = 1.0f - rempart.x; + mirror.x = -mirror.x; } - if(nvsf_rempart.y > 0.5f) + if(rempart.y > 0.5f) { - nvsf_rempart.y = 1.0f - nvsf_rempart.y; - nvsf_mirror.y = -nvsf_mirror.y; + rempart.y = 1.0f - rempart.y; + mirror.y = -mirror.y; } - if(0.25f == nvsf_rempart.x && 0.25f == nvsf_rempart.y) nvsf_vpos_target.xy = nvsf_vpos_src.xy - nvsf_geomorph_offset*nvsf_mirror; - else if(0.25f == nvsf_rempart.x) nvsf_vpos_target.x = nvsf_vpos_src.x + nvsf_geomorph_offset.x*nvsf_mirror.x; - else if(0.25f == nvsf_rempart.y) nvsf_vpos_target.y = nvsf_vpos_src.y + nvsf_geomorph_offset.y*nvsf_mirror.y; + if(0.25f == rempart.x && 0.25f == rempart.y) vpos_target.xy = vpos_src.xy - geomorph_offset*mirror; + else if(0.25f == rempart.x) vpos_target.x = vpos_src.x + geomorph_offset.x*mirror.x; + else if(0.25f == rempart.y) vpos_target.y = vpos_src.y + geomorph_offset.y*mirror.y; - float3 nvsf_eyevec = mul(float4(nvsf_vpos_target,0.f,1.f), nvsf_g_matLocalWorld) - nvsf_g_vsEyePos.xyz; - float nvsf_d = length(nvsf_eyevec); - float nvsf_geomorph_target_level = log2(nvsf_d * nvsf_g_MorphParam.x) + 1.f; - nvsf_geomorph_amount = saturate(2.0*(nvsf_geomorph_target_level - float(nvsf_geomorph_level))); - if(nvsf_geomorph_amount < 1.f) + float3 eyevec = mul(float4(vpos_target,0.f,1.f), g_matLocalWorld) - g_vsEyePos.xyz; + float d = length(eyevec); + float geomorph_target_level = log2(d * g_MorphParam.x) + 1.f; + geomorph_amount = saturate(2.0*(geomorph_target_level - float(geomorph_level))); + if(geomorph_amount < 1.f) { break; } else { - nvsf_vpos_src = nvsf_vpos_target; - nvsf_geomorph_scale *= 0.5f; - nvsf_geomorph_offset *= -2.f; + vpos_src = vpos_target; + geomorph_scale *= 0.5f; + geomorph_offset *= -2.f; } } - nvsf_vpos.xy = lerp(nvsf_vpos_src, nvsf_vpos_target, nvsf_geomorph_amount); - return mul(float4(nvsf_vpos,In.nvsf_vPos.zw), nvsf_g_matLocalWorld); + vpos.xy = lerp(vpos_src, vpos_target, geomorph_amount); + return mul(float4(vpos,In.vPos.zw), g_matLocalWorld); } #endif @@ -119,59 +119,59 @@ float3 GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(GFSDK_WAVEWORKS_VERTEX_ #if defined(GFSDK_WAVEWORKS_USE_TESSELLATION) float3 GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(GFSDK_WAVEWORKS_VERTEX_INPUT In) { - float2 nvsf_vpos = In.nvsf_vPos.xy; + float2 vpos = In.vPos.xy; // Use multiple levels of geo-morphing to smooth away LOD boundaries - float nvsf_geomorph_scale = 0.5f; - float nvsf_geomorph_offset = abs(nvsf_g_MorphParam.w); - float2 nvsf_vpos_src = nvsf_vpos; - float2 nvsf_vpos_target = nvsf_vpos_src; - float nvsf_geomorph_amount = 0.f; + float geomorph_scale = 0.5f; + float geomorph_offset = abs(g_MorphParam.w); + float2 vpos_src = vpos; + float2 vpos_target = vpos_src; + float geomorph_amount = 0.f; - //nvsf_vpos_target.x += 0.25*nvsf_geomorph_offset; - //nvsf_vpos_src.x += 0.25*nvsf_geomorph_offset; + //vpos_target.x += 0.25*geomorph_offset; + //vpos_src.x += 0.25*geomorph_offset; - for(int nvsf_geomorph_level = 0; nvsf_geomorph_level != 4; ++nvsf_geomorph_level) { + for(int geomorph_level = 0; geomorph_level != 4; ++geomorph_level) { - float2 nvsf_intpart; - float2 nvsf_rempart = modf(nvsf_geomorph_scale*nvsf_vpos_src.xy,nvsf_intpart); - if(0.5f == nvsf_rempart.x) + float2 intpart; + float2 rempart = modf(geomorph_scale*vpos_src.xy,intpart); + if(0.5f == rempart.x) { - nvsf_vpos_target.x = nvsf_vpos_src.x + nvsf_geomorph_offset; + vpos_target.x = vpos_src.x + geomorph_offset; } - if(0.5f == nvsf_rempart.y) + if(0.5f == rempart.y) { - nvsf_vpos_target.y = nvsf_vpos_src.y + nvsf_geomorph_offset; + vpos_target.y = vpos_src.y + geomorph_offset; } - float3 nvsf_eyevec = mul(float4(nvsf_vpos_target,0.f,1.f), nvsf_g_matLocalWorld) - nvsf_g_vsEyePos.xyz; - float nvsf_d = length(nvsf_eyevec); - float nvsf_geomorph_target_level = log2(nvsf_d * nvsf_g_MorphParam.x) + 1.f; - nvsf_geomorph_amount = saturate(3.0*(nvsf_geomorph_target_level - float(nvsf_geomorph_level))); - if(nvsf_geomorph_amount < 1.f) { + float3 eyevec = mul(float4(vpos_target,0.f,1.f), g_matLocalWorld) - g_vsEyePos.xyz; + float d = length(eyevec); + float geomorph_target_level = log2(d * g_MorphParam.x) + 1.f; + geomorph_amount = saturate(3.0*(geomorph_target_level - float(geomorph_level))); + if(geomorph_amount < 1.f) { break; } else { - nvsf_vpos_src = nvsf_vpos_target; - nvsf_geomorph_scale *= 0.5f; - nvsf_geomorph_offset *= 2.f; + vpos_src = vpos_target; + geomorph_scale *= 0.5f; + geomorph_offset *= 2.f; } } - nvsf_vpos.xy = lerp(nvsf_vpos_src, nvsf_vpos_target, nvsf_geomorph_amount); - return mul(float4(nvsf_vpos,In.nvsf_vPos.zw), nvsf_g_matLocalWorld); + vpos.xy = lerp(vpos_src, vpos_target, geomorph_amount); + return mul(float4(vpos,In.vPos.zw), g_matLocalWorld); } float GFSDK_WaveWorks_GetEdgeTessellationFactor(float4 vertex1, float4 vertex2) { - float3 nvsf_edge_center = 0.5*(vertex1.xyz + vertex2.xyz); - float nvsf_edge_length = length (vertex1.xyz - vertex2.xyz); - float nvsf_edge_distance = length(nvsf_g_hsWorldEye.xyz - nvsf_edge_center.xyz); - return nvsf_g_tessellationParams.x * nvsf_edge_length / nvsf_edge_distance; + float3 edge_center = 0.5*(vertex1.xyz + vertex2.xyz); + float edge_length = length (vertex1.xyz - vertex2.xyz); + float edge_distance = length(g_hsWorldEye.xyz - edge_center.xyz); + return g_tessellationParams.x * edge_length / edge_distance; } float GFSDK_WaveWorks_GetVertexTargetTessellatedEdgeLength(float3 vertex) { - float nvsf_vertex_distance = length(nvsf_g_hsWorldEye.xyz - vertex.xyz); - return nvsf_vertex_distance / nvsf_g_tessellationParams.x; + float vertex_distance = length(g_hsWorldEye.xyz - vertex.xyz); + return vertex_distance / g_tessellationParams.x; } #endif |