Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

2/82

Slide 3

Slide 3 text

本発表の内容 3/82 • Cyllista Game Engine の機能紹介 – オープンワールドに対応したゲームエンジンの事例として • テレイン関連のツールと描画機能 • フォリッジ関連のツールと描画機能 • アジェンダ 1. Cyllista Game Engine 2. オープンワールドゲーム制作における要求 3. テレインシステム 4. フォリッジシステム

Slide 4

Slide 4 text

Cyllista Game Engine 4/82

Slide 5

Slide 5 text

Cyllista Game Engine 5/82 • Cygames 内製で開発しているゲームエンジン – PC, ハイエンドコンソール向けに開発中 – Project Awakeningで利用 • エンジン目標 – 制作者が最大のパフォーマンスを発揮できる – ハードウェアが最大のパフォーマンスを発揮できる • 過去のCEDEC講演 – Cygamesにおける次世代ハイエンドコンソール向けゲームエンジンの開発 [TAG17] – Python による大規模ゲーム開発環境 [OKI20]

Slide 6

Slide 6 text

オープンワールドゲーム 制作における要求 6/82

Slide 7

Slide 7 text

オープンワールドゲーム制作における要求 7/82 • 制作効率 – 広大なレベルをカバーするテレインの効率的な編集 • 昨今はタイトルにより 4km ~ 32km もの広さ – 一度に大量のフォリッジ配置 • レベルのほとんどの地域で植生が必要 – 高速イテレーション • レベル作成の試行錯誤 • リアルタイム反映 – 非破壊ワークフロー • 変更を要素ごとに元に戻すことができる • ある要素の更新が別の要素の自動更新を促す

Slide 8

Slide 8 text

オープンワールドゲーム制作における要求 8/82 • 描画効率 – 広大な地形を効率よく描画 • 近景/遠景ともに – 大量のフォリッジを効率よく描画 • 近景/遠景ともに • ゲーム中の高速な動的更新 – インゲームでのテレイン形状の変更 – インゲームでのフォリッジ配置や状態の変更

Slide 9

Slide 9 text

Terrain System 9/82

Slide 10

Slide 10 text

テレインシステム 10/82 1. データ構成 2. 基本編集ツール 3. テレインレイヤー 4. プロシージャルペイント 5. テレイン描画

Slide 11

Slide 11 text

テレインシステム 11/82 1. データ構成 2. 基本編集ツール 3. テレインレイヤー 4. プロシージャルペイント 5. テレイン描画

Slide 12

Slide 12 text

セクター分割 12/82 • 編集とストリーミングの単位 – セクター毎に地形等の情報を保持 • ハイトマップ • マテリアルIDマップ • フォリッジ密度マップ etc. – ストリーミング • カメラ中心 • 11x11の範囲 128m 128m

Slide 13

Slide 13 text

セクター選択ツール 13/82 他ユーザーが 編集中 自分が編集中 • セクターを選択して編集を開始 – 編集用メモリ確保 – 編集状態マークを表示 • 他のユーザーの編集状態を表示 – ユーザー同士での競合を回避 • その他様々な機能 – 頻繁に編集するセクターのブックマーク – D&Dによるカメラ移動 – 3Dビュー上のグリッド切り替え – LOD情報のクックをトリガー(後述)

Slide 14

Slide 14 text

14/82 ハイトマップ • 解像度 257x257 ( 0.5m / pixel ) • フォーマット – アセット: 32bit EXR – ランタイム: R16_UNORM ハイトマップ ハイトマップを用いたテレイン描画

Slide 15

Slide 15 text

15/82 データ構成:マテリアルIDマップ • マテリアルの ID を格納 • シェーダーで ID からマテリアル配列を参照 • 解像度 257x257 ( 0.5m / pixel ) • 8bit 無圧縮 ( 0 – 255 ) マテリアル描画結果 マテリアルIDマップ マテリアル配列

Slide 16

Slide 16 text

16/82 データ構成:その他 • エコトープマップ – 最も粗いレベルのマテリアル分布分け – 例) 森林地帯、砂漠地帯、湿地帯、雪山 – 解像度 129x129 ( 1.0m / pixel ) – 8bit 無圧縮 ( 0 – 255 ) • 色むらマップ – マテリアルの塗り分けとは別にでも色のムラを出すのに使用 – 解像度 132x132 ( 約 1.0m / pixel ) – BC1 フォーマット

Slide 17

Slide 17 text

テレインLOD 17/82 • Terrain Quadtree [MOOR18][WEMA17][WID12] – テレインのLOD用 • 各種マップの低解像度版を Quadtree 上位ノードが保持 – 2km単位のラージセクター内を Quadtree 化 – セクター選択ツールから、またはナイトリーのジョブで生成 ラージセクター Quadtree 2km 2km

Slide 18

Slide 18 text

テレインLOD 18/82 • Quadtreeは5段階 – セクター (LOD0: 128m) • 近景用 • 基本編集単位 – 中間 (LOD1, 2, 3: 256m, 512m, 1km) • 中景用 • クック時に生成 – ラージセクター(LOD4: 2km) • 最遠景用 • クック時に生成 • 常駐

Slide 19

Slide 19 text

テレインシステム 19/82 1. データ構成 2. 基本編集ツール 3. テレインレイヤー 4. プロシージャルペイント 5. テレイン描画

Slide 20

Slide 20 text

地形編集ツール 20/82 ツールボックス スカルプト マテリアルペイント フォリッジ配置 編集を リアルタイム反映 編集セクターを選択

Slide 21

Slide 21 text

ハイトマップ編集 21/82 • スカルプト機能 –上げ下げ –平坦化 –スムージング –グレースケールマップによる任意形状のブラシ

Slide 22

Slide 22 text

スカルプトのリアルタイム反映 22/82 • 編集中にコリジョン更新 –テレイン、フォリッジ共に • 地面の上のフォリッジ配置にも即座に反映

Slide 23

Slide 23 text

パスツール 23/82 • 道、川を引くツール • ハイト、テレインマテリアルの加工 • デカール配置

Slide 24

Slide 24 text

メッシュスタンプ 24/82 • 任意のメッシュの形状をテレインに転写 • 山岳のスケールから小さな段差のスケールまで利用 • 様々な形状のスタンプ用メッシュを用意

Slide 25

Slide 25 text

テレインシステム 25/82 1. データ構成 2. 基本編集ツール 3. テレインレイヤー 4. プロシージャルペイント 5. テレイン描画

Slide 26

Slide 26 text

テレインレイヤー 26/82 • テレインの任意の範囲(矩形)をレイヤー化 –山岳等の広範囲からのコピーペースト –マテリアルまで含めた移動、複製 –任意の数をスタック可能 –マスクに従ってブレンド

Slide 27

Slide 27 text

テレインレイヤーを移動する動画 27/ xx

Slide 28

Slide 28 text

各種マップのランタイム合成 28/82 ② ベースハイトマップと合成 ① 入力ハイトマップ生成 ③ 点群配置と描画 ランタイム ハイトマップ 入力テクスチャ + トランスフォーム + マスクテクスチャ テレインレイヤー メッシュスタンプ パスツール ベース ハイトマップ アセットを直接 入力として使用 必要なら ベイク パスをメッシュ化して ハイトマップに変換 ハイトマップに変換 必要に応じて フォリッジ点群 再生成 最終結果 セクター

Slide 29

Slide 29 text

テレインシステム 29/82 1. データ構成 2. 基本編集ツール 3. テレインレイヤー 4. プロシージャルペイント 5. テレイン描画

Slide 30

Slide 30 text

マテリアルIDマップ編集 30/82 • ブラシツールで地道にペイント? –手動ペイントだけでは物量的に困難 • 地形が変更されたらやり直し 草マテリアルを塗る 崖マテリアルを塗る 広大なマップを全部手動で塗り分ける? ➡ テレインの形状等に応じて自動でペイント

Slide 31

Slide 31 text

分布 31/82 Cavity Flow Roughness Height Slope • 分布 : 形状をパラメータ化 – 地面の傾き、高さ、凸凹具合、etc… – 2Dグレースケールマップ – Compute Shader で実装

Slide 32

Slide 32 text

ルールとルールセット 32/82 • ルール – 分布 + マテリアル • ルールセット – ルールの集まり – ルールセットに基づいて 自動ペイント

Slide 33

Slide 33 text

ルールセット 33/82 ルールの組み合わせで複雑な結果を得ることが可能 ペイント前 自動ペイント結果 Cavity Slope

Slide 34

Slide 34 text

ルールセット 34/82 • エコトープごとにルールセットを定義 – エコトープマップは手動ペイント • ペイントされていない部分のみを更新 – 手動ペイント部分や確定済みの場所を除外 – 再ペイントしたい領域はブラシ等でクリア ルールセットA ルールセットB

Slide 35

Slide 35 text

※プロシージャルマテリアルの動画 35/ xx

Slide 36

Slide 36 text

テレイン編集フロー 36/82 ①大枠の地形作成 ④地形の詳細作り込み ⑤区画の移動 ②エコトープ作成 利用ツール 作業フロー ③大枠のマテリアル割当 ハイトマップインポータ メッシュスタンプ テレインレイヤー ペイントツール プロシージャルペイント スカルプトツール ペイントツール メッシュスタンプ パスツール テレインレイヤー

Slide 37

Slide 37 text

テレインシステム 37/82 1. データ構成 2. 基本編集ツール 3. テレインレイヤー 4. プロシージャルペイント 5. テレイン描画

Slide 38

Slide 38 text

Terrain Quadtree 描画 38/82 • Terrain Quadtree 描画 – Quadtree各段階に対応するサイズのメッシュを描画 – ロード状態と距離に応じてLODレベルを決定 – フラスタムカリングして描画

Slide 39

Slide 39 text

③カリング判定 ①レベルNの ノードが対象 Terrain Quadtree 描画 39/82 • 表示するノードレベルの判定 – 子のロード状況に応じて自身のカリング状態を決定 – 子ノードに対して再帰的に判定 – スモールセクター(LOD=0)はそれ以上分割されない ②ロード状況チェック 子ノードが すべてロード済み 子ノードが 一部ロード済み 子ノードが未ロード レベルN全体をカリング 4分割し、子がロードされて いる部分をカリング 分割せずそのまま表示 N ④N-1を 同様に処理 N-1

Slide 40

Slide 40 text

マテリアルブレンディング 40/82 • 上下方向の投影のみでは斜面のテクスチャが伸びる – 傾斜が急になるほど顕著 – 改善するには、横方向からの投影も必要

Slide 41

Slide 41 text

マテリアルブレンディング 41/82 • Triplanar Mapping [GOL17] – 伸び防止のためXYZ軸の3方向から投影 – 各軸の角度とサーフェス法線の角度を 重みとしてブレンド

Slide 42

Slide 42 text

マテリアルブレンディング 42/82 • ブレンド処理の処理負荷が高い – Albedo + NRO = 2テクスチャ • NRO = Normal/Roughness/Occlusion をパックしたテクスチャ – 4つの各頂点のリニア補間 = 4ブレンド • 頂点ごとに1マテリアル – Triplanar Mapping = 3ブレンド • 崖等のテクスチャ伸び防止 – 近景と遠景でタイリング数が異なる = 2ブレンド • リピート感軽減のために遠景はUVリピート数を減らす ➡ ピクセル当たり合計 2 * 4 * 3 * 2 = 48 サンプル

Slide 43

Slide 43 text

マテリアルブレンディング 43/82 • Triplanar Mapping – 伸び防止のためXYZ軸の3方向から投影 – 各軸の角度とサーフェス法線の角度を 重みとしてブレンド • Biplanar Mapping [QUI20] – 3軸のうち、ウェイトの高い2軸を 採用してブレンド – ブレンド数を3→2に削減 – Triplanar Mapping と遜色ない結果

Slide 44

Slide 44 text

マテリアルブレンディング 44/82 • Biplanar Mapping

Slide 45

Slide 45 text

マテリアルブレンディング 45/82 • Stochastic Sampling [MOOR18][WYMC17] – 1ピクセルにつき最大4マテリアルのブレンド ➡ ウェイトに従って確率的に1マテリアル選択 – Biplanar Mapping ➡ ウェイトに従って確率的に投影方向を選択

Slide 46

Slide 46 text

マテリアルブレンディング 46/82 • Biplanar + Stochastic + α – 近景(30mまで) • Biplanar Mapping – 2 * 4 * 2 * 2 = 32サンプル • XYZいずれかに垂直に近い面は その軸方向からのマッピングのみ – 2 * 4 * 1 * 2 = 16サンプル • 同一マテリアルの削減 – 2 * n * 1 * 2 = 4*nサンプル » n は 1 から 4 – 遠景 • 確率的に1つのマテリアルを選択 • 確率的に1つの投影方向を選択(Uniplanar) • 2 * 1 * 1 * 2 = 4サンプル

Slide 47

Slide 47 text

Foliage System 47/82

Slide 48

Slide 48 text

フォリッジシステム 48/82 1. プロシージャルフォリッジ配置 2. 点群生成とカリング 3. 頂点吸着 4. フォリッジレイヤの依存関係 5. 遠景フォリッジ 6. 他システムへの情報提供

Slide 49

Slide 49 text

フォリッジシステム 49/82 1. プロシージャルフォリッジ配置 2. 点群生成とカリング 3. 頂点吸着 4. フォリッジレイヤの依存関係 5. 遠景フォリッジ 6. 他システムへの情報提供

Slide 50

Slide 50 text

フォリッジ配置:要件 50/82 • 広大なワールドに効率的にフォリッジを配置したい • 大半のエリアでは自動配置したい • 作り込みたいエリアは手動配置したい • テレインの編集をフォリッジ配置に反映したい • ゲームプレイ中の動的変更を可能としたい 画像差し替え予定

Slide 51

Slide 51 text

プロシージャルフォリッジ配置 51/82 • 特徴 – GPUで配置 – ゲーム実行時にリアルタイム配置 – ルールで自動配置 • 配置のためのデータ – フォリッジマップ:密度、エコトープ – 地形マップ:ハイト、ノーマル、マテリアル – モデル:植生や石など任意のモデル – 配置ルールとパラメーター • フォリッジレイヤー – モデルと配置パラメーターのセット • フォリッジプリセット – フォリッジレイヤーの集合

Slide 52

Slide 52 text

配置用マップ 52/82 • 密度マップ – フォリッジ点群の配置密度を保持 – ペイントツールで手動編集 – プロシージャルペイントにも対応 – 4枚利用可能 • エコトープマップ – 大まかな景観の種類と範囲を表現 • 森林、砂漠、雪山、etc. • サブエコトープマップ – エコトープ内のバリエーション表現 • マテリアルIDマップ – テレインマテリアルIDを保持

Slide 53

Slide 53 text

配置用パラメータ 53/82 • 配置パラメータ – 配置間隔 – ランダムスケールと回転範囲 – 配置するテレインの高度と傾斜範囲 – 密度マップインデックス – 配置されるテレインマテリアル – 配置されるサブエコトープ …etc.

Slide 54

Slide 54 text

フォリッジ手動配置動画 54/ xx

Slide 55

Slide 55 text

密度マップのノイズペイント 55/82 • 各種パラメータを指定してペイント – サイズ – イテレーション数 – ゲイン – ディストーション …etc. • 複数のノイズを合成して作成

Slide 56

Slide 56 text

密度マップのノイズペイント 56/82 • セルノイズ(ボロノイ) – グリッドセルにランダムにポイントをランダム配置 – 各テクセルからポイントに対する距離フィールドを作成 – UVにディストーションを適用 – 閾値を指定して2値化 格子毎にポイント配置 距離フィールド化 ディストーション適用 2値化

Slide 57

Slide 57 text

テレインレイヤーと密度マップ 57/82 • テレインレイヤーに密度マップも保持 – フォリッジもまとめてコピーペースト・移動が可能 – 小規模~大規模な範囲まで有用

Slide 58

Slide 58 text

58/ xx 密度マップまで含めたテレインレイヤーの移動動画

Slide 59

Slide 59 text

フォリッジシステム 59/82 1. プロシージャルフォリッジ配置 2. 点群生成とカリング 3. 頂点吸着 4. フォリッジレイヤの依存関係 5. 遠景フォリッジ 6. 他システムへの情報提供

Slide 60

Slide 60 text

点群パターン 60/82 • 密度マップを点群に変換 – ランダムでなく Deterministic な配置 – 密度に関わらず偏りのない一様な分布 • 配置パターン – 事前生成した固定の配置パターン – 各点が2D座標と密度閾値(0~1)を保持 – 密度値が閾値を超える点を残す – セクターにタイリング – 配置間隔でパターンをスケール

Slide 61

Slide 61 text

点群生成 61/82 セクター カリング 点群生成 &ソート 点群 カリング 描画 描画フェーズ 点群生成フェーズ ビューフラスタム セクター 配置点群 1. ビューフラスタム内に存在するセクターを特定 2. 点群を生成してソート • 可視性が変わったセクターのみ生成し直し 3. 点単位にカリングして描画 参考資料 [MUI17]

Slide 62

Slide 62 text

点群ソート 62/82 • 点群生成はGPUで並列実行されるため結果は順不同 – フォリッジレイヤー単位でソートが必要 • カリングと描画がフォリッジレイヤー単位のため – 場合によってはセクター単位のソートも必要 • セクター単位でリードバックする必要があるレイヤー(コリジョンありの点群) • セクター単位で別マップにラスタライズ描画するレイヤー(ブッシュマップ) • ソートキー 1. フォリッジレイヤーインデックス(0~255、256種のフォリッジ) 2. アクティブセクターインデックス(0~120、11*11のロード済みセクター) • 2つのキーを1つに統合してソート • GPU Radix Sort [HAHO11] – ソートする値の範囲が限定されている場合に実用的

Slide 63

Slide 63 text

フォリッジシステム 63/82 1. プロシージャルフォリッジ配置 2. 点群生成とカリング 3. 頂点吸着 4. フォリッジレイヤの依存関係 5. 遠景フォリッジ 6. 他システムへの情報提供

Slide 64

Slide 64 text

頂点吸着 64/82 • 地面付近の頂点を地面までオフセット – 頂点シェーダでハイトマップを参照 • コリジョンは未対応 – コリジョンのあるメッシュは、ズレが目立たない範囲で利用 – 大きな木の根は、ハイトマップ側のコリジョン変形を検討中

Slide 65

Slide 65 text

フォリッジシステム 65/82 1. プロシージャルフォリッジ配置 2. 点群生成とカリング 3. 頂点吸着 4. フォリッジレイヤの依存関係 5. 遠景フォリッジ 6. 他システムへの情報提供

Slide 66

Slide 66 text

フォリッジレイヤの依存関係 66/82 • 例)高木の周り10m以内だけ低木を植えたい – レイヤー間に依存関係を持つ – 依存される側(高木)の点群を Dependency Map にラスタライズ – 依存する側のレイヤー(低木)は Dependency Map を参照 Dependency Map フィルタ後 フィルタ前

Slide 67

Slide 67 text

フォリッジシステム 67/82 1. プロシージャルフォリッジ配置 2. 点群生成とカリング 3. 頂点吸着 4. フォリッジレイヤの依存関係 5. 遠景フォリッジ 6. 他システムへの情報提供

Slide 68

Slide 68 text

遠景フォリッジ 68/82 • アクティブセクター範囲外ではフォリッジ配置データがない – 必要なマップがロードされていない → 点群を配置できない • レジデントマップ – 全セクター分割マップを一枚にマージ – 解像度はセクター単位マップの1/4 – ストリーミングなし、メモリに常駐 – Jenkins で毎日自動生成

Slide 69

Slide 69 text

フォリッジインポスター 69/82 • エンジン内のツールでインポスターテクスチャ生成 – アルベド、ノーマル、ラフネス、オクルージョン、透過色、厚み • Octahedral Impostors [BRU18] – 上半球の様々な角度からキャプチャ – キャプチャ時のカメラ方向を、八面体展開したUVに対応付け – 描画時は視線ベクトルで同様の計算を行いUVを決定

Slide 70

Slide 70 text

フォリッジシステム 70/82 1. プロシージャルフォリッジ配置 2. 点群生成とカリング 3. 頂点吸着 4. フォリッジレイヤの依存関係 5. 遠景フォリッジ 6. 他システムへの情報提供

Slide 71

Slide 71 text

他システムへの情報提供 71/82 • 点群の座標はゲーム実行時まで不明 • 描画以外の機能へ配置情報を提供 – 例)物理、サウンド、ゲームプレイ – 点群データはビデオメモリに存在 • メインメモリへの転送 (リードバック)が必要

Slide 72

Slide 72 text

情報提供: コリジョン 72/82 • 配置データを物理システムに提供 • コリジョンのあるフォリッジレイヤーはセクターロード時に 必ず点群配置&リードバック • 採集アイテムの配置も類似の仕組みで実現

Slide 73

Slide 73 text

情報提供: ブッシュマップ 73/82 • キャラクターがブッシュの中にいるか知りたい • ブッシュ属性のある点群をブッシュマップにラスタライズ • ハイトフィールドのコリジョンデータに埋め込み

Slide 74

Slide 74 text

情報提供: 点群クエリー 74/82 • 指定した円の内にあるフォリッジ配置点を取得 • サウンドとゲームプレイで活用 • クエリー結果の点数は少量 – リードバックするデータ量を抑えるため

Slide 75

Slide 75 text

機能とデータの関係図 75/82 編集ツール 対象マップ 出力 入力 入出力 ハイトマップインポータ メッシュスタンプ 手動ペイントツール プロシージャルペイント スカルプトツール パスツール テレインレイヤー ハイトマップ マテリアルIDマップ エコトープマップ 色むらマップ 密度マップ サブエコトープマップ テレイン描画システム フォリッジ配置システム コリジョンシステム サウンドシステム ノイズペイント 配置点群 利用システム Dependencyマップ ゲームプレイシステム

Slide 76

Slide 76 text

機能とデータの関係図 76/82 編集ツール 対象マップ 出力 入力 入出力 ハイトマップインポータ メッシュスタンプ 手動ペイントツール プロシージャルペイント スカルプトツール パスツール テレインレイヤー ハイトマップ マテリアルIDマップ エコトープマップ 色むらマップ 密度マップ サブエコトープマップ テレイン描画システム フォリッジ配置システム コリジョンシステム サウンドシステム ノイズペイント 配置点群 利用システム Dependencyマップ ゲームプレイシステム

Slide 77

Slide 77 text

機能とデータの関係図 77/82 編集ツール 対象マップ 出力 入力 入出力 ハイトマップインポータ メッシュスタンプ 手動ペイントツール プロシージャルペイント スカルプトツール パスツール テレインレイヤー ハイトマップ マテリアルIDマップ エコトープマップ 色むらマップ 密度マップ サブエコトープマップ テレイン描画システム フォリッジ配置システム コリジョンシステム サウンドシステム ノイズペイント 配置点群 利用システム Dependencyマップ ゲームプレイシステム

Slide 78

Slide 78 text

78/82 まとめ • テレインシステム –広範囲でも高効率に編集できるツールを整備 –テレインレイヤー等で非破壊ワークフローを推進 –マテリアルブレンディングやQuadtreeによるLOD等の最適化 • フォリッジシステム –プロシージャル配置により高効率かつ自然に見える植生分布を実現 –最適化したリアルタイム配置により製作時、ゲーム中の両方で 変更を即時反映

Slide 79

Slide 79 text

79/82 Cyllista Game Engine が掲げる指針に沿った機能開発 • ハードウェアが最大のパフォーマンスを発揮できる – オープンワールド前提の設計 – 継続的な最適化 – ゲームの要求を満たしつつ処理負荷を可能な限り低減 • 開発者が最大のパフォーマンスを発揮できる – ベイクや事前データの準備を極力減らし、ランタイム実行 – 機能の利便性、実行速度、メンテナンスのためのシンプルさを注意深くバランス – 我々のチームにとって最適な機能開発 まとめ

Slide 80

Slide 80 text

80/82 最高のエンジンで最高のゲームを

Slide 81

Slide 81 text

References 81/82 [TAG17] 多胡 順司. Cygamesにおける次世代ハイエンドコンソール向けゲームエンジンの開発 ~最高のコンテンツを支えるゲームエンジン~. CEDEC2017 https://tech.cygames.co.jp/archives/3043/ [OKI20] 沖 幸太朗. Python による大規模ゲーム開発環境 ~Cyllista Game Engine 開発事例~. CEDEC2020 https://tech.cygames.co.jp/archives/3442/ [MOOR18] Jeremy Moore. Terrain Rendering in ’Far Cry 5’. GDC2018 https://www.gdcvault.com/play/1025480/Terrain-Rendering-in-Far-Cry [WEMA17] Guillaume Werle, Benoit Martinez. ‘Ghost Recon Wildlands’: Terrain Tools and Technology. GDC2017 https://www.gdcvault.com/play/1024029/-Ghost-Recon-Wildlands-Terrain [WID12] Mattias Widmark. Terrain in Battlefield 3: A Modern, Complete and Scalable System. GDC2021 https://www.gdcvault.com/play/1015676/Terrain-in-Battlefield-3-A [GOL17] Ben Golus. Normal Mapping for a Triplanar Shader. https://bgolus.medium.com/normal-mapping-for-a-triplanar-shader-10bf39dca05a [QUI20] Inigo Quilez. Biplanar Mapping. https://iquilezles.org/www/articles/biplanar/biplanar.htm [WYMC17] Chris Wyman, Morgan McGuire. Hashed Alpha Testing. I3D2017 https://casual-effects.com/research/Wyman2017Hashed/index.html

Slide 82

Slide 82 text

References 82/82 [HOOK21] JT Hooker. Boots on the Ground: The Terrain of 'Call of Duty’. GDC2021 https://www.gdcvault.com/play/1027463/Advanced-Graphics-Summit-Boots-on [WOH21] Eric Wohllaib. Procedural Grass in 'Ghost of Tsushima. GDC2021 https://www.gdcvault.com/play/1027214/Advanced-Graphics-Summit-Procedural-Grass [MUI17] GPU-based Procedural Placement in Horizon Zero Dawn. GDC2017 https://www.guerrilla-games.com/read/gpu-based-procedural-placement-in-horizon-zero-dawn [HAHO11] Takahiro Harada, Lee Howes. Introduction to GPU Radix Sort. http://www.heterogeneouscompute.org/wordpress/wp-content/uploads/2011/06/RadixSort.pdf [BRU18] Ryan Brucks. Octahedral Impostors. https://shaderbits.com/blog/octahedral-impostors