1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ShaderForgeで作られたシェーダーをUnityWebGLで動作させる

Last updated at Posted at 2021-07-17

概要

ShaderForge 自体は今ではあまり使われていなそうではあるが、Asset Store 等に入っている Shader で利用されていることが偶にある。しかし、ShaderForge 製のシェーダーは WebGL ビルドを行うと正常に動作しないため、これを WebGL でも利用可能にする方法をメモしておく。

Unity バージョンは Unity 2021.1.4f1 で確認済み。

解決策

こちらの記事に解決策が記載されていた。
Shader Forge on webgl - Unity Forum

対応としては Shader コード内にある #pragma only_renderers から始まる行を削除するだけで良い。

解説

Unity 公式ドキュメントによると、only_renderers の機能は下記の通り。

#pragma only_renderers space separated names - 指定のレンダラー用にのみシェーダーをコンパイルします。デフォルトではすべてのレンダラー用にシェーダーがコンパイルされます。詳細は後述の Renderers を参照してください。

Renderers の項目を見てみると、下記のように記載されていた。

Unity はいくつかのレンダリング API (例えば Direct3D 11 と OpenGL) をサポートしており、デフォルトではすべてのシェーダープログラムは、サポートされているすべてのレンダラーにコンパイルされます。#pragma only_renderers または #pragma exclude_renderers ディレクティブを使用してどのレンダラーをコンパイルするかを指定できます。これは、一部のプラットフォームでは使用不可であることが分かっているシェーダー言語の機能を、明示的に使用する場合に最も役立ちます。

つまり、WebGL のレンダラー用にシェーダーがコンパイルされていなかった模様。
only_renderers の行を削除して WebGL で ShaderForge の機能を動作させても期待通りの挙動をすることが確認できた。(もしかすると、一部の機能は動作しないのかもしれない)

まとめ

シェーダーは難しいが、学べば学ぶほど 3D の世界に対する理解が深まって楽しい。
これからもシェーダーに対しての知見を深めていければと思う。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?