狠狠撸

狠狠撸Share a Scribd company logo
SM3.0で草を生やす
土井 英範
mewlist
自己紹介
? 土井英範
? 株式会社 Aiming
? リードソフトウェアエンジニア/ マネージャ
? 二児の父
? クラサバを行ったり来たり
インディーゲーム作ろ
う
? インディーゲームらしさ
? 簡単な作業?計算で豊富なリソース
? あっ…プロシージャル
? (紆余曲折)
? 草
Massive Grass
草を大量に生やす
ゴール
? Unity 標準の Terrain の起伏に沿って生やす
? 5Km四方の平面に草をみっちり生やす
? 50m四方あたり 6000 本 = 6000万本生やす
? 草一本あたり3頂点 → 1億8000万頂点
? iPhone7 で 30 fps を安定して生やす
できないこと
? target 4.0 以降であれば、ジオメトリシェーダに
よる頂点の生成ができる
? Metal は taget 3.5 が限界
#pragma target 4.0
DX11 shader model 4.0.
Not supported on DX9, DX11 9.x (WinPhone), OpenGL ES 2.0/3.0/3.1, Metal.
Supported on DX11+, OpenGL 3.2+, OpenGL ES 3.1+AEP, Vulkan, PS4/XB1 consoles.
Has geometry shaders and everything that es3.0 target has.
草の配置ルール
? ハルトン数列
? コンピュータと親和性が高い
擬似乱数生成アルゴリズム
? 均等なばらつきを得られる
? 図は擬似乱数とハルトン数列
の比較
wikipediaより
そのまま実装
var mesh = new Mesh();
mesh.vertices = …;
mesh.triangles = …;
Terrain 全面に生やす
Mesh.vertices is too large.
A mesh may not have more than 65000 vertices.
メッシュ分割
? ThatGameCompanyのフォー
ラムにてグリッドに関するヒ
ントがあった
? 平面をグリッドに分ける
? 頂点数がそこそこのメッシュ
をグリッドに配置することに
? ハルトン数列は均等なので
グリッドの継ぎ目も気になら
ない
Terrain 全面に生やす
一桁 FPS
計算量
? 6000本の草を 50m四方のグリッド毎に 5km 四
方の平面全面に生やす
? 6000 x 100 x 100 = 6000万ループ
? 各ループにて Terrain の高さ、法線を取得
? 10,000 個の GameObject
ボトルネック
? 10,000 個の GameObject があるだけで Unity は
重たくなる
? ポリゴン数がどうのこうの以前の問題
生成範囲を絞る
? カメラを中心に1.5km四方のグ
リッドのみゲームオブジェク
ト(Mesh + MeshRenderer)を
生成
計算量
? 50m四方のグリッドで1.5km 四方の平面を埋め
る
? 30 x 30 = 900 GameObject
? 900 * 6000 = 540万 Tris
動的メッシュ生成
? カメラが移動したときに新しく描画範囲に入っ
たグリッドに対してメッシュを作る
? メッシュを格納するゲームオブジェクトはリソ
ースプーリングを行い使いまわす
10 FPS
ベンチマーク
? iPhone7 は 2000万Tris/秒 くらいまでは余裕で表示できる
? 1フレームあたり 2000万/30fps ≒ 60万 Tris まで最適化しな
ければまともに動かない
? 現在 540万 Tris
? フラスタムカリングによって 1/3 まで描画は抑えられると
しても、180万 Tris
? 1/3倍くらいまでポリゴンを減らさないといけない
1/3 に密度を減らす
スッカスカ
LOD
? LODでごまかす
? カメラに近いグリッドは高い密度のメッシュ
? カメラから遠いグリッドは低い密度のメッシュ
? LOD Group を使う
一桁 FPS(退化)
計算量
? LOD レベルを4段階とすると 1Grid あたり
? 6000 + 3000 + 1500 + 750 = 11,250 Tris
? ゲームオブジェクトは LOD Group + Mesh x4 で 5倍
? 900 x 5 = 4,500 GameObject
? GameObject が多すぎる
生成コストが倍になっている
? 一般的な最適化手法が通用せず脳内に草生える wwww
自作LOD
? 複数メッシュの切り替えではなくて、合成
? GameObject は増やさない
? 頂点生成時のカクツキを抑える
メッシュ分割 + 合成
? ハルトン数列の index 範囲毎にメッシュを分割
? Mesh1 HaltonSequence(i = 0…1000)
? Mesh2 HaltonSequence(i = 1000…2000)
? …
? メッシュを合成して表示 (一般的なLOD level とは逆)
? LOD lv1 Mesh1
? LOD lv2 Mesh1 + Mesh2
? …
合成メッシュ描画
? GameObject 一つに対して 複数の Mesh
? MeshRenderer は複数 Mesh 描画できない
? Graphics.DrawMesh を直接複数回呼ぶ
頂点生成のスレッド化
? 各分割Meshは必要とされるまで生成されない
? 近づくにつれて Mesh を生成して足していく
? 各分割Meshの生成をスレッド化
? 頂点生成時 Terrain の高さ?法線データ読み取り
、頂点配列の生成といった CPU 側処理が多いた
め効果が高かった
30FPS
LOD の切替わり
まるわかり
欲がでる
? LOD 切り替わりがバレるのはよくあること
? AAAタイトルでもバレバレ
? 一応 Flowery もう一度プレイしてみるかー
LOD の切り替わりが
わからない…!?
シームレスLOD
? Terrain → 地面が必ず存在する
? 遮蔽された地面より下でメッシュを生成
? 距離に応じで高さを上げて徐々に密度が上がる
ようにする
ご清聴
ありがとうございました
参考文献
? https://en.wikipedia.org/wiki/Halton_sequence
? http://www.thatgamecompany.com/forum/viewtop
ic.php?t=2296
DEMO

More Related Content

More from Hidenori Doi (6)

错视尝辞诲
错视尝辞诲错视尝辞诲
错视尝辞诲
Hidenori Doi
?
机の高さ
机の高さ机の高さ
机の高さ
Hidenori Doi
?
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
Hidenori Doi
?
Aiming飲み会 1-rails における?コネクション数と?シャーテ?ィンク?のお話
Aiming飲み会 1-rails における?コネクション数と?シャーテ?ィンク?のお話Aiming飲み会 1-rails における?コネクション数と?シャーテ?ィンク?のお話
Aiming飲み会 1-rails における?コネクション数と?シャーテ?ィンク?のお話
Hidenori Doi
?
Dependency Injectionとは
Dependency InjectionとはDependency Injectionとは
Dependency Injectionとは
Hidenori Doi
?
IoC とは
IoC とはIoC とは
IoC とは
Hidenori Doi
?
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
エンジニアがデザインやってみた @ Aimning MeetUp 2017/10
Hidenori Doi
?
Aiming飲み会 1-rails における?コネクション数と?シャーテ?ィンク?のお話
Aiming飲み会 1-rails における?コネクション数と?シャーテ?ィンク?のお話Aiming飲み会 1-rails における?コネクション数と?シャーテ?ィンク?のお話
Aiming飲み会 1-rails における?コネクション数と?シャーテ?ィンク?のお話
Hidenori Doi
?
Dependency Injectionとは
Dependency InjectionとはDependency Injectionとは
Dependency Injectionとは
Hidenori Doi
?

Recently uploaded (10)

量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
suzukiyu1
?
20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf
Ayachika Kitazaki
?
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト运営事务局
?
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
Toyo University
?
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
MaiKaneko4
?
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
?
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ssuserfcafd1
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
生成AIとビジネス戦略 正しく恐れ正しく活用するために 東海国立大学機構技術発表会 & 岐阜地域産学官連携交流会 2025 講演資料
suzukiyu1
?
20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf20250327_IoTLT_vol121_______________.pdf
20250327_IoTLT_vol121_______________.pdf
Ayachika Kitazaki
?
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
学会発表资料(2025/3/3):尝尝惭を利用した厂狈厂の投稿内容のインタラクティブマップ表示
Toyo University
?
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
闯补厂厂罢2025-顿5-1开発者手动の自动テスト导入によるバグ早期発见.辫诲蹿
MaiKaneko4
?
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
NTT DATA Technology & Innovation
?
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
【STech I USA】2025.3.21 MWC 2025フィードバック ~通信が作る未来のトレンド~(2025.3.21)
Sojitz Tech-Innovation USA
?
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ダイアグラム思考冲驰耻尘别尘颈.驳谤辞飞冲読书シェア会2025冲3冲26.辫辫迟虫
ssuserfcafd1
?

Shader Model 3で草を生やす