diff options
| author | Jason Maskell <Jason Maskell> | 2016-08-01 12:10:17 +0700 |
|---|---|---|
| committer | Jason Maskell <Jason Maskell> | 2016-08-01 12:10:17 +0700 |
| commit | 4f696cb8b1ee6fe6056017272ede68e38abb0564 (patch) | |
| tree | d8cdb963e00bc8ef60d047c2e647eece6eeaa0bb /include | |
| parent | Don't need FindDirectX anymore, so deleted it and modified the cmake files. (diff) | |
| download | waveworks_archive-4f696cb8b1ee6fe6056017272ede68e38abb0564.tar.xz waveworks_archive-4f696cb8b1ee6fe6056017272ede68e38abb0564.zip | |
Removed nvsf_ prefix from all shader variables.
Added manually generated glsl.h files for the OpenGL sample. Breaking DRY but no longer need sed and an external CL call to get glsl. Worth the tradeoff.
OpenGL sample now compiles and runs but fails at runtime when loading a texture.
Diffstat (limited to 'include')
| -rw-r--r-- | include/GFSDK_WaveWorks_Attributes.fxh | 370 | ||||
| -rw-r--r-- | include/GFSDK_WaveWorks_Common.fxh | 16 | ||||
| -rw-r--r-- | include/GFSDK_WaveWorks_Quadtree.fxh | 136 |
3 files changed, 261 insertions, 261 deletions
diff --git a/include/GFSDK_WaveWorks_Attributes.fxh b/include/GFSDK_WaveWorks_Attributes.fxh index 840243c..13a32b0 100644 --- a/include/GFSDK_WaveWorks_Attributes.fxh +++ b/include/GFSDK_WaveWorks_Attributes.fxh @@ -64,53 +64,53 @@ #define GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER_TEXTUREARRAY(SampLabel,TexLabel,Regoff) GFSDK_WAVEWORKS_DECLARE_ATTR_VS_SAMPLER_TEXTUREARRAY(SampLabel,TexLabel,Regoff) #endif -GFSDK_WAVEWORKS_BEGIN_ATTR_DISPLACEMENT_CBUFFER(nvsf_attr_vs_buffer) -GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float3, nvsf_g_WorldEye, 0) +GFSDK_WAVEWORKS_BEGIN_ATTR_DISPLACEMENT_CBUFFER(attr_vs_buffer) +GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float3, g_WorldEye, 0) #if defined( GFSDK_WAVEWORKS_GL ) - GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float, nvsf_g_UseTextureArrays, 1) + GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float, g_UseTextureArrays, 1) #else - GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float, nvsf_g_Pad1, 1) + GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float, g_Pad1, 1) #endif -GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float4, nvsf_g_UVScaleCascade0123, 2) +GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_CONSTANT(float4, g_UVScaleCascade0123, 2) GFSDK_WAVEWORKS_END_ATTR_DISPLACEMENT_CBUFFER -GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(nvsf_g_samplerDisplacementMap0, nvsf_g_textureDisplacementMap0, 0) -GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(nvsf_g_samplerDisplacementMap1, nvsf_g_textureDisplacementMap1, 1) -GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(nvsf_g_samplerDisplacementMap2, nvsf_g_textureDisplacementMap2, 2) -GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(nvsf_g_samplerDisplacementMap3, nvsf_g_textureDisplacementMap3, 3) +GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(g_samplerDisplacementMap0, g_textureDisplacementMap0, 0) +GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(g_samplerDisplacementMap1, g_textureDisplacementMap1, 1) +GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(g_samplerDisplacementMap2, g_textureDisplacementMap2, 2) +GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER(g_samplerDisplacementMap3, g_textureDisplacementMap3, 3) #if defined( GFSDK_WAVEWORKS_GL ) - GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER_TEXTUREARRAY(nvsf_g_samplerDisplacementMapTextureArray, nvsf_g_textureArrayDisplacementMap, 4) + GFSDK_WAVEWORKS_DECLARE_ATTR_DISPLACEMENT_SAMPLER_TEXTUREARRAY(g_samplerDisplacementMapTextureArray, g_textureArrayDisplacementMap, 4) #endif -GFSDK_WAVEWORKS_BEGIN_ATTR_PS_CBUFFER(nvsf_attr_ps_buffer) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_TexelLength_x2_PS, 0) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade1Scale_PS, 1) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade1TexelScale_PS, 2) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade1UVOffset_PS, 3) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade2Scale_PS, 4) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade2TexelScale_PS, 5) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade2UVOffset_PS, 6) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade3Scale_PS, 7) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade3TexelScale_PS, 8) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, nvsf_g_Cascade3UVOffset_PS, 9) +GFSDK_WAVEWORKS_BEGIN_ATTR_PS_CBUFFER(attr_ps_buffer) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_TexelLength_x2_PS, 0) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade1Scale_PS, 1) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade1TexelScale_PS, 2) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade1UVOffset_PS, 3) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade2Scale_PS, 4) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade2TexelScale_PS, 5) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade2UVOffset_PS, 6) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade3Scale_PS, 7) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade3TexelScale_PS, 8) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_CONSTANT(float, g_Cascade3UVOffset_PS, 9) GFSDK_WAVEWORKS_END_ATTR_PS_CBUFFER -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(nvsf_g_samplerGradientMap0, nvsf_g_textureGradientMap0, 0) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(nvsf_g_samplerGradientMap1, nvsf_g_textureGradientMap1, 1) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(nvsf_g_samplerGradientMap2, nvsf_g_textureGradientMap2, 2) -GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(nvsf_g_samplerGradientMap3, nvsf_g_textureGradientMap3, 3) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(g_samplerGradientMap0, g_textureGradientMap0, 0) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(g_samplerGradientMap1, g_textureGradientMap1, 1) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(g_samplerGradientMap2, g_textureGradientMap2, 2) +GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER(g_samplerGradientMap3, g_textureGradientMap3, 3) #if defined( GFSDK_WAVEWORKS_GL ) - GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER_TEXTUREARRAY(nvsf_g_samplerGradientMapTextureArray, nvsf_g_textureArrayGradientMap, 4) + GFSDK_WAVEWORKS_DECLARE_ATTR_PS_SAMPLER_TEXTUREARRAY(g_samplerGradientMapTextureArray, g_textureArrayGradientMap, 4) #endif struct GFSDK_WAVEWORKS_INTERPOLATED_VERTEX_OUTPUT { - float4 nvsf_tex_coord_cascade01 SEMANTIC(TEXCOORD0); - float4 nvsf_tex_coord_cascade23 SEMANTIC(TEXCOORD1); - float4 nvsf_blend_factor_cascade0123 SEMANTIC(TEXCOORD2); - float3 nvsf_eye_vec SEMANTIC(TEXCOORD3); + float4 tex_coord_cascade01 SEMANTIC(TEXCOORD0); + float4 tex_coord_cascade23 SEMANTIC(TEXCOORD1); + float4 blend_factor_cascade0123 SEMANTIC(TEXCOORD2); + float3 eye_vec SEMANTIC(TEXCOORD3); }; struct GFSDK_WAVEWORKS_VERTEX_OUTPUT @@ -124,186 +124,186 @@ struct GFSDK_WAVEWORKS_VERTEX_OUTPUT GFSDK_WAVEWORKS_VERTEX_OUTPUT GFSDK_WaveWorks_GetDisplacedVertex(GFSDK_WAVEWORKS_VERTEX_INPUT In) { // Get starting position and distance to camera - float3 nvsf_pos_world_undisplaced = GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(In); - float nvsf_distance = length(nvsf_g_WorldEye - nvsf_pos_world_undisplaced); + float3 pos_world_undisplaced = GFSDK_WaveWorks_GetUndisplacedVertexWorldPosition(In); + float distance = length(g_WorldEye - pos_world_undisplaced); // UVs - float2 nvsf_uv_world_cascade0 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.x; - float2 nvsf_uv_world_cascade1 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.y; - float2 nvsf_uv_world_cascade2 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.z; - float2 nvsf_uv_world_cascade3 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.w; + float2 uv_world_cascade0 = pos_world_undisplaced.xy * g_UVScaleCascade0123.x; + float2 uv_world_cascade1 = pos_world_undisplaced.xy * g_UVScaleCascade0123.y; + float2 uv_world_cascade2 = pos_world_undisplaced.xy * g_UVScaleCascade0123.z; + float2 uv_world_cascade3 = pos_world_undisplaced.xy * g_UVScaleCascade0123.w; // cascade blend factors - float4 nvsf_blendfactors; - float4 nvsf_cascade_spatial_size = 1.0/nvsf_g_UVScaleCascade0123.xyzw; - nvsf_blendfactors.x = 1.0; - nvsf_blendfactors.yzw = saturate(0.25*(nvsf_cascade_spatial_size.yzw*24.0-nvsf_distance)/nvsf_cascade_spatial_size.yzw); - nvsf_blendfactors.yzw *= nvsf_blendfactors.yzw; + float4 blendfactors; + float4 cascade_spatial_size = 1.0/g_UVScaleCascade0123.xyzw; + blendfactors.x = 1.0; + blendfactors.yzw = saturate(0.25*(cascade_spatial_size.yzw*24.0-distance)/cascade_spatial_size.yzw); + blendfactors.yzw *= blendfactors.yzw; // Displacement map #if defined(GFSDK_WAVEWORKS_GL) - float3 nvsf_displacement; - if(nvsf_g_UseTextureArrays > 0) + float3 displacement; + if(g_UseTextureArrays > 0) { - nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade0, 0.0), 0).xyz; - nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade1, 1.0), 0).xyz; - nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade2, 2.0), 0).xyz; - nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade3, 3.0), 0).xyz; + displacement = blendfactors.x * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade0, 0.0), 0).xyz; + displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade1, 1.0), 0).xyz; + displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade2, 2.0), 0).xyz; + displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade3, 3.0), 0).xyz; } else { - nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz; - nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz; - nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz; - nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz; + displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz; + displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz; + displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz; + displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz; } #else - float3 nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz; - nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz; - nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz; - nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz; + float3 displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz; + displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz; + displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz; + displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz; #endif - float3 nvsf_pos_world = nvsf_pos_world_undisplaced + nvsf_displacement; + float3 pos_world = pos_world_undisplaced + displacement; // Output GFSDK_WAVEWORKS_VERTEX_OUTPUT Output; - Output.interp.nvsf_eye_vec = nvsf_g_WorldEye - nvsf_pos_world; - Output.interp.nvsf_tex_coord_cascade01.xy = nvsf_uv_world_cascade0; - Output.interp.nvsf_tex_coord_cascade01.zw = nvsf_uv_world_cascade1; - Output.interp.nvsf_tex_coord_cascade23.xy = nvsf_uv_world_cascade2; - Output.interp.nvsf_tex_coord_cascade23.zw = nvsf_uv_world_cascade3; - Output.interp.nvsf_blend_factor_cascade0123 = nvsf_blendfactors; - Output.pos_world = nvsf_pos_world; - Output.pos_world_undisplaced = nvsf_pos_world_undisplaced; - Output.world_displacement = nvsf_displacement; + Output.interp.eye_vec = g_WorldEye - pos_world; + Output.interp.tex_coord_cascade01.xy = uv_world_cascade0; + Output.interp.tex_coord_cascade01.zw = uv_world_cascade1; + Output.interp.tex_coord_cascade23.xy = uv_world_cascade2; + Output.interp.tex_coord_cascade23.zw = uv_world_cascade3; + Output.interp.blend_factor_cascade0123 = blendfactors; + Output.pos_world = pos_world; + Output.pos_world_undisplaced = pos_world_undisplaced; + Output.world_displacement = displacement; return Output; } GFSDK_WAVEWORKS_VERTEX_OUTPUT GFSDK_WaveWorks_GetDisplacedVertexAfterTessellation(float4 In0, float4 In1, float4 In2, float3 BarycentricCoords) { // Get starting position - float3 nvsf_tessellated_ws_position = In0.xyz * BarycentricCoords.x + + float3 tessellated_ws_position = In0.xyz * BarycentricCoords.x + In1.xyz * BarycentricCoords.y + In2.xyz * BarycentricCoords.z; - float3 nvsf_pos_world_undisplaced = nvsf_tessellated_ws_position; + float3 pos_world_undisplaced = tessellated_ws_position; // blend factors for cascades - float4 nvsf_blendfactors; - float nvsf_distance = length(nvsf_g_WorldEye - nvsf_pos_world_undisplaced); - float4 nvsf_cascade_spatial_size = 1.0/nvsf_g_UVScaleCascade0123.xyzw; - nvsf_blendfactors.x = 1.0; - nvsf_blendfactors.yzw = saturate(0.25*(nvsf_cascade_spatial_size.yzw*24.0-nvsf_distance)/nvsf_cascade_spatial_size.yzw); - nvsf_blendfactors.yzw *= nvsf_blendfactors.yzw; + float4 blendfactors; + float distance = length(g_WorldEye - pos_world_undisplaced); + float4 cascade_spatial_size = 1.0/g_UVScaleCascade0123.xyzw; + blendfactors.x = 1.0; + blendfactors.yzw = saturate(0.25*(cascade_spatial_size.yzw*24.0-distance)/cascade_spatial_size.yzw); + blendfactors.yzw *= blendfactors.yzw; // UVs - float2 nvsf_uv_world_cascade0 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.x; - float2 nvsf_uv_world_cascade1 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.y; - float2 nvsf_uv_world_cascade2 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.z; - float2 nvsf_uv_world_cascade3 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.w; + float2 uv_world_cascade0 = pos_world_undisplaced.xy * g_UVScaleCascade0123.x; + float2 uv_world_cascade1 = pos_world_undisplaced.xy * g_UVScaleCascade0123.y; + float2 uv_world_cascade2 = pos_world_undisplaced.xy * g_UVScaleCascade0123.z; + float2 uv_world_cascade3 = pos_world_undisplaced.xy * g_UVScaleCascade0123.w; // Displacement map #if defined(GFSDK_WAVEWORKS_GL) - float3 nvsf_displacement; - if(nvsf_g_UseTextureArrays > 0) + float3 displacement; + if(g_UseTextureArrays > 0) { - nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade0, 0.0), 0).xyz; - nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade1, 1.0), 0).xyz; - nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade2, 2.0), 0).xyz; - nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade3, 3.0), 0).xyz; + displacement = blendfactors.x * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade0, 0.0), 0).xyz; + displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade1, 1.0), 0).xyz; + displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade2, 2.0), 0).xyz; + displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade3, 3.0), 0).xyz; } else { - nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz; - nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz; - nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz; - nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz; + displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz; + displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz; + displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz; + displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz; } #else - float3 nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz; - nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz; - nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz; - nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz; + float3 displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz; + displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz; + displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz; + displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz; #endif - float3 nvsf_pos_world = nvsf_pos_world_undisplaced + nvsf_displacement; + float3 pos_world = pos_world_undisplaced + displacement; // Output GFSDK_WAVEWORKS_VERTEX_OUTPUT Output; - Output.interp.nvsf_eye_vec = nvsf_g_WorldEye - nvsf_pos_world; - Output.interp.nvsf_tex_coord_cascade01.xy = nvsf_uv_world_cascade0; - Output.interp.nvsf_tex_coord_cascade01.zw = nvsf_uv_world_cascade1; - Output.interp.nvsf_tex_coord_cascade23.xy = nvsf_uv_world_cascade2; - Output.interp.nvsf_tex_coord_cascade23.zw = nvsf_uv_world_cascade3; - Output.interp.nvsf_blend_factor_cascade0123 = nvsf_blendfactors; - Output.pos_world = nvsf_pos_world; - Output.pos_world_undisplaced = nvsf_pos_world_undisplaced; - Output.world_displacement = nvsf_displacement; + Output.interp.eye_vec = g_WorldEye - pos_world; + Output.interp.tex_coord_cascade01.xy = uv_world_cascade0; + Output.interp.tex_coord_cascade01.zw = uv_world_cascade1; + Output.interp.tex_coord_cascade23.xy = uv_world_cascade2; + Output.interp.tex_coord_cascade23.zw = uv_world_cascade3; + Output.interp.blend_factor_cascade0123 = blendfactors; + Output.pos_world = pos_world; + Output.pos_world_undisplaced = pos_world_undisplaced; + Output.world_displacement = displacement; return Output; } GFSDK_WAVEWORKS_VERTEX_OUTPUT GFSDK_WaveWorks_GetDisplacedVertexAfterTessellationQuad(float4 In0, float4 In1, float4 In2, float4 In3, float2 UV) { // Get starting position - float3 nvsf_tessellated_ws_position = In2.xyz*UV.x*UV.y + + float3 tessellated_ws_position = In2.xyz*UV.x*UV.y + In0.xyz*(1.0-UV.x)*UV.y + In1.xyz*(1.0-UV.x)*(1.0-UV.y) + In3.xyz*UV.x*(1.0-UV.y); - float3 nvsf_pos_world_undisplaced = nvsf_tessellated_ws_position; + float3 pos_world_undisplaced = tessellated_ws_position; // blend factors for cascades - float4 nvsf_blendfactors; - float nvsf_distance = length(nvsf_g_WorldEye - nvsf_pos_world_undisplaced); - float4 nvsf_cascade_spatial_size = 1.0/nvsf_g_UVScaleCascade0123.xyzw; - nvsf_blendfactors.x = 1.0; - nvsf_blendfactors.yzw = saturate(0.25*(nvsf_cascade_spatial_size.yzw*24.0-nvsf_distance)/nvsf_cascade_spatial_size.yzw); - nvsf_blendfactors.yzw *= nvsf_blendfactors.yzw; + float4 blendfactors; + float distance = length(g_WorldEye - pos_world_undisplaced); + float4 cascade_spatial_size = 1.0/g_UVScaleCascade0123.xyzw; + blendfactors.x = 1.0; + blendfactors.yzw = saturate(0.25*(cascade_spatial_size.yzw*24.0-distance)/cascade_spatial_size.yzw); + blendfactors.yzw *= blendfactors.yzw; // UVs - float2 nvsf_uv_world_cascade0 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.x; - float2 nvsf_uv_world_cascade1 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.y; - float2 nvsf_uv_world_cascade2 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.z; - float2 nvsf_uv_world_cascade3 = nvsf_pos_world_undisplaced.xy * nvsf_g_UVScaleCascade0123.w; + float2 uv_world_cascade0 = pos_world_undisplaced.xy * g_UVScaleCascade0123.x; + float2 uv_world_cascade1 = pos_world_undisplaced.xy * g_UVScaleCascade0123.y; + float2 uv_world_cascade2 = pos_world_undisplaced.xy * g_UVScaleCascade0123.z; + float2 uv_world_cascade3 = pos_world_undisplaced.xy * g_UVScaleCascade0123.w; // Displacement map #if defined(GFSDK_WAVEWORKS_GL) - float3 nvsf_displacement; - if(nvsf_g_UseTextureArrays > 0) + float3 displacement; + if(g_UseTextureArrays > 0) { - nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade0, 0.0), 0).xyz; - nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade1, 1.0), 0).xyz; - nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade2, 2.0), 0).xyz; - nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureArrayDisplacementMap, nvsf_g_samplerDisplacementMapTextureArray, vec3(nvsf_uv_world_cascade3, 3.0), 0).xyz; + displacement = blendfactors.x * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade0, 0.0), 0).xyz; + displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade1, 1.0), 0).xyz; + displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade2, 2.0), 0).xyz; + displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureArrayDisplacementMap, g_samplerDisplacementMapTextureArray, vec3(uv_world_cascade3, 3.0), 0).xyz; } else { - nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz; - nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz; - nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz; - nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz; + displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz; + displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz; + displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz; + displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz; } #else - float3 nvsf_displacement = nvsf_blendfactors.x * SampleTex2Dlod(nvsf_g_textureDisplacementMap0, nvsf_g_samplerDisplacementMap0, nvsf_uv_world_cascade0, 0).xyz; - nvsf_displacement += nvsf_blendfactors.y==0? float3(0,0,0) : nvsf_blendfactors.y * SampleTex2Dlod(nvsf_g_textureDisplacementMap1, nvsf_g_samplerDisplacementMap1, nvsf_uv_world_cascade1, 0).xyz; - nvsf_displacement += nvsf_blendfactors.z==0? float3(0,0,0) : nvsf_blendfactors.z * SampleTex2Dlod(nvsf_g_textureDisplacementMap2, nvsf_g_samplerDisplacementMap2, nvsf_uv_world_cascade2, 0).xyz; - nvsf_displacement += nvsf_blendfactors.w==0? float3(0,0,0) : nvsf_blendfactors.w * SampleTex2Dlod(nvsf_g_textureDisplacementMap3, nvsf_g_samplerDisplacementMap3, nvsf_uv_world_cascade3, 0).xyz; + float3 displacement = blendfactors.x * SampleTex2Dlod(g_textureDisplacementMap0, g_samplerDisplacementMap0, uv_world_cascade0, 0).xyz; + displacement += blendfactors.y==0? float3(0,0,0) : blendfactors.y * SampleTex2Dlod(g_textureDisplacementMap1, g_samplerDisplacementMap1, uv_world_cascade1, 0).xyz; + displacement += blendfactors.z==0? float3(0,0,0) : blendfactors.z * SampleTex2Dlod(g_textureDisplacementMap2, g_samplerDisplacementMap2, uv_world_cascade2, 0).xyz; + displacement += blendfactors.w==0? float3(0,0,0) : blendfactors.w * SampleTex2Dlod(g_textureDisplacementMap3, g_samplerDisplacementMap3, uv_world_cascade3, 0).xyz; #endif - float3 nvsf_pos_world = nvsf_pos_world_undisplaced + nvsf_displacement; + float3 pos_world = pos_world_undisplaced + displacement; // Output GFSDK_WAVEWORKS_VERTEX_OUTPUT Output; - Output.interp.nvsf_eye_vec = nvsf_g_WorldEye - nvsf_pos_world; - Output.interp.nvsf_tex_coord_cascade01.xy = nvsf_uv_world_cascade0; - Output.interp.nvsf_tex_coord_cascade01.zw = nvsf_uv_world_cascade1; - Output.interp.nvsf_tex_coord_cascade23.xy = nvsf_uv_world_cascade2; - Output.interp.nvsf_tex_coord_cascade23.zw = nvsf_uv_world_cascade3; - Output.interp.nvsf_blend_factor_cascade0123 = nvsf_blendfactors; - Output.pos_world = nvsf_pos_world; - Output.pos_world_undisplaced = nvsf_pos_world_undisplaced; - Output.world_displacement = nvsf_displacement; + Output.interp.eye_vec = g_WorldEye - pos_world; + Output.interp.tex_coord_cascade01.xy = uv_world_cascade0; + Output.interp.tex_coord_cascade01.zw = uv_world_cascade1; + Output.interp.tex_coord_cascade23.xy = uv_world_cascade2; + Output.interp.tex_coord_cascade23.zw = uv_world_cascade3; + Output.interp.blend_factor_cascade0123 = blendfactors; + Output.pos_world = pos_world; + Output.pos_world_undisplaced = pos_world_undisplaced; + Output.world_displacement = displacement; return Output; } @@ -319,83 +319,83 @@ struct GFSDK_WAVEWORKS_SURFACE_ATTRIBUTES GFSDK_WAVEWORKS_SURFACE_ATTRIBUTES GFSDK_WaveWorks_GetSurfaceAttributes(GFSDK_WAVEWORKS_INTERPOLATED_VERTEX_OUTPUT In) { // Calculate eye vector. - // Beware: 'nvsf_eye_vec' is a large number, 32bit floating point required. - float3 nvsf_eye_dir = normalize(In.nvsf_eye_vec); + // Beware: 'eye_vec' is a large number, 32bit floating point required. + float3 eye_dir = normalize(In.eye_vec); // --------------- Water body color - float4 nvsf_grad_fold0; - float4 nvsf_grad_fold1; - float4 nvsf_grad_fold2; - float4 nvsf_grad_fold3; + float4 grad_fold0; + float4 grad_fold1; + float4 grad_fold2; + float4 grad_fold3; #if defined(GFSDK_WAVEWORKS_GL) - float3 nvsf_displacement; - if(nvsf_g_UseTextureArrays > 0) + float3 displacement; + if(g_UseTextureArrays > 0) { - nvsf_grad_fold0 = SampleTex2D(nvsf_g_textureArrayGradientMap, nvsf_g_samplerGradientMapTextureArray, vec3(In.nvsf_tex_coord_cascade01.xy, 0.0)); - nvsf_grad_fold1 = SampleTex2D(nvsf_g_textureArrayGradientMap, nvsf_g_samplerGradientMapTextureArray, vec3(In.nvsf_tex_coord_cascade01.zw, 1.0)); - nvsf_grad_fold2 = SampleTex2D(nvsf_g_textureArrayGradientMap, nvsf_g_samplerGradientMapTextureArray, vec3(In.nvsf_tex_coord_cascade23.xy, 2.0)); - nvsf_grad_fold3 = SampleTex2D(nvsf_g_textureArrayGradientMap, nvsf_g_samplerGradientMapTextureArray, vec3(In.nvsf_tex_coord_cascade23.zw, 3.0)); + grad_fold0 = SampleTex2D(g_textureArrayGradientMap, g_samplerGradientMapTextureArray, vec3(In.tex_coord_cascade01.xy, 0.0)); + grad_fold1 = SampleTex2D(g_textureArrayGradientMap, g_samplerGradientMapTextureArray, vec3(In.tex_coord_cascade01.zw, 1.0)); + grad_fold2 = SampleTex2D(g_textureArrayGradientMap, g_samplerGradientMapTextureArray, vec3(In.tex_coord_cascade23.xy, 2.0)); + grad_fold3 = SampleTex2D(g_textureArrayGradientMap, g_samplerGradientMapTextureArray, vec3(In.tex_coord_cascade23.zw, 3.0)); } else { - nvsf_grad_fold0 = SampleTex2D(nvsf_g_textureGradientMap0, nvsf_g_samplerGradientMap0, In.nvsf_tex_coord_cascade01.xy); - nvsf_grad_fold1 = SampleTex2D(nvsf_g_textureGradientMap1, nvsf_g_samplerGradientMap1, In.nvsf_tex_coord_cascade01.zw); - nvsf_grad_fold2 = SampleTex2D(nvsf_g_textureGradientMap2, nvsf_g_samplerGradientMap2, In.nvsf_tex_coord_cascade23.xy); - nvsf_grad_fold3 = SampleTex2D(nvsf_g_textureGradientMap3, nvsf_g_samplerGradientMap3, In.nvsf_tex_coord_cascade23.zw); + grad_fold0 = SampleTex2D(g_textureGradientMap0, g_samplerGradientMap0, In.tex_coord_cascade01.xy); + grad_fold1 = SampleTex2D(g_textureGradientMap1, g_samplerGradientMap1, In.tex_coord_cascade01.zw); + grad_fold2 = SampleTex2D(g_textureGradientMap2, g_samplerGradientMap2, In.tex_coord_cascade23.xy); + grad_fold3 = SampleTex2D(g_textureGradientMap3, g_samplerGradientMap3, In.tex_coord_cascade23.zw); } #else - nvsf_grad_fold0 = SampleTex2D(nvsf_g_textureGradientMap0, nvsf_g_samplerGradientMap0, In.nvsf_tex_coord_cascade01.xy); - nvsf_grad_fold1 = SampleTex2D(nvsf_g_textureGradientMap1, nvsf_g_samplerGradientMap1, In.nvsf_tex_coord_cascade01.zw); - nvsf_grad_fold2 = SampleTex2D(nvsf_g_textureGradientMap2, nvsf_g_samplerGradientMap2, In.nvsf_tex_coord_cascade23.xy); - nvsf_grad_fold3 = SampleTex2D(nvsf_g_textureGradientMap3, nvsf_g_samplerGradientMap3, In.nvsf_tex_coord_cascade23.zw); + grad_fold0 = SampleTex2D(g_textureGradientMap0, g_samplerGradientMap0, In.tex_coord_cascade01.xy); + grad_fold1 = SampleTex2D(g_textureGradientMap1, g_samplerGradientMap1, In.tex_coord_cascade01.zw); + grad_fold2 = SampleTex2D(g_textureGradientMap2, g_samplerGradientMap2, In.tex_coord_cascade23.xy); + grad_fold3 = SampleTex2D(g_textureGradientMap3, g_samplerGradientMap3, In.tex_coord_cascade23.zw); #endif - float2 nvsf_grad; - nvsf_grad.xy = nvsf_grad_fold0.xy*In.nvsf_blend_factor_cascade0123.x + - nvsf_grad_fold1.xy*In.nvsf_blend_factor_cascade0123.y*nvsf_g_Cascade1TexelScale_PS + - nvsf_grad_fold2.xy*In.nvsf_blend_factor_cascade0123.z*nvsf_g_Cascade2TexelScale_PS + - nvsf_grad_fold3.xy*In.nvsf_blend_factor_cascade0123.w*nvsf_g_Cascade3TexelScale_PS; + float2 grad; + grad.xy = grad_fold0.xy*In.blend_factor_cascade0123.x + + grad_fold1.xy*In.blend_factor_cascade0123.y*g_Cascade1TexelScale_PS + + grad_fold2.xy*In.blend_factor_cascade0123.z*g_Cascade2TexelScale_PS + + grad_fold3.xy*In.blend_factor_cascade0123.w*g_Cascade3TexelScale_PS; - float nvsf_c2c_scale = 0.25; // larger cascaded cover larger areas, so foamed texels cover larger area, thus, foam intensity on these needs to be scaled down for uniform foam look + float c2c_scale = 0.25; // larger cascaded cover larger areas, so foamed texels cover larger area, thus, foam intensity on these needs to be scaled down for uniform foam look - float nvsf_foam_turbulent_energy = + float foam_turbulent_energy = // accumulated foam energy with blendfactors - 100.0*nvsf_grad_fold0.w * - lerp(nvsf_c2c_scale, nvsf_grad_fold1.w, In.nvsf_blend_factor_cascade0123.y)* - lerp(nvsf_c2c_scale, nvsf_grad_fold2.w, In.nvsf_blend_factor_cascade0123.z)* - lerp(nvsf_c2c_scale, nvsf_grad_fold3.w, In.nvsf_blend_factor_cascade0123.w); + 100.0*grad_fold0.w * + lerp(c2c_scale, grad_fold1.w, In.blend_factor_cascade0123.y)* + lerp(c2c_scale, grad_fold2.w, In.blend_factor_cascade0123.z)* + lerp(c2c_scale, grad_fold3.w, In.blend_factor_cascade0123.w); - float nvsf_foam_surface_folding = + float foam_surface_folding = // folding for foam "clumping" on folded areas max(-100, - (1.0-nvsf_grad_fold0.z) + - (1.0-nvsf_grad_fold1.z) + - (1.0-nvsf_grad_fold2.z) + - (1.0-nvsf_grad_fold3.z)); + (1.0-grad_fold0.z) + + (1.0-grad_fold1.z) + + (1.0-grad_fold2.z) + + (1.0-grad_fold3.z)); // Calculate normal here. - float3 nvsf_normal = normalize(float3(nvsf_grad, nvsf_g_TexelLength_x2_PS)); + float3 normal = normalize(float3(grad, g_TexelLength_x2_PS)); - float nvsf_hats_c2c_scale = 0.5; // the larger is the wave, the higher is the chance to start breaking at high folding, so folding for smaller cascade s is decreased - float nvsf_foam_wave_hats = + float hats_c2c_scale = 0.5; // the larger is the wave, the higher is the chance to start breaking at high folding, so folding for smaller cascade s is decreased + float foam_wave_hats = 10.0*(-0.55 + // this allows hats to appear on breaking places only. Can be tweaked to represent Beaufort scale better - (1.0-nvsf_grad_fold0.z) + - nvsf_hats_c2c_scale*(1.0-nvsf_grad_fold1.z) + - nvsf_hats_c2c_scale*nvsf_hats_c2c_scale*(1.0-nvsf_grad_fold2.z) + - nvsf_hats_c2c_scale*nvsf_hats_c2c_scale*nvsf_hats_c2c_scale*(1.0-nvsf_grad_fold3.z)); + (1.0-grad_fold0.z) + + hats_c2c_scale*(1.0-grad_fold1.z) + + hats_c2c_scale*hats_c2c_scale*(1.0-grad_fold2.z) + + hats_c2c_scale*hats_c2c_scale*hats_c2c_scale*(1.0-grad_fold3.z)); // Output GFSDK_WAVEWORKS_SURFACE_ATTRIBUTES Output; - Output.normal = nvsf_normal; - Output.eye_dir = nvsf_eye_dir; - Output.foam_surface_folding = nvsf_foam_surface_folding; - Output.foam_turbulent_energy = log(1.0 + nvsf_foam_turbulent_energy); - Output.foam_wave_hats = nvsf_foam_wave_hats; + Output.normal = normal; + Output.eye_dir = eye_dir; + Output.foam_surface_folding = foam_surface_folding; + Output.foam_turbulent_energy = log(1.0 + foam_turbulent_energy); + Output.foam_wave_hats = foam_wave_hats; return Output; } diff --git a/include/GFSDK_WaveWorks_Common.fxh b/include/GFSDK_WaveWorks_Common.fxh index c100c8b..8b13250 100644 --- a/include/GFSDK_WaveWorks_Common.fxh +++ b/include/GFSDK_WaveWorks_Common.fxh @@ -34,30 +34,30 @@ * */ #if defined(GFSDK_WAVEWORKS_SM4) || defined(GFSDK_WAVEWORKS_SM5) - #define SampleTex2D(nvsf_texture,nvsf_sampler,nvsf_coords) nvsf_texture.Sample(nvsf_sampler,nvsf_coords) - #define SampleTex2Dlod(nvsf_texture,nvsf_sampler,nvsf_coords,nvsf_lod) nvsf_texture.SampleLevel(nvsf_sampler,nvsf_coords,nvsf_lod) + #define SampleTex2D(texture,sampler,coords) texture.Sample(sampler,coords) + #define SampleTex2Dlod(texture,sampler,coords,lod) texture.SampleLevel(sampler,coords,lod) #define BEGIN_CBUFFER(name,slot) cbuffer name : register(b##slot) { #define END_CBUFFER }; #define SEMANTIC(x) : x #elif defined(GFSDK_WAVEWORKS_SM3) - #define SampleTex2D(nvsf_texture,nvsf_sampler,nvsf_coords) tex2D(nvsf_sampler,nvsf_coords) - #define SampleTex2Dlod(nvsf_texture,nvsf_sampler,nvsf_coords,nvsf_lod) tex2Dlod(nvsf_sampler,float4(nvsf_coords,0,nvsf_lod)) + #define SampleTex2D(texture,sampler,coords) tex2D(sampler,coords) + #define SampleTex2Dlod(texture,sampler,coords,lod) tex2Dlod(sampler,float4(coords,0,lod)) #define BEGIN_CBUFFER(name,slot) #define END_CBUFFER #define SV_Target COLOR #define SV_Position POSITION #define SEMANTIC(x) : x #elif defined(GFSDK_WAVEWORKS_GNM) - #define SampleTex2D(nvsf_texture,nvsf_sampler,nvsf_coords) nvsf_texture.Sample(nvsf_sampler,nvsf_coords) - #define SampleTex2Dlod(nvsf_texture,nvsf_sampler,nvsf_coords,nvsf_lod) nvsf_texture.SampleLOD(nvsf_sampler,nvsf_coords,nvsf_lod) + #define SampleTex2D(texture,sampler,coords) texture.Sample(sampler,coords) + #define SampleTex2Dlod(texture,sampler,coords,lod) texture.SampleLOD(sampler,coords,lod) #define BEGIN_CBUFFER(name,slot) ConstantBuffer name : register(b##slot) { #define END_CBUFFER }; #define SV_Target S_TARGET_OUTPUT #define SV_Position S_POSITION #define SEMANTIC(x) : x #elif defined(GFSDK_WAVEWORKS_GL) - #define SampleTex2D(nvsf_texture,nvsf_sampler,nvsf_coords) texture(nvsf_sampler,nvsf_coords) - #define SampleTex2Dlod(nvsf_texture,nvsf_sampler,nvsf_coords,nvsf_lod) textureLod(nvsf_sampler,nvsf_coords,nvsf_lod) + #define SampleTex2D(texture,sampler,coords) texture(sampler,coords) + #define SampleTex2Dlod(texture,sampler,coords,lod) textureLod(sampler,coords,lod) #define BEGIN_CBUFFER(name,slot) #define END_CBUFFER #define SEMANTIC(x) 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 |