diff --git a/code/Weather/Editor/WeatherPipeline.cpp b/code/Weather/Editor/WeatherPipeline.cpp
index c61d205bef..cc92d0851d 100644
--- a/code/Weather/Editor/WeatherPipeline.cpp
+++ b/code/Weather/Editor/WeatherPipeline.cpp
@@ -47,11 +47,13 @@ bool WeatherPipeline::buildDependencies(
{
const Guid c_shaderClouds2D(L"{9F52BE0A-0C1A-4928-91D9-9D32296CB8F3}");
const Guid c_shaderClouds3D(L"{EF88CE37-0917-4402-B2D1-6E3F2D3CCCCF}");
+ const Guid c_shaderCloudsDome(L"{151F822B-B85F-6349-B536-7663C95C43B8}");
pipelineDepends->addDependency(skyComponentData->getShader(), editor::PdfBuild | editor::PdfResource);
pipelineDepends->addDependency(skyComponentData->getTexture(), editor::PdfBuild | editor::PdfResource);
pipelineDepends->addDependency(c_shaderClouds2D, editor::PdfBuild | editor::PdfResource);
pipelineDepends->addDependency(c_shaderClouds3D, editor::PdfBuild | editor::PdfResource);
+ pipelineDepends->addDependency(c_shaderCloudsDome, editor::PdfBuild | editor::PdfResource);
}
return true;
}
diff --git a/code/Weather/Sky/SkyComponent.cpp b/code/Weather/Sky/SkyComponent.cpp
index 0e681b7418..cdbaa504c7 100644
--- a/code/Weather/Sky/SkyComponent.cpp
+++ b/code/Weather/Sky/SkyComponent.cpp
@@ -1,6 +1,6 @@
/*
* TRAKTOR
- * Copyright (c) 2022-2023 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
@@ -11,6 +11,7 @@
#include "Core/Misc/SafeDestroy.h"
#include "Render/Buffer.h"
#include "Render/IRenderSystem.h"
+#include "Render/IRenderTargetSet.h"
#include "Render/ITexture.h"
#include "Render/VertexElement.h"
#include "Render/Context/RenderContext.h"
@@ -30,6 +31,7 @@ namespace traktor::weather
const resource::Id< render::Shader > c_shaderClouds2D(Guid(L"{9F52BE0A-0C1A-4928-91D9-9D32296CB8F3}"));
const resource::Id< render::Shader > c_shaderClouds3D(Guid(L"{EF88CE37-0917-4402-B2D1-6E3F2D3CCCCF}"));
+const resource::Id< render::Shader > c_shaderCloudsDome(Guid(L"{151F822B-B85F-6349-B536-7663C95C43B8}"));
const render::Handle s_handleWeather_SkyRadius(L"Weather_SkyRadius");
const render::Handle s_handleWeather_SkyRotation(L"Weather_SkyRotation");
@@ -40,6 +42,7 @@ const render::Handle s_handleWeather_SkyIntensity(L"Weather_SkyIntensity");
const render::Handle s_handleWeather_SkySunDirection(L"Weather_SkySunDirection");
const render::Handle s_handleWeather_SkySunColor(L"Weather_SkySunColor");
const render::Handle s_handleWeather_SkyEyePosition(L"Weather_SkyEyePosition");
+const render::Handle s_handleWeather_SkyCloudTexture(L"Weather_SkyCloudTexture");
const int32_t c_longitudes = 16;
const int32_t c_latitudes = 24;
@@ -147,6 +150,15 @@ bool SkyComponent::create(resource::IResourceManager* resourceManager, render::I
vtcd.shaderStorage = true;
m_cloudTextures[1] = renderSystem->createVolumeTexture(vtcd, T_FILE_LINE_W);
+ //render::SimpleTextureCreateDesc stcd = {};
+ stcd.width = 2048;
+ stcd.height = 512;
+ stcd.mipCount = 1;
+ stcd.format = render::TfR32G32B32A32F;
+ stcd.shaderStorage = true;
+ m_cloudDomeTexture[0] = renderSystem->createSimpleTexture(stcd, T_FILE_LINE_W);
+ m_cloudDomeTexture[1] = renderSystem->createSimpleTexture(stcd, T_FILE_LINE_W);
+
if (!m_cloudTextures[0] || !m_cloudTextures[1])
return false;
@@ -154,6 +166,8 @@ bool SkyComponent::create(resource::IResourceManager* resourceManager, render::I
return false;
if (!resourceManager->bind(c_shaderClouds3D, m_shaderClouds3D))
return false;
+ if (!resourceManager->bind(c_shaderCloudsDome, m_shaderCloudsDome))
+ return false;
return true;
}
@@ -200,7 +214,9 @@ void SkyComponent::setup(
const world::WorldRenderView& worldRenderView
)
{
+ const static render::Handle s_handleInputTexture(L"Weather_InputTexture");
const static render::Handle s_handleOutputTexture(L"Weather_OutputTexture");
+ render::RenderGraph& renderGraph = context.getRenderGraph();
if (m_shaderClouds2D.changed() || m_shaderClouds3D.changed())
{
@@ -211,7 +227,7 @@ void SkyComponent::setup(
if (m_dirty)
{
- Ref< render::RenderPass > rp = new render::RenderPass(L"Sky compute clouds");
+ Ref< render::RenderPass > rp = new render::RenderPass(L"Sky compute clouds noise");
rp->addBuild([=](const render::RenderGraph&, render::RenderContext* renderContext) {
{
auto renderBlock = renderContext->allocNamed< render::ComputeRenderBlock >(L"Sky clouds 2D");
@@ -226,7 +242,7 @@ void SkyComponent::setup(
renderBlock->programParams->endParameters(renderContext);
renderContext->compute(renderBlock);
- renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Fragment);
+ renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Compute);
}
{
auto renderBlock = renderContext->allocNamed< render::ComputeRenderBlock >(L"Sky clouds 3D");
@@ -241,13 +257,60 @@ void SkyComponent::setup(
renderBlock->programParams->endParameters(renderContext);
renderContext->compute(renderBlock);
- renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Fragment);
+ renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Compute);
}
});
- context.getRenderGraph().addPass(rp);
+ renderGraph.addPass(rp);
m_dirty = false;
}
+
+ // Generate dome projected cloud layer.
+ if (worldRenderView.getIndex() == 0)
+ {
+ render::ITexture* input = m_cloudDomeTexture[m_count & 1];
+ render::ITexture* output = m_cloudDomeTexture[(m_count + 1) & 1];
+
+ // Get sun from directional light in same entity as sky component.
+ Vector4 sunDirection = m_transform.axisY();
+ Vector4 sunColor = Vector4(1.0f, 0.9f, 0.85f) * 1.8_simd;
+ if (m_owner != nullptr)
+ {
+ auto lightComponent = m_owner->getComponent< world::LightComponent >();
+ if (lightComponent)
+ sunColor = lightComponent->getColor();
+ }
+
+ Ref< render::RenderPass > rp = new render::RenderPass(L"Sky compute clouds dome");
+ rp->addBuild([=](const render::RenderGraph&, render::RenderContext* renderContext) {
+ auto renderBlock = renderContext->allocNamed< render::ComputeRenderBlock >(L"Sky clouds dome");
+ renderBlock->program = m_shaderCloudsDome->getProgram().program;
+ renderBlock->workSize[0] = 2048;
+ renderBlock->workSize[1] = 512;
+ renderBlock->workSize[2] = 1;
+
+ renderBlock->programParams = renderContext->alloc< render::ProgramParameters >();
+ renderBlock->programParams->beginParameters(renderContext);
+
+ renderBlock->programParams->setImageViewParameter(s_handleInputTexture, input, 0);
+ renderBlock->programParams->setImageViewParameter(s_handleOutputTexture, output, 0);
+
+ renderBlock->programParams->setTextureParameter(s_handleWeather_SkyCloud2D, m_cloudTextures[0]);
+ renderBlock->programParams->setTextureParameter(s_handleWeather_SkyCloud3D, m_cloudTextures[1]);
+ renderBlock->programParams->setFloatParameter(s_handleWeather_SkyRadius, worldRenderView.getViewFrustum().getFarZ() - 10.0f);
+ renderBlock->programParams->setVectorParameter(s_handleWeather_SkySunColor, sunColor);
+ renderBlock->programParams->setVectorParameter(s_handleWeather_SkySunDirection, sunDirection);
+ renderBlock->programParams->setFloatParameter(render::getParameterHandle(L"World_Time"), worldRenderView.getTime());
+
+ renderBlock->programParams->endParameters(renderContext);
+
+ renderContext->compute(renderBlock);
+ renderContext->compute< render::BarrierRenderBlock >(render::Stage::Compute, render::Stage::Fragment);
+ });
+ renderGraph.addPass(rp);
+
+ m_count++;
+ }
}
void SkyComponent::build(
@@ -256,7 +319,8 @@ void SkyComponent::build(
const world::IWorldRenderPass& worldRenderPass
)
{
- auto sp = worldRenderPass.getProgram(m_shader);
+ auto perm = worldRenderPass.getPermutation(m_shader);
+ auto sp = m_shader->getProgram(perm);
if (!sp)
return;
@@ -273,6 +337,8 @@ void SkyComponent::build(
const Vector4 eyePosition = worldRenderView.getEyePosition();
const float rotation = m_transform.rotation().toEulerAngles().x();
+ render::ITexture* cloudDomeTexture = m_cloudDomeTexture[m_count & 1];
+
auto renderBlock = renderContext->allocNamed< render::SimpleRenderBlock >(L"Sky");
// Render sky after all opaques but before of all alpha blended.
@@ -301,6 +367,8 @@ void SkyComponent::build(
renderBlock->programParams->setTextureParameter(s_handleWeather_SkyCloud2D, m_cloudTextures[0]);
renderBlock->programParams->setTextureParameter(s_handleWeather_SkyCloud3D, m_cloudTextures[1]);
+ renderBlock->programParams->setTextureParameter(s_handleWeather_SkyCloudTexture, cloudDomeTexture);
+
renderBlock->programParams->endParameters(renderContext);
renderContext->draw(sp.priority, renderBlock);
diff --git a/code/Weather/Sky/SkyComponent.h b/code/Weather/Sky/SkyComponent.h
index 5c49606b08..f198a8c80f 100644
--- a/code/Weather/Sky/SkyComponent.h
+++ b/code/Weather/Sky/SkyComponent.h
@@ -105,6 +105,11 @@ class T_DLLCLASS SkyComponent : public world::IEntityComponent
Transform m_transform;
float m_intensity = 1.0f;
bool m_dirty = true;
+
+ resource::Proxy< render::Shader > m_shaderCloudsDome;
+ Ref< render::ITexture > m_cloudDomeTexture[2];
+
+ int32_t m_count = 0;
};
}
diff --git a/code/World/Deferred/WorldRendererDeferred.cpp b/code/World/Deferred/WorldRendererDeferred.cpp
index efe1986b54..7689e9cd4a 100644
--- a/code/World/Deferred/WorldRendererDeferred.cpp
+++ b/code/World/Deferred/WorldRendererDeferred.cpp
@@ -117,7 +117,7 @@ void WorldRendererDeferred::setup(
// Add additional passes by entity renderers.
{
T_PROFILER_SCOPE(L"WorldRendererDeferred setup extra passes");
- WorldSetupContext context(world, m_entityRenderers, m_irradianceGrid, renderGraph);
+ WorldSetupContext context(world, m_entityRenderers, m_irradianceGrid, renderGraph, m_visualAttachments);
for (auto r : m_gatheredView.renderables)
r.renderer->setup(context, worldRenderView, r.renderable);
@@ -216,6 +216,8 @@ void WorldRendererDeferred::setupVisualPass(
// rp->addInput(contactShadowsTargetSetId);
rp->addInput(reflectionsTargetSetId);
rp->addInput(shadowMapAtlasTargetSetId);
+ for (auto attachment : m_visualAttachments)
+ rp->addInput(attachment);
render::Clear clear;
clear.mask = render::CfColor;
diff --git a/code/World/Forward/WorldRendererForward.cpp b/code/World/Forward/WorldRendererForward.cpp
index 27d4aecd69..0ee8944dd3 100644
--- a/code/World/Forward/WorldRendererForward.cpp
+++ b/code/World/Forward/WorldRendererForward.cpp
@@ -115,7 +115,7 @@ void WorldRendererForward::setup(
// Add additional passes by entity renderers.
{
T_PROFILER_SCOPE(L"WorldRendererForward setup extra passes");
- WorldSetupContext context(world, m_entityRenderers, m_irradianceGrid, renderGraph);
+ WorldSetupContext context(world, m_entityRenderers, m_irradianceGrid, renderGraph, m_visualAttachments);
for (auto r : m_gatheredView.renderables)
r.renderer->setup(context, worldRenderView, r.renderable);
@@ -208,6 +208,9 @@ void WorldRendererForward::setupVisualPass(
rp->addInput(reflectionsTargetSetId);
if (shadowsEnable)
rp->addInput(shadowMapAtlasTargetSetId);
+
+ for (auto attachment : m_visualAttachments)
+ rp->addInput(attachment);
render::Clear clear;
clear.mask = render::CfColor;
diff --git a/code/World/Shared/WorldRendererShared.h b/code/World/Shared/WorldRendererShared.h
index 5012ed598f..5f52995777 100644
--- a/code/World/Shared/WorldRendererShared.h
+++ b/code/World/Shared/WorldRendererShared.h
@@ -108,6 +108,7 @@ class T_DLLCLASS WorldRendererShared : public IWorldRenderer
Ref< Packer > m_shadowAtlasPacker;
GatherView m_gatheredView;
+ AlignedVector< render::handle_t > m_visualAttachments;
struct State
{
diff --git a/code/World/Simple/WorldRendererSimple.cpp b/code/World/Simple/WorldRendererSimple.cpp
index 887098f476..c73b4ff2f8 100644
--- a/code/World/Simple/WorldRendererSimple.cpp
+++ b/code/World/Simple/WorldRendererSimple.cpp
@@ -98,7 +98,7 @@ void WorldRendererSimple::setup(
// Add additional passes by entity renderers.
{
T_PROFILER_SCOPE(L"WorldRendererSimple setup extra passes");
- const WorldSetupContext context(world, m_entityRenderers, nullptr, renderGraph);
+ const WorldSetupContext context(world, m_entityRenderers, nullptr, renderGraph, m_visualAttachments);
for (auto gathered : m_gathered)
gathered.entityRenderer->setup(context, worldRenderView, gathered.renderable);
@@ -116,6 +116,9 @@ void WorldRendererSimple::setup(
cl.depth = 1.0f;
rp->setOutput(outputTargetSetId, cl, render::TfNone, render::TfAll);
+ for (auto attachment : m_visualAttachments)
+ rp->addInput(attachment);
+
rp->addBuild(
[=](const render::RenderGraph& renderGraph, render::RenderContext* renderContext)
{
diff --git a/code/World/Simple/WorldRendererSimple.h b/code/World/Simple/WorldRendererSimple.h
index bf8bdf743d..c54e0a9e1d 100644
--- a/code/World/Simple/WorldRendererSimple.h
+++ b/code/World/Simple/WorldRendererSimple.h
@@ -70,6 +70,7 @@ class T_DLLCLASS WorldRendererSimple : public IWorldRenderer
Ref< WorldEntityRenderers > m_entityRenderers;
Ref< render::ITexture > m_depthTexture;
AlignedVector< Gather > m_gathered;
+ AlignedVector< render::handle_t > m_visualAttachments;
};
}
diff --git a/code/World/WorldSetupContext.cpp b/code/World/WorldSetupContext.cpp
index 7b3a5794c0..831cbe22ae 100644
--- a/code/World/WorldSetupContext.cpp
+++ b/code/World/WorldSetupContext.cpp
@@ -15,12 +15,20 @@ namespace traktor::world
T_IMPLEMENT_RTTI_CLASS(L"traktor.world.WorldSetupContext", WorldSetupContext, Object)
-WorldSetupContext::WorldSetupContext(const World* world, const WorldEntityRenderers* entityRenderers, const IrradianceGrid* irradianceGrid, render::RenderGraph& renderGraph)
+WorldSetupContext::WorldSetupContext(
+ const World* world,
+ const WorldEntityRenderers* entityRenderers,
+ const IrradianceGrid* irradianceGrid,
+ render::RenderGraph& renderGraph,
+ AlignedVector< render::handle_t >& visualAttachments
+)
: m_world(world)
, m_entityRenderers(entityRenderers)
, m_irradianceGrid(irradianceGrid)
, m_renderGraph(renderGraph)
+, m_visualAttachments(visualAttachments)
{
+ m_visualAttachments.resize(0);
}
}
diff --git a/code/World/WorldSetupContext.h b/code/World/WorldSetupContext.h
index c404c1f56b..f56d5bcb63 100644
--- a/code/World/WorldSetupContext.h
+++ b/code/World/WorldSetupContext.h
@@ -42,7 +42,13 @@ class T_DLLCLASS WorldSetupContext : public Object
T_RTTI_CLASS;
public:
- explicit WorldSetupContext(const World* world, const WorldEntityRenderers* entityRenderers, const IrradianceGrid* irradianceGrid, render::RenderGraph& renderGraph);
+ explicit WorldSetupContext(
+ const World* world,
+ const WorldEntityRenderers* entityRenderers,
+ const IrradianceGrid* irradianceGrid,
+ render::RenderGraph& renderGraph,
+ AlignedVector< render::handle_t >& visualAttachments
+ );
const World* getWorld() const { return m_world; }
@@ -52,11 +58,14 @@ class T_DLLCLASS WorldSetupContext : public Object
render::RenderGraph& getRenderGraph() const { return m_renderGraph; }
+ AlignedVector< render::handle_t >& getVisualAttachments() const { return m_visualAttachments; }
+
private:
const World* m_world;
const WorldEntityRenderers* m_entityRenderers;
const IrradianceGrid* m_irradianceGrid;
render::RenderGraph& m_renderGraph;
+ AlignedVector< render::handle_t >& m_visualAttachments;
};
}
diff --git a/data/Source/System/Weather/Sky/Modules/Polar.xdi b/data/Source/System/Weather/Sky/Modules/Polar.xdi
new file mode 100644
index 0000000000..1f44e6612e
--- /dev/null
+++ b/data/Source/System/Weather/Sky/Modules/Polar.xdi
@@ -0,0 +1,31 @@
+
+
diff --git a/data/Source/System/Weather/Sky/Modules/Polar.xdm b/data/Source/System/Weather/Sky/Modules/Polar.xdm
new file mode 100644
index 0000000000..33e4a08636
--- /dev/null
+++ b/data/Source/System/Weather/Sky/Modules/Polar.xdm
@@ -0,0 +1,6 @@
+
+
diff --git a/data/Source/System/Weather/Sky/Modules/Sky.xdi b/data/Source/System/Weather/Sky/Modules/Sky.xdi
index 70ef62b286..c8eec07083 100644
--- a/data/Source/System/Weather/Sky/Modules/Sky.xdi
+++ b/data/Source/System/Weather/Sky/Modules/Sky.xdi
@@ -9,24 +9,29 @@ vec3 getSkyColor(vec3 sunDirection, vec3 sunColor, vec3 rd)
{
const float sundot = clamp(dot(rd, sunDirection), 0.0f, 1.0f);
- vec3 col = vec3(0.2f, 0.5f, 0.85f) * 1.1f - max(rd.y, 0.01f) * max(rd.y, 0.01f) * 0.5f;
- col = mix(col, 0.85f * vec3(0.7f, 0.75f, 0.85f), pow(1.0f - max(rd.y, 0.0f), 6.0f));
-
- col += 0.25f * vec3(1.0f, 0.7f, 0.4f) * pow(sundot, 5.0f);
- col += 0.20f * vec3(1.0f, 0.8f, 0.6f) * pow(sundot, 512.0f);
- col += 0.25f * vec3(1.0f, 0.8f, 0.6f) * pow(sundot, 64.0f);
+ // Over horizon
+ const vec3 OverHorizon = vec3(0.2f, 0.5f, 0.85f);
+ vec3 col = OverHorizon - max(rd.y, 0.01f) * max(rd.y, 0.01f) * 0.5f;
+
+ // Under horizon
+ const vec3 UnderHorizon = vec3(0.1f, 0.1f, 0.12f);
+ col = mix(col, UnderHorizon, pow(1.0f - max(rd.y, 0.0f), 6.0f));
+
+ // Add sun
+ col += 0.25f * sunColor * pow(sundot, 5.0f);
+ col += 0.20f * sunColor * pow(sundot, 512.0f);
+ col += 0.25f * sunColor * pow(sundot, 64.0f);
+ col += sunColor * pow(sundot, 8.0f);
- col += clamp((0.1 - rd.y) * 10.0f, 0.0f, 1.0f) * vec3(0.0f, 0.1f, 0.2f);
- col += sunColor * pow(sundot, 8.0f);
-
+ col += clamp((0.1 - rd.y) * 10.0f, 0.0f, 1.0f) * vec3(0.0f, 0.1f, 0.2f);
return col;
}
#define SCENE_SCALE (10.0f)
#define INV_SCENE_SCALE (0.1f)
-#define CLOUD_MARCH_STEPS 14
-#define CLOUD_SELF_SHADOW_STEPS 4
+#define CLOUD_MARCH_STEPS 20
+#define CLOUD_SELF_SHADOW_STEPS 6
#define EARTH_RADIUS (50000.0f)
#define CLOUDS_BOTTOM (1050.)
diff --git a/data/Source/System/Weather/Sky/Shaders/Dome.xdi b/data/Source/System/Weather/Sky/Shaders/Dome.xdi
new file mode 100644
index 0000000000..ef14f9e1d4
--- /dev/null
+++ b/data/Source/System/Weather/Sky/Shaders/Dome.xdi
@@ -0,0 +1,694 @@
+
+
diff --git a/data/Source/System/Weather/Sky/Shaders/Dome.xdm b/data/Source/System/Weather/Sky/Shaders/Dome.xdm
new file mode 100644
index 0000000000..d4110d207b
--- /dev/null
+++ b/data/Source/System/Weather/Sky/Shaders/Dome.xdm
@@ -0,0 +1,6 @@
+
+
diff --git a/data/Source/System/Weather/Sky/Shaders/Sky.xdi b/data/Source/System/Weather/Sky/Shaders/Sky.xdi
index 157b56aa23..9a34aa45c8 100644
--- a/data/Source/System/Weather/Sky/Shaders/Sky.xdi
+++ b/data/Source/System/Weather/Sky/Shaders/Sky.xdi
@@ -5,8 +5,8 @@
{E33CFC6D-CE37-4444-A200-7003F92A1BBE}
- 1426
- 32
+ 1689
+ 64
Undefined
@@ -15,16 +15,16 @@
{90186AEB-DBB1-44B7-87B0-8E99534FF0BB}
- 1151
- -8
+ 1414
+ 24
-
{4B7F18D3-9403-4170-A5E1-4455915434FF}
- 1002
- -22
+ 1265
+ 10
xyz1
@@ -32,8 +32,8 @@
{68B37069-0E76-48AE-A75C-9729974D10B3}
- 757
- -60
+ 1020
+ -28
-
@@ -145,8 +145,8 @@
{6D4ADA9B-578E-4DB5-952A-BAB41439C1B9}
- 511
- -15
+ 575
+ 24
World_WorldView
Matrix
@@ -156,8 +156,8 @@
{9D315C53-5ED5-4EBF-AFCA-E4E682D47AD1}
- 919
- 43
+ 1182
+ 75
World_Projection
Matrix
@@ -167,8 +167,8 @@
{A6CF4D34-4EFC-A646-AE57-A51459495761}
- 1882
- 222
+ 2801
+ 944
World_ForwardColor
@@ -260,8 +260,8 @@
{FA371FDA-5996-4181-98D2-92B88A67D250}
- 1506
- 498
+ 2425
+ 1220
false
@@ -306,8 +306,8 @@
{69A59CB0-54FF-E348-8D14-4F7974EF3EF4}
- 1882
- 391
+ 2801
+ 1113
World_DeferredColor
@@ -353,8 +353,8 @@
{3D7D4539-5904-EC42-B481-B5E9A947DE3E}
- 1882
- 560
+ 2801
+ 1282
World_SimpleColor
@@ -445,8 +445,8 @@
{B229DF57-A4C7-6D43-B9BD-9A2150252068}
- 1382
- 187
+ 2301
+ 909
{D2F9DC59-6D32-4F4A-9C84-689849C25897}
@@ -478,17 +478,8 @@
{00AD6047-BC93-5C45-8A16-27768422591D}
- 1188
- -87
-
- ViewPosition
-
- -
- {D7717CC3-3D42-C64D-8248-C289D8B4F796}
-
-
- 1178
- 257
+ 1451
+ -55
ViewPosition
@@ -496,8 +487,8 @@
{E88E5C56-08FC-CA46-BCEA-4A1DA38CAA35}
- 1108
- 460
+ 1995
+ 1161
0
10
@@ -521,15 +512,20 @@
Scalar
Once
- -
+
-
{3878417E-8F73-4CE4-8C47-53D163131E1F}
- 338
- 511
+ 102
+ 557
Sky color
+
+ 1
+ 1
+ 1
+
- {2103B1F3-97E1-4D94-A8C0-48E7D4C0C6A9}
@@ -566,8 +562,8 @@ $Output = vec4(clr, 1.0f);
{3A274518-2C87-4314-9935-E59CF3E45196}
- 757
- -136
+ 867
+ -171
WorldPosition
@@ -575,20 +571,25 @@ $Output = vec4(clr, 1.0f);
{8FB6549E-5322-4FD8-8912-FD35D323CFF6}
- -5
- 610
+ -241
+ 656
WorldPosition
- -
+
-
{3D50C5B7-186C-4798-A7E6-79FB8597A7B9}
- 335
- 629
+ 98
+ 674
Clouds
+
+ 1
+ 1
+ 1
+
- {2103B1F3-97E1-4D94-A8C0-48E7D4C0C6A9}
@@ -643,7 +644,7 @@ $Output = vec4(clr, 1.0f);
const vec3 ro = vec3(0.0f);
const vec3 rd = normalize($Input.xyz);
-float dist = 5000.0f;
+float dist = 8000.0f;
const vec4 clr = renderClouds(
ro,
rd,
@@ -661,7 +662,6 @@ const vec4 clr = renderClouds(
$Output = clr;
$Distance = dist;
-
]]>
@@ -669,8 +669,8 @@ $Distance = dist;
{2BB29238-2675-42BB-9382-17C55B6C1380}
- -3
- 729
+ -239
+ 775
FtLinear
FtLinear
@@ -687,8 +687,8 @@ $Distance = dist;
{1AD17D96-8F2E-457A-AAB5-8EBCE60711EA}
- -53
- 651
+ -289
+ 697
Weather_SkyCloud2D
Texture2D
@@ -698,8 +698,8 @@ $Distance = dist;
{20235D86-BCB0-485E-91F7-F7E2ADE78B21}
- -53
- 690
+ -289
+ 736
Weather_SkyCloud3D
Texture3D
@@ -709,8 +709,8 @@ $Distance = dist;
{503FDDD6-5518-4343-BE55-C0B346AE49BE}
- 710
- 725
+ 1012
+ 1144
w
@@ -718,16 +718,16 @@ $Distance = dist;
{EB8D5AAE-64F8-4961-B693-72C612313D32}
- 912
- 607
+ 1718
+ 1206
-
{21D1CC08-6848-49CB-BA67-E49974F893C6}
- 11
- 768
+ -225
+ 814
World_Time
Scalar
@@ -737,8 +737,8 @@ $Distance = dist;
{49BB686E-3893-4F3E-AFAC-FAC0AC817383}
- -53
- 571
+ -289
+ 617
Weather_SkySunColor
Vector
@@ -748,8 +748,8 @@ $Distance = dist;
{CFE120E4-0277-41B4-A10C-9C932F6764B0}
- -69
- 532
+ -305
+ 578
Weather_SkySunDirection
Vector
@@ -759,24 +759,16 @@ $Distance = dist;
{C08E5A1A-DBF6-9646-B1D0-8B2DDC5CFFF2}
- 644
- -223
-
-
- -
- {CED41597-5F75-384D-BE0D-B99E577A2297}
-
-
- 1058
- 770
+ 732
+ -132
-
{B1995568-3C6A-0A41-B935-7B6C3B58811B}
- 644
- 845
+ 957
+ 1243
0.75
@@ -784,16 +776,16 @@ $Distance = dist;
{CE625FD5-6A51-E345-B940-C60097D7C417}
- 854
- 848
+ 1167
+ 1246
-
{C5A94979-6D8B-A747-ADA9-35C7B618B919}
- 634
- 914
+ 947
+ 1312
0.25
@@ -801,13 +793,195 @@ $Distance = dist;
{3CC2F2B4-36BD-B54E-8E1B-D12B69ADE23F}
- -53
- 807
+ -289
+ 853
Weather_SkyEyePosition
Vector
Frame
+ -
+ {C695B623-EE0B-5C4F-A3DF-EF89E099DA96}
+
+
+ 170
+ 1038
+
+ Weather_SkyCloudTexture
+ Texture2D
+ Frame
+
+ -
+ {AEBF8BB1-1EB7-6644-9BF2-B40FDCD040B6}
+
+
+ 416
+ 1052
+
+ FtLinear
+ FtLinear
+ FtLinear
+ AdClamp
+ AdClamp
+ AdClamp
+ CfNone
+ 0
+ false
+ false
+
+ -
+ {0D40E918-F5FB-E046-9176-EE582439819C}
+
+
+ -17
+ 1100
+
+
+ -
+ {9BCE6EBE-AC7B-674D-9E82-0EA269684B3B}
+
+
+ 31
+ 1148
+
+
+ -
+ {41EF80FE-B71C-EF42-99FD-E1EF2191C39B}
+
+
+ 186
+ 1101
+
+
+ -
+ {749FC4DB-B5EA-9B4D-8F07-52F6981D5366}
+
+
+ 1189
+ 689
+
+ 2
+
+ -
+ {306F7289-48EF-A54F-A75B-51949D4956A1}
+
+
+ 442
+ 511
+
+ SkyColor
+
+ -
+ {A2B4020E-6755-774A-AF1A-AF7B8B4C785C}
+
+
+ 1527
+ 1241
+
+ SkyColor
+
+ -
+ {41365992-5B09-6A4D-B23B-AC507AE2A162}
+
+
+ 396
+ 713
+
+ Clouds
+
+ -
+ {4DA8342F-E6B2-D54D-884D-BA1D1171C134}
+
+
+ 1293
+ 738
+
+ Weather_SkyRadius
+ Scalar
+ Once
+
+ -
+ {5F451BA0-E68B-744D-ADA0-EB445010E575}
+
+
+ 1677
+ 731
+
+
+ -
+ {571FA538-44A4-2848-9594-1F82EA1A2487}
+
+
+ 1150
+ 642
+
+ Weather_SkyRadius
+ Scalar
+ Once
+
+ -
+ {42372E61-720B-7F4C-83DF-588A2A3CC0A1}
+
+
+ 1407
+ 635
+
+
+ -
+ {FB5A4F83-417E-A643-92BF-B121F2A7E4C7}
+
+
+ -291
+ 1030
+
+ DirectionToTexCoord
+
+
+ 1
+ 1
+ 1
+
+
+
- {055423F4-A0F5-4840-8020-D5C93F97F8E5}
+
+
+ -
+ {A24A7B3B-5327-EE42-94B3-1DEDDE2A1975}
+ Direction
+
+
+
+ -
+ {A4DD34C4-30F8-8C48-A530-71D4E13D5F33}
+ Output
+ Vector
+
+
+
+
+ -
+ {32E86138-A45A-1244-992C-53C84F09ECD6}
+
+
+ -653
+ 1059
+
+ WorldPosition
+
+ -
+ {1329B5EC-C046-3740-AC77-C856AF5F9FC8}
+
+
+ -476
+ 1073
+
+
-
@@ -1082,7 +1256,7 @@ $Distance = dist;
-
@@ -1096,13 +1270,13 @@ $Distance = dist;
{AF6C971B-D67A-42EE-A12B-97D36927C89F}
-
+
{D2D716D6-C4A1-471F-894A-D718515F6281}
-
@@ -1112,92 +1286,92 @@ $Distance = dist;
-
-
+
{69997292-C813-490C-910C-620B9AD3A2BB}
-
-
+
{72527E9F-5A82-4E5E-986D-9EBF0FB43588}
-
-
+
{72527E9F-5A82-4E5E-986D-9EBF0FB43588}
-
-
+
{E1BE3F3D-19A0-4BF1-BD0F-D91364B8B3B7}
-
-
+
{F1410586-8659-4D8F-B90B-D98AB3182F7A}
-
-
+
{43BE6EC4-4F81-4D17-B392-2FE8FA67A130}
-
-
- {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C}
+
+ {BCDFEAE0-481F-485F-8015-0F9214BEC53A}
-
-
- {8760B263-C70C-46BA-9E97-A3D6B08941E9}
+
+ {D31F47A6-19A4-440D-8432-A9E4610D070D}
-
-
- {9BA81525-6E53-498C-AA97-B31FB48F3A50}
+
+ {13FC1CDD-FDA9-4445-B961-AC18E29630FA}
-
@@ -1206,148 +1380,278 @@ $Distance = dist;
{1E6639B6-8B58-4694-99E7-C058E3583522}
-
- {BCDFEAE0-481F-485F-8015-0F9214BEC53A}
+
+ {19586C3A-69D1-46CB-AAFD-B6ACF94CAADE}
-
-
- {7ACEE4C2-A92D-4E50-BFAE-C1D744BEE5E0}
+
+ {C5095DF7-63D2-455A-9659-B6592AB27CB1}
-
-
- {D31F47A6-19A4-440D-8432-A9E4610D070D}
+
+ {7174FE5A-D079-4452-AFEF-9FC2BCC2900F}
+
+
+ -
+
+
+
+ {93DEEDC9-D4C7-47F8-8D6A-A79DABD6BA6A}
-
- {13FC1CDD-FDA9-4445-B961-AC18E29630FA}
+ {11585EBC-914D-4E6D-A10D-D01694FF9840}
-
+
+
+ {4067F6C8-9404-45CA-9359-D9E2456F7431}
+
+
+ -
+
+
+
+ {F95D9BA4-88CC-4001-9948-B8173FDDE6F0}
+
+
+ -
+
+
+
+ {5A25771B-894F-4D92-8D1E-FBF8449850E8}
+
+
+ -
+
+
+
+ {567A2DC4-F113-4DE2-917A-791917DA5DA5}
+
+
+ -
+
-
- {19586C3A-69D1-46CB-AAFD-B6ACF94CAADE}
+
+ {70605746-81B0-A64B-8596-3F4762DB8477}
-
-
- {C5095DF7-63D2-455A-9659-B6592AB27CB1}
+
+ {32EB5230-1F0D-40B8-93F6-9C8E5469454E}
-
-
- {51EA7D6F-840D-46B9-9B20-09A837C1300E}
+
+ {3E538F69-C85C-44E2-9320-73F876288BAE}
-
-
- {7174FE5A-D079-4452-AFEF-9FC2BCC2900F}
+
+ {C9CC095B-00C6-4A84-88B5-2455115CAF9C}
-
-
- {93DEEDC9-D4C7-47F8-8D6A-A79DABD6BA6A}
+
+ {9BA81525-6E53-498C-AA97-B31FB48F3A50}
-
-
+
{11585EBC-914D-4E6D-A10D-D01694FF9840}
-
+
+ {7ACEE4C2-A92D-4E50-BFAE-C1D744BEE5E0}
+
+
+ -
+
+
+
+ {11585EBC-914D-4E6D-A10D-D01694FF9840}
+
+
+ -
+
-
- {4067F6C8-9404-45CA-9359-D9E2456F7431}
+
+ {5A25771B-894F-4D92-8D1E-FBF8449850E8}
-
-
- {F95D9BA4-88CC-4001-9948-B8173FDDE6F0}
+
+ {7ACEE4C2-A92D-4E50-BFAE-C1D744BEE5E0}
-
-
- {5A25771B-894F-4D92-8D1E-FBF8449850E8}
+
+ {51EA7D6F-840D-46B9-9B20-09A837C1300E}
-
+
+
+ {3E538F69-C85C-44E2-9320-73F876288BAE}
+
+
+ -
+
+
+
+ {8760B263-C70C-46BA-9E97-A3D6B08941E9}
+
+
+ -
+
-
- {567A2DC4-F113-4DE2-917A-791917DA5DA5}
+
+ {C9CC095B-00C6-4A84-88B5-2455115CAF9C}
-
-
- {70605746-81B0-A64B-8596-3F4762DB8477}
+
+ {F2E22CA6-DFF3-4B20-A70A-0D7A44EACD8C}
+
+
+ -
+
+
+
+ {8760B263-C70C-46BA-9E97-A3D6B08941E9}
+
+
+ -
+
+
+
+ {FE413452-19EB-4DC9-B724-2984FA17CC20}
+
+
+ -
+
+
+
+ {A24A7B3B-5327-EE42-94B3-1DEDDE2A1975}
+
+
+ -
+
+
+
+ {6D5C5EFE-A35C-4748-B81E-B8EBACE433BC}