差分

ナビゲーションに移動 検索に移動

MonoGameでプログラマブルシェーダーを使う

5,898 バイト除去, 2020年6月10日 (水) 01:35
内容を「== プログラマブルシェーダーのコンパイル == 2020年5月に発表されたMonoGame 3.8.0 (preview版)からプログラマブルシェーダー周りが…」で置換
  == MonoGame 3.8.0から プログラマブルシェーダーのコンパイル ==2020年5月時点の[[MonoGame]] 2020年5月に発表されたMonoGame 3.8.0 (プレビュー版)から[[Windows]]だけでなく、[[MacOS]]や[[Linux]]でも[[プログラマブルシェーダー]]の[[コンパイル]]ができるようになった。preview版)からプログラマブルシェーダー周りが大幅に変更された。[[Mac]]や[[Linux]]では内部的に[[wine]]を用いているので若干の環境構築が必要となる。 === Macでの環境構築 ===[[xquartz]]を[[インストール]]する。* https://www.xquartz.org/index.html [[wine]]を[[インストール]]する。この際に「64 bit support」のチェックを必ずいれること。内部的にはwine64コマンドしか使わないので[[macOS 10.15 Catalina]]でも大丈夫。でもビルドできるようになったぞ。* https://dl.winehq.org/wine-builds/macosx/download.html [[7z]]を[[インストール]]する。 brew install p7zip mgfxcコンパイラをインストールするスクリプトを実行する。<source lang="bash">curl -O https://raw.githubusercontent.com/MonoGame/MonoGame/develop/Tools/MonoGame.Effect.Compiler/mgfxc_wine_setup.shchmod +x mgfxc_wine_setup.sh./mgfxc_wine_setup.sh</source> mgfxcコンパイラなどは「$HOME/.winemonogame」ディレクトリに格納される。 環境変数を追加する。<source lang="bash"> #bashの場合 echo 'export PATH=$PATH:"/Applications/Wine Stable.app/Contents/Resources/wine/bin/"' >> ~/.profile echo 'export MGFXC_WINE_PATH="$HOME/.winemonogame"' >> ~/.profile</source><source lang="bash"> #zshの場合 echo 'export PATH=$PATH:"/Applications/Wine Stable.app/Contents/Resources/wine/bin/"' >> ~/.zprofile echo 'export MGFXC_WINE_PATH="$HOME/.winemonogame"' >> ~/.zprofile</source> MacOSからログアウトする。再起動でもいいぞ。  == MonoGame 3.7.1まで ==2020年4月時点の[[MonoGame]] 3.78.1では[[プログラマブルシェーダー]]([[fxファイル]])の[[コンパイル]]は「[[Windows]]上でのみ」できる。 逆を言えば[[Mac]]上の[[Visual Studio for Mac]]や[[Linux]]上の[[Xamarin Studio]0以降でfxファイルをコンパイルする]を使って開発している場合には[[プログラマブルシェーダー]]の[[コンパイル]]ができない。 これはMonoGameのコンパイラが複数の環境に対応したコードを生成する過程の問題ある。* まず[[SharpDX]]で[[HLSL]]を[[中間コード]]に[[コンパイル]]する(これがWindows専用)。* その中間コードを[[MojoShader]]に食わせて[[OpenGL]]形式([[GLSL]])に変換する。 このため現状の実装では[[Mac]]や[[Linux]]ではどうにもならない。 === 解決策 ===[[Mac]]や[[Linux]]上の[[Xamarin Studio]]で[[シェーダー]]([[fxファイル]])を使えるようにする素晴らしい[[クラウドサービス]]が登場した。その名も「[[InfinitespaceStudios.Pipeline]]」の「RemoteEffectProcessor」。* https://www.nuget.org/packages/InfinitespaceStudios.Pipeline/ リモート・エフェクト・プロセッサー! これは[[fxファイル]]を[[コンパイル]]してくれるオンラインサービスである。[[ネット]]が繋がっていれば利用できる。開発者はInfinitespace Studiosという英国紳士のようだ。こいつは凄い。  === 利用する ===RemoteEffectProcessorは標準でインターネット上にサーバーが提供されている。ただしちょっと遅い。 ==== NuGetからパッケージを追加する ====NuGetからパッケージを追加する。 InfinitespaceStudios.Pipeline ==== MonoGame Pipeline Toolに参照を追加する ====Content3.mgcbファイルをMonoGame Pipeline Toolで開き、参照を追加する。これでfxファイルの「Processor」の選択肢に「RemoteEffectProcessor」が追加される。 packages/infinitespacestudios.pipeline/1.0.9/tools/InfinitespaceStudios.Pipeline.dll NuGetパッケージの在り処は以下のどちらかだと思われる。* ホームディレクトリ直下の「7.nuget」という隠しディレクトリの中* プロジェクト内の「packages」ディレクトリの中 ==== fxファイルのプロセッサーを変更する ====MonoGame Pipeline Toolでfxファイルを選ぶとプロパティ一覧の「Processor」の項目に「RemoteEffectProcessor」が追加されているのでこれを選ぶ。 公式サーバーを使う際は特に設定を変更する必要なし。 自前サーバーを使う際は各項目を書き換える。注意すべき点はローカルだとhttpsではなくhttpなくらいか。* Protocol=http* RemoteAddress=自前サーバーのIPアドレス* RemotePort=8001(デフォルトは8001番ポート) === 自前サーバーを構築する ===RemoteEffectProcessorは標準でインターネット上にサーバーが提供されている。ただしちょっと遅い。また、構文エラーなどが発生した際のエラー内容がざっくりすぎて意味不明という問題点もある。 RemoteEffectProcessorの[[ソースコード]]は[[GitHub]]上にて[[オープンソース]]として公開されており自前で[[サーバー]]を立てることもできる。中身は非常にシンプルでHTTPで受け取ったHLSLをWindows上のMonoGameコマンドラインツールでコンパイルしているだけだ。HLSLのハッシュを取ってコンパイル成果物をキャッシュするようにしたり、デバッグ機能をつけたりすると捗るかもしれない。* https://github.com/infinitespace-studios/InfinitespaceStudios.Pipeline ==== Windowsマシンを用意する ====さっそく[[VirtualBox]]にWindows 10をぶち込んで環境構築してみた。* Visual Studio をインストールする* MonoGame をインストールする* RemoteEffectProcessorのソースコードを落としてくる Windows 10はセキュリティが厳しくなり、HttpListenerに対して外部から接続ができなかった。色々試したがどれで上手くいったのかわからん。* ファイアーウォールに穴をあける(デフォルトは8001番ポート)* Visual Studioを「管理者権限で実行」する == 関連項目 ==* [[MonoGameでHLSLにMatrixを渡す]]* [[HLSL]] ([[fxファイル]])* [[シェーダー]] [[category: MonoGame]][[category: HLSL1以前でfxファイルをコンパイルする]]

案内メニュー