BlenderとUnityで作ったものをVR(Meta Quest/Oculus Link)で動かします

ブログの女の子を作る #54 MToonシェーダーからURP用UTS/UniversalToonに変更する (1) 基本設定編【Unity】

 
前回の記事では、 URPを導入して、建物とTerrainをURP対応シェーダーに変更しました。
 
今回はその続きとして、キャラクターのVRM/MToonシェーダーをURP用の「UTS/UniversalToon」に変更します。



[追記] シェーダーの invalid subscript ‘vertexSH’ エラーについて

1. ビルド時にエラーが出た ※2020/11/15追記

プロジェクトをビルドすると、UTS/UniversalToonシェーダーのビルド時にエラーが発生しました。この状態でexeファイルを実行してみると、ポリゴンがかけたような挙動になってしまいます。
Universal RPは v7.3.1 です。
 
Unityエディターで開発中や「Play」ボタンで実行した時は問題ないのですが。。。
 
※適時改行してます
Shader error in ‘Universal Render Pipeline/Toon’: invalid subscript ‘vertexSH’ at /Unity/Oculus Link App/Tools/UnityChanToonShaderVer2_Project-urp-2.2.0/Runtime/Shaders/
UniversalToonBodyShadingGradeMap.hlsl
(36) (on d3d11)
Compiling Vertex program with LIGHTMAP_ON DIRLIGHTMAP_COMBINED _IS_PASS_FWDBASE _EMISSIVE_SIMPLE _IS_TRANSCLIPPING_OFF _IS_CLIPPING_OFF _IS_ANGELRING_OFF _ENVIRONMENTREFLECTIONS_OFF _SHADINGGRADEMAP
Platform defines: UNITY_ENABLE_REFLECTION_BUFFERS UNITY_USE_DITHER_MASK_
FOR_ALPHABLENDED_SHADOWS UNITY_PBS_USE_BRDF1 UNITY_SPECCUBE_BOX_PROJECTION UNITY_SPECCUBE_BLENDING UNITY_ENABLE_DETAIL_NORMALMAP SHADER_API_DESKTOP UNITY_LIGHT_PROBE_PROXY_VOLUME UNITY_LIGHTMAP_RGBM_ENCODING
 

2. 新規プロジェクトでは出ない? ※2020/11/17追記

新規プロジェクトを作って試したところ、UTS/UniversalToonシェーダーのビルド時にエラーは発生しませんでした
どうやら、私の環境側に問題があるようですね。
 
1年ほど、いろいろ試してきたプロジェクトなので、何かがおかしいのかも知れません。困った。。。
 

3. Contribute GIオンで出る? ※2020/11/23追記

更に調査したところ、新規プロジェクトでも「Contribute Global Illumination」がオンになったオブジェクトが一つでも存在すると、ビルド時やシェーダーを設定したタイミングで、invalid subscript ‘vertexSH’ が発生するようです。
 
現在問い合わせ中です。
 

4. 現時点では厳しそう ※2020/11/29追記

・Unity 2019のバージョンを変えてみる(2019.4.0f1など)
・Unityの設定(ビルド、ライト、その他)をいろいろ変更してみる
・アセットのインポート順序を変更してみる
・新規プロジェクトに旧プロジェクトの内容を一通りコピーしてみる
・「ユニティちゃんSunny Side Up(URP版)」のサンプルシーンで試してみる
などを試しましたが、エラーは回避できませんでした。
 
すべてのオブジェクトで「Contribute Global Illumination」をオフにすることも考えましたが、見た目や描画負荷が変わってきますので、それは避けたいところです。厳しい。。。
 

5. とりあえず解決しました! ※2020/12/01追記

UTS/UniversalToonシェーダーをあきらめて、最近購入した「RealToon」というトゥーンシェーダーに切り替えたところ、RealToonシェーダー自体のエラーは発生しませんでしたが、「ポリゴンがかけたような挙動」が再発してしまいました。
プログラムが正しく動かないのは、シェーダー以外に原因があるようです。
 
更に調査したところ、Addressable Assets Systemをビルドしてなかったことが判明しました。だから、Playボタンで動かした時は問題が発生せず、ビルド時のみに発生してたのですね。。。
 
Addressables Groupタブ -> Build -> New Build -> Default Build Script」を実行後、プロジェクトをビルドすると正しく動くことが確認できました!二週間ぶりにexe起動ができましたよ。
 
現在は、シェーダーを「UTS/UniversalToon Ver.2.2.0」に戻しています。
ビルド時に invalid subscript ‘vertexSH’ エラーが発生するのは変わりませんが、シェーダーの見た目的には特に問題が無いようですので、このまま使わせていただこうかと思います。とりあえず解決ですね。
 
検証用に購入した「RealToon」も良い感じでしたので、また使ってみたいと思います。
 

開発環境

・Blender 2.90.1
・Unity 2019.4.13f1
・グラボ:ASUS ROG-STRIX-RTX2060S-O8G-GAMING
・Meta Quest 2
・Oculus Link(Windowsビルド)
・UTS/UniversalToon Ver.2.2.0
 


(1) シェーダーのマニュアルを読んでおく

設定作業の前に、UTS/UniversalToonのマニュアルを良く読んでおきましょう。
高機能な分、設定できる個所がたくさんありますので。
 

UTS/UniversalToon Ver.2.2.0のマニュアル

マニュアルは、シェーダーをインストールする時に使ったzipファイル内にあります。
/Documentation~/index_ja.md
/Documentation~/Props_ja.md
 
Markdownファイルなので、一般的なテキストエディタではなく、「Markdown Preview Plus」などのchromeアドオンで見るのが良いかと思います。
 

v.2.0.7のマニュアルも分かりやすい

もう一つマニュアルとして、「ユニティちゃんトゥーンシェーダー 2.0 v.2.0.7 マニュアル」があります。
こちらは特にアドオンなどが無くても見れるはず。
 
切り替える前のシェーダー「ビルトインレンダリングパイプライン版」のマニュアルなので一部パラメータが異なる個所もありますが、十分に使えるかと思います。というか、こちらの方が分かりやすいかも知れません。
 
ちなみにですが、一部画像が「Youtubeの動画リンク」になってます。画像と区別がつかないので分かりにくいですが。。。
 
特に、この「UTS2 v.2.0.6をユニティちゃんにセットアップするチュートリアル」は必見かと思います。
 

(2) シェーダーをUTS/UniversalToonに変更する

キャラクターのシェーダーを「UTS/UniversalToon」に変更していきます。
 

シェーダーを変更する

いまは「VRM/MToon」シェーダーが設定されてるので全身紫です
 
UTS/UniversalToon」シェーダーは「Universal Render Pipeline/Toon」ですので、これに変更します。
 

テクスチャ画像を設定する

テクスチャ画像も設定してみました。
色がつきましたね。
 
一つ一つ変更するのは面倒なので、マテリアルを複数選択した状態で、シェーダーを一括変更します。
テクスチャ設定は個別に設定しましょう。
 

白いのは影でした

全てのシェーダーを変更しましたが、やけに白いですね。
 
キャラクターを少し回転してみると、顔が見えるようになりました。
どうやら影部分が白く表示されているようです。
 


(3) シェーダーの影設定を行う

シェーダーで、影の設定を変更していきます。
 

「With 1st ShadeMap」に変更する

まずは、「体のオブジェクト」で設定変更してみましょう。
 
オブジェクトのInspectorで、シェーダー設定「【Basic Three Colors and Control Maps Setups】-> 3 Basic Colors Settings:Textures x Colors -> BaseMap」の右側にある「No Sharing」をクリックします。
 
With 1st ShadeMap」に変わりました。
顔部分の白色が無くなりましたね。
 
他のオブジェクトも同じ設定をします。
これで、変な白色が無くなりました!
 

影の色を付ける

白色は無くなりましたが、まだ影は出ていません。
 
影の色は「1st ShadeMap」で設定します。
少し濃すぎますね。
 
体オブジェクトの場合、少し赤みがかかった色の方が良さそうです。
#F8E1D4くらいでしょうか。
 
他のオブジェクトにも影色の設定をしていきます。こちらは #C8C8C8 を使いました。
 

影をぼかす

いまの設定では「セルシェーディング(影がはっきりしている)」みたいになってます。
個人的には、もう少し影の境界線がぼやけた方が好きですので、Featherの値を変更します。
 
なお、設定名は「Workflow Mode」によって異なります。どちらの設定も【Basic Lookdevs : Shading Step and Feather Settings】以下にあります。
 
(1) DoubleShadeWithFeatherの場合
Technipue:Double Shade With Feather -> Base/Shade Feather
(2) ShadingGradeMapの場合
Technipue:Shading Grade Map -> 1st ShaderColor Feather
 
0.063 くらいにしてみると、良い感じになりました!
 
 
ちなみにですが、影の出方は「Stepの値」で変更できますよ。
 

ノーマルマップも設定しておく

ノーマルマップがある場合、設定しておきましょう。今回のキャラクターではパンツですね。
 
NormalMap Settings -> NormalMap」で設定できます。
ですが、このままではノーマルマップは使われません。
 
NormalMap Effectiveness -> 3 Basic Colors」を「Off → Active」に変更すると、使われるようになります。
設定オンオフがあると、どんな感じで適用されてるかを確認する時に便利ですね。
 

(4) 設定変更をやっておく

いまさらですが、UTS/UniversalToonのインストール後の設定で、設定変更した方が良いかも知れない個所を見つけました。
 
v.2.0.7マニュアルで「プロジェクトの初期設定」と書かれた部分ですね。URP版の設定ではないのですが、とりあえずやっておきました。
 

Color SpaceをLinearに変える

File -> Build Settings -> Player Settings…」をクリックして、「Project Settings -> Player -> Other Settings -> Color Space」で「Gamma → Linear」に変更します。
 
リニアカラーの時、UTS2は最大限の能力を発揮できます。
とのことですよ。
 
Rendering Path⇒Forward」は設定項目が無くなってました。
 

フォグの値を下げる

設定変更後、画面の見え方が少し変わったような気がします。
 
とりあえず気づいたのは「フォグの濃さ」。
 
少し濃くなった気がしますので、Densityを「0.002 → 0.001」に下げてみました。
これで良いでしょう。
 


まとめ

キャラクターのVRM/MToonシェーダーURP用の「UTS/UniversalToonに変更して、テクスチャや影を設定してみました。
 
まずは、基本的な設定ができました。
設定中に気になるところがありましたので、そのあたりの調整を次の記事でやっていきます。
 
次の記事に続きます。
 
スポンサーリンク

コメント

  • トラックバックは利用できません。

  • コメント (0)

  1. この記事へのコメントはありません。

ブログの女の子を作る #53 URPを導入して建物やTerrainのシェーダーを変更する【Unity】

ブログの女の子を作る #55 MToonシェーダーからURP用UTS/UniversalToonに変更する (2) 問題解決編【Unity】


最近のコメント

だーしゅ
IT関係のお仕事してます。
3Dモデルの女の子は「ブログノ・スージー」。VRは楽しいですね。

[当ブログについて]