以下の内容はhttps://redhologerbera.hatenablog.com/entry/2024/11/02/234823より取得しました。


AppleのGraphicsAPI Metalについて調べる

本日はグラフィックス枠です。

筆者はグラフィックにかかわる仕事についているということもあり、UnityにおいてはShader言語(HLSL)を駆使してDirectXに関する理解もありますが、最近Apple VisionProを触るうえでMetalの勉強もしたくなったため今回まずは概要について学んでいきます。

〇Metalとは?

MetalはApple製品で使用されているグラフィックスAPIです。

グラフィックスAPIとは、一言で表すとGPU上で処理を行うためにソフトウェア側から呼ばれるAPIを指します。

これはレンダリングに使用され、グラフィックス全般にかかわってきます。

また、シェーダーはグラフィックスパイプライン上で実行される、グラフィックスAPIを使用したプログラムです。

MetalAppleが開発し、iOS, macOSからVisionOSまで使用されています。

Apple製品ではOSからハードウェアまでAppleが開発しており、SoC自体を最大限発揮することができます。

〇Metalで使用されるシェーダー言語

DirectXではHLSL言語、AndroidではOpenGLなどではGLSLなどが用いられますが、Metalの場合のシェーダー言語はMSLになります。

これはMetal Shader Laungageを意味します。(そのままですね)

サンプルコードは次のようなります。

#include <metal_stdlib>
using namespace metal;

// 頂点データの構造体
struct VertexIn {
    float4 position [[attribute(0)]];
    float4 color [[attribute(1)]];
};

// 頂点シェーダーの出力構造体
struct VertexOut {
    float4 position [[position]];
    float4 color;
};

// 頂点シェーダー
vertex VertexOut vertex_main(VertexIn in [[stage_in]]) {
    VertexOut out;
    out.position = in.position;
    out.color = in.color;
    return out;
}

// フラグメントシェーダー
fragment float4 fragment_main(VertexOut in [[stage_in]]) {
    return in.color;
}

他のシェーダー

〇Metalで使用できる機能

DirectX12とMetal 3でサポートしている機能を比較していきます。

機能 DirectX 12 Metal
プラットフォーム Windows, Xbox iOS, macOS, tvOS, watchOS
マルチスレッドレンダリング
レイトレーシング
シェーダー言語 HLSL MSL
コンピュートシェーダー
テッセレーション
ジオメトリシェーダー
ダイナミックライティング
テクスチャ圧縮
高度なデバッグツール
クロスプラットフォーム 制限あり Appleバイス内での互換性

上記表を見てわかるようにMetalとDirectXは機能としては大体同じようなことができることがわかります。

 これは使い勝手等以外にもDirectXのゲームの互換性などを容易に移植することなど、Appleの戦略が見えます。

〇ジオメトリシェーダーステージについて

Metalはジオメトリシェーダーステージをサポートしていません。

これにはいくつかの理由があります。

・パフォーマンス

ジオメトリシェーダーステージでは頂点ごとに処理を行うためメモリ帯域幅が無駄に使用されることがあります。

・代替手段

メッシュシェーダー、メッシュレット化リングなどの新技術によって効率的なジオメトリ処理が可能になったため・

Metalの場合テッセレーションステージやコンピュートシェーダーを使用することで等々の結果を実現できます。

今回は簡単に概要をまとめていきました。

〇参考

https://developer.apple.com/jp/metal/

https://www.4gamer.net/games/990/G999003/20220707142/




以上の内容はhttps://redhologerbera.hatenablog.com/entry/2024/11/02/234823より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14