「MonoGameでプログラマブルシェーダーを使う」の版間の差分

提供: MonoBook
ナビゲーションに移動 検索に移動
imported>Administrator
1行目: 1行目:
== MonoGame標準 ==
+
2020年4月時点の[[MonoGame]] 3.7.1では[[プログラマブルシェーダー]]([[fxファイル]])の[[コンパイル]]は「[[Windows]]上でのみ」できる。
2019年10月時点の[[MonoGame]] 3.7.1では[[Windows]]上でのみ[[プログラマブルシェーダー]]([[fxファイル]])の[[コンパイル]]ができる。
 
  
 
逆を言えば[[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という英国紳士のようだ。こいつは凄い。
  
ただしちょっと遅い。[[ソースコード]]は[[GitHub]]上に[[オープンソース]]として公開されており、自前で[[サーバー]]を立てることもできる。
 
  
 +
== 利用する ==
 +
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上でfxファイルを投げているだけのようである。さっそく[[VirtualBox]]にWindowsをぶち込んで環境構築してみた。
+
=== 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 MacLinux上のXamarin Studioを使って開発している場合にはプログラマブルシェーダーコンパイルができない。

これはMonoGameのコンパイラが複数の環境に対応したコードを生成する過程の問題ある。

このため現状の実装ではMacLinuxではどうにもならない。


解決策

MacLinux上の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を「管理者権限で実行」する


関連項目