Water rendering doesnt work yet

This commit is contained in:
Dynamitos
2024-08-17 15:11:57 +02:00
parent 252a241208
commit 81090d78f0
12 changed files with 189 additions and 50 deletions
+4 -3
View File
@@ -32,8 +32,8 @@ bool isBoxVisible(AABB bounding)
{
mipOffset += mipDimensions.x * mipDimensions.y;
mipDimensions = uint2(mipDimensions.x + 1, mipDimensions.y + 1) / 2;
screenCornerMin /= 2;
screenCornerMax /= 2;
screenCornerMin = uint2(screenCornerMin.x + 1, screenCornerMin.y + 1) / 2;
screenCornerMax = uint2(screenCornerMax.x, screenCornerMax.y) / 2;
}
// now we sample 4 texels from the depth at the calculated mip level, this should give us the screen extent of the meshlet
@@ -80,7 +80,8 @@ void taskMain(
viewFrustum.sides[1] = computePlane(origin, corners[1], corners[3]);
viewFrustum.sides[2] = computePlane(origin, corners[0], corners[1]);
viewFrustum.sides[3] = computePlane(origin, corners[3], corners[2]);
meshVisible = isBoxVisible(mesh.bounding);
//meshVisible = isBoxVisible(mesh.bounding);
meshVisible = true;
}
GroupMemoryBarrierWithGroupSync();
if(!meshVisible)
+11
View File
@@ -23,6 +23,11 @@ struct MaterialParams
float foamSubtract2;
float foamSubtract3;
float tile1;
float tile2;
float tile3;
float tile4;
float normalStrength;
float foamDepthAttenuation;
float normalDepthAttenuation;
@@ -42,7 +47,13 @@ struct MaterialParams
float scatterStrength;
float scatterShadowStrength;
uint contributeDisplacement1;
uint contributeDisplacement2;
uint contributeDisplacement3;
uint contributeDisplacement4;
float3 foamColor;
Texture2DArray displacementTextures;
Texture2DArray<float2> slopeTextures;
TextureCube environmentMap;
+2 -2
View File
@@ -141,8 +141,8 @@ void CS_InitializeSpectrum(uint3 id : SV_DISPATCHTHREADID) {
seed += i + uint(hash(seed) * 10);
float4 uniformRandSamples = float4(hash(seed), hash(seed * 2), hash(seed * 3), hash(seed * 4));
float2 gauss1 = float2(1, 1);UniformToGaussian(uniformRandSamples.x, uniformRandSamples.y);
float2 gauss2 = float2(1, 1);UniformToGaussian(uniformRandSamples.z, uniformRandSamples.w);
float2 gauss1 = UniformToGaussian(uniformRandSamples.x, uniformRandSamples.y);
float2 gauss2 = UniformToGaussian(uniformRandSamples.z, uniformRandSamples.w);
if (pParams.lowCutoff <= kLength && kLength <= pParams.highCutoff) {
float kAngle = atan2(K.y, K.x);
+5 -7
View File
@@ -46,22 +46,20 @@ void meshMain(
float2 base = VERT[i];
float2 worldTransformed = params.offset + (params.extent * base);
float3 worldPos = float3(worldTransformed.x, params.height, worldTransformed.y);
float3 displacement1 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(worldPos.xz, 0)).xyz;
float3 displacement2 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(worldPos.xz, 1)).xyz;
float3 displacement3 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(worldPos.xz, 2)).xyz;
float3 displacement4 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(worldPos.xz, 3)).xyz;
float3 displacement1 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(worldPos.xz * pWaterMaterial.tile1, 0)).xyz * pWaterMaterial.contributeDisplacement1;
float3 displacement2 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(worldPos.xz * pWaterMaterial.tile2, 1)).xyz * pWaterMaterial.contributeDisplacement2;
float3 displacement3 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(worldPos.xz * pWaterMaterial.tile3, 2)).xyz * pWaterMaterial.contributeDisplacement3;
float3 displacement4 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(worldPos.xz * pWaterMaterial.tile4, 3)).xyz * pWaterMaterial.contributeDisplacement4;
float3 displacement = displacement1 + displacement2 + displacement3 + displacement4;
float4 clipPos = mul(vp, float4(worldPos, 1));
float depth = 1 - clamp(1 / (clipPos.z / clipPos.w), 0, 1);
displacement = lerp(0, displacement, pow(saturate(depth), pWaterMaterial.displacementDepthAttenuation));
worldPos += displacement;
WaterVertex v;
v.position_WS = worldPos;
v.position_CS = clipPos;// mul(vp, float4(worldPos, 1));
v.position_CS = mul(vp, float4(worldPos, 1));
v.texCoord = worldPos.xz;
v.depth = clipPos.z / clipPos.w;
vertices[i] = v;
+8 -8
View File
@@ -30,20 +30,20 @@ float4 main(WaterVertex vert) : SV_TARGET {
float VdotH = clamp(dot(viewDir, halfwayDir), 0, 1);
float4 displacementFoam1 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord, 0));
float4 displacementFoam1 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord * pWaterMaterial.tile1, 0));
displacementFoam1.a += pWaterMaterial.foamSubtract0;
float4 displacementFoam2 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord, 0));
float4 displacementFoam2 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord * pWaterMaterial.tile2, 0));
displacementFoam2.a += pWaterMaterial.foamSubtract1;
float4 displacementFoam3 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord, 0));
float4 displacementFoam3 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord * pWaterMaterial.tile3, 0));
displacementFoam3.a += pWaterMaterial.foamSubtract2;
float4 displacementFoam4 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord, 0));
float4 displacementFoam4 = pWaterMaterial.displacementTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord * pWaterMaterial.tile4, 0));
displacementFoam4.a += pWaterMaterial.foamSubtract3;
float4 displacementFoam = displacementFoam1 + displacementFoam2 + displacementFoam3 + displacementFoam4;
float2 slopes1 = pWaterMaterial.slopeTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord, 0));
float2 slopes2 = pWaterMaterial.slopeTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord, 1));
float2 slopes3 = pWaterMaterial.slopeTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord, 2));
float2 slopes4 = pWaterMaterial.slopeTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord, 3));
float2 slopes1 = pWaterMaterial.slopeTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord * pWaterMaterial.tile1, 0));
float2 slopes2 = pWaterMaterial.slopeTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord * pWaterMaterial.tile2, 1));
float2 slopes3 = pWaterMaterial.slopeTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord * pWaterMaterial.tile3, 2));
float2 slopes4 = pWaterMaterial.slopeTextures.Sample(pWaterMaterial.sampler, float3(vert.texCoord * pWaterMaterial.tile4, 3));
float2 slopes = slopes1 + slopes2 + slopes3 + slopes4;
slopes *= pWaterMaterial.normalStrength;