半透明描画とDOF(被写界深度)を両立させる方法について(2014 Advent Calender)

641f1eef14faabf1ec0c55018963f6c48de8c2a2.jpeg
半透明とDOF(被写界深度)は両立できないか?(上図はダメな例)
以前色々試した事があったのでAdvent Calenderとしてまとめてみました。
被写界深度半透明物体共生戦略手法零式(Type-0)](【UE4】被写界深度半透明物体共生戦略手法零式(Type-0) - だらけ者だらけ)

MaterialのDepthOfFieldFunctionを使うか、LOD Particleを使うかの二通りについて検証しましたが、工数の問題から実用的じゃないと考えています。
何か良い案をお持ちの方、もしくはアイディアがある方はぜひぜひご教授お願い致します。

Twitterで@Nao_u_](https://twitter.com/Nao_u_)さんから意見を頂いたので掲載しておきます。(本人承諾済み)
https://twitter.com/Nao_u_/status/547169808584695808

そのまま引用させて頂きます。

確かに!LODの切り替えなんで、パカパカしてしまう問題もありますが、システムに組み込む上ではシンプルで良さそうです。LOD切り替えは、DOFの距離変動との連携を自動でやる方法がわからず僕は断念してしまいましたが、DOFとLODが連携できれば、様々な手法に応用できそうで可能性が広がりそうです。

Nao_u_さん、ありがとうございました!

Separate TranslucencyがOn/Offの物体について

アドバイスを頂いたのでこちらに追記します。

どういうことかというと。。。
↓緑も赤もSeparate TranslucencyがOn。正しい挙動

↓緑のSeparate TranslucencyをOff。赤が前にくる。
dcaccbcec6fa2af1cfc3e4592d16345ce3203381.jpeg

SeparateTranslucencyがOnで描画されたバッファを後に合成するので、前後関係が狂ってしまいます。
aaa.jpg

DoFをかけたいオブジェクトはOffにして。。。かけたくないのはOnにして。。。と設定すると前後関係の破綻が起きてしまう。
ので、、On/Offの物体を同時に使う場合は、使用できるかを検討することが必要と思われます。

この件について何人かの開発者と議論してみたことがありますが、大体意見が近いです。

方策1:
 ゲーム中に被写界深度はほんの少し適用して、半透明マテリアルは基本的にseparate=OFFで統一(被写界深度の影響を受ける)。
 一瞬出るエフェクトが変なボケ方をするのは妥協する形です。

方策2:
 ゲーム中に被写界深度は全く適用せず、半透明マテリアルは基本的にseparate=OFFまたはONで統一。
 最も安全策ですが、画作り面で物足りなさが出るのは妥協する形です。

どちらにしてもカットシーンではある程度コントロールが効くので強く適用するのはアリという意見が一致していました。
separateONとOFFの混在、またカメラからの距離でテクスチャをボカすなどフェイクを織り交ぜてコントロールする感じでしょうか。

フリーカメラになるゲーム中でseparateを混在する形にする場合は、かなり注意深く設定する必要がありそうです。
カメラが回りこまない壁際や地面に配置した半透明オブジェクトだけはseparate=onにするとか。

他の方のご意見も聞きたいです。

ライフルのスコープを覗いた時、敵の気配に集中する時など特定のシチュエーションで被写界深度を強めるゲームが多い印象がありますが、ff15の体験版プレイ動画でもカバーアクション時などに被写界深度が強まっていて、能動的に派手なエフェクトを炊くようなアクションを起こせないタイミングなのでうまくやっているなあと思ったりします。

ユーザインプットを制限できて、カットシーンのような機能を持たせられる場所で、効果的に効かせるということですかね。

難しいのは、そのために半透明マテリアルをどのように設定しておくのが良いかというところでしょうか。
特別なシチュエーションの際にマテリアを切り替えるのは運営面でも実装面でもコストがありそうです。

SeparateTranslucencyを絶対にOffにするという運用ならば問題なさそうですね。