-
はじめに
- ゲームにおけるアウトラインレンダリングは、視覚的な理由やゲームプレイの補助として頻繁に使用される。たとえばゲーム『Sable』ではコミックブック風のスタイルを作るために使われ、『The Last of Us』では敵を強調表示するために使用される。
-
リム効果
-
手法
- フレネル効果を使用して、オブジェクトの外周にアウトラインをレンダリングできる。オブジェクトの端ほど効果が強くなる。
-
実装
- フレネル効果を実装したカスタムシェーダを使ってオブジェクトにアウトラインをレンダリングする。球体やカプセルのような滑らかなオブジェクトに適しているが、キューブのようなシャープなオブジェクトには適していない。
-
頂点押し出し
-
手法
- 元のオブジェクトの複製を使用してアウトラインを形成する。複製したメッシュの頂点を拡張して、元より大きくする。
-
押し出し方向
- 頂点を移動させる方向を選択してオブジェクトのサイズを調整する。オブジェクト空間で頂点を移動させてアウトラインを形成する。
-
押し出し空間
- 頂点をオブジェクト空間で移動する方法と、クリップ空間で移動する方法がある。クリップ空間での移動は一様なアウトラインを提供する。
-
マスキング
- 複製したメッシュの前面を削除して、アウトラインのみを表示する。
-
ブラーバッファ
-
手法
- オブジェクトのシルエットをバッファにレンダリングし、これをぼかしてアウトラインを形成する。
-
シルエットバッファ
- オブジェクトを単色でレンダリングしてシルエットバッファを作成する。
-
ブラーパス
- シルエットバッファを拡張するためにブラー処理を行う。ボックスブラーやガウシアンブラーを使用してパフォーマンスを向上させる。
-
アウトラインパス
- ブラー処理したシルエットを元のシーンと合成してアウトラインを形成する。
-
ジャンプフラッドアルゴリズム
- ジャンプフラッドアルゴリズムを使用してアウトラインをレンダリングする。広いアウトラインを低いパフォーマンスコストでレンダリングできる。
-
エッジ検出
-
手法
- フルスクリーンパスを使用して、シーンの不連続性を検出しアウトラインをレンダリングする。
-
不連続性の検出
- Roberts CrossやSobelオペレータを使って不連続性を検出する。
-
不連続性の起源
- 深度、法線、色テクスチャで不連続性を検出してアウトラインを形成する。
-
エッジ検出の調整
- 不連続性検出に使用される閾値を調整してアーティファクトを除去する。
-
カスタム不連続性の起源
- カスタムの不連続性の起源を提供してアウトラインを制御できる。
-
結論
- 外周線を描く5つの方法があり、パフォーマンス、視覚的忠実度、手動設定のトレードオフを提供する。
1件のコメント
Hacker Newsのコメント
Jump Flood Algorithmに関する記事をとても興味深く読んだ。ピクセル単位でさまざまなアプローチを考えるのが楽しい
モデルを単色でレンダリングした後、エッジ検出でアウトラインを得る方法を提案する。追加のレンダーパスが必要
スタイル化された3Dグラフィックスに関するR&Dプロジェクトに興味がある。いくつか未解決の疑問が残っている
Astral Divideゲームで、ぼかしバッファに似た技術を開発した。アンチエイリアシングを使って輪郭を作る。パフォーマンスが低コストで実装もシンプル
テクニカルアートに情熱があり、Godotのコンピュートシェーダーパイプラインの改善を期待している。現在のコンポーザープラグイン設定は少し複雑
Unityの価格騒動の後、開発者がUnrealとGodotに移ったのか気になる
VRアプリ開発からWeb開発へ移ったが、3Dグラフィック、衝突、シェーダー作業の“魔法のような”感覚が恋しい
エッジ検出レンダリングの結果はとても満足できる。オランダのコミック『Franka』の1シーンのように見える
Mars First Logisticsの開発者が提案したエッジ検出手法についての素晴らしいノートを見つけた
アウトラインを描くシンプルな技術を提案