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 3ba4813bd..0e4b567b9 100644 --- a/Source/Editor/Surface/Archetypes/Tools.cs +++ b/Source/Editor/Surface/Archetypes/Tools.cs @@ -1389,7 +1389,7 @@ namespace FlaxEditor.Surface.Archetypes Size = new Float2(110, 40), Elements = new[] { - NodeElementArchetype.Factory.Output(0, "Scaled Time", typeof(float), 0), + NodeElementArchetype.Factory.Output(0, "Time", typeof(float), 0), NodeElementArchetype.Factory.Output(1, "Unscaled Time", typeof(float), 1), } }, diff --git a/Source/Engine/Graphics/Materials/GUIMaterialShader.cpp b/Source/Engine/Graphics/Materials/GUIMaterialShader.cpp index 002736355..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.UnscaledTimeParam; + 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 879925f07..23d06589b 100644 --- a/Source/Engine/Graphics/Materials/IMaterial.h +++ b/Source/Engine/Graphics/Materials/IMaterial.h @@ -148,8 +148,7 @@ public: const ::DrawCall* DrawCall = nullptr; MaterialParamsLink* ParamsLink = nullptr; void* CustomData = nullptr; - float UnscaledTimeParam; - float ScaledTimeParam; + float Time, UnscaledTime; bool Instanced = false; /// diff --git a/Source/Engine/Graphics/Materials/MaterialShader.cpp b/Source/Engine/Graphics/Materials/MaterialShader.cpp index 527914f6e..98edca2bf 100644 --- a/Source/Engine/Graphics/Materials/MaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/MaterialShader.cpp @@ -30,20 +30,21 @@ GPU_CB_STRUCT(MaterialShaderDataPerView { Float3 ViewPos; float ViewFar; Float3 ViewDir; - float UnscaledTimeParam; - float ScaledTimeParam; + float TimeParam; Float4 ViewInfo; Float4 ScreenSize; Float4 TemporalAAJitter; Float3 LargeWorldsChunkIndex; float LargeWorldsChunkSize; + Float3 ViewPadding0; + float UnscaledTimeParam; }); IMaterial::BindParameters::BindParameters(::GPUContext* context, const ::RenderContext& renderContext) : GPUContext(context) , RenderContext(renderContext) - , UnscaledTimeParam(Time::Draw.UnscaledTime.GetTotalSeconds()) - , ScaledTimeParam(Time::Draw.Time.GetTotalSeconds()) + , Time(Time::Draw.Time.GetTotalSeconds()) + , UnscaledTime(Time::Draw.UnscaledTime.GetTotalSeconds()) { } @@ -51,8 +52,8 @@ IMaterial::BindParameters::BindParameters(::GPUContext* context, const ::RenderC : GPUContext(context) , RenderContext(renderContext) , DrawCall(&drawCall) - , UnscaledTimeParam(Time::Draw.UnscaledTime.GetTotalSeconds()) - , ScaledTimeParam(Time::Draw.Time.GetTotalSeconds()) + , Time(Time::Draw.Time.GetTotalSeconds()) + , UnscaledTime(Time::Draw.UnscaledTime.GetTotalSeconds()) , Instanced(instanced) { } @@ -80,8 +81,8 @@ void IMaterial::BindParameters::BindViewData() cb.ViewPos = view.Position; cb.ViewFar = view.Far; cb.ViewDir = view.Direction; - cb.UnscaledTimeParam = UnscaledTimeParam; - cb.ScaledTimeParam = ScaledTimeParam; + 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 61ca23248..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.UnscaledTimeParam; + 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 dcaee67d8..056ddd7ce 100644 --- a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.Tools.cpp +++ b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.Tools.cpp @@ -48,28 +48,14 @@ void MaterialGenerator::ProcessGroupTools(Box* box, Node* node, Value& value) } // Time case 3: - { - switch (box->ID) - { - // Scaled Time - case 0: - value = getScaledTime; - break; - // Unscaled Time - case 1: - value = getUnscaledTime; - break; - default: - break; - } + value = box->ID == 1 ? getUnscaledTime : getTime; break; - } // Panner case 6: { // Get inputs const Value uv = tryGetValue(node->GetBox(0), getUVs).AsFloat2(); - const Value time = tryGetValue(node->GetBox(1), getUnscaledTime).AsFloat(); + const Value time = tryGetValue(node->GetBox(1), getTime).AsFloat(); const Value speed = tryGetValue(node->GetBox(2), Value::One).AsFloat2(); const bool useFractionalPart = (bool)node->Values[0]; diff --git a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.cpp b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.cpp index 1eccf69fb..b958f5f56 100644 --- a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.cpp +++ b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.cpp @@ -106,8 +106,8 @@ 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::getScaledTime(VariantType::Float, TEXT("ScaledTimeParam")); 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 54ca9616c..706929d75 100644 --- a/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.h +++ b/Source/Engine/Tools/MaterialGenerator/MaterialGenerator.h @@ -209,8 +209,8 @@ private: public: static MaterialValue getUVs; + static MaterialValue getTime; static MaterialValue getUnscaledTime; - static MaterialValue getScaledTime; static MaterialValue getNormal; static MaterialValue getNormalZero; static MaterialValue getVertexColor; diff --git a/Source/Shaders/MaterialCommon.hlsl b/Source/Shaders/MaterialCommon.hlsl index c8bd1a3ec..897b01d7e 100644 --- a/Source/Shaders/MaterialCommon.hlsl +++ b/Source/Shaders/MaterialCommon.hlsl @@ -170,13 +170,14 @@ cbuffer ViewData : register(b1) float3 ViewPos; float ViewFar; float3 ViewDir; - float UnscaledTimeParam; - float ScaledTimeParam; + float TimeParam; float4 ViewInfo; float4 ScreenSize; float4 TemporalAAJitter; float3 LargeWorldsChunkIndex; float LargeWorldsChunkSize; + float3 ViewPadding0; + float UnscaledTimeParam; }; #endif