「MonoGameでプログラマブルシェーダーを使う」の版間の差分
imported>Administrator |
Administrator (トーク | 投稿記録) |
||
1行目: | 1行目: | ||
− | + | 2020年4月時点の[[MonoGame]] 3.7.1では[[プログラマブルシェーダー]]([[fxファイル]])の[[コンパイル]]は「[[Windows]]上でのみ」できる。 | |
− | |||
逆を言えば[[Mac]]上の[[Visual Studio for Mac]]や[[Linux]]上の[[Xamarin Studio]]を使って開発している場合には[[プログラマブルシェーダー]]の[[コンパイル]]ができない。 | 逆を言えば[[Mac]]上の[[Visual Studio for Mac]]や[[Linux]]上の[[Xamarin Studio]]を使って開発している場合には[[プログラマブルシェーダー]]の[[コンパイル]]ができない。 | ||
9行目: | 8行目: | ||
このため現状の実装では[[Mac]]や[[Linux]]ではどうにもならない。 | このため現状の実装では[[Mac]]や[[Linux]]ではどうにもならない。 | ||
+ | |||
== 解決策 == | == 解決策 == | ||
[[Mac]]や[[Linux]]上の[[Xamarin Studio]]で[[シェーダー]]([[fxファイル]])を使えるようにする素晴らしい[[クラウドサービス]]が登場した。その名も「[[InfinitespaceStudios.Pipeline]]」の「RemoteEffectProcessor」。 | [[Mac]]や[[Linux]]上の[[Xamarin Studio]]で[[シェーダー]]([[fxファイル]])を使えるようにする素晴らしい[[クラウドサービス]]が登場した。その名も「[[InfinitespaceStudios.Pipeline]]」の「RemoteEffectProcessor」。 | ||
− | |||
* https://www.nuget.org/packages/InfinitespaceStudios.Pipeline/ | * https://www.nuget.org/packages/InfinitespaceStudios.Pipeline/ | ||
19行目: | 18行目: | ||
これは[[fxファイル]]を[[コンパイル]]してくれるオンラインサービスである。[[ネット]]が繋がっていれば利用できる。開発者はInfinitespace Studiosという英国紳士のようだ。こいつは凄い。 | これは[[fxファイル]]を[[コンパイル]]してくれるオンラインサービスである。[[ネット]]が繋がっていれば利用できる。開発者はInfinitespace Studiosという英国紳士のようだ。こいつは凄い。 | ||
− | |||
+ | == 利用する == | ||
+ | RemoteEffectProcessorは標準でインターネット上にサーバーが提供されている。 | ||
+ | ただしちょっと遅い。 | ||
+ | |||
+ | === NuGetからパッケージを追加する === | ||
+ | NuGetからパッケージを追加する。 | ||
+ | InfinitespaceStudios.Pipeline | ||
+ | |||
+ | === MonoGame Pipeline Toolに参照を追加する === | ||
+ | Content.mgcbファイルをMonoGame Pipeline Toolで開き、参照を追加する。 | ||
+ | これでfxファイルの「Processor」の選択肢に「RemoteEffectProcessor」が追加される。 | ||
+ | packages/infinitespacestudios.pipeline/1.0.9/tools/InfinitespaceStudios.Pipeline.dll | ||
+ | |||
+ | NuGetパッケージの在り処は以下のどちらかだと思われる。 | ||
+ | * ホームディレクトリ直下の「.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 | * https://github.com/infinitespace-studios/InfinitespaceStudios.Pipeline | ||
− | + | === Windowsマシンを用意する === | |
+ | さっそく[[VirtualBox]]にWindows 10をぶち込んで環境構築してみた。 | ||
+ | * Visual Studio をインストールする | ||
+ | * MonoGame をインストールする | ||
+ | * RemoteEffectProcessorのソースコードを落としてくる | ||
+ | |||
+ | Windows 10はセキュリティが厳しくなり、HttpListenerに対して外部から接続ができなかった。 | ||
+ | 色々試したがどれで上手くいったのかわからん。 | ||
+ | * ファイアーウォールに穴をあける(デフォルトは8001番ポート) | ||
+ | * Visual Studioを「管理者権限で実行」する | ||
+ | |||
== 関連項目 == | == 関連項目 == |
2020年4月15日 (水) 02:14時点における版
2020年4月時点のMonoGame 3.7.1ではプログラマブルシェーダー(fxファイル)のコンパイルは「Windows上でのみ」できる。
逆を言えばMac上のVisual Studio for MacやLinux上のXamarin Studioを使って開発している場合にはプログラマブルシェーダーのコンパイルができない。
これはMonoGameのコンパイラが複数の環境に対応したコードを生成する過程の問題ある。
このため現状の実装ではMacやLinuxではどうにもならない。
目次
解決策
MacやLinux上のXamarin Studioでシェーダー(fxファイル)を使えるようにする素晴らしいクラウドサービスが登場した。その名も「InfinitespaceStudios.Pipeline」の「RemoteEffectProcessor」。
リモート・エフェクト・プロセッサー!
これはfxファイルをコンパイルしてくれるオンラインサービスである。ネットが繋がっていれば利用できる。開発者はInfinitespace Studiosという英国紳士のようだ。こいつは凄い。
利用する
RemoteEffectProcessorは標準でインターネット上にサーバーが提供されている。 ただしちょっと遅い。
NuGetからパッケージを追加する
NuGetからパッケージを追加する。
InfinitespaceStudios.Pipeline
MonoGame Pipeline Toolに参照を追加する
Content.mgcbファイルをMonoGame Pipeline Toolで開き、参照を追加する。 これでfxファイルの「Processor」の選択肢に「RemoteEffectProcessor」が追加される。
packages/infinitespacestudios.pipeline/1.0.9/tools/InfinitespaceStudios.Pipeline.dll
NuGetパッケージの在り処は以下のどちらかだと思われる。
- ホームディレクトリ直下の「.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のハッシュを取ってコンパイル成果物をキャッシュするようにしたり、デバッグ機能をつけたりすると捗るかもしれない。
Windowsマシンを用意する
さっそくVirtualBoxにWindows 10をぶち込んで環境構築してみた。
- Visual Studio をインストールする
- MonoGame をインストールする
- RemoteEffectProcessorのソースコードを落としてくる
Windows 10はセキュリティが厳しくなり、HttpListenerに対して外部から接続ができなかった。 色々試したがどれで上手くいったのかわからん。
- ファイアーウォールに穴をあける(デフォルトは8001番ポート)
- Visual Studioを「管理者権限で実行」する