Skip to content
This repository was archived by the owner on Nov 30, 2020. It is now read-only.

Commit 9ac4dfd

Browse files
committed
Fix bloom
- Final render target was being released too early - Final render target was being assigned to the wrong value when the iteration count was 1
1 parent a9aa22e commit 9ac4dfd

File tree

3 files changed

+16
-9
lines changed

3 files changed

+16
-9
lines changed

PostProcessing/Runtime/Effects/Bloom.cs

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public override void Render(PostProcessRenderContext context)
120120
int qualityOffset = settings.mobileOptimized ? 1 : 0;
121121

122122
// Downsample
123-
var last = context.source;
123+
var lastDown = context.source;
124124
for (int i = 0; i < iterations; i++)
125125
{
126126
int mipDown = m_Pyramid[i].down;
@@ -131,22 +131,22 @@ public override void Render(PostProcessRenderContext context)
131131

132132
cmd.GetTemporaryRT(mipDown, tw, th, 0, FilterMode.Bilinear, context.sourceFormat);
133133
cmd.GetTemporaryRT(mipUp, tw, th, 0, FilterMode.Bilinear, context.sourceFormat);
134-
cmd.BlitFullscreenTriangle(last, mipDown, sheet, pass);
134+
cmd.BlitFullscreenTriangle(lastDown, mipDown, sheet, pass);
135135

136-
last = mipDown;
136+
lastDown = mipDown;
137137
tw = Mathf.Max(tw / 2, 1);
138138
th = Mathf.Max(th / 2, 1);
139139
}
140140

141141
// Upsample
142-
last = m_Pyramid[iterations - 1].down;
142+
int lastUp = m_Pyramid[iterations - 1].down;
143143
for (int i = iterations - 2; i >= 0; i--)
144144
{
145145
int mipDown = m_Pyramid[i].down;
146146
int mipUp = m_Pyramid[i].up;
147147
cmd.SetGlobalTexture(ShaderIDs.BloomTex, mipDown);
148-
cmd.BlitFullscreenTriangle(last, mipUp, sheet, (int)Pass.UpsampleTent + qualityOffset);
149-
last = mipUp;
148+
cmd.BlitFullscreenTriangle(lastUp, mipUp, sheet, (int)Pass.UpsampleTent + qualityOffset);
149+
lastUp = mipUp;
150150
}
151151

152152
var linearColor = settings.color.value.linear;
@@ -193,16 +193,20 @@ public override void Render(PostProcessRenderContext context)
193193
uberSheet.properties.SetVector(ShaderIDs.Bloom_Settings, shaderSettings);
194194
uberSheet.properties.SetColor(ShaderIDs.Bloom_Color, linearColor);
195195
uberSheet.properties.SetTexture(ShaderIDs.Bloom_DirtTex, dirtTexture);
196-
cmd.SetGlobalTexture(ShaderIDs.BloomTex, m_Pyramid[0].up);
196+
cmd.SetGlobalTexture(ShaderIDs.BloomTex, lastUp);
197197

198198
// Cleanup
199199
for (int i = 0; i < iterations; i++)
200200
{
201-
cmd.ReleaseTemporaryRT(m_Pyramid[i].down);
202-
cmd.ReleaseTemporaryRT(m_Pyramid[i].up);
201+
if (m_Pyramid[i].down != lastUp)
202+
cmd.ReleaseTemporaryRT(m_Pyramid[i].down);
203+
if (m_Pyramid[i].up != lastUp)
204+
cmd.ReleaseTemporaryRT(m_Pyramid[i].up);
203205
}
204206

205207
cmd.EndSample("BloomPyramid");
208+
209+
context.bloomTemporaryRT = lastUp;
206210
}
207211
}
208212
}

PostProcessing/Runtime/PostProcessLayer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -766,6 +766,7 @@ int RenderBuiltins(PostProcessRenderContext context, bool isFinalPass, int relea
766766
uberSheet.properties.Clear();
767767
context.uberSheet = uberSheet;
768768
context.autoExposureTexture = RuntimeUtilities.whiteTexture;
769+
context.bloomTemporaryRT = -1;
769770

770771
var cmd = context.command;
771772
cmd.BeginSample("BuiltinStack");
@@ -829,6 +830,7 @@ int RenderBuiltins(PostProcessRenderContext context, bool isFinalPass, int relea
829830
if (releaseTargetAfterUse > -1) cmd.ReleaseTemporaryRT(releaseTargetAfterUse);
830831
if (motionBlurTarget > -1) cmd.ReleaseTemporaryRT(motionBlurTarget);
831832
if (depthOfFieldTarget > -1) cmd.ReleaseTemporaryRT(motionBlurTarget);
833+
if (context.bloomTemporaryRT > -1) cmd.ReleaseTemporaryRT(context.bloomTemporaryRT);
832834

833835
cmd.EndSample("BuiltinStack");
834836

PostProcessing/Runtime/PostProcessRenderContext.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,5 +171,6 @@ public void PushDebugOverlay(CommandBuffer cmd, RenderTargetIdentifier source, P
171171
internal LogHistogram logHistogram;
172172
internal Texture logLut;
173173
internal AutoExposure autoExposure;
174+
internal int bloomTemporaryRT;
174175
}
175176
}

0 commit comments

Comments
 (0)