Version: 2020.3
言語: 日本語
DirectX
OpenGL コア

Metal

Metal は、Apple デバイス用の標準的なグラフィックス API です。Unity は iOS、tvOS、macOS で Metal をサポートします (スタンドアロンとエディター)。

Metal は OpenGL ES に比べると Apple プラットフォーム上でより多くの機能を提供します。Metal 使用の利点と欠点は以下の通りです。

Metal を使用する利点

  • グラフィックス API の呼び出しによる CPU オーバーヘッドが低い
  • API レベルの検証レイヤー
  • マルチ GPU システム上でより優れた GPU 制御
  • メモリレスのレンダーターゲットをサポート (iOS/tvOS 上)
  • 新しい Apple 標準
  • コンピュートシェーダー
  • テッセレーションシェーダー

Metal を使用する不利益な点

  • ローエンドデバイスに対するサポートがない
  • ジオメトリシェーダーに対するサポートがない

制限と要件

  • iOS と tvOS は Apple A7 以降の SoC で Metal サポートがあります。

  • macOS は、HD 4000 シリーズ以降の Intel HD Graphics と Intel Iris Graphics、AMD GCN ベースの GPU、Nvidia Kepler ベースの GPU 以降をサポートする Metal を搭載しています。

  • 最低 シェーダーコンパイルターゲット は 3.5 です。

  • Metal はジオメトリシェーダをサポートしません。

Metal を有効にする

Unity エディターとスタンドアロンプレイヤーでデフォルトのグラフィックス API として Metal を使用するには、以下のいずれかを行います。

  • エディターで、メニューの Edit > Project Settings の順に移動し、Player カテゴリを選択し、Metal Editor Support を有効にします。

  • または、macOS を使用する場合は、Terminal を開き -force-metal コマンドライン引数 を使用します。

Metal は iOS、tvOS 、macOS スタンドアロンプレイヤーではデフォルトで有効です。

Metal API の検証

Xcode は Metal API の検証を提供しており、不明瞭な問題を追跡するのに使用できます。Metal API の検証を有効にするには以下の手順を行います。

  1. Unityで、iOS 向けにプロジェクトをビルドします。 これにより、Xcode プロジェクトが生成されます。

  2. 生成された Xcode プロジェクトを Xcode で開き、Edit Scheme を選択します。

Edit Scheme ページを開く

  1. Run > Options > Metal API Validation の順に移動し、Enabled を選択します。

Changing Metal API 検証レベルを変更

検証エラーが発生すると、XCode で実行中のコードを中断しデバイスログに表示されます。

ノート: 検証を使用すると、CPU 使用率を増加させます。そのため、デバッグのためだけに検証を有効にします。

GPU デバイスの選択

Metal を使用すると、アプリケーションの実行時に GPU デバイスを選択することが可能です。これにより、様々な GPU 設定でプロジェクトをテストしたり、低出力 GPU を使用して電力を節約することができます。

Unity エディターのターゲット GPU デバイスを変更するには、Unity > Preferences… > General の順に選択し、Device To Use を設定します。

エディターでターゲット GPU を変更
エディターでターゲット GPU を変更

スタンドアロンプレーヤーの GPU デバイスを変更するには、アプリケーションを起動し (File > Build and run を選択) し、表示されたダイアログで Graphics device to use に使用する GPU を設定します。

スタンドアロンプレイヤーのターゲット GPU を変更
スタンドアロンプレイヤーのターゲット GPU を変更

メモリレスレンダーターゲットの使用

Metal を使用すると、メモリレスのレンダーターゲットを使用して、iOS や tvOS 10.0 を導入するモバイルデバイスのメモリを最適化できます。 これにより、RenderTexture をシステムメモリにバックアップせずにレンダリングすることができるため、コンテンツはレンダリング中、タイルごとのメモリ (on-tile memory) に一時的に保存されるだけです。

詳しくは RenderTexture.memorylessMode を参照してください。


  • 2018–05–22 公開ページ

  • Metal 使用に関するアドバイスを 2017.4 で追加

DirectX
OpenGL コア