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}
+ -
+
+
+
+ {6530A1E9-5A6B-2D4A-A24E-61082937E8B0}
+
+
+ -
+
+
+
+ {F6A28F66-3790-4F46-B5C5-CC530F64C619}
+
+
+ -
+
+
+
+ {492EE650-270B-D34D-8EF5-C2202652DB32}
+
+
+ -
+
+
+
+ {DFF75201-91F4-2F40-96C1-7EE408556172}
+
+
+ -
+
+
+
+ {8A29ACC7-E00B-2348-94C9-096D39A83D34}
+
+
+ -
+
+
+
+ {12B8653A-6D27-794A-98E1-D13364676AC3}
+
+
+ -
+
+
+
+ {02C5042D-2F6D-3740-8037-0C5BB3771AA0}
+
+
+ -
+
+
+
+ {5334BF6D-7D4B-C646-90D3-B3F8C1A79B1E}
+
+