From f126a83b797c1fd3dda98f3438079c81d33dcde3 Mon Sep 17 00:00:00 2001 From: Wojtek Figat Date: Sun, 29 Jun 2025 13:52:29 +0200 Subject: [PATCH] Fix graphical issues when batching materials that use Forward Shading for instancing --- Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp | 5 ++++- Source/Engine/Graphics/Materials/DeferredMaterialShader.h | 1 + Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp b/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp index 4e9622a01..5f0abad33 100644 --- a/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/DeferredMaterialShader.cpp @@ -29,7 +29,7 @@ bool DeferredMaterialShader::CanUseLightmap() const bool DeferredMaterialShader::CanUseInstancing(InstancingHandler& handler) const { handler = { SurfaceDrawCallHandler::GetHash, SurfaceDrawCallHandler::CanBatch, }; - return true; + return _instanced; } void DeferredMaterialShader::Bind(BindParameters& params) @@ -114,6 +114,9 @@ void DeferredMaterialShader::Unload() bool DeferredMaterialShader::Load() { + // TODO: support instancing when using ForwardShadingFeature + _instanced = _info.BlendMode == MaterialBlendMode::Opaque && _info.ShadingModel != MaterialShadingModel::CustomLit; + bool failed = false; auto psDesc = GPUPipelineState::Description::Default; psDesc.DepthWriteEnable = (_info.FeaturesFlags & MaterialFeaturesFlags::DisableDepthWrite) == MaterialFeaturesFlags::None; diff --git a/Source/Engine/Graphics/Materials/DeferredMaterialShader.h b/Source/Engine/Graphics/Materials/DeferredMaterialShader.h index 4d01c4d4a..ebfd54ecb 100644 --- a/Source/Engine/Graphics/Materials/DeferredMaterialShader.h +++ b/Source/Engine/Graphics/Materials/DeferredMaterialShader.h @@ -65,6 +65,7 @@ private: private: Cache _cache; Cache _cacheInstanced; + bool _instanced; public: DeferredMaterialShader(const StringView& name) diff --git a/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp b/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp index 4ed8e6b86..a966507d8 100644 --- a/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp +++ b/Source/Engine/Graphics/Materials/ForwardMaterialShader.cpp @@ -25,7 +25,7 @@ DrawPass ForwardMaterialShader::GetDrawModes() const bool ForwardMaterialShader::CanUseInstancing(InstancingHandler& handler) const { handler = { SurfaceDrawCallHandler::GetHash, SurfaceDrawCallHandler::CanBatch, }; - return true; + return false; // TODO: support instancing when using ForwardShadingFeature } void ForwardMaterialShader::Bind(BindParameters& params)