[Metal] Metalのサンプル「Designing and Implementing a Real-World Metal Renderer」について

2016.11.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは!
モバイルアプリサービス部の田中孝明です。

iOS 10やmacOS 10.12とはあまり関係の無い話ですが、iOS 10がリリースされた後に更新されたサンプルコードに興味深いのもがありましたので動かしてみました。

Metal

Metal
はiOS、macOS、tvOSで3Dゲームを作る際に、OS側で最適化してくれるなどの機能を備えたフレームワークです。
3DゲームをつくるライブラリとしてはUnityUnreal Engineを触られた事ある方も多いとおもいます。

iOS 10においても以下のように、目に見えにくい形ではありますが、強化されています。
Tessellation(コンピュータグラフィックスの画像演算手法の1つ)のサポート
・ 関数の特化(全ての物体や光源を含むシーンの作成など)
・ Metalベースのアプリケーションのレンダリングの最適化

Adopting Metal II: Designing and Implementing a Real-World Metal Renderer

WWDC2016のセッションAdopting Metal, Part 1Adopting Metal, Part 2を見れば今回強化された機能について詳しく知る事ができるでしょうが、今までOpneGL等で3Dをレンダリングした事が無い場合、なかなか敷居が高いと思います。

セッションで使われているサンプルコードのAdopting Metal II: Designing and Implementing a Real-World Metal Rendererを実行してみると、Metalの機能を利用したアプリを試す事ができます。

スクリーンショット 2016-11-09 20.07.44
サンプルコードをそのまま実行した状態だと、10000個の正方形オブジェクトが回転アニメーションを行うだけになります。
クリックすることで視点を変える事もできますので、その辺りの動作を実装したいときには参考になりそうです。

興味深いのはMTLCommandQueueでしょうか。

// The Metal queue that we will dispatch gpu work to
var metalQueue : MTLCommandQueue?

queue内の処理をGPUで動作させる機能を備えています。
レンダリング以外で応用できそうな事があるのかは、別の機会があればもう少し詳解してみたいと思います。

まとめ

そもそも3Dレンダリングが必要なアプリケーションを書く機会が無いので、MetalもOpenGLも触れる機会が皆無でした。 (ゲーム会社であれば別でしょうが...)
ただ、サンプルコードを見ながら各関数の挙動を調べていく事で、自分で3Dベンチマークソフトや、簡易な3Dレンダリングを行なうアプリを作るときに参考になりそうです。
GPUが搭載されているMac(特にRadeon Pro 460)で是非動作させてみたいですね!

参考文献

Metal for Developers
Metal Programming Guide
Adopting Metal, Part 1
Adopting Metal, Part 2
Adopting Metal II: Designing and Implementing a Real-World Metal Renderer