本日はMRTK3調査枠です。
現在GraphicsToolsを読み解いています。
今回はGraphicsTools/StandardシェーダーのサンプルであるMaterialGalleryサンプルシーンを見ていきます。
〇Stencil Outline
Stencil Outlineはステンシルの機能を使用したアウトライン表現です。
オブジェクトを見ると、2つのマテリアルがアタッチされ例ることがわかります。
実際に見た目上表示されているマテリアルはStencil Outline Strokeになります。
このマテリアルではVertex Extrusionの機能が有効化されています。
これはオブジェクトを法線方向に展開する機能で、この機能によってExtrusion Valueの値に応じてアウトラインの太さが決まります。
Stencilは前回紹介したように切り抜きを意味し、ピクセルごとにフラグメントシェーダーでピクセルを破棄するか、描画するかを決めるステンシルバッファの機能を使用しています。
Stencil Referenceはこのステンシルバッファの比較値であり、2が指定されています。
Stencil Comparisonは比較処理であり、Stencile Oparationがどのように描画するかを示します。
今回の場合ステンシルバッファが2ではない場合ピクセルが維持されます。
またレンダーキューが-1となっており、従来のジオメトリよりわずかに早く描画が行われます。
一方マスク部のStencile Outline Maskマテリアルのレンダーキューは通常通りで先にStencil Outline Strokeが描画処理されそのあとに処理が行われていることがわかります。
こちらもステンシルが有効化されており、Stencile Referenceが2となっています。
ここで1ではなく2が使用されている理由としては同一シーンに1を使用するStencile Portalが存在するからだと思われます。
こちらはAlwaysつまり常に描画されステンシルバッファが等しい場合Replace、置き換えが行われます。
つまり先に描画されているStencil Outline Strokeのピクセルとの置き換えが行われ、ピクセルがなかったことにされ上書きされています。
これによってきれいに3Dモデルの輪郭部のみが描画され、中央部は透明な見た目となっています。
ステンシルに関して深く理解したかったためStencile Portal同様記事のボリュームを割いてみましたが、一つ一つ仕組みを追っていくとだんだん理解できて来た気がします。