Jump to content
  • Advertisement
Sign in to follow this  
Quat

MJP's AutoExposureCS

This topic is 2258 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I'm looking at this sample where the bloom is created:


void PostProcessor::Bloom(ID3D11ShaderResourceView* input, TempRenderTarget*& bloomTarget)
{
// Downscale
TempRenderTarget* bloomSrc = GetTempRenderTarget(inputWidth, inputHeight, DXGI_FORMAT_R11G11B10_FLOAT);
inputs.push_back(input);
inputs.push_back(adaptedLuminance[currLumTarget].SRView);
outputs.push_back(bloomSrc->RTView);
PostProcess(bloomThreshold, L"Bloom Threshold");
TempRenderTarget* downscale1 = GetTempRenderTarget(inputWidth / 2, inputHeight / 2, DXGI_FORMAT_R16G16B16A16_FLOAT);
PostProcess(bloomSrc->SRView, downscale1->RTView, scale, L"Bloom Downscale");
bloomSrc->InUse = false;
TempRenderTarget* downscale2 = GetTempRenderTarget(inputWidth / 4, inputHeight / 4, DXGI_FORMAT_R16G16B16A16_FLOAT);
PostProcess(downscale1->SRView, downscale2->RTView, scale, L"Bloom Downscale");
TempRenderTarget* downscale3 = GetTempRenderTarget(inputWidth / 8, inputHeight / 8, DXGI_FORMAT_R16G16B16A16_FLOAT);
PostProcess(downscale2->SRView, downscale3->RTView, scale, L"Bloom Downscale");


How come the format DXGI_FORMAT_R11G11B10_FLOAT is used for the bright texture, but then the precision is increased to DXGI_FORMAT_R16G16B16A16_FLOAT for the downsampling?

Does the bloom texture even need to be HDR? Since it is added into the final tone mapping pass (whose target is a LDR target), it doesn't seem the HDR will do anything extra.

Share this post


Link to post
Share on other sites
Advertisement
I honestly don't remember why I used that format. It probably won't make much of a difference between R11G11B10 and R16G16B16A16.

Depending on how you implement your bloom effect you might want and HDR target so that you don't clip values at 1.0 before you blur it. This way you retain some of the HDR color information when you blur it, rather than always blurring out to white. But again it depends on how you implement it. Bloom is pretty huge hack anyway, so there's no real "right" way to do it.

Share this post


Link to post
Share on other sites
Cool, I was just wondering if there was something else I was missing.

Another question, after the blur, the sample code does an "upscale"


// Blur it
for (UINT_PTR i = 0; i < 4; ++i)
{
TempRenderTarget* blurTemp = GetTempRenderTarget(inputWidth / 8, inputHeight / 8, DXGI_FORMAT_R16G16B16A16_FLOAT);
PostProcess(downscale3->SRView, blurTemp->RTView, bloomBlurH, L"Horizontal Bloom Blur");
PostProcess(blurTemp->SRView, downscale3->RTView, bloomBlurV, L"Vertical Bloom Blur");
blurTemp->InUse = false;
}
PostProcess(downscale3->SRView, downscale2->RTView, scale, L"Bloom Upscale");
downscale3->InUse = false;
PostProcess(downscale2->SRView, downscale1->RTView, scale, L"Bloom Upscale");
downscale2->InUse = false;
bloomTarget = downscale1;


I don't understand why this is necessary. I did a 1D case on paper:

Upscaling from 2x2->4x4->8x8 using bilinear filtering

and

Upscaling from 2x2->8x8 using bilinear filtering

and I got the same result.

So why upscale? Why not just stretch the blurred downscaled bloom texture over the screen in the final tonemap pass and use the blinear filtering when sampling the bloom texture?

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!