お世話になっております。
WinterCrownWORKSの梶井です。
PostProcessでαを使わない場合の調整の調整になります。(Bloomの後の書き込み次第ではα使ってても大丈夫かも知れませんが)
まず、半透明縮小バッファの流れなのですが、
縮小バッファを使った場合SeparateTranslucency用のバッファが作成されTranslucencyやDisolveの後、BokehDofRecombineにてSeparateTranslucencyがUpScaleされてシーンにマージされます。
このマージ結果の格納先がRGBAFloat(R16G16B16A16)の64bitFormatになっており、RecombineとそのあとのBloomの一発目のDownSampleがそこそこに重い状態になります。
今回のネタはこのRecombineのバッファ変更になります。
この格納先のバッファは実はRecombine用に独立しているので、実はフォーマットが変更可能です。
Engine\Source\Runtime\Renderer\Private\PostProcess\PostProcessBokehDOFRecombine.cppにて
FPooledRenderTargetDesc FRCPassPostProcessBokehDOFRecombine::ComputeOutputDesc(EPassOutputId InPassOutputId) const
{
FPooledRenderTargetDesc Ret = GetInput(ePId_Input0)->GetOutput()->RenderTargetDesc;
Ret.Reset();
Ret.TargetableFlags &= ~(TexCreate_RenderTargetable | TexCreate_UAV);
Ret.TargetableFlags |= bIsComputePass ? TexCreate_UAV : TexCreate_RenderTargetable;
//--------------yuu_kajii@winter-crown-works.com------------//
#if 1
Ret.Format = PF_FloatR11G11B10;
#else
#endif
//----------------------------------------------------------//
Ret.AutoWritable = false;
Ret.DebugName = TEXT(“BokehDOFRecombine”);
Ret.Flags |= GFastVRamConfig.BokehDOF;
return Ret;
}
このような形にしてフォーマットをRGBFloat(R11G11B10Float)の32bitFormatにすることによって、高速化を行いました。
GPUが弱いハードウェアほど効果があった次第です。
こちらちょっとした高速化ネタになりますが、参考になればと思います。
今回コードがただ変更をしてしまいましたが、ポストプロセス側でαを持つのかどうかコンソール変数から分かるはずなので、そちらで切り替えるように実装するのが良いかも知れません。
情報共有ネタなのでクローズします。