diff --git a/Content/Editor/MaterialTemplates/GUI.shader b/Content/Editor/MaterialTemplates/GUI.shader index fad7afa32..69b6d3539 100644 --- a/Content/Editor/MaterialTemplates/GUI.shader +++ b/Content/Editor/MaterialTemplates/GUI.shader @@ -20,6 +20,8 @@ float TimeParam; float4 ViewInfo; float4 ScreenSize; float4 ViewSize; +float3 ViewPadding0; +float UnscaledTimeParam; @1META_CB_END // Shader resources diff --git a/Content/Editor/MaterialTemplates/PostProcess.shader b/Content/Editor/MaterialTemplates/PostProcess.shader index 927d63c8c..753ccb253 100644 --- a/Content/Editor/MaterialTemplates/PostProcess.shader +++ b/Content/Editor/MaterialTemplates/PostProcess.shader @@ -19,6 +19,8 @@ float4 ViewInfo; float4 ScreenSize; float4 TemporalAAJitter; float4x4 InverseViewProjectionMatrix; +float3 ViewPadding0; +float UnscaledTimeParam; @1META_CB_END // Shader resources diff --git a/Source/Editor/Surface/Archetypes/Tools.cs b/Source/Editor/Surface/Archetypes/Tools.cs index 1debf5b60..0e4b567b9 100644 --- a/Source/Editor/Surface/Archetypes/Tools.cs +++ b/Source/Editor/Surface/Archetypes/Tools.cs @@ -1386,10 +1386,11 @@ namespace FlaxEditor.Surface.Archetypes Title = "Time", Description = "Game time constant", Flags = NodeFlags.MaterialGraph, - Size = new Float2(110, 20), + Size = new Float2(110, 40), Elements = new[] { - NodeElementArchetype.Factory.Output(0, "", typeof(float), 0), + NodeElementArchetype.Factory.Output(0, "Time", typeof(float), 0), + NodeElementArchetype.Factory.Output(1, "Unscaled Time", typeof(float), 1), } }, new NodeArchetype diff --git a/Source/Engine/Graphics/Materials/GUIMaterialShader.cpp b/Source/Engine/Graphics/Materials/GUIMaterialShader.cpp index 0811570ea..874694702 100644 --- a/Source/Engine/Graphics/Materials/GUIMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/GUIMaterialShader.cpp @@ -23,6 +23,8 @@ PACK_STRUCT(struct GUIMaterialShaderData { Float4 ViewInfo; Float4 ScreenSize; Float4 ViewSize; + Float3 ViewPadding0; + float UnscaledTimeParam; }); void GUIMaterialShader::Bind(BindParameters& params) @@ -55,7 +57,8 @@ void GUIMaterialShader::Bind(BindParameters& params) materialData->ViewPos = Float3::Zero; materialData->ViewFar = 0.0f; materialData->ViewDir = Float3::Forward; - materialData->TimeParam = params.TimeParam; + materialData->TimeParam = params.Time; + materialData->UnscaledTimeParam = params.UnscaledTime; materialData->ViewInfo = Float4::Zero; auto& viewport = Render2D::GetViewport(); materialData->ScreenSize = Float4(viewport.Width, viewport.Height, 1.0f / viewport.Width, 1.0f / viewport.Height); diff --git a/Source/Engine/Graphics/Materials/IMaterial.h b/Source/Engine/Graphics/Materials/IMaterial.h index 186be0830..23d06589b 100644 --- a/Source/Engine/Graphics/Materials/IMaterial.h +++ b/Source/Engine/Graphics/Materials/IMaterial.h @@ -148,7 +148,7 @@ public: const ::DrawCall* DrawCall = nullptr; MaterialParamsLink* ParamsLink = nullptr; void* CustomData = nullptr; - float TimeParam; + float Time, UnscaledTime; bool Instanced = false; /// diff --git a/Source/Engine/Graphics/Materials/MaterialShader.cpp b/Source/Engine/Graphics/Materials/MaterialShader.cpp index 1b0b6937b..98edca2bf 100644 --- a/Source/Engine/Graphics/Materials/MaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/MaterialShader.cpp @@ -36,12 +36,15 @@ GPU_CB_STRUCT(MaterialShaderDataPerView { Float4 TemporalAAJitter; Float3 LargeWorldsChunkIndex; float LargeWorldsChunkSize; + Float3 ViewPadding0; + float UnscaledTimeParam; }); IMaterial::BindParameters::BindParameters(::GPUContext* context, const ::RenderContext& renderContext) : GPUContext(context) , RenderContext(renderContext) - , TimeParam(Time::Draw.UnscaledTime.GetTotalSeconds()) + , Time(Time::Draw.Time.GetTotalSeconds()) + , UnscaledTime(Time::Draw.UnscaledTime.GetTotalSeconds()) { } @@ -49,7 +52,8 @@ IMaterial::BindParameters::BindParameters(::GPUContext* context, const ::RenderC : GPUContext(context) , RenderContext(renderContext) , DrawCall(&drawCall) - , TimeParam(Time::Draw.UnscaledTime.GetTotalSeconds()) + , Time(Time::Draw.Time.GetTotalSeconds()) + , UnscaledTime(Time::Draw.UnscaledTime.GetTotalSeconds()) , Instanced(instanced) { } @@ -77,7 +81,8 @@ void IMaterial::BindParameters::BindViewData() cb.ViewPos = view.Position; cb.ViewFar = view.Far; cb.ViewDir = view.Direction; - cb.TimeParam = TimeParam; + cb.TimeParam = Time; + cb.UnscaledTimeParam = UnscaledTime; cb.ViewInfo = view.ViewInfo; cb.ScreenSize = view.ScreenSize; cb.TemporalAAJitter = view.TemporalAAJitter; diff --git a/Source/Engine/Graphics/Materials/MaterialShader.h b/Source/Engine/Graphics/Materials/MaterialShader.h index ccc11c8cf..aedf2e870 100644 --- a/Source/Engine/Graphics/Materials/MaterialShader.h +++ b/Source/Engine/Graphics/Materials/MaterialShader.h @@ -10,7 +10,7 @@ /// /// Current materials shader version. /// -#define MATERIAL_GRAPH_VERSION 173 +#define MATERIAL_GRAPH_VERSION 174 class Material; class GPUShader; diff --git a/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp b/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp index 52ba7bc58..c82dd7447 100644 --- a/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/PostFxMaterialShader.cpp @@ -21,6 +21,8 @@ PACK_STRUCT(struct PostFxMaterialShaderData { Float4 ScreenSize; Float4 TemporalAAJitter; Matrix InverseViewProjectionMatrix; + Float3 ViewPadding0; + float UnscaledTimeParam; }); void PostFxMaterialShader::Bind(BindParameters& params) @@ -51,7 +53,8 @@ void PostFxMaterialShader::Bind(BindParameters& params) materialData->ViewPos = view.Position; materialData->ViewFar = view.Far; materialData->ViewDir = view.Direction; - materialData->TimeParam = params.TimeParam; + materialData->TimeParam = params.Time; + materialData->UnscaledTimeParam = params.UnscaledTime; materialData->ViewInfo = view.ViewInfo; materialData->ScreenSize = view.ScreenSize; materialData->TemporalAAJitter = view.TemporalAAJitter; diff --git a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.Tools.cpp b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.Tools.cpp index 975bbabc6..056ddd7ce 100644 --- a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.Tools.cpp +++ b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.Tools.cpp @@ -48,10 +48,8 @@ void MaterialGenerator::ProcessGroupTools(Box* box, Node* node, Value& value) } // Time case 3: - { - value = getTime; + value = box->ID == 1 ? getUnscaledTime : getTime; break; - } // Panner case 6: { diff --git a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.cpp b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.cpp index 5950676a3..b958f5f56 100644 --- a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.cpp +++ b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.cpp @@ -107,6 +107,7 @@ bool FeatureData::Init() MaterialValue MaterialGenerator::getUVs(VariantType::Float2, TEXT("input.TexCoord")); MaterialValue MaterialGenerator::getTime(VariantType::Float, TEXT("TimeParam")); +MaterialValue MaterialGenerator::getUnscaledTime(VariantType::Float, TEXT("UnscaledTimeParam")); MaterialValue MaterialGenerator::getNormal(VariantType::Float3, TEXT("input.TBN[2]")); MaterialValue MaterialGenerator::getNormalZero(VariantType::Float3, TEXT("float3(0, 0, 1)")); MaterialValue MaterialGenerator::getVertexColor(VariantType::Float4, TEXT("GetVertexColor(input)")); diff --git a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.h b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.h index 59c34c55f..706929d75 100644 --- a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.h +++ b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.h @@ -120,7 +120,6 @@ private: MaterialValue _ddx, _ddy, _cameraVector; public: - MaterialGenerator(); ~MaterialGenerator(); @@ -211,6 +210,7 @@ public: static MaterialValue getUVs; static MaterialValue getTime; + static MaterialValue getUnscaledTime; static MaterialValue getNormal; static MaterialValue getNormalZero; static MaterialValue getVertexColor; diff --git a/Source/Shaders/MaterialCommon.hlsl b/Source/Shaders/MaterialCommon.hlsl index f835b2327..897b01d7e 100644 --- a/Source/Shaders/MaterialCommon.hlsl +++ b/Source/Shaders/MaterialCommon.hlsl @@ -176,6 +176,8 @@ cbuffer ViewData : register(b1) float4 TemporalAAJitter; float3 LargeWorldsChunkIndex; float LargeWorldsChunkSize; + float3 ViewPadding0; + float UnscaledTimeParam; }; #endif