From 631853ab381759fee92cf44c2398a7e683078cce Mon Sep 17 00:00:00 2001 From: turanszkij Date: Fri, 16 Mar 2018 17:36:14 +0000 Subject: [PATCH] alpha composition effect setting moved to renderer --- Documentation/ScriptingAPI-Documentation.md | 2 +- Editor/RendererWindow.cpp | 11 ++++++++++- Editor/RendererWindow.h | 1 + WickedEngine/DeferredRenderableComponent.cpp | 6 ------ .../DeferredRenderableComponent_BindLua.cpp | 1 - .../ForwardRenderableComponent_BindLua.cpp | 1 - WickedEngine/Renderable3DComponent.h | 4 ---- WickedEngine/Renderable3DComponent_BindLua.cpp | 16 ---------------- WickedEngine/Renderable3DComponent_BindLua.h | 1 - .../TiledDeferredRenderableComponent.cpp | 7 +------ WickedEngine/TiledForwardRenderableComponent.cpp | 9 +-------- .../TiledForwardRenderableComponent_BindLua.cpp | 1 - WickedEngine/wiRenderer.cpp | 9 ++++++++- WickedEngine/wiRenderer.h | 3 +++ WickedEngine/wiRenderer_BindLua.cpp | 10 ++++++++++ WickedEngine/wiVersion.cpp | 2 +- 16 files changed, 36 insertions(+), 48 deletions(-) diff --git a/Documentation/ScriptingAPI-Documentation.md b/Documentation/ScriptingAPI-Documentation.md index c4ea4eca8..5eaa3c460 100644 --- a/Documentation/ScriptingAPI-Documentation.md +++ b/Documentation/ScriptingAPI-Documentation.md @@ -119,6 +119,7 @@ You can use the Renderer with the following functions, all of which are in the g - SetEnvironmentMap(Texture cubemap) - SetColorGrading(Texture texture2D) - HairParticleSettings(opt int lod0, opt int lod1, opt int lod2) +- SetAlphaCompositionEnabled(opt bool enabled) - SetShadowProps2D(int resolution, int count, int softShadowQuality) - SetShadowPropsCube(int resolution, int count) - SetDebugPartitionTreeEnabled(bool enabled) @@ -500,7 +501,6 @@ It inherits functions from Renderable2DComponent, so it can render a 2D overlay. - SetPreferredThreadingCount(int value) - SetTessellationEnabled(bool value) - SetMSAASampleCount(int count) -- SetHairParticleAlphaCompositionEnabled(bool value) - SetStereogramEnabled(bool value) - SetSharpenFilterEnabled(bool value) - SetSharpenFilterAmount(bool value) diff --git a/Editor/RendererWindow.cpp b/Editor/RendererWindow.cpp index c3a275c16..ac134fdc0 100644 --- a/Editor/RendererWindow.cpp +++ b/Editor/RendererWindow.cpp @@ -14,7 +14,7 @@ RendererWindow::RendererWindow(wiGUI* gui, Renderable3DComponent* component) : G wiRenderer::SetToDrawGridHelper(true); rendererWindow = new wiWindow(GUI, "Renderer Window"); - rendererWindow->SetSize(XMFLOAT2(640, 930)); + rendererWindow->SetSize(XMFLOAT2(640, 960)); rendererWindow->SetEnabled(true); GUI->AddWidget(rendererWindow); @@ -183,6 +183,15 @@ RendererWindow::RendererWindow(wiGUI* gui, Renderable3DComponent* component) : G rendererWindow->AddWidget(advancedRefractionsCheckBox); advancedRefractionsCheckBox->SetEnabled(wiRenderer::GetDevice()->CheckCapability(wiGraphicsTypes::GraphicsDevice::GRAPHICSDEVICE_CAPABILITY_UNORDEREDACCESSTEXTURE_LOAD_FORMAT_EXT)); + alphaCompositionCheckBox = new wiCheckBox("Alpha Composition: "); + alphaCompositionCheckBox->SetTooltip("Enable Alpha Composition. Enables softer alpha blending on partly solid geometry (eg. vegetation) but rendering performance will be slower."); + alphaCompositionCheckBox->SetPos(XMFLOAT2(x, y += step)); + alphaCompositionCheckBox->OnClick([=](wiEventArgs args) { + wiRenderer::SetAlphaCompositionEnabled(args.bValue); + }); + alphaCompositionCheckBox->SetCheck(wiRenderer::GetAlphaCompositionEnabled()); + rendererWindow->AddWidget(alphaCompositionCheckBox); + pickTypeObjectCheckBox = new wiCheckBox("Pick Objects: "); pickTypeObjectCheckBox->SetTooltip("Enable if you want to pick objects with the pointer"); diff --git a/Editor/RendererWindow.h b/Editor/RendererWindow.h index 58a6454ef..06b6036f7 100644 --- a/Editor/RendererWindow.h +++ b/Editor/RendererWindow.h @@ -38,6 +38,7 @@ public: wiCheckBox* debugLightCullingCheckBox; wiCheckBox* tessellationCheckBox; wiCheckBox* advancedRefractionsCheckBox; + wiCheckBox* alphaCompositionCheckBox; wiCheckBox* envProbesCheckBox; wiCheckBox* gridHelperCheckBox; wiCheckBox* pickTypeObjectCheckBox; diff --git a/WickedEngine/DeferredRenderableComponent.cpp b/WickedEngine/DeferredRenderableComponent.cpp index cd5ff55a3..d9fa4d805 100644 --- a/WickedEngine/DeferredRenderableComponent.cpp +++ b/WickedEngine/DeferredRenderableComponent.cpp @@ -13,12 +13,6 @@ using namespace wiGraphicsTypes; DeferredRenderableComponent::DeferredRenderableComponent() { Renderable3DComponent::setProperties(); - - setSSREnabled(false); - setSSAOEnabled(false); - setHairParticleAlphaCompositionEnabled(false); - - setPreferredThreadingCount(0); } DeferredRenderableComponent::~DeferredRenderableComponent() { diff --git a/WickedEngine/DeferredRenderableComponent_BindLua.cpp b/WickedEngine/DeferredRenderableComponent_BindLua.cpp index 1d6042b03..f2781d39a 100644 --- a/WickedEngine/DeferredRenderableComponent_BindLua.cpp +++ b/WickedEngine/DeferredRenderableComponent_BindLua.cpp @@ -50,7 +50,6 @@ Luna::FunctionType DeferredRenderableCompon lunamethod(Renderable3DComponent_BindLua, SetStereogramEnabled), lunamethod(Renderable3DComponent_BindLua, SetEyeAdaptionEnabled), lunamethod(Renderable3DComponent_BindLua, SetTessellationEnabled), - lunamethod(Renderable3DComponent_BindLua, SetHairParticleAlphaCompositionEnabled), lunamethod(Renderable3DComponent_BindLua, SetSharpenFilterEnabled), lunamethod(Renderable3DComponent_BindLua, SetSharpenFilterAmount), diff --git a/WickedEngine/ForwardRenderableComponent_BindLua.cpp b/WickedEngine/ForwardRenderableComponent_BindLua.cpp index a79b41d6c..f19f13a8f 100644 --- a/WickedEngine/ForwardRenderableComponent_BindLua.cpp +++ b/WickedEngine/ForwardRenderableComponent_BindLua.cpp @@ -51,7 +51,6 @@ Luna::FunctionType ForwardRenderableComponen lunamethod(Renderable3DComponent_BindLua, SetEyeAdaptionEnabled), lunamethod(Renderable3DComponent_BindLua, SetTessellationEnabled), lunamethod(Renderable3DComponent_BindLua, SetMSAASampleCount), - lunamethod(Renderable3DComponent_BindLua, SetHairParticleAlphaCompositionEnabled), lunamethod(Renderable3DComponent_BindLua, SetSharpenFilterEnabled), lunamethod(Renderable3DComponent_BindLua, SetSharpenFilterAmount), diff --git a/WickedEngine/Renderable3DComponent.h b/WickedEngine/Renderable3DComponent.h index 52a13190d..e48b9b698 100644 --- a/WickedEngine/Renderable3DComponent.h +++ b/WickedEngine/Renderable3DComponent.h @@ -42,7 +42,6 @@ private: bool stereogramEnabled; bool eyeAdaptionEnabled; bool tessellationEnabled; - bool hairParticleAlphaComposition; bool sharpenFilterEnabled; UINT msaaSampleCount; @@ -112,7 +111,6 @@ public: inline bool getStereogramEnabled() { return stereogramEnabled; } inline bool getEyeAdaptionEnabled() { return eyeAdaptionEnabled; } inline bool getTessellationEnabled() { return tessellationEnabled && wiRenderer::GetDevice()->CheckCapability(wiGraphicsTypes::GraphicsDevice::GRAPHICSDEVICE_CAPABILITY_TESSELLATION); } - inline bool getHairParticleAlphaCompositionEnabled() { return hairParticleAlphaComposition; } inline bool getSharpenFilterEnabled() { return sharpenFilterEnabled && getSharpenFilterAmount() > 0; } inline UINT getMSAASampleCount() { return msaaSampleCount; } @@ -151,8 +149,6 @@ public: inline void setStereogramEnabled(bool value) { stereogramEnabled = value; } inline void setEyeAdaptionEnabled(bool value) { eyeAdaptionEnabled = value; } inline void setTessellationEnabled(bool value) { tessellationEnabled = value; } - // Render hair particle systems in two passes to achieve smooth alpha blending (tiledforward only yet) - inline void setHairParticleAlphaCompositionEnabled(bool value) { hairParticleAlphaComposition = value; } inline void setSharpenFilterEnabled(bool value) { sharpenFilterEnabled = value; } inline void setMSAASampleCount(UINT value) { msaaSampleCount = value; ResizeBuffers(); } diff --git a/WickedEngine/Renderable3DComponent_BindLua.cpp b/WickedEngine/Renderable3DComponent_BindLua.cpp index 871e92d0b..87fa6e49e 100644 --- a/WickedEngine/Renderable3DComponent_BindLua.cpp +++ b/WickedEngine/Renderable3DComponent_BindLua.cpp @@ -52,7 +52,6 @@ Luna::FunctionType Renderable3DComponent_BindLua: lunamethod(Renderable3DComponent_BindLua, SetEyeAdaptionEnabled), lunamethod(Renderable3DComponent_BindLua, SetTessellationEnabled), lunamethod(Renderable3DComponent_BindLua, SetMSAASampleCount), - lunamethod(Renderable3DComponent_BindLua, SetHairParticleAlphaCompositionEnabled), lunamethod(Renderable3DComponent_BindLua, SetSharpenFilterEnabled), lunamethod(Renderable3DComponent_BindLua, SetSharpenFilterAmount), @@ -351,21 +350,6 @@ int Renderable3DComponent_BindLua::SetMSAASampleCount(lua_State* L) wiLua::SError(L, "SetMSAASampleCount(int value) not enough arguments!"); return 0; } -int Renderable3DComponent_BindLua::SetHairParticleAlphaCompositionEnabled(lua_State* L) -{ - if (component == nullptr) - { - wiLua::SError(L, "SetHairParticleAlphaCompositionEnabled(bool value) component is null!"); - return 0; - } - if (wiLua::SGetArgCount(L) > 0) - { - ((Renderable3DComponent*)component)->setHairParticleAlphaCompositionEnabled(wiLua::SGetBool(L, 1)); - } - else - wiLua::SError(L, "SetHairParticleAlphaCompositionEnabled(bool value) not enough arguments!"); - return 0; -} int Renderable3DComponent_BindLua::SetSharpenFilterEnabled(lua_State* L) { if (component == nullptr) diff --git a/WickedEngine/Renderable3DComponent_BindLua.h b/WickedEngine/Renderable3DComponent_BindLua.h index 22af84da6..cedaca4a2 100644 --- a/WickedEngine/Renderable3DComponent_BindLua.h +++ b/WickedEngine/Renderable3DComponent_BindLua.h @@ -35,7 +35,6 @@ public: int SetEyeAdaptionEnabled(lua_State* L); int SetTessellationEnabled(lua_State* L); int SetMSAASampleCount(lua_State* L); - int SetHairParticleAlphaCompositionEnabled(lua_State* L); int SetSharpenFilterEnabled(lua_State* L); int SetSharpenFilterAmount(lua_State* L); diff --git a/WickedEngine/TiledDeferredRenderableComponent.cpp b/WickedEngine/TiledDeferredRenderableComponent.cpp index f0e4c9b38..9e752da9a 100644 --- a/WickedEngine/TiledDeferredRenderableComponent.cpp +++ b/WickedEngine/TiledDeferredRenderableComponent.cpp @@ -14,7 +14,6 @@ using namespace wiGraphicsTypes; TiledDeferredRenderableComponent::TiledDeferredRenderableComponent() { DeferredRenderableComponent::setProperties(); - setHairParticleAlphaCompositionEnabled(true); } @@ -37,10 +36,6 @@ void TiledDeferredRenderableComponent::RenderScene(GRAPHICSTHREAD threadID) rtGBuffer.Activate(threadID, 0, 0, 0, 0); { - if (getHairParticleAlphaCompositionEnabled()) - { - wiRenderer::SetAlphaRef(0.25f, threadID); - } wiRenderer::GetDevice()->BindResource(PS, getReflectionsEnabled() ? rtReflection.GetTexture() : wiTextureHelper::getInstance()->getTransparent(), TEXSLOT_RENDERABLECOMPONENT_REFLECTION, threadID); wiRenderer::DrawWorld(wiRenderer::getCamera(), getTessellationEnabled(), threadID, SHADERTYPE_DEFERRED, getHairParticlesEnabled(), true); } @@ -205,7 +200,7 @@ void TiledDeferredRenderableComponent::RenderTransparentScene(wiRenderTarget& re wiRenderer::GetDevice()->BindResource(PS, getReflectionsEnabled() ? rtReflection.GetTexture() : wiTextureHelper::getInstance()->getTransparent(), TEXSLOT_RENDERABLECOMPONENT_REFLECTION, threadID); wiRenderer::GetDevice()->BindResource(PS, refractionRT.GetTexture(), TEXSLOT_RENDERABLECOMPONENT_REFRACTION, threadID); wiRenderer::GetDevice()->BindResource(PS, rtWaterRipple.GetTexture(), TEXSLOT_RENDERABLECOMPONENT_WATERRIPPLES, threadID); - wiRenderer::DrawWorldTransparent(wiRenderer::getCamera(), SHADERTYPE_TILEDFORWARD, threadID, getHairParticlesEnabled() && getHairParticleAlphaCompositionEnabled(), true); + wiRenderer::DrawWorldTransparent(wiRenderer::getCamera(), SHADERTYPE_TILEDFORWARD, threadID, getHairParticlesEnabled(), true); wiProfiler::GetInstance().EndRange(); // Transparent Scene } diff --git a/WickedEngine/TiledForwardRenderableComponent.cpp b/WickedEngine/TiledForwardRenderableComponent.cpp index 3857e5b92..55eb8c3c1 100644 --- a/WickedEngine/TiledForwardRenderableComponent.cpp +++ b/WickedEngine/TiledForwardRenderableComponent.cpp @@ -11,9 +11,6 @@ using namespace wiGraphicsTypes; TiledForwardRenderableComponent::TiledForwardRenderableComponent() { ForwardRenderableComponent::setProperties(); - setShadowsEnabled(true); - setHairParticleAlphaCompositionEnabled(true); - //setMSAASampleCount(8); } TiledForwardRenderableComponent::~TiledForwardRenderableComponent() { @@ -31,10 +28,6 @@ void TiledForwardRenderableComponent::RenderScene(GRAPHICSTHREAD threadID) wiProfiler::GetInstance().BeginRange("Z-Prepass", wiProfiler::DOMAIN_GPU, threadID); rtMain.Activate(threadID, 0, 0, 0, 0, true); // depth prepass { - if (getHairParticleAlphaCompositionEnabled()) - { - wiRenderer::SetAlphaRef(0.25f, threadID); - } wiRenderer::DrawWorld(wiRenderer::getCamera(), getTessellationEnabled(), threadID, SHADERTYPE_DEPTHONLY, getHairParticlesEnabled(), true); } wiProfiler::GetInstance().EndRange(threadID); @@ -129,7 +122,7 @@ void TiledForwardRenderableComponent::RenderTransparentScene(wiRenderTarget& ref wiRenderer::GetDevice()->BindResource(PS, getReflectionsEnabled() ? rtReflection.GetTexture() : wiTextureHelper::getInstance()->getTransparent(), TEXSLOT_RENDERABLECOMPONENT_REFLECTION, threadID); wiRenderer::GetDevice()->BindResource(PS, refractionRT.GetTexture(), TEXSLOT_RENDERABLECOMPONENT_REFRACTION, threadID); wiRenderer::GetDevice()->BindResource(PS, rtWaterRipple.GetTexture(), TEXSLOT_RENDERABLECOMPONENT_WATERRIPPLES, threadID); - wiRenderer::DrawWorldTransparent(wiRenderer::getCamera(), SHADERTYPE_TILEDFORWARD, threadID, getHairParticlesEnabled() && getHairParticleAlphaCompositionEnabled(), true); + wiRenderer::DrawWorldTransparent(wiRenderer::getCamera(), SHADERTYPE_TILEDFORWARD, threadID, getHairParticlesEnabled(), true); wiProfiler::GetInstance().EndRange(threadID); // Transparent Scene } diff --git a/WickedEngine/TiledForwardRenderableComponent_BindLua.cpp b/WickedEngine/TiledForwardRenderableComponent_BindLua.cpp index 8a7abacb2..2dc1cdd2c 100644 --- a/WickedEngine/TiledForwardRenderableComponent_BindLua.cpp +++ b/WickedEngine/TiledForwardRenderableComponent_BindLua.cpp @@ -50,7 +50,6 @@ Luna::FunctionType TiledForwardRenderab lunamethod(Renderable3DComponent_BindLua, SetEyeAdaptionEnabled), lunamethod(Renderable3DComponent_BindLua, SetTessellationEnabled), lunamethod(Renderable3DComponent_BindLua, SetMSAASampleCount), - lunamethod(Renderable3DComponent_BindLua, SetHairParticleAlphaCompositionEnabled), lunamethod(Renderable3DComponent_BindLua, SetSharpenFilterEnabled), lunamethod(Renderable3DComponent_BindLua, SetSharpenFilterAmount), diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 8c4d092eb..3b9a41855 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -60,6 +60,7 @@ float wiRenderer::GAMMA = 2.2f; int wiRenderer::SHADOWRES_2D = 1024, wiRenderer::SHADOWRES_CUBE = 256, wiRenderer::SHADOWCOUNT_2D = 5 + 3 + 3, wiRenderer::SHADOWCOUNT_CUBE = 5, wiRenderer::SOFTSHADOWQUALITY_2D = 2; bool wiRenderer::HAIRPARTICLEENABLED=true,wiRenderer::EMITTERSENABLED=true; bool wiRenderer::TRANSPARENTSHADOWSENABLED = true; +bool wiRenderer::ALPHACOMPOSITIONENABLED = false; bool wiRenderer::wireRender = false, wiRenderer::debugSpheres = false, wiRenderer::debugBoneLines = false, wiRenderer::debugPartitionTree = false, wiRenderer::debugEmitters = false, wiRenderer::freezeCullingCamera = false , wiRenderer::debugEnvProbes = false, wiRenderer::debugForceFields = false, wiRenderer::gridHelper = false, wiRenderer::voxelHelper = false, wiRenderer::requestReflectionRendering = false, wiRenderer::advancedLightCulling = true , wiRenderer::advancedRefractions = false; @@ -5325,6 +5326,11 @@ void wiRenderer::DrawWorld(Camera* camera, bool tessellation, GRAPHICSTHREAD thr if (grass) { + if (GetAlphaCompositionEnabled()) + { + // cut off most transparent areas + SetAlphaRef(0.25f, threadID); + } for (wiHairParticle* hair : culling.culledHairParticleSystems) { hair->Draw(camera, shaderType, false, threadID); @@ -5358,8 +5364,9 @@ void wiRenderer::DrawWorldTransparent(Camera* camera, SHADERTYPE shaderType, GRA ocean->Render(camera, renderTime, threadID); } - if (grass) + if (grass && GetAlphaCompositionEnabled()) { + // transparent passes can only render hair when alpha composition is enabled for (wiHairParticle* hair : culling.culledHairParticleSystems) { hair->Draw(camera, shaderType, true, threadID); diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index 5c4bd6da1..f86ab3a31 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -110,6 +110,7 @@ public: static XMFLOAT2 temporalAAJitter, temporalAAJitterPrev; static float RESOLUTIONSCALE; static bool TRANSPARENTSHADOWSENABLED; + static bool ALPHACOMPOSITIONENABLED; static void SetShadowProps2D(int resolution, int count, int softShadowQuality); static void SetShadowPropsCube(int resolution, int count); @@ -355,6 +356,8 @@ public: static bool GetDebugLightCulling() { return debugLightCulling; } static void SetAdvancedLightCulling(bool enabled) { advancedLightCulling = enabled; } static bool GetAdvancedLightCulling() { return advancedLightCulling; } + static void SetAlphaCompositionEnabled(bool enabled) { ALPHACOMPOSITIONENABLED = enabled; } + static bool GetAlphaCompositionEnabled() { return ALPHACOMPOSITIONENABLED; } static void SetOcclusionCullingEnabled(bool enabled); // also inits query pool! static bool GetOcclusionCullingEnabled() { return occlusionCulling; } static void SetLDSSkinningEnabled(bool enabled) { ldsSkinningEnabled = enabled; } diff --git a/WickedEngine/wiRenderer_BindLua.cpp b/WickedEngine/wiRenderer_BindLua.cpp index 9d6162b8a..35a9b8483 100644 --- a/WickedEngine/wiRenderer_BindLua.cpp +++ b/WickedEngine/wiRenderer_BindLua.cpp @@ -396,6 +396,15 @@ namespace wiRenderer_BindLua wiHairParticle::Settings(lod0, lod1, lod2); return 0; } + int SetAlphaCompositionEnabled(lua_State* L) + { + int argc = wiLua::SGetArgCount(L); + if (argc > 0) + { + wiRenderer::SetAlphaCompositionEnabled(wiLua::SGetBool(L, 1)); + } + return 0; + } int SetShadowProps2D(lua_State* L) { int argc = wiLua::SGetArgCount(L); @@ -706,6 +715,7 @@ namespace wiRenderer_BindLua wiLua::GetGlobal()->RegisterFunc("SetEnvironmentMap", SetEnvironmentMap); wiLua::GetGlobal()->RegisterFunc("SetColorGrading", SetColorGrading); wiLua::GetGlobal()->RegisterFunc("HairParticleSettings", HairParticleSettings); + wiLua::GetGlobal()->RegisterFunc("SetAlphaCompositionEnabled", SetAlphaCompositionEnabled); wiLua::GetGlobal()->RegisterFunc("SetShadowProps2D", SetShadowProps2D); wiLua::GetGlobal()->RegisterFunc("SetShadowPropsCube", SetShadowPropsCube); wiLua::GetGlobal()->RegisterFunc("SetDebugBoxesEnabled", SetDebugBoxesEnabled); diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 31f0c6c5b..07dfd8896 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wiVersion // minor features, major updates const int minor = 16; // minor bug fixes, alterations, refactors, updates - const int revision = 23; + const int revision = 24; long GetVersion()