Skip to content

Commit

Permalink
Traktor: Exposed spectrum to ocen data.
Browse files Browse the repository at this point in the history
  • Loading branch information
apistol78 committed Jun 4, 2024
1 parent 2d82320 commit f8fc393
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 52 deletions.
22 changes: 11 additions & 11 deletions code/Terrain/OceanComponent.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,6 @@
#include "Render/Frame/RenderGraph.h"
#include "Resource/IResourceManager.h"
#include "Terrain/OceanComponent.h"
#include "Terrain/OceanComponentData.h"
#include "Terrain/Terrain.h"
#include "Terrain/TerrainComponent.h"
#include "World/Entity.h"
Expand Down Expand Up @@ -78,16 +77,16 @@ const uint32_t c_gridCells = (c_gridSize - 1) * (c_gridSize - 1);

const uint32_t c_spectrumSize = 1024;

void setSpectrumParameters(render::ProgramParameters* params)
void setSpectrumParameters(const OceanComponentData::Spectrum& spectrum, 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);
params->setFloatParameter(s_handleOcean_SpectrumScale, spectrum.scale);
params->setFloatParameter(s_handleOcean_SpectrumAngle, spectrum.angle);
params->setFloatParameter(s_handleOcean_SpectrumSpreadBlend, spectrum.spreadBlend);
params->setFloatParameter(s_handleOcean_SpectrumSwell, spectrum.swell);
params->setFloatParameter(s_handleOcean_SpectrumAlpha, spectrum.alpha);
params->setFloatParameter(s_handleOcean_SpectrumPeakOmega, spectrum.peakOmega);
params->setFloatParameter(s_handleOcean_SpectrumGamma, spectrum.gamma);
params->setFloatParameter(s_handleOcean_SpectrumShortWavesFade, spectrum.shortWavesFade);
}

}
Expand Down Expand Up @@ -188,6 +187,7 @@ bool OceanComponent::create(resource::IResourceManager* resourceManager, render:
if (!resourceManager->bind(data.m_shader, m_shader))
return false;

m_spectrum = data.m_spectrum;
m_shallowTint = data.m_shallowTint;
m_deepColor = data.m_deepColor;
m_opacity = data.m_opacity;
Expand Down Expand Up @@ -260,7 +260,7 @@ void OceanComponent::setup(
renderBlock->programParams->setFloatParameter(s_handleOcean_TileIndex, 0);
renderBlock->programParams->setImageViewParameter(s_handleOcean_WaveTexture, m_spectrumTexture, 0);

setSpectrumParameters(renderBlock->programParams);
setSpectrumParameters(m_spectrum, renderBlock->programParams);

renderBlock->programParams->endParameters(renderContext);

Expand Down
5 changes: 2 additions & 3 deletions code/Terrain/OceanComponent.h
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "Core/Math/Vector4.h"
#include "Render/Types.h"
#include "Resource/Proxy.h"
#include "Terrain/OceanComponentData.h"
#include "World/IEntityComponent.h"

// import/export mechanism.
Expand Down Expand Up @@ -53,7 +54,6 @@ class WorldSetupContext;
namespace traktor::terrain
{

class OceanComponentData;
class Terrain;

/*! Ocean component.
Expand All @@ -64,8 +64,6 @@ class T_DLLCLASS OceanComponent : public world::IEntityComponent
T_RTTI_CLASS;

public:
static constexpr int32_t MaxWaves = 32;

virtual ~OceanComponent();

bool create(resource::IResourceManager* resourceManager, render::IRenderSystem* renderSystem, const OceanComponentData& data);
Expand Down Expand Up @@ -116,6 +114,7 @@ class T_DLLCLASS OceanComponent : public world::IEntityComponent
Ref< render::Buffer > m_indexBuffer;
Ref< render::Buffer > m_vertexBuffer;
render::Primitives m_primitives;
OceanComponentData::Spectrum m_spectrum;
Color4f m_shallowTint;
Color4f m_deepColor;
float m_opacity = 0.5f;
Expand Down
40 changes: 15 additions & 25 deletions code/Terrain/OceanComponentData.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
*/
#include "Core/Serialization/AttributeRange.h"
#include "Core/Serialization/ISerializer.h"
#include "Core/Serialization/MemberComposite.h"
#include "Core/Serialization/MemberStaticArray.h"
Expand All @@ -25,7 +26,7 @@ const resource::Id< render::Shader > c_defaultShader(Guid(L"{FB9B7138-B7B2-E341-

}

T_IMPLEMENT_RTTI_EDIT_CLASS(L"traktor.terrain.OceanComponentData", 4, OceanComponentData, world::IEntityComponentData)
T_IMPLEMENT_RTTI_EDIT_CLASS(L"traktor.terrain.OceanComponentData", 5, OceanComponentData, world::IEntityComponentData)

OceanComponentData::OceanComponentData()
: m_shaderWave(c_waveShader)
Expand All @@ -48,41 +49,30 @@ void OceanComponentData::setTransform(const world::EntityData* owner, const Tran

void OceanComponentData::serialize(ISerializer& s)
{
if (s.getVersion() >= 2)
s >> resource::Member< render::Shader >(L"shaderWave", m_shaderWave);
T_FATAL_ASSERT(s.getVersion< OceanComponentData >() >= 4);

s >> resource::Member< render::Shader >(L"shaderWave", m_shaderWave);
s >> resource::Member< render::Shader >(L"shader", m_shader);

if (s.getVersion() >= 1 && s.getVersion() < 4)
s >> resource::ObsoleteMember< render::ITexture >(L"reflectionTexture");

s >> Member< Color4f >(L"shallowTint", m_shallowTint);

if (s.getVersion() < 3)
{
s >> ObsoleteMember< Color4f >(L"reflectionTint");
s >> ObsoleteMember< Color4f >(L"shadowTint");
}

s >> Member< Color4f >(L"deepColor", m_deepColor);
s >> Member< float >(L"opacity", m_opacity);
s >> Member< float >(L"elevation", m_elevation);

if (s.getVersion() < 3)
{
Wave waves[4];
s >> MemberStaticArray< Wave, 4, MemberComposite< Wave > >(L"waves", waves);
}
if (s.getVersion< OceanComponentData >() >= 5)
s >> MemberComposite< Spectrum >(L"spectrum", m_spectrum);
}

void OceanComponentData::Wave::serialize(ISerializer& s)
void OceanComponentData::Spectrum::serialize(ISerializer& s)
{
s >> Member< float >(L"direction", direction);
s >> Member< float >(L"amplitude", amplitude);
s >> Member< float >(L"frequency", frequency);
s >> Member< float >(L"phase", phase);
s >> Member< float >(L"pinch", pinch);
s >> Member< float >(L"rate", rate);
s >> Member< float >(L"scale", scale, AttributeRange(0.0f));
s >> Member< float >(L"angle", angle);
s >> Member< float >(L"spreadBlend", spreadBlend, AttributeRange(0.0f, 1.0f));
s >> Member< float >(L"swell", swell);
s >> Member< float >(L"alpha", alpha, AttributeRange(0.0f));
s >> Member< float >(L"peakOmega", peakOmega);
s >> Member< float >(L"gamma", gamma);
s >> Member< float >(L"shortWavesFade", shortWavesFade);
}

}
29 changes: 16 additions & 13 deletions code/Terrain/OceanComponentData.h
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/*
* TRAKTOR
* Copyright (c) 2022 Anders Pistol.
* Copyright (c) 2022-2024 Anders Pistol.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
Expand Down Expand Up @@ -43,6 +43,20 @@ class T_DLLCLASS OceanComponentData : public world::IEntityComponentData
T_RTTI_CLASS;

public:
struct Spectrum
{
float scale = 0.075f;
float angle = -PI / 2.0f;
float spreadBlend = 0.8f;
float swell = 0.35f;
float alpha = 0.2f;
float peakOmega = 1.0f;
float gamma = 0.5f;
float shortWavesFade = 0.08f;

void serialize(ISerializer& s);
};

OceanComponentData();

virtual int32_t getOrdinal() const override final;
Expand All @@ -60,21 +74,10 @@ class T_DLLCLASS OceanComponentData : public world::IEntityComponentData
private:
friend class OceanComponent;

struct Wave
{
float direction = 0.0f;
float amplitude = 0.0f;
float frequency = 0.25f;
float phase = 0.0f;
float pinch = 3.0f;
float rate = 4.0f;

void serialize(ISerializer& s);
};

resource::Id< render::Shader > m_shaderWave;
resource::Id< render::Shader > m_shader;
resource::Id< Terrain > m_terrain;
Spectrum m_spectrum;
Color4f m_shallowTint;
Color4f m_deepColor;
float m_opacity;
Expand Down

0 comments on commit f8fc393

Please sign in to comment.