Stochastic Tri-Planar
今回紹介するStochastic Tri-Planarとは、一つのTexture SampleでTri-Planner Mappingを行う手法です。
以下の動画とCGWorldのFORSPOKENの記事、Omoriさんのツイートによって助けられました。動画ではStochastic Tri-Planarの他に、複数の画像を一つのTexture Sampleでマッピングする手法も解説してますので、ぜひご覧ください。
https://cgworld.jp/article/202302-forspoken-e.html
通常のTri-Planner Mapping
Unreal Engine には World Aligned Texture というマテリアルファンクションが用意されており、Texture Objectを接続するだけで簡単にTri-Planner mappingが行えます。
この World Aligned Texture ですが、おおよそ下の画像のような仕組みになっています。実際のマテリアルファンクションはもう少し複雑ですが、説明のために少し機能を省き簡略化しました。
この手法の欠点は、3方向からマッピングを行い合成しているので、Texture Sampling を3回使用していることです。PBRのマテリアルで使用する場合はBaseColorだけでなく、Normalと、Packしたデータも使用するため、これだけで9回のTexture Samplingを使ってしまいます。
Texture Samplingはマテリアルの中でも描画不可が大きいので、できれば使いたくない方法です。
UVの時点で視点をブレンドして、サンプリングを一回で行う
そこで考えられるのが、UVを生成したあとの画像を合成するのではなく、UVの時点でいい感じに複数の視点を合成して、そのUVで一回だけマッピングする方法です。しかしUVの合成というのは画像のように単純にLarpで合成する事ができません。
ぼくも数年前から何度か試してみたのですが、UVをうまくブレンドできず使えるものにはなりませんでした。
ディザテンポラルAAを用いたUVのブレンド
この手法では視点の切り替わるマスクにディザテンポラルAAでノイズをかけることでUV同士のブレンドを自然に行っています。
また、Texture Sampler の設定は、Derivative (explicit derivative to compute mip level)にしている。DDX、DDYは隣り合ったピクセルまでの長さを調べる値で、ミップマップに関連するパラメーターです。
殆どの場合は、あえて設定する必要はないのですが、今回のようなワールド空間から生成したUVの場合、壊れてしまっているので、適当なUVから作っておく必要があります。
※ このあたりのことは自分も詳しくないので間違いがあれば教えてください
ひとつの Texture Sampler で Tri-Planner を実現できた。
軽量化に役立ちそう。
この記事が気に入ったらサポートをしてみませんか?