From 74a892dd70f62e75d8a141713e5e45e755f9a343 Mon Sep 17 00:00:00 2001 From: turanszkij Date: Fri, 3 Jan 2020 01:40:54 +0100 Subject: [PATCH] dof and motionblur controls, tweaks --- Documentation/ScriptingAPI-Documentation.md | 2 ++ Editor/PostprocessWindow.cpp | 24 +++++++++++++- Editor/PostprocessWindow.h | 2 ++ WickedEngine/RenderPath3D.cpp | 4 +-- WickedEngine/RenderPath3D.h | 8 ++++- WickedEngine/RenderPath3D_BindLua.cpp | 33 ++++++++++++++++++- WickedEngine/RenderPath3D_BindLua.h | 3 +- .../RenderPath3D_Deferred_BindLua.cpp | 3 +- WickedEngine/RenderPath3D_Forward_BindLua.cpp | 3 +- .../RenderPath3D_TiledDeferred_BindLua.cpp | 3 +- .../RenderPath3D_TiledForward_BindLua.cpp | 3 +- WickedEngine/ShaderInterop_Postprocess.h | 4 ++- WickedEngine/depthoffieldHF.hlsli | 4 +-- WickedEngine/depthoffield_mainCS.hlsl | 2 +- WickedEngine/depthoffield_prepassCS.hlsl | 2 +- WickedEngine/motionblurCS.hlsl | 5 ++- WickedEngine/wiRenderer.cpp | 11 +++++-- WickedEngine/wiRenderer.h | 7 ++-- WickedEngine/wiVersion.cpp | 2 +- 19 files changed, 101 insertions(+), 24 deletions(-) diff --git a/Documentation/ScriptingAPI-Documentation.md b/Documentation/ScriptingAPI-Documentation.md index eaefacbc4..c844018ac 100644 --- a/Documentation/ScriptingAPI-Documentation.md +++ b/Documentation/ScriptingAPI-Documentation.md @@ -620,10 +620,12 @@ It inherits functions from RenderPath2D, so it can render a 2D overlay. - SetLightShaftsEnabled(bool value) - SetLensFlareEnabled(bool value) - SetMotionBlurEnabled(bool value) +- SetMotionBlurStrength(float value) - SetSSSEnabled(bool value) - SetDepthOfFieldEnabled(bool value) - SetDepthOfFieldFocus(float value) - SetDepthOfFieldStrength(float value) +- SetDepthOfFieldAspect(float value) - SetTessellationEnabled(bool value) - SetMSAASampleCount(int count) - SetSharpenFilterEnabled(bool value) diff --git a/Editor/PostprocessWindow.cpp b/Editor/PostprocessWindow.cpp index 4f0f1bea2..7bcf9dd6f 100644 --- a/Editor/PostprocessWindow.cpp +++ b/Editor/PostprocessWindow.cpp @@ -16,7 +16,7 @@ PostprocessWindow::PostprocessWindow(wiGUI* gui, RenderPath3D* comp) : GUI(gui), float screenH = (float)wiRenderer::GetDevice()->GetScreenHeight(); ppWindow = new wiWindow(GUI, "PostProcess Window"); - ppWindow->SetSize(XMFLOAT2(400, 660)); + ppWindow->SetSize(XMFLOAT2(400, 720)); GUI->AddWidget(ppWindow); float x = 150; @@ -122,6 +122,17 @@ PostprocessWindow::PostprocessWindow(wiGUI* gui, RenderPath3D* comp) : GUI(gui), }); ppWindow->AddWidget(motionBlurCheckBox); + motionBlurStrengthSlider = new wiSlider(0.1f, 400, 100, 10000, "Strength: "); + motionBlurStrengthSlider->SetTooltip("Set the camera shutter speed for motion blur (higher value means stronger blur)."); + motionBlurStrengthSlider->SetScriptTip("RenderPath3D::SetMotionBlurStrength(float value)"); + motionBlurStrengthSlider->SetSize(XMFLOAT2(100, 20)); + motionBlurStrengthSlider->SetPos(XMFLOAT2(x + 100, y)); + motionBlurStrengthSlider->SetValue(component->getMotionBlurStrength()); + motionBlurStrengthSlider->OnSlide([&](wiEventArgs args) { + component->setMotionBlurStrength(args.fValue); + }); + ppWindow->AddWidget(motionBlurStrengthSlider); + depthOfFieldCheckBox = new wiCheckBox("DepthOfField: "); depthOfFieldCheckBox->SetTooltip("Enable Depth of field effect. Additional focus and strength setup required."); depthOfFieldCheckBox->SetScriptTip("RenderPath3D::SetDepthOfFieldEnabled(bool value)"); @@ -154,6 +165,17 @@ PostprocessWindow::PostprocessWindow(wiGUI* gui, RenderPath3D* comp) : GUI(gui), }); ppWindow->AddWidget(depthOfFieldScaleSlider); + depthOfFieldAspectSlider = new wiSlider(0.01f, 2, 1, 1000, "Aspect: "); + depthOfFieldAspectSlider->SetTooltip("Set depth of field bokeh aspect ratio (width/height)."); + depthOfFieldAspectSlider->SetScriptTip("RenderPath3D::SetDepthOfFieldAspect(float value)"); + depthOfFieldAspectSlider->SetSize(XMFLOAT2(100, 20)); + depthOfFieldAspectSlider->SetPos(XMFLOAT2(x + 100, y += 35)); + depthOfFieldAspectSlider->SetValue(component->getDepthOfFieldAspect()); + depthOfFieldAspectSlider->OnSlide([&](wiEventArgs args) { + component->setDepthOfFieldAspect(args.fValue); + }); + ppWindow->AddWidget(depthOfFieldAspectSlider); + bloomCheckBox = new wiCheckBox("Bloom: "); bloomCheckBox->SetTooltip("Enable bloom. The effect adds color bleeding to the brightest parts of the scene."); bloomCheckBox->SetScriptTip("RenderPath3D::SetBloomEnabled(bool value)"); diff --git a/Editor/PostprocessWindow.h b/Editor/PostprocessWindow.h index bc43291c9..982181255 100644 --- a/Editor/PostprocessWindow.h +++ b/Editor/PostprocessWindow.h @@ -29,9 +29,11 @@ public: wiCheckBox* sssCheckBox; wiCheckBox* eyeAdaptionCheckBox; wiCheckBox* motionBlurCheckBox; + wiSlider* motionBlurStrengthSlider; wiCheckBox* depthOfFieldCheckBox; wiSlider* depthOfFieldFocusSlider; wiSlider* depthOfFieldScaleSlider; + wiSlider* depthOfFieldAspectSlider; wiCheckBox* bloomCheckBox; wiSlider* bloomStrengthSlider; wiCheckBox* fxaaCheckBox; diff --git a/WickedEngine/RenderPath3D.cpp b/WickedEngine/RenderPath3D.cpp index 8e4bce199..53284978e 100644 --- a/WickedEngine/RenderPath3D.cpp +++ b/WickedEngine/RenderPath3D.cpp @@ -636,7 +636,7 @@ void RenderPath3D::RenderPostprocessChain(const Texture& srcSceneRT, const Textu if (getDepthOfFieldEnabled()) { - wiRenderer::Postprocess_DepthOfField(rt_first == nullptr ? *rt_read : *rt_first, *rt_write, rtLinearDepth, cmd, getDepthOfFieldFocus(), getDepthOfFieldStrength()); + wiRenderer::Postprocess_DepthOfField(rt_first == nullptr ? *rt_read : *rt_first, *rt_write, rtLinearDepth, cmd, getDepthOfFieldFocus(), getDepthOfFieldStrength(), getDepthOfFieldAspect()); rt_first = nullptr; std::swap(rt_read, rt_write); @@ -645,7 +645,7 @@ void RenderPath3D::RenderPostprocessChain(const Texture& srcSceneRT, const Textu if (getMotionBlurEnabled()) { - wiRenderer::Postprocess_MotionBlur(rt_first == nullptr ? *rt_read : *rt_first, srcGbuffer1, rtLinearDepth, *rt_write, cmd); + wiRenderer::Postprocess_MotionBlur(rt_first == nullptr ? *rt_read : *rt_first, srcGbuffer1, rtLinearDepth, *rt_write, cmd, getMotionBlurStrength()); rt_first = nullptr; std::swap(rt_read, rt_write); diff --git a/WickedEngine/RenderPath3D.h b/WickedEngine/RenderPath3D.h index a0379323e..c61fbb48c 100644 --- a/WickedEngine/RenderPath3D.h +++ b/WickedEngine/RenderPath3D.h @@ -13,8 +13,10 @@ private: float exposure = 1.0f; float bloomThreshold = 1.0f; float ssaoBlur = 2.3f; + float motionBlurStrength = 100.0f; float dofFocus = 10.0f; float dofStrength = 1.0f; + float dofAspect = 1.0f; float sharpenFilterAmount = 0.28f; float outlineThreshold = 0.2f; float outlineThickness = 1.0f; @@ -112,8 +114,10 @@ public: constexpr float getExposure() const { return exposure; } constexpr float getBloomThreshold() const { return bloomThreshold; } constexpr float getSSAOBlur() const { return ssaoBlur; } + constexpr float getMotionBlurStrength() const { return motionBlurStrength; } constexpr float getDepthOfFieldFocus() const { return dofFocus; } constexpr float getDepthOfFieldStrength() const { return dofStrength; } + constexpr float getDepthOfFieldAspect() const { return dofAspect; } constexpr float getSharpenFilterAmount() const { return sharpenFilterAmount; } constexpr float getOutlineThreshold() const { return outlineThreshold; } constexpr float getOutlineThickness() const { return outlineThickness; } @@ -148,8 +152,10 @@ public: constexpr void setExposure(float value) { exposure = value; } constexpr void setBloomThreshold(float value){ bloomThreshold = value; } constexpr void setSSAOBlur(float value){ ssaoBlur = value; } + constexpr void setMotionBlurStrength(float value) { motionBlurStrength = value; } constexpr void setDepthOfFieldFocus(float value){ dofFocus = value; } - constexpr void setDepthOfFieldStrength(float value){ dofStrength = value; } + constexpr void setDepthOfFieldStrength(float value) { dofStrength = value; } + constexpr void setDepthOfFieldAspect(float value){ dofAspect = value; } constexpr void setSharpenFilterAmount(float value) { sharpenFilterAmount = value; } constexpr void setOutlineThreshold(float value) { outlineThreshold = value; } constexpr void setOutlineThickness(float value) { outlineThickness = value; } diff --git a/WickedEngine/RenderPath3D_BindLua.cpp b/WickedEngine/RenderPath3D_BindLua.cpp index 6045288a5..42b2ebefb 100644 --- a/WickedEngine/RenderPath3D_BindLua.cpp +++ b/WickedEngine/RenderPath3D_BindLua.cpp @@ -44,9 +44,10 @@ Luna::FunctionType RenderPath3D_BindLua::methods[] = { lunamethod(RenderPath3D_BindLua, SetSharpenFilterEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterAmount), lunamethod(RenderPath3D_BindLua, SetExposure), - + lunamethod(RenderPath3D_BindLua, SetMotionBlurStrength), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldFocus), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldStrength), + lunamethod(RenderPath3D_BindLua, SetDepthOfFieldAspect), { NULL, NULL } }; Luna::PropertyType RenderPath3D_BindLua::properties[] = { @@ -331,6 +332,21 @@ int RenderPath3D_BindLua::SetExposure(lua_State* L) } +int RenderPath3D_BindLua::SetMotionBlurStrength(lua_State* L) +{ + if (component == nullptr) + { + wiLua::SError(L, "SetMotionBlurStrength(float value) component is null!"); + return 0; + } + if (wiLua::SGetArgCount(L) > 0) + { + ((RenderPath3D*)component)->setMotionBlurStrength(wiLua::SGetFloat(L, 1)); + } + else + wiLua::SError(L, "SetMotionBlurStrength(float value) not enough arguments!"); + return 0; +} int RenderPath3D_BindLua::SetDepthOfFieldFocus(lua_State* L) { if (component == nullptr) @@ -361,6 +377,21 @@ int RenderPath3D_BindLua::SetDepthOfFieldStrength(lua_State* L) wiLua::SError(L, "SetDepthOfFieldStrength(float value) not enough arguments!"); return 0; } +int RenderPath3D_BindLua::SetDepthOfFieldAspect(lua_State* L) +{ + if (component == nullptr) + { + wiLua::SError(L, "SetDepthOfFieldAspect(float value) component is null!"); + return 0; + } + if (wiLua::SGetArgCount(L) > 0) + { + ((RenderPath3D*)component)->setDepthOfFieldAspect(wiLua::SGetFloat(L, 1)); + } + else + wiLua::SError(L, "SetDepthOfFieldAspect(float value) not enough arguments!"); + return 0; +} void RenderPath3D_BindLua::Bind() { diff --git a/WickedEngine/RenderPath3D_BindLua.h b/WickedEngine/RenderPath3D_BindLua.h index 46ecac5fa..0f5b725cf 100644 --- a/WickedEngine/RenderPath3D_BindLua.h +++ b/WickedEngine/RenderPath3D_BindLua.h @@ -34,9 +34,10 @@ public: int SetSharpenFilterEnabled(lua_State* L); int SetSharpenFilterAmount(lua_State* L); int SetExposure(lua_State* L); - + int SetMotionBlurStrength(lua_State* L); int SetDepthOfFieldFocus(lua_State* L); int SetDepthOfFieldStrength(lua_State* L); + int SetDepthOfFieldAspect(lua_State* L); static void Bind(); }; diff --git a/WickedEngine/RenderPath3D_Deferred_BindLua.cpp b/WickedEngine/RenderPath3D_Deferred_BindLua.cpp index 9b2483f35..72346923b 100644 --- a/WickedEngine/RenderPath3D_Deferred_BindLua.cpp +++ b/WickedEngine/RenderPath3D_Deferred_BindLua.cpp @@ -41,9 +41,10 @@ Luna::FunctionType RenderPath3D_Deferred_BindLua: lunamethod(RenderPath3D_BindLua, SetTessellationEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterAmount), - + lunamethod(RenderPath3D_BindLua, SetMotionBlurStrength), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldFocus), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldStrength), + lunamethod(RenderPath3D_BindLua, SetDepthOfFieldAspect), { NULL, NULL } }; diff --git a/WickedEngine/RenderPath3D_Forward_BindLua.cpp b/WickedEngine/RenderPath3D_Forward_BindLua.cpp index aefa1ef85..6394a2b25 100644 --- a/WickedEngine/RenderPath3D_Forward_BindLua.cpp +++ b/WickedEngine/RenderPath3D_Forward_BindLua.cpp @@ -42,9 +42,10 @@ Luna::FunctionType RenderPath3D_Forward_BindLua::m lunamethod(RenderPath3D_BindLua, SetMSAASampleCount), lunamethod(RenderPath3D_BindLua, SetSharpenFilterEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterAmount), - + lunamethod(RenderPath3D_BindLua, SetMotionBlurStrength), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldFocus), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldStrength), + lunamethod(RenderPath3D_BindLua, SetDepthOfFieldAspect), { NULL, NULL } }; Luna::PropertyType RenderPath3D_Forward_BindLua::properties[] = { diff --git a/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp b/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp index d9168f830..e35431767 100644 --- a/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp +++ b/WickedEngine/RenderPath3D_TiledDeferred_BindLua.cpp @@ -41,9 +41,10 @@ Luna::FunctionType RenderPath3D_TiledDeferre lunamethod(RenderPath3D_BindLua, SetTessellationEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterAmount), - + lunamethod(RenderPath3D_BindLua, SetMotionBlurStrength), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldFocus), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldStrength), + lunamethod(RenderPath3D_BindLua, SetDepthOfFieldAspect), { NULL, NULL } }; diff --git a/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp b/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp index bc98de544..0d482325b 100644 --- a/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp +++ b/WickedEngine/RenderPath3D_TiledForward_BindLua.cpp @@ -41,9 +41,10 @@ Luna::FunctionType RenderPath3D_TiledForward_ lunamethod(RenderPath3D_BindLua, SetTessellationEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterEnabled), lunamethod(RenderPath3D_BindLua, SetSharpenFilterAmount), - + lunamethod(RenderPath3D_BindLua, SetMotionBlurStrength), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldFocus), lunamethod(RenderPath3D_BindLua, SetDepthOfFieldStrength), + lunamethod(RenderPath3D_BindLua, SetDepthOfFieldAspect), { NULL, NULL } }; diff --git a/WickedEngine/ShaderInterop_Postprocess.h b/WickedEngine/ShaderInterop_Postprocess.h index 9e35389b2..8e6e9c8e2 100644 --- a/WickedEngine/ShaderInterop_Postprocess.h +++ b/WickedEngine/ShaderInterop_Postprocess.h @@ -13,11 +13,13 @@ CBUFFER(PostProcessCB, CBSLOT_RENDERER_POSTPROCESS) }; static const uint MOTIONBLUR_TILESIZE = 32; +#define motionblur_strength xPPParams0.x static const uint DEPTHOFFIELD_TILESIZE = 32; #define dof_focus xPPParams0.x #define dof_scale xPPParams0.y -#define dof_maxcoc xPPParams0.z +#define dof_aspect xPPParams0.z +#define dof_maxcoc xPPParams0.w static const uint TILE_STATISTICS_OFFSET_EARLYEXIT = 0; static const uint TILE_STATISTICS_OFFSET_CHEAP = TILE_STATISTICS_OFFSET_EARLYEXIT + 4; diff --git a/WickedEngine/depthoffieldHF.hlsli b/WickedEngine/depthoffieldHF.hlsli index f571bd644..6a061a2b4 100644 --- a/WickedEngine/depthoffieldHF.hlsli +++ b/WickedEngine/depthoffieldHF.hlsli @@ -29,8 +29,8 @@ float SpreadCmp(float offsetCoc, float sampleCoc, float pixelToSampleUnitsScale) return SpreadToe(offsetCoc, saturate(pixelToSampleUnitsScale * sampleCoc - offsetCoc + 1.0)); } -#define DOF_RING_COUNT 4 - +#define DOF_MAX_RING_COUNT 4 +#define DOF_RING_COUNT 3 static const float3 disc[] = { { 0.2310, -0.0957, 1.0 }, diff --git a/WickedEngine/depthoffield_mainCS.hlsl b/WickedEngine/depthoffield_mainCS.hlsl index ebd82cf12..9654fb6c8 100644 --- a/WickedEngine/depthoffield_mainCS.hlsl +++ b/WickedEngine/depthoffield_mainCS.hlsl @@ -46,7 +46,7 @@ void main(uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID) const uint ringCount = clamp(ceil(pow(maxcoc, 0.5f) * DOF_RING_COUNT), 1, DOF_RING_COUNT); const float spreadScale = ringCount / maxcoc; - const float2 ringScale = float(ringCount) / float(DOF_RING_COUNT) * maxcoc * xPPResolution_rcp; + const float2 ringScale = float(ringCount) / float(DOF_RING_COUNT) * maxcoc * float2(max(1, dof_aspect), max(1, 2 - dof_aspect)) * xPPResolution_rcp; const float3 center_color = texture_prefilter[pixel]; const float3 center_presort = texture_presort[pixel]; diff --git a/WickedEngine/depthoffield_prepassCS.hlsl b/WickedEngine/depthoffield_prepassCS.hlsl index 6655b2454..265641d6c 100644 --- a/WickedEngine/depthoffield_prepassCS.hlsl +++ b/WickedEngine/depthoffield_prepassCS.hlsl @@ -53,7 +53,7 @@ void main(uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID) { float seed = 54321; - const float2 ringScale = 2 * coc * xPPResolution_rcp; + const float2 ringScale = 2 * coc * float2(max(1, dof_aspect), max(1, 2 - dof_aspect)) * xPPResolution_rcp; [unroll] for (uint i = ringSampleCount[0]; i < ringSampleCount[1]; ++i) { diff --git a/WickedEngine/motionblurCS.hlsl b/WickedEngine/motionblurCS.hlsl index d98c5b71e..90f5c0c06 100644 --- a/WickedEngine/motionblurCS.hlsl +++ b/WickedEngine/motionblurCS.hlsl @@ -58,12 +58,11 @@ void main(uint3 Gid : SV_GroupID, uint3 GTid : SV_GroupThreadID) #else - const float scale = 100; - const float2 neighborhood_velocity = neighborhoodmax[(pixel + (dither((float2)pixel) - 0.5f) * 16) / MOTIONBLUR_TILESIZE] * scale; // dither to reduce tile artifact + const float2 neighborhood_velocity = neighborhoodmax[(pixel + (dither((float2)pixel) - 0.5f) * 16) / MOTIONBLUR_TILESIZE] * motionblur_strength; // dither to reduce tile artifact const float neighborhood_velocity_magnitude = length(neighborhood_velocity); const float4 center_color = input[pixel]; - const float2 center_velocity = texture_gbuffer1[pixel].zw; + const float2 center_velocity = texture_gbuffer1[pixel].zw * motionblur_strength; const float center_velocity_magnitude = length(center_velocity); const float center_depth = texture_lineardepth[pixel]; diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index da5f85347..e0fcaf995 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -8834,7 +8834,9 @@ void Postprocess_DepthOfField( const Texture& lineardepth, CommandList cmd, float focus, - float scale + float scale, + float aspect, + float max_coc ) { GraphicsDevice* device = GetDevice(); @@ -8921,7 +8923,8 @@ void Postprocess_DepthOfField( cb.xPPResolution_rcp.y = 1.0f / cb.xPPResolution.y; cb.dof_focus = focus; cb.dof_scale = scale; - cb.dof_maxcoc = 18; // todo input param + cb.dof_aspect = aspect; + cb.dof_maxcoc = max_coc; device->UpdateBuffer(&constantBuffers[CBTYPE_POSTPROCESS], &cb, cmd); device->BindConstantBuffer(CS, &constantBuffers[CBTYPE_POSTPROCESS], CB_GETBINDSLOT(PostProcessCB), cmd); @@ -9239,7 +9242,8 @@ void Postprocess_MotionBlur( const Texture& velocity, const Texture& lineardepth, const Texture& output, - CommandList cmd + CommandList cmd, + float strength ) { GraphicsDevice* device = GetDevice(); @@ -9302,6 +9306,7 @@ void Postprocess_MotionBlur( cb.xPPResolution.y = desc.Height; cb.xPPResolution_rcp.x = 1.0f / cb.xPPResolution.x; cb.xPPResolution_rcp.y = 1.0f / cb.xPPResolution.y; + cb.motionblur_strength = strength; device->UpdateBuffer(&constantBuffers[CBTYPE_POSTPROCESS], &cb, cmd); device->BindConstantBuffer(CS, &constantBuffers[CBTYPE_POSTPROCESS], CB_GETBINDSLOT(PostProcessCB), cmd); diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index c007648f8..390f34c6b 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -231,7 +231,9 @@ namespace wiRenderer const wiGraphics::Texture& lineardepth, wiGraphics::CommandList cmd, float focus = 10.0f, - float scale = 1.0f + float scale = 1.0f, + float aspect = 1.0f, + float max_coc = 18.0f ); void Postprocess_Outline( const wiGraphics::Texture& input, @@ -246,7 +248,8 @@ namespace wiRenderer const wiGraphics::Texture& velocity, const wiGraphics::Texture& lineardepth, const wiGraphics::Texture& output, - wiGraphics::CommandList cmd + wiGraphics::CommandList cmd, + float strength = 100.0f ); void Postprocess_Bloom( const wiGraphics::Texture& input, diff --git a/WickedEngine/wiVersion.cpp b/WickedEngine/wiVersion.cpp index 50f4ba7be..0ee6c9808 100644 --- a/WickedEngine/wiVersion.cpp +++ b/WickedEngine/wiVersion.cpp @@ -9,7 +9,7 @@ namespace wiVersion // minor features, major updates const int minor = 36; // minor bug fixes, alterations, refactors, updates - const int revision = 36; + const int revision = 37; long GetVersion()