diff --git a/code/Terrain/OceanComponent.cpp b/code/Terrain/OceanComponent.cpp index 44d7c7874b..31d8ac5a8c 100644 --- a/code/Terrain/OceanComponent.cpp +++ b/code/Terrain/OceanComponent.cpp @@ -36,6 +36,17 @@ namespace traktor::terrain namespace { +// Spectrum parameters +const render::Handle s_handleOcean_SpectrumScale(L"Ocean_SpectrumScale"); +const render::Handle s_handleOcean_SpectrumAngle(L"Ocean_SpectrumAngle"); +const render::Handle s_handleOcean_SpectrumSpreadBlend(L"Ocean_SpectrumSpreadBlend"); +const render::Handle s_handleOcean_SpectrumSwell(L"Ocean_SpectrumSwell"); +const render::Handle s_handleOcean_SpectrumAlpha(L"Ocean_SpectrumAlpha"); +const render::Handle s_handleOcean_SpectrumPeakOmega(L"Ocean_SpectrumPeakOmega"); +const render::Handle s_handleOcean_SpectrumGamma(L"Ocean_SpectrumGamma"); +const render::Handle s_handleOcean_SpectrumShortWavesFade(L"Ocean_SpectrumShortWavesFade"); + +// Ocean const render::Handle s_handleTerrain_Heightfield(L"Terrain_Heightfield"); const render::Handle s_handleTerrain_WorldOrigin(L"Terrain_WorldOrigin"); const render::Handle s_handleTerrain_WorldExtent(L"Terrain_WorldExtent"); @@ -67,6 +78,18 @@ const uint32_t c_gridCells = (c_gridSize - 1) * (c_gridSize - 1); const uint32_t c_spectrumSize = 1024; +void setSpectrumParameters(render::ProgramParameters* params) +{ + params->setFloatParameter(s_handleOcean_SpectrumScale, 0.075f); + params->setFloatParameter(s_handleOcean_SpectrumAngle, -PI / 2.0f); + params->setFloatParameter(s_handleOcean_SpectrumSpreadBlend, 0.8f); + params->setFloatParameter(s_handleOcean_SpectrumSwell, 0.35f); + params->setFloatParameter(s_handleOcean_SpectrumAlpha, 0.2f); + params->setFloatParameter(s_handleOcean_SpectrumPeakOmega, 1.0f); + params->setFloatParameter(s_handleOcean_SpectrumGamma, 0.5f); + params->setFloatParameter(s_handleOcean_SpectrumShortWavesFade, 0.08f); +} + } T_IMPLEMENT_RTTI_CLASS(L"traktor.terrain.OceanComponent", OceanComponent, world::IEntityComponent) @@ -236,6 +259,9 @@ void OceanComponent::setup( renderBlock->programParams->setFloatParameter(s_handleWorld_Time, worldRenderView.getTime()); renderBlock->programParams->setFloatParameter(s_handleOcean_TileIndex, 0); renderBlock->programParams->setImageViewParameter(s_handleOcean_WaveTexture, m_spectrumTexture, 0); + + setSpectrumParameters(renderBlock->programParams); + renderBlock->programParams->endParameters(renderContext); renderContext->compute(renderBlock); diff --git a/data/Source/System/Terrain/Ocean/Shaders/Wave/Wave.xdi b/data/Source/System/Terrain/Ocean/Shaders/Wave/Wave.xdi index 6671ad265a..c95d84731c 100644 --- a/data/Source/System/Terrain/Ocean/Shaders/Wave/Wave.xdi +++ b/data/Source/System/Terrain/Ocean/Shaders/Wave/Wave.xdi @@ -23,8 +23,8 @@ {DED29228-A7B4-B94E-92BD-36A536C19837} - 736 - 469 + 986 + 41 Ocean_Spectrum @@ -37,8 +37,8 @@ {A34B08DA-1CB4-8348-B635-78CE22751D09} - 514 - 494 + 764 + 66 Ocean_WaveTexture Image2D @@ -48,8 +48,8 @@ {8AC97192-AF20-F74E-AC89-E8C504E23B4F} - 228 - 578 + 429 + 200 Spectrum @@ -66,6 +66,38 @@ {3528ECFC-7D5A-5B42-93F2-31E805AC690F} Position + + {6530A1E9-5A6B-2D4A-A24E-61082937E8B0} + SpectrumScale + + + {F6A28F66-3790-4F46-B5C5-CC530F64C619} + SpectrumAngle + + + {492EE650-270B-D34D-8EF5-C2202652DB32} + SpectrumSpreadBlend + + + {DFF75201-91F4-2F40-96C1-7EE408556172} + SpectrumSwell + + + {8A29ACC7-E00B-2348-94C9-096D39A83D34} + SpectrumAlpha + + + {12B8653A-6D27-794A-98E1-D13364676AC3} + SpectrumPeakOmega + + + {02C5042D-2F6D-3740-8037-0C5BB3771AA0} + SpectrumGamma + + + {5334BF6D-7D4B-C646-90D3-B3F8C1A79B1E} + SpectrumShortWavesFade + @@ -79,7 +111,16 @@ const ivec2 position = $Position.xy; const Configuration configuration = getDefaultConfiguration(); -const SpectrumParameters spectrum = getDefaultSpectrum(); + +SpectrumParameters spectrum; +spectrum.scale = $SpectrumScale; +spectrum.angle = $SpectrumAngle; +spectrum.spreadBlend = $SpectrumSpreadBlend; +spectrum.swell = $SpectrumSwell; +spectrum.alpha = $SpectrumAlpha; +spectrum.peakOmega = $SpectrumPeakOmega; +spectrum.gamma = $SpectrumGamma; +spectrum.shortWavesFade = $SpectrumShortWavesFade; $Output = CalculateSpectrum( configuration, @@ -87,6 +128,7 @@ $Output = CalculateSpectrum( ivec3(position, 0), 0 ); + ]]> @@ -547,6 +589,94 @@ imageStore($FoamTexture, position, vec4(foam)); Image2D Once + + {B09DAA56-FFE5-BA41-92B4-6FF7E0553EAA} + + + 97 + 167 + + Ocean_SpectrumScale + Scalar + Draw + + + {63EF89F2-D10D-3A44-877A-B927E38AE501} + + + 97 + 203 + + Ocean_SpectrumAngle + Scalar + Draw + + + {54C08262-6172-B042-8A30-5F93E895118F} + + + 65 + 239 + + Ocean_SpectrumSpreadBlend + Scalar + Draw + + + {0CDF5161-468E-8B41-BBD7-08E607F6DA08} + + + 97 + 275 + + Ocean_SpectrumSwell + Scalar + Draw + + + {C8984909-6F8B-E746-A81C-0691562980BD} + + + 49 + 419 + + Ocean_SpectrumShortWavesFade + Scalar + Draw + + + {EC55661C-7664-1745-996C-D7218B9A6EB2} + + + 81 + 383 + + Ocean_SpectrumGamma + Scalar + Draw + + + {E3FEED5B-4099-FD41-AB25-935D36894E6C} + + + 65 + 347 + + Ocean_SpectrumPeakOmega + Scalar + Draw + + + {2C85F222-9C0F-2E43-8278-1CBF71978645} + + + 97 + 311 + + Ocean_SpectrumAlpha + Scalar + Draw + @@ -879,6 +1009,86 @@ imageStore($FoamTexture, position, vec4(foam)); {694740A1-F833-924B-A654-F126DF7FF6CD} + + + + {1E6639B6-8B58-4694-99E7-C058E3583522} + + + + {6530A1E9-5A6B-2D4A-A24E-61082937E8B0} + + + + + + {1E6639B6-8B58-4694-99E7-C058E3583522} + + + + {F6A28F66-3790-4F46-B5C5-CC530F64C619} + + + + + + {1E6639B6-8B58-4694-99E7-C058E3583522} + + + + {492EE650-270B-D34D-8EF5-C2202652DB32} + + + + + + {1E6639B6-8B58-4694-99E7-C058E3583522} + + + + {DFF75201-91F4-2F40-96C1-7EE408556172} + + + + + + {1E6639B6-8B58-4694-99E7-C058E3583522} + + + + {8A29ACC7-E00B-2348-94C9-096D39A83D34} + + + + + + {1E6639B6-8B58-4694-99E7-C058E3583522} + + + + {12B8653A-6D27-794A-98E1-D13364676AC3} + + + + + + {1E6639B6-8B58-4694-99E7-C058E3583522} + + + + {02C5042D-2F6D-3740-8037-0C5BB3771AA0} + + + + + + {1E6639B6-8B58-4694-99E7-C058E3583522} + + + + {5334BF6D-7D4B-C646-90D3-B3F8C1A79B1E} + +