# シェーダーのコンパイル 初級 プログラマー Stride は、Stride シェーダーファイル(`sdsl` および `.sdfx`)を、[グラフィックスプラットフォーム](../../platforms/set-the-graphics-platform.md)で使用されるシェーダー言語に変換します。 | プラットフォーム | シェーダー言語 | -------------- | ---- | Direct3D | HLSL | OpenGL | GLSL | Vulkan | SPIR-V | iOS | OpenGL ES Stride では、実行時(ゲームが実行されている時)またはビルド時(エディタがゲームアセットをビルドする時)に、シェーダーを変換することができます。Stride が実行時にシェーダーを生成すると、シェーダーがコンパイルされるまでレンダリングが停止します。これは通常、リリースビルドでは避けたいことです。特にモバイルプラットフォームでは CPU パワーが少ないため、停止がより目立ってしまいます。 ## Stride が実行時にシェーダーを変換する方法 Stride は、実行時にどのシェーダーが使用されるかを事前に知ることができません。これは、ユーザーがマテリアルのパラメーターを変更したり、スクリプトからポストエフェクトのパラメーターを変更したりすることで、新しいシェーダーの組み合わせを生成する可能性があるからです。また、最終的なシェーダーは、実行プラットフォームのグラフィックス機能に依存します。 1. Stride は、実行時に新しいシェーダーが必要になると、データベースをチェックして、シェーダーがすでに変換済みであるかどうかを確認します。シェーダーがデータベースにあれば、Stride はそれを使用します。 2. シェーダーがまだ変換されていない場合、Stride はパッケージの**ユーザー設定**(下記参照)に応じて、ローカル(デバイス上)またはリモート(Game Studio を使用)でシェーダーをコンパイルします。 3. パッケージの**ユーザー設定**(下記参照)で **Record used effects** が有効になっている場合、Stride は新しいシェーダーが必要であることを Game Studio に通知します。 4. Game Studio は、インポートすべき新しいシェーダーがあることをユーザーに通知します。 ![New effects](media/new-effects-to-import.png) **アセットビュー**で、[**Import Effects**] ボタンが有効化されます。 ![Import effects](media/import-effects-button.png) 5. [**Import Effects**] ボタンをクリックすると、Game Studio は **エフェクトロク**を更新(存在しない場合は作成)し、ゲームのデータベースに追加して、それを次回のビルド時に使用します(1. 参照)。 ![Effect log](media/effect-log.png) ## シェーダーのコンパイル方法を変更する 1. Game Studio の**ソリューションエクスプローラー**で、パッケージを選択し、[**Package properties**] をクリックします。 ![Package properties](media/package-properties-button.png) 2. **プロパティグリッド**で、ユーザー設定プロパティを設定します。 ![Package properties](media/package-properties.png) **Effect Compiler** プロパティでは、シェーダーのコンパイル方法を指定します。 * **Local**: デバイス上でシェーダーを変換します。これは、ゲームのリリースバージョンで推奨されます。 * **Remote**: 開発機でシェーダーを変換します。ゲームのリリースバージョンでこれを使う理由はありません。開発機に接続できないからです。 * **LocalOrRemote**: 開発機でシェーダーを変換しますが、失敗した場合はデバイス上で変換を試みます。**Remote** と同様に、ゲームのリリースバージョンには使用できません。 * **None**: シェーダーを変換しません。データベースにないシェーダーを要求すると、アプリケーションがクラッシュしますのでご注意ください。現在のところ、この機能を使ってもアプリケーションのサイズを節約できることはないので、使用するメリットはありません。しかし、データベースにすべてのシェーダーが入っていることを確認するには便利かもしれません。ゲームがクラッシュした場合、データベースに少なくとも1つのシェーダーが欠けていることがわかるためです。 **Record used effects** を有効にすると、Game Studio は、新しいシェーダーが必要になった時点でエフェクトログに追加します。ゲームのリリースバージョンでは開発機には接続できないため、これを無効にすることをお勧めします。 ## iOS 向け開発においてリモートでシェーダーをコンパイルする iOS デバイスは PC に直接接続できないため、iOS 向けの開発では Stride シェーダーをリモートで変換する必要があります。ここで、iOS デバイス、Mac、開発用 PC 間の連携のために、Python スクリプトを使う必要があります。 1. PC と Mac が同じネットワークに接続されていることを確認してください。 2. Mac に Python をインストールします。Pythonは、[Python 公式サイト](https://www.python.org/downloads/)からダウンロードできます。 3. [ios-tcreplay.zip](media/ios-tcprelay.zip) をダウンロードして、解凍します。 4. **ターミナル**を開き、ファイルを解凍したフォルダに移動して、`stride-ios-relay.py MyPcName`(`MyPcName` は開発 PC の名前)を実行します。 >[!Tip] >開発 PC の名前を調べるには、PC 上で Windows キーを押し、**About** と入力して **Enter** キーを押します。PC の名前は**デバイス名**として表示されます。 これで、iOS デバイスが Mac を介して PC と通信し、リモートでシェーダーを構築できるようになったはずです。 ## エラーメッセージ アプリケーションが、シェーダーをコンパイルするため、または新しいシェーダーが必要であることを通知するために Game Studio に接続しようとして失敗した場合、Visual Studio の出力に次のエラーが表示されます。 「[RouterClient]: エラーが発生しました。モード Connect を使用してコネクションルーターに接続できませんでした。System.AggregateException: 1つ以上のエラーが発生しました。---> System.Net.Sockets.SocketException: ターゲットマシンが 127.0.0.1:31254 を動的に拒否したため、接続できません。」