狠狠撸

狠狠撸Share a Scribd company logo
Metal で
Tessellation
デモ プロジェクト
?GitHub
https://github.com/mike-neko/MetalTessellation
?macOS 10.12 (Sierra)
?Xcode 8.2.1
バッテリー消費が激しい
Metal
とは
Metal とは?
?グラフィックAPI
? 利用用途:3Dゲーム
?GPGPU
? GPUを利用して計算処理
? 利用用途:画像加工、機械学習
GPUを扱うフレームワーク
Metal 動作環境
iPhone7 / 7+ を買えばOK
A7 (iPhone5S) A8 (iPhone6 TV4) A9 (iPhone6S)
iOS 8 iOS_GPUFamily1_v1 iOS_GPUFamily2_v1
iOS 9 iOS_GPUFamily1_v2 iOS_GPUFamily2_v2 iOS_GPUFamily3_v1
iOS 10 iOS_GPUFamily1_v3 iOS_GPUFamily2_v3 iOS_GPUFamily3_v2
tvOS 9 tvOS_GPUFamily1_v1
tvOS 10 tvOS_GPUFamily1_v2
First family of Mac GPUs (2012 ~ 2013 newer)
OS X 10.11 OSX_GPUFamily1_v1
macOS 10.12 OSX_GPUFamily1_v2
バージョンによって使える機能が異なる
Metal 設計思想
速度重視
過去と決別した新しいAPI
? 互換性重視 → 最新のハードに特化
? 歴史的経緯 → モダンでシンプルな作り
  (マルチスレッド?プリコンパイルなど)
? 重たい描画API → 低レベルの軽いAPI
プログラマの責任↑(負担 ? 自由 ?)
資料がすくない
Tessellation
とは
Tessellation とは?
?WWDC2016で発表
?グラフィックAPI
A7 (iPhone5S) A8 (iPhone6 TV4) A9 (iPhone6S)
iOS 8 iOS_GPUFamily1_v1 iOS_GPUFamily2_v1
iOS 9 iOS_GPUFamily1_v2 iOS_GPUFamily2_v2 iOS_GPUFamily3_v1
iOS 10 iOS_GPUFamily1_v3 iOS_GPUFamily2_v3 iOS_GPUFamily3_v2
tvOS 9 tvOS_GPUFamily1_v1
tvOS 10 tvOS_GPUFamily1_v2
First family of Mac GPUs (2012 ~ 2013 newer)
OS X 10.11 OSX_GPUFamily1_v1
macOS 10.12 OSX_GPUFamily1_v2
Demo 1
Tessellation
Tessellation とは?
1. GPUでの処理
2. ポリゴンを分割
3. 分割方法はプログラマブル
効率良く高品質な描画
Tessellation とは?
1. GPUでの処理
2. ポリゴンを分割
3. 分割方法はプログラマブル
Tessellation Off
(0, -1, 0)
(1, 1, 0) (-1, 1, 0)
CPU0,-1,0,1,1,0,-1,1,0
binary data
GPU
Graphics Memory
Vertex
Shader
Rasterizer Fragment
Shader
頂点座標
Tessellation On
Vertex
Shader
CPU
GPU
Graphics Memory
Rasterizer Fragment
Shader
0,-1,0,1,1,0,-1,1,0
binary data
頂点座標
Tessellation係数
+
Tessellator
0,-1,0,1,1,0,-1,1,0,
0.5,-1,0,1,1,0,-1,1,0,
0,-1,0,0.5,1,0,-1,1,0,
…
1. GPUでの処理
メモリバンドを消費しない
? データ転送はボトルネックになりやすい
CPUより高速
GPUの負荷↑
? 毎フレーム処理なので重くなる
Tessellation とは?
1. GPUでの処理
2. ポリゴンを分割
3. 分割方法はプログラマブル
2. ポリゴンを分割
ディテールが向上する
? より滑らかに、より詳細に描画できる
GPUの負荷↑
ただ分割するだけでは形は変わらない
滑らかに描画する処理が必要
Demo 2
Phong Tessellation
Phong Tessellation
ローポリを滑らかに表示させる
? Tessellationでポリゴンを分割
? 増えた頂点を丸くなるように補間
思い通りの形にならないこともある
Demo 3
Displacement mapping
Displacement mapping
モデルに細かな凸凹をつける
? 高さの情報をテクスチャに持たせて調整
繊細な表現が可能
?かなり細かいポリゴンが必要
Tessellationと相性が良い
やはりGPUの負荷↑
Tessellation とは?
1. GPUでの処理
2. ポリゴンを分割
3. 分割方法はプログラマブル
3. プログラマブル
?必要に応じて分割数を動的に変更できる
? LOD(Level of Detail)で負荷を調整
近くはハイポリ、遠くはローポリ
Tessellationならシームレス
描画品質は維持しつつGPUの負荷↓
まとめ
1. GPUでの処理
2. ポリゴンを分割
3. 分割方法はプログラマブル
まとめ
1. GPUでの処理
CPUやメモリバスの負荷を上げずに
2. ポリゴンを分割
描画のクオリティを向上させ
3. 分割方法はプログラマブル
GPUの負荷も抑えることができる
効率良く高品質な描画
以上
ご静聴ありがとうございました

More Related Content

惭别迟补濒で罢别蝉蝉别濒濒补迟颈辞苍