「LostPlanet2 DirectX11 Features」中継視聴メモ
テッセレーションの活用
- ポリゴンの細分割
- DirectX11のテッセレーション
細分割のアルゴリズム
- PN Triangles (N Patch)
- 欠点
- サーフェースの連続性が低い
- 欠点
- Phong Tessellation
- 欠点
- PN Trianglesより曲面の連続性が低い
- 欠点
- Approximating Catmull-Clark
- 欠点
- 専用のデータ構造。データ量
- 欠点
Lost Planet 2での選択→PN Triangles
- PN Trianglesの問題点
- クラック(穴があく)
- デザイン的な問題
- クラック対策
- ジオメトリパッチ用の「ジオメトリ法線」を持つ
- 同一座標の異なる法線を統合する
- ジオメトリパッチ用の「ジオメトリ法線」を持つ
- エッジを検出
- 三角形ごとに、クラックするエッジの情報を3ビットで持つ
- Phong Tessellationへの適用
- エッジ対応に拡張(計算は重いので必要なときのみ)
- その他のクラック
- Tジャンクション
- 長いエッジが丸くなりにくいパラメータを用意し、デザイナがマテリアル単位で調整
- ディスプレースメントマップの作成
- コンテンツパイプライン
- XSI
- ZBrush
- XSI (AltiMappeer)
- コンテンツパイプライン
- ディスプレースメントマップの問題
- クラック
- 同一座標で異なるUVの場合
- 解決策
- マスキングで対応(問題部分はディスプレースメントしない)
- クラック
- ユーザーインターフェースもテッセレーション対応(笑)
まとめ
- DirectX11で標準化
- 現状のHDゲームでの効果は微妙
- 十分にハイポリゴン
- 次世代機に期待
コンピュートシェーダの活用
- Wave Particlesによるインタラクティブな水面表現
- 全体的な波
- ディスプレースメントマップを多重合成
- 細かな波(波紋)
- Wave Particles
- 波を直進する粒子として表現
- 粒子は独立
- ある程度進んだら粒子を分割
- 壁で反射
- 時間とともに強度が減衰して消滅
- Wave Particles
- Lost Planet 2への適用
- 簡易版
- 粒子を分割しない
- 放射状のみ
- 簡易版
- CS実装
- 粒子数は増減
- Append Structured Buffer (ASB)
- UAV
- 要素に構造体が使える
- 発生点 / 進行方向 / 経過時間 / ...
- Appendできる
- 起動: ID3D11DeviceContext::Dispatch
- 更新: ID3D11DeviceContext::DispatchIndirect 粒子数は増減する(CPUは粒子数を読み戻さない)
- 頂点バッファ更新
- Byte Address Buffer (BAB)
- DrawInstancedIndirectを使ってポイントレンダリング
- フィルタをかけてハイトマップを作成
- ハイトマップからディスプレイスメントマップを作成
- 法線(RGB)+ハイト(A)
ソフトボディ
- 巨大ボスの表皮に「よりリアル」な動きをもたせる
- 質点バネモデル(Mass-Spring Model)
delta = x2 - x1;
deltaLength = sqrt(delta * delta);
diff = (deltaLength - restLength) / deltaLength;
x1 -= delta * 0.5f * diff;
x2 += delta * 0.5f * diff;
- バッチにわけて、バッチ単位で並列処理。