Skip to content

Commit

Permalink
Traktor: One layer of FFT waves working; need a lot of cleanup.
Browse files Browse the repository at this point in the history
  • Loading branch information
apistol78 committed May 22, 2024
1 parent 364ec94 commit ee3e035
Show file tree
Hide file tree
Showing 4 changed files with 262 additions and 74 deletions.
39 changes: 34 additions & 5 deletions code/Terrain/OceanComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -228,7 +228,7 @@ void OceanComponent::setup(
renderBlock->programParams->endParameters(renderContext);

renderContext->compute(renderBlock);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Vertex, nullptr, 0);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Compute, nullptr, 0);
});
context.getRenderGraph().addPass(rp);
}
Expand All @@ -253,7 +253,7 @@ void OceanComponent::setup(
renderBlock->programParams->endParameters(renderContext);

renderContext->compute(renderBlock);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Vertex, nullptr, 0);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Compute, nullptr, 0);
});
context.getRenderGraph().addPass(rp);
}
Expand Down Expand Up @@ -281,7 +281,7 @@ void OceanComponent::setup(
renderBlock->programParams->endParameters(renderContext);

renderContext->compute(renderBlock);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Vertex, nullptr, 0);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Compute, nullptr, 0);
});
context.getRenderGraph().addPass(rp);
}
Expand All @@ -307,7 +307,7 @@ void OceanComponent::setup(
renderBlock->programParams->endParameters(renderContext);

renderContext->compute(renderBlock);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Vertex, nullptr, 0);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Compute, nullptr, 0);
});
context.getRenderGraph().addPass(rp);
}
Expand All @@ -333,11 +333,39 @@ void OceanComponent::setup(
renderBlock->programParams->endParameters(renderContext);

renderContext->compute(renderBlock);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Vertex, nullptr, 0);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Compute, nullptr, 0);
});
context.getRenderGraph().addPass(rp);
}

{
Ref< render::RenderPass > rp = new render::RenderPass(L"Ocean compute generate");
rp->addBuild([=, this](const render::RenderGraph&, render::RenderContext* renderContext) {
auto renderBlock = renderContext->allocNamed< render::ComputeRenderBlock >(L"Ocean generate");

const render::Shader::Permutation perm(render::getParameterHandle(L"Generate"));

renderBlock->program = m_shaderWave->getProgram(perm).program;
renderBlock->workSize[0] = 512;
renderBlock->workSize[1] = 512;
renderBlock->workSize[2] = 1;

renderBlock->programParams = renderContext->alloc< render::ProgramParameters >();
renderBlock->programParams->beginParameters(renderContext);
renderBlock->programParams->setFloatParameter(s_handleWorld_Time, worldRenderView.getTime());
renderBlock->programParams->setFloatParameter(s_handleOcean_TileIndex, 0);
renderBlock->programParams->setImageViewParameter(s_handleOcean_WaveTexture, m_evolvedSpectrumTexture, 0);
renderBlock->programParams->endParameters(renderContext);

renderContext->compute(renderBlock);
renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Compute, nullptr, 0);
});
context.getRenderGraph().addPass(rp);
}

for (int32_t i = 0; i < sizeof_array(m_waveTextures); ++i)
m_waveTextures[i] = m_evolvedSpectrumTexture;
/*
for (int32_t i = 0; i < sizeof_array(m_waveTextures); ++i)
{
Ref< render::RenderPass > rp = new render::RenderPass(L"Ocean compute waves");
Expand All @@ -360,6 +388,7 @@ void OceanComponent::setup(
});
context.getRenderGraph().addPass(rp);
}
*/
}

void OceanComponent::build(
Expand Down
64 changes: 32 additions & 32 deletions data/Source/System/Terrain/Ocean/Shaders/Ocean.xdi
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@
<id>{28DF02C7-A4C6-FE49-A2AF-1C3067BDCC63}</id>
<comment/>
<position>
<first>655</first>
<second>-51</second>
<first>586</first>
<second>-33</second>
</position>
<parameterName>Ocean_Eye</parameterName>
<type>Vector</type>
Expand All @@ -27,17 +27,17 @@
<id>{5EB1A808-AB18-EE45-9E22-B94DF9FE5976}</id>
<comment/>
<position>
<first>825</first>
<second>-75</second>
<first>817</first>
<second>-47</second>
</position>
<swizzle>x0z</swizzle>
</item>
<item type="traktor.render.Uniform" version="3,traktor.render.Node:1">
<id>{8AA18707-44AC-2644-8B41-ED4A2140AB74}</id>
<comment/>
<position>
<first>186</first>
<second>-139</second>
<first>118</first>
<second>-171</second>
</position>
<parameterName>World_World</parameterName>
<type>Matrix</type>
Expand All @@ -47,8 +47,8 @@
<id>{C8A35F03-174D-CD40-B5D7-753769D81BF5}</id>
<comment/>
<position>
<first>402</first>
<second>-169</second>
<first>342</first>
<second>-164</second>
</position>
</item>
<item type="traktor.render.Swizzle" version="traktor.render.Node:1">
Expand Down Expand Up @@ -1478,7 +1478,7 @@ Detail normal
<first>-392</first>
<second>524</second>
</position>
<value>0.8</value>
<value>1</value>
</item>
<item type="traktor.render.Scalar" version="traktor.render.Node:1">
<id>{C71CF517-7DAB-AB47-A04C-BA343330BEEB}</id>
Expand All @@ -1487,7 +1487,7 @@ Detail normal
<first>-392</first>
<second>559</second>
</position>
<value>0.6</value>
<value>0</value>
</item>
<item type="traktor.render.Scalar" version="traktor.render.Node:1">
<id>{CD2AF069-3EE5-3A47-A4F9-E4FEB0F022D9}</id>
Expand All @@ -1496,7 +1496,7 @@ Detail normal
<first>-392</first>
<second>594</second>
</position>
<value>0.5</value>
<value>0</value>
</item>
<item type="traktor.render.Scalar" version="traktor.render.Node:1">
<id>{10BB71A4-62CD-D84D-90BB-A3EAA6273E2A}</id>
Expand All @@ -1505,7 +1505,7 @@ Detail normal
<first>-392</first>
<second>636</second>
</position>
<value>0.4</value>
<value>0</value>
</item>
</nodes>
<edges>
Expand Down Expand Up @@ -1559,26 +1559,6 @@ Detail normal
<id>{3DE04294-4DEA-4A13-A460-2274647357EA}</id>
</destination>
</item>
<item type="traktor.render.Edge" version="1">
<source>
<node ref="/object/nodes/item[8]"/>
<id>{9E839249-E9B9-4736-8BDD-A95A1C892B42}</id>
</source>
<destination>
<node ref="/object/nodes/item[9]"/>
<id>{F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C}</id>
</destination>
</item>
<item type="traktor.render.Edge" version="1">
<source>
<node ref="/object/nodes/item[7]"/>
<id>{BD91C9E9-9950-4EC8-BAD2-60D2E8699107}</id>
</source>
<destination>
<node ref="/object/nodes/item[8]"/>
<id>{69997292-C813-490C-910C-620B9AD3A2BB}</id>
</destination>
</item>
<item type="traktor.render.Edge" version="1">
<source>
<node ref="/object/nodes/item[6]"/>
Expand Down Expand Up @@ -2869,6 +2849,26 @@ Detail normal
<id>{FE413452-19EB-4DC9-B724-2984FA17CC20}</id>
</destination>
</item>
<item type="traktor.render.Edge" version="1">
<source>
<node ref="/object/nodes/item[7]"/>
<id>{BD91C9E9-9950-4EC8-BAD2-60D2E8699107}</id>
</source>
<destination>
<node ref="/object/nodes/item[8]"/>
<id>{69997292-C813-490C-910C-620B9AD3A2BB}</id>
</destination>
</item>
<item type="traktor.render.Edge" version="1">
<source>
<node ref="/object/nodes/item[8]"/>
<id>{9E839249-E9B9-4736-8BDD-A95A1C892B42}</id>
</source>
<destination>
<node ref="/object/nodes/item[9]"/>
<id>{F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C}</id>
</destination>
</item>
</edges>
<groups>
<item type="traktor.render.Group">
Expand Down
48 changes: 30 additions & 18 deletions data/Source/System/Terrain/Ocean/Shaders/Wave/FFT.xdi
Original file line number Diff line number Diff line change
Expand Up @@ -241,8 +241,8 @@ void ButterflyValues(uint step, uint index, out uvec2 indices, out vec2 twiddle)
uint i = (w + index) % SIZE;
// sincos(-twoPi / SIZE * w, twiddle.y, twiddle.x);
twiddle.x = cos(-twoPi / SIZE * w);
twiddle.y = sin(-twoPi / SIZE * w);
twiddle.x = cos(-twoPi / SIZE * w);
// This is what makes it the inverse FFT
twiddle.y = -twiddle.y;
Expand Down Expand Up @@ -280,13 +280,23 @@ vec4 FFT(Configuration configuration, uint threadIndex, vec4 inputData)
}
// Displacement
/*
void GenerateDisplacement(Configuration configuration, ivec3 id, uint tile)
vec4 Permutate(vec4 data, ivec3 id)
{
return data * (1.0f - 2.0f * ((id.x + id.y) % 2));
}
vec4 GenerateDisplacement(Configuration configuration, ivec3 id, uint tile, vec4 htildeDisplacement, vec4 htildeSlope)
{
const int i = 0; // Tile
vec4 htildeDisplacement = Permute(_SpectrumTextures[uvec3(id.xy, i * 2)], id);
vec4 htildeSlope = Permute(_SpectrumTextures[uvec3(id.xy, i * 2 + 1)], id);
//vec4 htildeDisplacement = Permute(_SpectrumTextures[uvec3(id.xy, i * 2)], id);
//vec4 htildeSlope = Permute(_SpectrumTextures[uvec3(id.xy, i * 2 + 1)], id);
htildeDisplacement = Permutate(htildeDisplacement, id);
htildeSlope = Permutate(htildeSlope, id);
vec2 _Lambda = vec2(1.0f, 1.0f);
vec2 dxdz = htildeDisplacement.rg;
vec2 dydxz = htildeDisplacement.ba;
Expand All @@ -295,29 +305,31 @@ void GenerateDisplacement(Configuration configuration, ivec3 id, uint tile)
float jacobian = (1.0f + _Lambda.x * dxxdzz.x) * (1.0f + _Lambda.y * dxxdzz.y) - _Lambda.x * _Lambda.y * dydxz.y * dydxz.y;
vec3 displacement = float3(_Lambda.x * dxdz.x, dydxz.x, _Lambda.y * dxdz.y);
vec3 displacement = vec3(_Lambda.x * dxdz.x, dydxz.x, _Lambda.y * dxdz.y);
return vec4(displacement, 0.0f);
vec2 slopes = dyxdyz.xy / (1 + abs(dxxdzz * _Lambda));
float covariance = slopes.x * slopes.y;
// vec2 slopes = dyxdyz.xy / (1 + abs(dxxdzz * _Lambda));
// float covariance = slopes.x * slopes.y;
float foam = _DisplacementTextures[uint3(id.xy, i)].a;
foam *= exp(-_FoamDecayRate);
foam = saturate(foam);
// float foam = _DisplacementTextures[uint3(id.xy, i)].a;
// foam *= exp(-_FoamDecayRate);
// foam = saturate(foam);
float biasedJacobian = max(0.0f, -(jacobian - _FoamBias));
// float biasedJacobian = max(0.0f, -(jacobian - _FoamBias));
if (biasedJacobian > _FoamThreshold)
foam += _FoamAdd * biasedJacobian;
// if (biasedJacobian > _FoamThreshold)
// foam += _FoamAdd * biasedJacobian;
_DisplacementTextures[uint3(id.xy, i)] = float4(displacement, foam);
_SlopeTextures[uint3(id.xy, i)] = float2(slopes);
// _DisplacementTextures[uint3(id.xy, i)] = float4(displacement, foam);
// _SlopeTextures[uint3(id.xy, i)] = float2(slopes);
// if (i == 0) {
// _BuoyancyData[id.xy] = displacement.y;
// }
}
// }
}
*/
// Old
float CalculateDisplacement(vec2 position, float time)
Expand Down
Loading

0 comments on commit ee3e035

Please sign in to comment.