「Metal」の版間の差分
Administrator (トーク | 投稿記録) 編集の要約なし |
Administrator (トーク | 投稿記録) 編集の要約なし |
||
| 1行目: | 1行目: | ||
'''Metal''' | '''Metal'''(読み:めたる)とは、2014年に[[アップル]]が発表した[[MacOS]]と[[iOS]]向けの[[3Dグラフィックス]]および[[コンピュートシェーダー]]の[[API]]群である。 | ||
== 概要 == | == 概要 == | ||
[[AMD]]の[[Mantle]]に端を発した[[低レベル]]に[[GPU]]を叩く[[API]]のひとつであり、[[DirectX 12]]や[[Vulkan]] | [[AMD]]の[[Mantle]]に端を発した[[低レベル]]に[[GPU]]を叩く[[API]]のひとつであり、[[DirectX 12]]や[[Vulkan]]などと競合する。 | ||
点を1点表示するにも、線を1本引くにも、[[ビットマップ]]を1つ表示するにも、自前で[[シェーダー]]を書く必要がある超めんどくさいやつだ。 | |||
== 強制 == | == 強制 == | ||
[[アップル]]は[[OpenGL]]および[[OpenGL ES]] | [[アップル]]は[[OpenGL]]および[[OpenGL ES]]を廃止しMetalへの移行を呼びかけている。 | ||
ただ[[OpenGL]]からMetalへの移植作業はとんでもない作業量であるため今なおOpenGLを使っているアプリも多い。 | |||
そのうち「Deprecated API Usage」が飛んでくるので気をつけよう。 | |||
== CPU側からの呼び出し == | |||
Matalは[[Direct3D12]]や[[Vulkan]]などと同様にコマンドリストを作って投げ込む方式を採用している。[[GPU]]をストールさせない方式として最近の流行りだな。 | |||
== シェーダーの種類 == | |||
Metalで使えるプログラマブルシェーダーは[[バーテックスシェーダー]]と[[フラグメントシェーダー]]と[[コンピュートシェーダー]]の3種類だ。MacOS 11.12 Sierra以降、iOS 10以降はテッセレーターが使えるようになったぞ。相変わらず[[ジオメトリシェーダー]]などという軟弱な概念はない。 | |||
== シェーディング言語 == | == シェーディング言語 == | ||
[[シェーディング言語]]は独自の[[Metal Shading Language]](通称:MSL)を採用している。 | |||
<source> | |||
fragment half4 frag(VertexOut input [[stage_in]], constant Uniforms &uniforms [[buufer(0)]]) { | |||
return half4(1.0); | |||
} | |||
</source> | |||
何シェーダーなのかは関数の頭に「fragment」や「kernel」などと付けて宣言する。 | |||
[[GLSL]]の何シェーダーなのか意味不明すぎる「void main()」よりわかりやすいな。 | |||
引数名の後ろには「どこから来た」「なにに使う」かなどを指定するセマンティクスが付く。 | |||
[[HLSL]]に似ているな。 | |||
ただ中括弧が2個ワンセットとか[[LISP]]ほどではないがカッコがうぜぇ。 | |||
[[定数バッファ]]([[ユニフォーム変数]])は引数として参照渡しされている。 | |||
ここはちょっと独特だな。 | |||
[[戻り値]]は[[HLSL]]と同じく「return」だ。 | |||
[[GLSL]]の意味不明な「gl_FragColor」だ「gl_FragData」だより遥かにわかりやすいな。 | |||
=== 備考 === | |||
[[OpenGL]]と[[GLSL]]からの移植だと[[GLSL]]を[[SPIR-V]]に[[コンパイル]]して[[Vulkan]]([[MoltenVK]])で動かした方が楽かもしれない。ここだけの話、[[HLSL]]や[[GLSL]]で書いて[[SPIRV-Cross]]を使ってMSLを生成した方が捗るよ。 | |||
== デバッグ == | |||
[[Xcode]]のiOSシミュレーターでMetalが使えるようになった。 | |||
* macOS 10.15 Catalina以降 | |||
* Xcode 11以降 | |||
== 歴史 == | |||
=== Metal 1 === | |||
* 2014年6月2日発表 | |||
Mac | |||
* ハードウェア: 2012年以降発売のMac | |||
* ソフトウェア: OS X 10.11 El Capitan以降を搭載 | |||
iPhone / iPad | |||
* ハードウェア: Apple A7以降のSoCを搭載した製品 | |||
* ソフトウェア: iOS 8以降 | |||
=== Metal 1 密かにマイナーチェンジ === | |||
* macOS 11.12 Sierra | |||
* iOS 10 | |||
テッセレーターが使えるようになった。 | |||
=== Metal 2 === | |||
* 2017年6月5日発表 | |||
* OS X 10.13 High Sierra以降を搭載 | |||
* iOS 11, tvOS 11 | |||
ハードウェアの要件は変わっていない。 | |||
ただし一分機能はApple A11以降でないと動かない。内容によっては対応確認処理が必要となる。 | |||
[[category: 3DCG]] | [[category: 3DCG]] | ||