Kilimanjaro Warehouse

WEBとかゲーム開発のことについて書きます。

Unity: Macでジオメトリーシェーダーを使ったプロジェクトを動作させたいとき

今回の記事はWindowsユーザーの方にはあまり関係のない話なので、読む必要はないです。



先日Twitterで見かけたこちらのツイート


初めて見たときは、その美しさに震えました。

是非中身を見てみたいと思い、
製作者であるKeijiro氏のGitHubからプロジェクトをダウンロードさせていただきました。
(美しいシェーダーを公開していただいているKeijiroさん、ありがとうございます)

github.com

ところが、手元のMacで動作させてみたところ、
どうも先ほどのツイートとは違い、
美しいエフェクトではなく、全身ピンクの人間が踊る様が映し出されるのみでした。

これは、シェーダーが正しく動作していないことを示しています。

原因

調べてみたところ、ビルドするプラットフォームがmacOSの場合、
デフォルトで使用されるグラフィックスAPIがMetalとなっており、
GVoxelizer2で使用されている、ジオメトリシェーダーをサポートしていないことが原因のようでした。
forums.developer.apple.com

解決法

今回の場合は、ただプロジェクトが動くところさえ見られればいいので、
使用するグラフィックスAPIをMetalからOpenGLCoreに変更すれば解決します。
BuildSettingsからPlayer Settingsボタンを押し、Other Settingsを開き、
Auto Graphics API for Macのチェックを外します。

その後、OpenGLCoreをMetalより上に持ってきてApplyすれば終了です。


シェーダーが正しく動作したようです。

思ったこと

私はiOSmacOS向けのゲーム開発をしたことがないので、詳しくはわからないのですが、
実際にゲームを開発しようと思った時に、
ジオメトリーシェーダーを使うためだけにMetalの恩恵を捨てるというというのは、
あまり考えづらいのではないでしょうか。

先ほどリンクを貼ったAppleのフォーラム内でも語られていますが、
簡単なものであれば、compute shaderを使うなど、いくつか代替案があるようなので、
どうしてもジオメトリーシェーダーを使いたいというとき以外は、
グラフィックスAPIは変更するべきではないと思います。