Read this document in other languages: English
- リリース環境を、Unity 2019.4.31f1に変更。Unity 2020.3.x LTS、Unity 2021.3.x LTS、Unity 2022.1.1f1での動作確認。
- シングルパスインスタンシング レンダリング(ステレオインスタンシングとも呼ばれます)に対応。サポートするプラットフォームは、Unity マニュアルを参照してください。
- 本リリースより、おまけのUTS2イメージエフェクトUnityPackageはサポート外として削除しました。
- リアルタイムディレクショナルライトがない環境での、拡張アウトラインオブジェクトの環境ライティングへの馴染ませ具合を向上しました。
- ユニティちゃんトゥーンシェーダー 2.0 の紹介
- UTS2各シェーダーの使い分け
- サンプルシーン
- プロジェクトの初期設定
- UTS2 設定メニュー:UTS2カスタムインスペクター
- 1. UTS2の基本設定をおこなう「Basic Shader Settings」メニュー
- 2.「Basic Three Colors and Control Maps Setups」メニュー
- 3.「Basic Lookdevs : Shading Step and Feather Settings」メニュー
- 4.「HighColor Settings」メニュー
- 5.「RimLight Settings」メニュー
- 6.「MatCap : Texture Projection Settings」メニュー
- 7.「AngelRing Projection Settings」メニュー
- 8.「Emissive : Self-luminescene Setings」メニュー
- 9.「Outline Settings」メニュー
- 10.「DX11 Phong Tessellation Settings」メニュー
- 11.「LightColor Contribution to Materials」メニュー
- 12.「Environmental Lighting Contributions Setups」メニュー
- ライセンスについて
- おまけ
- 全プロパティリスト
- v.2.0.5以降は、そのままシェーダーのみ上書きアップデートをして大丈夫です。
- v.2.0.4.3p1以前からアップデートをする場合、シェーダーを上書きアップデートした後で、各マテリアルをプロジェクトウィンドウ内から再度選択することで、マテリアルを更新してください。BaseMapが元通りに修復されます。
- v.2.0.4.3p1以前からアップデートをする場合、HiColor_Powerのスライダの感度調整をした影響が出る場合があります。以下に従って調整をしてください。
- Is_SpecularToHighColor=OFF/Is_BlendAddToHiColor=0FFの場合には、HiColor_Powerの値を今までよりも低めに調整してください。
- Is_SpecularToHighColor=ONで利用している場合には、特に修正する必要はありません。
- 最新事項や履歴情報は、 README_ja.md でご確認ください。
ユニティちゃんトゥーンシェーダー(UTS)は、セルルック3DCGアニメーションの制作現場での要望に応えるような形で設計された、映像志向のトゥーンシェーダーです。
セルルック3DCGアニメーションの制作現場向けの設計になっていますので、いわゆる「影」は色設計担当者が作成しやすいような「影色設定」を使う方式であり、かつ各パーツの形状(フォルム)を強調する「影」や、キャラクターのデザイン上、光源の位置や強さとは関係なく、必ず必要となる「影」が出しやすいように設計されています。
特にこれら「影」の調整機能は強力で、多数のライトを使わなくてもシェーダー内のスライダーだけで調整することが可能です。
ユニティちゃんトゥーンシェーダー 2.0(UTS2)では、従来の機能に加えて大幅な機能強化を行いました。
Ver.1.0でできる絵づくりをカバーしつつ、さらに高度なルックが実現できるようになっています。
カラーやテクスチャは、「基本色(ベースカラー)」、「1影色」、「2影色」による3色塗り分けに加えて、「ハイカラー」や「リムライト」、「MatCap(スフィアマッピング)」、「エミッシブ(自己発光)」などの沢山のオプションを追加することができます。
また各カラー間のぼかし加減も、Unity上でリアルタイムに調整することが可能となっています。
デザイン上必要となる固定影の配置も、各影色ごとに発生する位置を設定できる「ポジションマップ」に加え、ライティングによって影の出やすさを変えることのできる「シェーディンググレードマップ」と、2種類の手法を選べます。
さらに「瞳や眉毛の前髪への透過」など、アニメ風キャラクター表現に便利な機能も搭載しています。
結果として、ユニティちゃんトゥーンシェーダー 2.0(UTS2)では、セルルックから始まり、ラノベ風のイラスト表現まで幅広いキャラクター表現が可能となっています。
もちろんUnityのシステムシャドウにも対応しています。
さらにポストエフェクトを追加することで、物理ベースレンダリング(PBR)に対応するスタンダードシェーダーで表現できる絵的要素を、ユニティちゃんトゥーンシェーダー 2.0(UTS2)では、全てノンフォトリアリスティックレンダリング(NPR)で表現することが可能です。
また昨今のVRChatでのユーザーの声を反映し、様々なライティング設定の環境下でも、キャラクターが美しく表現されるように様々な工夫が実装されています。
是非、貴方のご自慢のキャラクターモデルをユニティちゃんトゥーンシェーダー 2.0(UTS2)で彩ってみてください。
今まで以上に、キャラクターが美しく表現されるものと思います。
本マニュアルは、ユニティちゃんトゥーンシェーダー 2.0の最新版 UTS2 v.2.0.9 向けに書かれています。
- UTS2シェーダー本体およびUTS2マテリアルは、Unity 5.6.7f1以降対応。(Unity 2019.4.31f1以降の使用を推奨します)
- サンプルシーンを正常に再生するには、Unity 2019.4.31f1 もしくはそれ以降が必要です。
- Unity 2019.4.31f1からUnity 2020.3.34f1、Unity 2021.3.3f1、Unity2022.1.1f1までの動作確認が終了しています。
- 本パッケージは、Unity 2019.4.31f1で作成されています。
Forwardレンダリング環境。リニアカラースペースでの使用を推奨します。
(ガンマカラースペースでも使用できますが、ガンマカラーの特性上、陰影の階調変化が強めに出る傾向があります。詳しくは、リニアのワークフローとガンマのワークフロー を参照してください。)
- ユニティちゃんトゥーンシェーダー 2.0の配布プロジェクトを解凍し、フォルダ直下にある
UTS2_ShaderOnly_(バージョン名).unitypackage
というファイルを探します。
図の例では、v2.0.6_Release
という部分がバージョン名になっています。
-
ユニティちゃんトゥーンシェーダー 2.0をインストールしたい、Unityプロジェクトを開きます。
-
UnityのProjectウィンドウより、Assetsフォルダを開きます。
-
OSのExplorerやFinderから、
UTS2_ShaderOnly_(バージョン名).unitypackage
をUnityのProjectウィンドウ内のAssetsフォルダにドラッグ&ドロップします。
- Import Unity Packageウィンドウが開きますので、全てのファイルをImportします。
- するとAssets下にToonというフォルダができます。この中にユニティちゃんトゥーンシェーダー 2.0がインストールされてます。
- 新規にマテリアルを作成し、Shaderドロップダウンから、UnityChanToonShaderという項目が見つかれば、インストールは成功しています。
例として、以下のムービーを参考に、シェーダーボール上で肌色のマテリアルを設定してみましょう。
またUTS2初心者の方は、いきなり全ての機能を使ってみようとするのではなく、まず「基本色と1影色の段階(Step)とぼかし(Feather)だけで絵作りをする」という練習をやってみるといいでしょう。
これらのUTS2での基本の絵作りに十分慣れてから、徐々にリムライトなどを追加し、必要だったら2影色を加えるようにするのが取得のコツです。
是非、以下のムービーを参考に練習をしてみてください。
↑ UTS2 v.2.0.6をユニティちゃんにセットアップするチュートリアル
↑ UTS2:SDユニティちゃんマテリアルセットアップ(UTS2 v.2.0.5)
ユニティちゃんトゥーンシェーダー 2.0(以下、UTS2)がインストールされているシェーダー階層(UnityChanToonShader)を開くと、多くのシェーダーファイルがあります。
この時点で「そっと閉じ」てしまう人が多いようですが、よく見てみると、アンダーバーで区切られたいくつかの名前ブロックの組み合わせでできていることに気づくと思います。例えば、Toon
、DoubleShadeWithFeather
、Clipping
、StencilMask
…などです。
これらの名前ブロックは、UTS2の基本的な機能を示しています。同じ名前ブロックを持つシェーダーは、同じ機能を持っています。
まずは、これらの名前ブロックと機能について解説します。
UTS2には、大きく分けて2つの系統のシェーダーがあります。
DoubleShadeWithFeather
: UTS2の標準シェーダーです。2つの影色(Double Shade Colors)と、各々のカラーの境界にぼかし(Feather)を入れることができます。ShadingGradeMap
: 高機能版のUTS2シェーダーです。DoubleShadeWithFeatherの機能に加えて、ShadingGradeMapという特別なマップを持つことができます。
搭載されている基本機能はほぼ同じですので、共に色分け段階(_Step
)とぼかし程度(_Feather
)の数値を合わせれば、同じルックを作ることができます。
どちらを使うかは好みの問題ですが、パキッとした色分けが必要なセルルックにはDoubleShadeWithFeather
系が向いており、ぼかしを多用するイラストルックにはShadingGradeMap
系が向いているようです。
またシェーダー名の一番頭にToon
とあるものは、オブジェクト反転方式によるアウトライン機能を持っています。
UTS2のアウトラインは、専用テクスチャを使ったアウトラインの入り抜き(強弱)調整の他、ベースカラーに馴染ませたり、カメラベースでオフセット調整ができたりなど、多彩な調整機能を持っています。
シェーダー名の後ろ側には、Clipping
などの名前ブロックがあります。これらは以下のような機能があることを示しています。
Clipping
: クリッピングマスクを持てるシェーダー。いわゆる「テクスチャの抜き」(カットアウトやディゾルブ)ができます。TransClipping
: 同じくクリッピングマスクを持てますが、マスクのα透明度(Transparency)を考慮した「テクスチャの抜き」ができます。より綺麗な抜きができるぶん、負荷はClipping
よりも高くなります。StencilMask
: ステンシルバッファによるパーツの透過を指定します。「眉毛」パーツのアニメ的な表現で、常に「前髪」パーツよりも前面に表示したいような場合などに使用するシェーダーです。必ずStencilOut
系シェーダーと組み合わせて使います。StencilOut
:StencilMask
系シェーダーと一緒に使います。上の例だと、「眉毛」パーツを透過させる側である「前髪」パーツに設定するシェーダーです。
NoOutline
というフォルダ内に入っているシェーダーには、シェーダー名の一番頭にToonColor
という名前がついていますが、これはアウトライン機能を持たないことを表しています。
アウトライン機能を持たないぶん、描画パスがひとつ少なくなりますので、アウトラインの必要がないデザインだったり、別途 PSOFT Pencil+ 4 Line for Unity のような高精度のトゥーンラインシェーダーを使用したい場合には、こちらを選ぶとよいでしょう。
NoOutline
系シェーダーの中に、最後にTransparent
という名前ブロックを持つシェーダーがあります。
これは、半透明に特化したシェーダーです。「頬染め」用パーツなどに使える他、ガラスのような表現にも使えます。
↑頬染め用マテリアルの設定例
↑ Custom Render Queueの設定の仕方
UTS2 v.2.0.7を使って、カスタムレンダーキューを各マテリアルに設定する方法を解説します。
特に半透明(Transparent)系のマテリアルを正確に表示したい場合には、カスタムレンダーキューの調整が欠かせません。本ムービーで使用しているサンプルシーンは、UTS2のサンプルプロジェクトに含まれていますので、実際に手で動かして確認することができます。
AngelRing
フォルダ内には、「天使の輪」機能を持つシェーダーが入っています。
「天使の輪」とは、下図のようなハイライト表現のことです。カメラから見て常に固定の位置に現れます。
「天使の輪」機能を持つシェーダーは、高機能版UTS2であるShadingGradeMap
系シェーダーと、そのバリエーションであるShadingGradeMap_TransClipping
系シェーダーのみとなっています。
また主に「髪の毛」パーツに使われるシェーダーなので、ステンシルで抜かれる側であるStencilOut
系のシェーダーが付属しています。
Mobile
フォルダ内には、モバイルやVRコンテンツ向けに、ほぼルックが替わらない程度に軽量化したシェーダーが入ってます。
モバイル版では、軽量化のために以下の仕様に制限しています。
- リアルタイムディレクショナルライト1灯のみの対応に制限しています(複数のライトや、リアルタイムポイントライトには反応しません)。
- ポイントライトへは、ベイク済みポイントライト+ライトプローブの組み合わせで対応します。その場合、
GI_Intensity
を適度に調整する必要があります。
通常版Toon_DoubleShadeWithFeathe
系、Toon_ShadingGradeMap
系各シェーダーとはプロパティ互換がありますので、上記機能で十分な場合、通常版と同名のMobile版シェーダーに切り替えるとレンダリングパフォーマンスが向上します。
Mobile/AngelRing
フォルダ内には、「天使の輪」機能に対応したモバイル版シェーダーが入っています。
各シェーダーの基本機能は、通常版の同名のものと同じです。
Tessellation
フォルダ内には、DirectX 11のPhong テッセレーションに対応したUTS2シェーダーが入っています。
Phong テッセレーションは、結果となる表面がメッシュの法線にある程度沿うように、再分割(subdivide)された面の位置を修正します。ローポリのメッシュについてスムージングするのにかなり効果的な方法です。
UTS2では、WindowsでDirectX 11以上が稼働している環境でのみPhong テッセレーションが利用できます。
Tessellation/Light
フォルダには、Mobile
版と同様の仕様制限を行った軽量化バージョンが入っています。
その他のフォルダに関しても、すでに説明したものと同様の機能を持つUTS2シェーダーのPhong テッセレーション対応版が入ってます。
Phong テッセレーションを利用することで、アウトラインのクオリティや唇などの細部表現が大いに向上します。
主にプリレンダー映像向けのシェーダーですが、その他にも、「キャラの近くまで接近する必要のある」ハイエンドVR向けキャラクターコンテンツなどで使用されています。
Helper
フォルダ内には、アウトラインオブジェクトのみを表示するシェーダーが入っています。
マルチマテリアルとしてパーツに重ねてやることで、アウトラインオブジェクトを重ね描きすることができます。
アウトラインを重ね描きしたいメッシュのSkinned Mesh Renderer
> Materials
よりSize
をひとつ増やし、追加するアウトラインマテリアルを登録します。
注意:アウトラインを重ね描きしますので、当然負荷は高まります。十分注意して使用してください。
プロジェクトを開くと、\Assets\Sample Scenes
フォルダ以下に、次のようなサンプルシーンがあります。
- BoxProjection.unity :Box Projection を使った暗い部屋のライティング
- ToonShader.unity :イラストルックのシェーダー設定
- ToonShader_CelLook.unity :セルルックのシェーダー設定
- ToonShader_Emissive.unity :エミッシブを使ったシェーダー設定
- ToonShader_Firefly.unity :複数のリアルタイムポイントライト
- Baked Normal\Cube_HardEdge.unity:Baked Normalの参考
- Sample\Sample.unity :UTS2の基本シェーダーの紹介
- ShaderBall\ShaderBall.unity:シェーダーボールを使ってUTS2を設定する
- PointLightTest\PointLightTest.unity:ポイントライトを使ったセルルック表現のサンプル
- SSAO Test\SSAO.unity :SSAO in PPSのテスト用
- NormalMap\NormalMap.unity :UTS2でノーマルマップを使う際のコツ
- LightAndShadows\LightAndShadows.unity:スタンダードシェーダーとUTS2との比較
- AngelRing\AngelRing.unity:「天使の輪」および ShadingGradeMap を使ったキャラクターのサンプル
- MatCapMask\MatCapMask.unity:MatcapMaskのサンプル
- EmissiveAnimation\EmisssiveAnimation.unity:EmissiveAnimationのサンプル
- Mirror\MirrorTest.unity:鏡オブジェクトチェック用サンプルシーン
各シーンは、シェーダーやライティングの設定の参考用です。
作りたいルックやシーンの参考に役立つと思います。
File>Build Settings>Player Settings... より
- Rendering Path⇒
Forward
- Color Space⇒
Linear
を推奨します。リニアカラーの時、UTS2は最大限の能力を発揮できます。
ここからは、UTS2 の各機能を設定するユーザーインタフェース「UTS2カスタムインスペクター」の機能解説をします。
UTS2カスタムインスペクターは、Show All Properties
ボタンをクリックすることで、旧来のプロパティリスト型のインスペクターに切り替えることができます。
プロパティリスト型の機能解説はこちらです。
プロパティリスト型のインスペクターは、Change CustomUI
ボタンで元に戻すことができます。
こちらのメニューでは、UTS2の基本設定をおこなう他、ステンシルバッファのリファレンスナンバーを設定したり、カリング方式を設定したり、各クリッピングシェーダーでどのようなマスクを設定するか指定できます。
※ヒント:カリング方式の設定は全てのシェーダーにありますが、ステンシルやクリッピング関連の設定は、それらの設定を使用するシェーダーにしかありません。
メニュー内のアイテムは、シェーダーの種類(機能)に応じて、最大以下のような形式に自動的に拡張されます。
アイテム |
機能解説 | プロパティ |
---|---|---|
日本語マニュアル |
ブラウザを利用して、UTS2日本語公式マニュアルにジャンプします。 | |
English Manual |
ブラウザを利用して、UTS2英語公式マニュアルにジャンプします。 | |
Culling Mode |
ポリゴンのどちら側を描画しないか(カリング)を指定します。「Culling Off (両面描画)/ Front Culling (正面カリング)/ Back Culling (背面カリング)」が選べます。通常はBack で指定します。Culling Off はノーマルマップやライティング表示がおかしくなる場合がありますので、注意してください。 |
_CullMode |
Stencil No |
StencilMask / StencilOut 各シェーダーで使用します。0~255の範囲で、ステンシルリファレンスナンバーを指定します(255には特別の意味がある場合がありますので、注意してください)。抜く側のマテリアルと抜かれる側のマテリアルで、数字を合わせます。 |
_StencilNo |
Clipping Mask |
Clipping / TransClipping 各シェーダーで使用します。グレースケールのクリッピングマスクを指定します。白が「抜き」になります。何も指定しない場合、クリッピング機能は有効になりません。 |
_ClippingMask |
Inverse Clipping Mask |
クリッピングマスクを反転します。 | _Inverse_Clipping |
Clipping Level |
クリッピングマスクの強さを指定します。 | _Clipping_Level |
Transparency Level |
TransClipping シェーダーで使用します。クリッピングマスクのグレースケールレベルをα値として考慮することで、透過度を調整します。 |
_Tweak_transparency |
Use BaseMap αas Clipping Mask |
TransClipping シェーダーのみのプロパティです。チェックすることで、BaseMap に含まれるAチャンネルをクリッピングマスクとして使用します。この場合、ClippingMask には指定する必要はありません。 |
_IsBaseMapAlphaAsClippingMask |
Option Menu | 以下、オプション機能のメニューになります。 | |
Currnet UI Type |
ボタン上に現在選択されているユーザーインタフェースが表示されています。ボタンを押すことで、ユーザーインターフェースをBeginner モードに切り替えます。Beginner モードでは、必要最小限のUTS2コントロールができます。トグルでPro / Full Controll モードに戻ります。 |
|
VRChat Recommendation |
VRChatを楽しむのに便利な設定を一括でおこないます。VRChat向けにセットアップをする場合、まずこちらから始めてみることをお薦めします。 | |
Remove Unused Keywords/Properties from Material |
プロジェクトをビルドしたり、VRChatにパブリッシュする直前に実行することで、UTS2マテリアルから不要なシェーダーキーワードや、使われていないプロパティ値を取り除きます。これらの値は、Unity上で作業しているうちに自然と溜まってしまうものです。これらの不要な値を各マテリアルよりあらかじめ削除しておくことで、システムに不要な負荷を与えることが避けられます。本機能を実行した後は、念のためにFile >Save Project を実行することで、プロジェクトをセーブするようにしましょう(このタイミングで全てのマテリアルがセーブされるからです)。 |
TransClipping
シェーダーは、Clipping
シェーダーと主な機能は同じですが、クリッピングマスクのグレースケールレベルをα値として使えます。
短冊状の毛の房の先端をアルファを考慮しつつマスクで抜く場合や、アホ毛などの表現に使います。
Tweak_transparency
スライダーで透過度合いを調整できます。
UTS2は、Unityの様々なプロジェクトで使うことのできる、汎用トゥーンシェーダーです。 VRChat上でUTS2を楽しむ場合、以下の便利機能を使うことで、UTS2の高機能を活かしつつ、VRChatの様々な環境下でも安定して楽しむことができるようになります。
上の図で、赤い囲み内のボタンがそれに当たります。これらのボタンを使用するタイミングは2つあります。
UTS2で各マテリアルの設定をはじめる時に、Basic Shader Settings > Option Menu内のVRChat Recommendation
ボタンを実行してください。
このコマンドを実行することで、VRChatの様々なライティング環境にUTS2を馴染みやすくします。
VRChat上にアバターをアップロードして、どうも自分の意図した表示と違うと感じる時には、まず最初にこちらのコマンドを試してみるといいでしょう。
VRChat Recommendation
ボタンを実行した後で、主にポイントライトしかない暗いワールドでのキャラの見え方を、もっと明るめに調整したい場合があります。
その場合、「Environmental Lighting Contributions Setups」メニュー内のUnlit Intensity
スライダーを調整することで、暗い場所での明るさを底上げすることができます。
※ヒント:Unlit Intensityは、周りの明るさを考慮しつつ、暗い場所でのマテリアルの明るさをブーストする機能ですので、元々の環境光が暗めに設定されているワールドで極端に明るくすることはできません。
ただし、暗いワールドでは同時にポストエフェクトのブルームも強めに設定されている場合がよくあります。 そのようなワールドでUnlit Intensityの値をデフォルトの1以上にすると、ブルームの影響も受けやすくなりますので、十分に注意してください。
UTS2で各マテリアルを設定したアバターをVRChatに公開する前に、Basic Shader Settings > Option Menu内のRemove Unused Keywords/Properties from Material
ボタンを実行してください。
このコマンドを実行することで、Unityで作業している途中で各マテリアルファイル内に溜まる未使用のプロパティ設定値やシェーダーキーワードを、整理し削除することができます。
例えば、Standard Shaderを最初割り当ててあったマテリアルから、シェーダーをUTS2のものに変えただけでも、これらの未使用の値は溜まっていきます。これらの未使用の値は、次にシェーダーを再度Standard Shaderに切り替える時のために、Unityが念のために保持しているものなのですが、マテリアルが完成しそれらを適用したアバターやモデルを公開する時には、不要になります。
これらの使われない値が各マテリアルに入ったままだと、システムに不要な負荷を与える可能性も考えられますので、アバターを公開するタイミングで整理しておくのが推奨されます。
このコマンドは、ご自身のプロジェクトをビルドする際にも使うといいでしょう。
コマンドを実行すると、UTS2マテリアルの場合、残っているシェーダーキーワードは、_EMISSIVE_SIMPLE
/ _EMISSIVE_ANIMATION
のいずれかと、_OUTLINE_NML
/ _OUTLINE_POS
のいずれかの2つに最適化されます。これらはシェーダーコンパイル時に必要なので、そのまま残しておいてください。
このメニューでは、UTS2の基本となる、基本色/1影色/2影色に用いるカラーを定義します。
これらのカラーは、光源方向から順に、基本色⇒1影色⇒2影色のように配置されます。
おのおののカラーは、テクスチャの各ピクセルに対して各カラーを乗算し、さらにライトカラーを乗算することで決まります。
※ヒント:各影色は、基本色よりも暗い必要はありませんし、2影色が1影色よりも明るくても問題ありません。特に2影色を1影色よりも明るくすると、環境からの照り返しのような表現ができます。
※ヒント:2影色を使うかどうかは、デザインによります。必要のない場合には、指定しなくてかまいません。
さらにサブメニューから、基本3色用テクスチャのシェアリング設定や、ノーマルマップ、シャドウコントロールマップの設定が行えます。
アイテム |
機能解説 | プロパティ |
---|---|---|
BaseMap |
基本色(明色)テクスチャとBaseMap に乗算されるカラーを指定します。テクスチャを指定せず、カラーのみの指定の場合、こちらを基本色(明色)設定として使います。右側のボタンを押すことで、BaseMap に指定されているテクスチャを1st ShadeMap にも適用します。 |
_MainTex, _BaseColor, _Use_BaseAs1st |
1st ShadeMap |
1影色テクスチャと1st_ShaderMap に乗算されるカラーを指定します。テクスチャを指定せず、カラーのみの指定の場合、こちらを1影色設定として使います。右側のボタンを押すことで、1st ShadeMap に指定されているテクスチャを2nd ShadeMap にも適用します。同時に1st ShadeMap もBaseMap と共有している場合は、BaseMap が2nd_ShadeMap にも適用されます。 |
_1st_ShadeMap, _1st_ShadeColor, _Use_1stAs2nd |
2nd ShadeMap |
2影色テクスチャと2nd_ShaderMap に乗算されるカラーです。テクスチャを指定せず、カラーのみの指定の場合、こちらを2影色設定として使います。 |
_2nd_ShadeMap, _2nd_ShadeColor |
このメニューでは、ノーマルマップに関する設定を行います。
UTS2では、ノーマルマップは主に影色のぼかし表現に使います。
通常のシェーディング表現にノーマルマップを足してやることで、より複雑なぼかし表現をすることが可能となります。上の図で、左側がノーマルマップをカラーに反映させたもの、右が反映させていないものです。
他にもノーマルマップは、スケールと共に使うことで肌の質感を調整したり、MatCap用のノーマルマップを別途用意することで、髪の毛の質感を表現するのに使われます。
ノーマルマップを使いこなすことで、様々な表現を楽しむことができます。
アイテム |
機能解説 | プロパティ |
---|---|---|
NormalMap |
ノーマルマップを指定します。右のスライダーは、ノーマルマップの強さを変化させるスケールです。 | _NormalMap, _BumpScale |
NormalMap Effectiveness | ノーマルマップを各カラーに反映させるかを選びます。ボタンがOffの場合、そのカラーはノーマルマップを反映せず、オブジェクトのジオメトリそのものの形状で評価されます。 | |
3 Basic Colors |
ノーマルマップを基本となる3カラーに反映させる時にActiveにします。 | _Is_NormalMapToBase |
HighColor |
ノーマルマップをハイカラーに反映させる時にActiveにします。 | _Is_NormalMapToHighColor |
RimLight |
ノーマルマップをリムライトに反映させる時にActiveにします。 | _Is_NormalMapToRimLight |
※ヒント:もちろんノーマルマップをバンプのように疑似立体表現として利用することもできます。ただしバンプ表現に用いられる場合、ノーマルマップは実際にジオメトリの表面を凸凹させるものではなく、ライティングでその凹凸を表現するものですので、ライティングの変化が現れやすくするように、基本色/1影色/2影色のステップを設定してやる必要があります。上の例の場合、基本色側のステップを0.8、影色側のステップを0.5ぐらいにした上で、さらに少し暗めのハイカラーを足してやることで立体感を強調してやっています。
影の落ち具合を調整する、ポジションマップやシェーディンググレードマップを指定します。
使用するシェーダーに応じて、サブメニュー内のアイテムが切り替わります。
アイテム |
機能解説 | プロパティ |
---|---|---|
1st Shade Position Map |
ライティングに関係なく、1影色の位置を強制的に指定したい場合、ポジションマップを割り当てます。必ず影を落としたい部分を黒で指定します。 | _Set_1st_ShadePosition |
2nd Shade Position Map |
ライティングに関係なく、2影色の位置を強制的に指定したい場合、ポジションマップを割り当てます。必ず影を落としたい部分を黒で指定します。(1影色のポジションマップにも影響を受けます) | _Set_2nd_ShadePosition |
ライティングと関係なく影を落としたい部分をポジションマップで指定できます。
各シーンごとの特殊な影や、演出上追加したい影などがある場合、ライティングに加えて追加できます。
※ヒント:Substance Painterなどの3Dペインターを使って、影位置を直接作画してしまうのが簡単です。
ライトの状態に関係なく常に2影色を表示したい場所は、1影色のポジションマップと2影色のポジションマップの同じ位置を塗りつぶします。
常に2影色が表示されている領域は、ライトが作る影の中でも常に2影色が表示される領域になります。
一方、明るいところでは2影色が表示されない領域(2影色のポジションマップでは指定されているが、1影のポジションマップでは指定されていない領域)は、ライトが作る影の中に入った時のみ2影色が表示されます。
アイテム |
機能解説 | プロパティ |
---|---|---|
ShadingGradeMap |
Shading Grade Mapをグレースケールで指定します。 Shading Grade Mapに使用するテクスチャは、テクスチャインポートセッティングで、必ず SRGB (Color Texture) を OFF にするようにしてください。 |
_ShadingGradeMap |
ShadingGradeMap Level |
Shading Grade Mapのグレースケール値をレベル補正します。デフォルトは0で、±0.5の範囲で調整が可能です。 | _Tweak_ShadingGradeMapLevel |
Blur Level of ShadingGradeMap |
Mip Map機能を利用して、Shading Grade Mapをぼかします。Mip Mapを有効にするためには、テクスチャインポートセッティングで、Advanced > Generate Mip Maps を ON にしてください。デフォルトは0(ぼかさない)です。 |
_BlurLevelSGM |
UTS2の標準シェーダーは、Toon_DoubleShadeWithFeather.shader
という系統になりますが、その標準シェーダーの機能を元にシェーディンググレードマップというグレースケールのマップを使うことで、さらに影の掛かり方をUV座標単位で制御できるように拡張したシェーダーが、Toon_ShadingGradeMap
系統のシェーダーです。
通常のトゥーンシェーダーにShading Grade Map
(シェーディングの掛かり方傾斜マップ)を足すことで、UV単位で1影色および2影色の掛かりやすさを制御できます。
このマップを使うことで、部分的に影の出やすさを調整できるので、「ライトに照らされている時にはでない服のしわ」みたいな表現が可能となります。
画像の例では、Shading Grade Map
上の黒部分が2影色になり、グレー部分がその濃度によって影の掛かり方が変わります。
グレー濃度が強いほうが影がかかりやすいので、二つのグレーの境界間にも影が発生します。
Ambient Occlusionマップなどの遮蔽マップをシェーディンググレードマップに適用すると、ライティングに対してより影をかかりやすくすることができます。他にも、前髪の形状に沿った影とか、服のしわの凹部分とかに使うとよいでしょう。
このメニューでは、基本色/1影色/2影色の各カラーの塗り分け範囲の設定(Step)と、各カラー境界ぼかしの強さ(Feather)を設定します。リアルタイムのディレクショナルライトの設定と共に、UTS2を使う上で最も重要な設定です。このブロックの設定で、基本的なルックは決まります。セルルックおよびイラストレーションルックを作るための基本的なアイテムが集まっているのが、本メニューです。
これらのアイテムの設定は、Unity上でリアルタイムで繰り返しチェックをすることができます。
プロパティ変更の結果をいちいちレンダリングして確認する必要がありませんので、じっくりと取り組んでみてください。
光源方向が同じでも、各Stepと各Featherのパラメタを変えることで、まったく違ったルックを作ることができます。
塗り分け段階を設定するStepスライダー、各色の境界をぼかすFeatherスライダーの基本的な使い方です。
UTS2の標準シェーダーである、DoubleShadeWithFeather系シェーダーのアイテムです。
ライティングとは関係なく、モデルの指定位置に各々1影/2影色を配置できる、ポジションマップを2枚持てるのが特徴です。
アイテム |
機能解説 | プロパティ |
---|---|---|
BaseColor Step |
基本色(明色)と影色領域の塗り分け段階を設定します。 | _BaseColor_Step |
Base/Shade Feather |
基本色(明色)と影色領域の境界をぼかします。 | _BaseShade_Feather |
ShadeColor Step |
影色領域より1影色と2影色の塗り分け段階を設定します。2影色を使用しない場合には、ゼロにしてください。 | _ShadeColor_Step |
1st/2nd_Shades Feather |
1影色と2影色の境界をぼかします。 | _1st2nd_Shades_Feather |
高機能版UTS2シェーダーである、ShadingGradeMap系シェーダーのアイテムです。
シェーディンググレードマップと呼ばれる、ライティングに対する影の出やすさを制御できるマップを持つことができます。
シェーディンググレードマップを使うことで、ジオメトリや法線の状態とは関係なく、指定の位置に決まった形状の影色を配置ことができます。
ポイントマップとの違いは、シェーディンググレードマップは影色を決まった位置に表示するだけでなく、ライトの当て方次第でその出方を調整できるところにあります。
アイテム |
機能解説 | プロパティ |
---|---|---|
1st ShadeColor Step |
基本色(明色)と1影色の塗り分け段階を設定します。BaseColor Step と同じ機能です。 |
_1st_ShadeColor_Step |
1st ShadeColor Feather |
基本色(明色)と1影色の境界をぼかします。Base/Shade Feather と同じ機能です。 |
_1st_ShadeColor_Feather |
2nd ShadeColor Step |
1影色と2影色の塗り分け段階を設定します。ShadeColor Step と同じ機能です。 |
_2nd_ShadeColor_Step |
2nd ShadeColor Feather |
1影色と2影色の境界をぼかします。1st/2nd_Shades Feather と同じ機能です。 |
_2nd_ShadeColor_Feather |
Unityのシャドウシステムとトゥーンシェーディングを馴染ませるための調整アイテムです。
トゥーンシェードの場合、システムが提供する影は、キャラのセルフシャドウ(自身への落ち影)を表現するために必要なものです。
「Basic Lookdevs : Shading Step and Feather Settings」サブメニューアイテムで塗り分けレベルを決定した後で、さらに微調整をしたい時や、セルフシャドウ等のReceiveShadowの出方を微調整したい時に使用します。
アイテム |
機能解説 | プロパティ |
---|---|---|
Receive System Shadows |
Unityのシャドウシステムを使う場合、Activeにします。ReceiveShadowを使いたい場合には、必ずActiveします。(同時にMesh Renderer側のReceiveShadow もチェックされている必要があります。) |
_Set_SystemShadowsToBase |
System Shadows Level |
Unityのシステムシャドウのレベル調整をします。デフォルトは0で、±0.5の範囲で調整が可能です。` | _Tweak_SystemShadowsLevel |
↑ Unityでシステムシャドウを使いつつ、Stepスライダーを調整していると、影色との領域にノイズが現れることがあります。これらのノイズは、セルルックでは困りものですので、それらをSystem Shadows Level
スライダーやTessellation
を使って改善する方法を紹介しています。
ノイズの消し方は他にもありますので、本マニュアルのおまけも参照してみてください。
主にForwardAddパス内で処理されるリアルタイムポイントライト群に対する調整アイテムです。
Mobile/Light版には、このサブメニューはありません。
アイテム |
機能解説 | プロパティ |
---|---|---|
Step Offset for PointLights |
リアルタイムポイントライトなど、主にForwardAddパス内で足されるライトのステップ(塗り分け段階)を微調整します。 | _StepOffset |
PointLights Hi-Cut Filter |
リアルタイムポイントライトなど、主にForwardAddパス内で足されるライトの基本色(明色)領域にかかる不要なハイライトをカットします。 特にぼかしのないセルルック時に、セルルック感を高めます。 | _Is_Filter_HiCutPointLightColor |
UTS2 v.2.0.5では、ぼかしを使わないセルルック時のリアルタイムポイントライトへの反応を改善しました。結果、ポイントライトだけでもセル風のルックが実現できます。
セルルックは、基本色(明色)/1影色、1影色/2影色の各Stepスライダーを調整して設定しますが、ポイントライトの場合、ディレクショナルライト以上に移動に対する影の変化が顕著になります。
それらの変化ををある程度抑え込むための微調整用として、Step Offset
スライダーを使います。
Step Offset
を使うことで、ポイントライトなどFowardAddパス側で追加されるリアルタイムライトのステップ(塗り分け段階)を微調整できます。
塗り分け用に使われるBaseColor Step
などの調整は、メインライトによる塗り分け段階を決めるのと同時に、ポイントライト側の設定にも使われます。
そこにStep Offset
を併用することで、さらに細かくポイントライトの当たり方を調整できます。
特にメカ表現などで、ワカメハイライトなどを表現するのに便利です。
またポイントライトは、仕様上距離に対して明るさが減衰しますので、特に基本色(明色)部分のハイライトが必要以上に目立つことがあります。
そのような時に、PointLights Hi-Cut Filter
をオンにすると、不要なハイライトが抑えられて、よりセルルックに馴染みやすくなります。
逆に積極的にハイライトを付けたい場合は、PointLights Hi-Cut Filter
をオフにして使うといいでしょう。
「ハイカラー」 は、ハイライト、スペキュラとも呼ばれる表現です。
メインとなるディレクショナルライトからの「光」を照り返す表現として使われます。光の照り返し表現ですので、ライトが動くと現れる位置も動きます。
UTS2では、ハイカラー表現に対して様々な調整をすることが可能です。
アイテム |
機能解説 | プロパティ |
---|---|---|
HighColor |
ハイカラー指定するカラーを指定します。使用しない場合には黒(0,0,0) を設定してください。なおハイカラーは光源の方向に従って移動します。 カラー指定と同様にテクスチャも指定できます。テクスチャを利用することで、複雑なカラーを載せることが可能になります。右のパレットのカラーと乗算されますので、テクスチャのカラーをそのまま出したい場合には、パレットを白(1,1,1) に設定してください。必要がない場合、テクスチャは設定しなくても大丈夫です。 |
_HighColor, _HighColor_Tex |
HighColor Power |
ハイカラーの範囲の大きさ(※スペキュラ的には「強さ」になります)を設定します。 | _HighColor_Power |
Specular Mode |
Active の場合、ハイカラー領域をスペキュラ(グロッシイ光沢)として描画します。Off の場合、ハイカラー領域の境界を円形で描画します。 |
_Is_SpecularToHighColor |
Color Blend Mode |
Additive の場合、ハイカラーの合成を加算(結果は明るくなります)にします。スペキュラは加算モードでしか使えません。Multiply の場合、ハイカラーの合成を乗算(結果は暗くなります)にします。 |
_Is_BlendAddToHiColor |
ShadowMask on HighColor |
Active の場合、影部分にかかるハイカラー領域をマスクします。 |
_Is_UseTweakHighColorOnShadow |
HighColor Power on Shadow |
影部分にかかるハイカラーの強さを調整します。 | _TweakHighColorOnShadow |
HighColor Mask | 以下、ハイカラーマスクの設定をします。 | |
HighColor Mask |
UV座標に基づきハイカラーをマスクします。白で100%表示、黒でハイカラーを表示しません。必要がない場合、設定しなくても大丈夫です。 | _Set_HighColorMask |
HighColor Mask Level |
ハイカラーマスクのレベル補正をします。デフォルト値は0です。 | _Tweak_HighColorMaskLevel |
※ヒント:リアルタイムポイントライトのハイカラーを有効にしたい場合は、PointLights Hi-Cut Filter
をOff
にします。
ハイカラーマスクを適用することで、角度によっては肌がテカってしまうような部分を抑えることができます。
頬や胸に載せる肌のハイカラー表現などで、特に有効です。
またハイカラーマスクは、鏡面反射を調整するスペキュラマップとしても使うことができますので、金属などの質感を表現するのにも使えます。
暁ゆ~き(@AkatsukiWorks)さんの作例では、ハイカラーマスクやリムライトマスクを使うことで、イラスト風でありながら同時にそこに使われている各素材(マテリアル)の質感を魅力たっぷりに引き出しています。
「リムライト」 は、実写の世界では「ライトが被写体の周縁(リム)を照らすように配置する」テクニックを指しています。
トゥーンシェーダーを含むノンフォトリアリスティックな表現では、形状を強調するのに同じようにエッジにハイライトを置きますが、これもしばしば「リムライト」と呼ばれています。
UTS2では、リムライトに関しても様々なアイテムが利用できます。
アイテム |
機能解説 | プロパティ |
---|---|---|
RimLight |
Active の場合、リムライトを有効にします。 |
_RimLight |
RimLight Settings | 以下、リムライトの設定をします。 | |
RimLight Color |
リムライトのカラーを指定します。 | _RimLightColor |
RimLight Power |
リムライトの強さを指定します。 | _RimLight_Power |
RimLight Inside Mask |
リムライトの内側マスクの強度を指定します。 | _RimLight_InsideMask |
RimLight FeatherOff |
Active の場合、リムライトのぼかしをカットします。 |
_RimLight_FeatherOff |
LightDirection Mask |
Active の場合、光源方向にのみリムライトを発生します。 |
_LightDirection_MaskOn |
LightDirection MaskLevel |
光源方向リムマスクのレベル調整をします。 | _Tweak_LightDirection_MaskLevel |
Antipodean(Ap)_RimLight |
Active の場合、光源方向に対し反対方向の位置にリムライト(APリムライト/対蹠リムライト)を発生させます。 |
_Add_Antipodean_RimLight |
Ap_RimLight Settings | 以下、APリムライト(対蹠リムライト)の設定をします。 | |
Ap_RimLight Color |
APリムライトのカラーを指定します。 | _Ap_RimLightColor |
Ap_RimLight Power |
APリムライトの強さを指定します。 | _Ap_RimLight_Power |
Ap_RimLight FeatherOff |
Active の場合、APリムライトのぼかしをカットします。 |
_Ap_RimLight_FeatherOff |
RimLight Mask | 以下、リムライトマスクの設定をします。 | |
RimLight Mask |
UV座標に基づきリムライトをマスクします。白で100%表示、黒でリムライトを表示しません。必要がない場合、設定しなくても大丈夫です。 | _Set_RimLightMask |
RimLight Mask Level |
リムライトマスクのレベル補正をします。デフォルト値は0です。 | _Tweak_RimLightMaskLevel |
基本的なリムライトは、カメラから見てオブジェクトの周縁に表示されます。
上に加えてUTS2では、メインライトが存在する方向を考慮してリムライトの出る位置を調整することができます。(LightDirection Mask
)
さらに光源とは反対方向のリムライト(対蹠リムライト)も設定できます(Antipodean(Ap)_RimLight
がActive
)ので、「照り返し」も表現することが可能です。
もし光源方向のリムライトもカットして、光源方向の反対のみにリムライトを発生したい場合には、光源方向のリムライトのカラー(RimLight Color
)を黒(0,0,0)
に指定してください。
またリムライトは、ハイカラーと同様にカメラの角度によってはひどくテカってしまうことがあります。
UTS2では、リムライトマスクを設定することで、それらのテカりを抑えることができます。
上の画像では、光源方向と照り返し方向のリムライトのカラーを変えた上に、脇の下などにリムライトマスクをかけることで不要なテカリを避けています。
またリムライトマスクを使うことで、「金属的な材質表現」を他の素材と調整することで強調したり、服に差し込む入射光を調整することで 「ベルベット風衣類のしわ表現」などをすることが可能です。
「マットキャップ(MatCap)」 とは、カメラベースでオブジェクトに貼り付けるスフィアマップのことです。ZBrushの質感表現で使われています。
Google画像検索で、「Matcap」で検索すると、様々なMatcapの例を見ることができます。物理ベースシェーダーが普及する以前は、金属的なテカリを表現する時によく使われました。
それらの金属的な質感表現だけでなく、Matcapは工夫次第で様々な質感を表現することが可能です。
UTS2では、Matcapテクスチャを乗算だけでなく加算でも合成できます。
※ヒント:UTS2 v.2.0.5からは、カメラによる歪みに対して適切な補正が入るようになりましたので、オブジェクトがカメラの端に来てもMatCapが歪まなくなりました。
アイテム |
機能解説 | プロパティ |
---|---|---|
MatCap |
Active の場合、MatCapを有効にします。 |
_MatCap |
MatCap Settings | 以下、MatCapの設定をします。 | |
MatCap Sampler |
MatCapとして使用するテクスチャを設定します。右側のカラーがテクスチャに乗算されます。 | _MatCap_Sampler, _MatCapColor |
Blur Level of MatCap Sampler |
Mip Map機能を利用して、MatCap_Samplerをぼかします。Mip Mapを有効にするためには、テクスチャインポートセッティングで、Advanced > Generate Mip Maps を ON にしてください。デフォルトは0(ぼかさない)です。 |
_BlurLevelMatcap |
Color Blend Mode |
Additive の場合、MatCapのブレンドが加算モードになります(結果は明るくなります)。Multiply の場合には乗算モードで合成されます(結果は暗くなります)。 |
_Is_BlendAddToMatCap |
Scale MatCapUV |
MatCap Sampler のUVを中央から円形にスケールすることで、MatCapの領域調整ができます。 |
_Tweak_MatCapUV |
Rotate MatCapUV |
MatCap Sampler のUVを中央を軸に回転します。 |
_Rotate_MatCapUV |
CameraRolling Stabillizer |
Activate にすることで、カメラのローリング(奥行き方向を軸とした回転のこと)に対してMatCapが回転してしまうのを抑止します。MatCapをカメラのローリングに対して固定したい時に便利な機能です。 |
_CameraRolling_Stabilizer |
NormalMap for MatCap |
Active にすることで、MatCapにMatCap専用ノーマルマップを割り当てます。MatCapをスペキュラ的に使っている場合には、スペキュラマスクとして使用できます。 |
_Is_NormalMapForMatCap |
NormalMap for MatCap as SpecularMask | 以下、MatCap専用ノーマルマップの設定をします。 | |
NormalMap |
MatCap専用ノーマルマップを設定します。右側のスライダーはスケールです。 | _NormalMapForMatCap, _BumpScaleMatcap |
Rotate NormalMapUV |
MatCap専用ノーマルマップのUVを中央を軸に回転します。 | _Rotate_NormalMapForMatCapUV |
MatCap on Shadow |
Active にすることで、影部分にかかるMatCap領域をマスクします。 |
_Is_UseTweakMatCapOnShadow |
MatCap Power on Shadow |
影部分にかかるMatCapの強さを調整します。 | _TweakMatCapOnShadow |
MatCap Projection Camera |
ゲームビュー内で使用するカメラのプロジェクションを指定します。パースカメラ(Perspective )の時には、カメラ歪み補正が働きます。 |
_Is_Ortho |
MatCap Mask | 以下、MatCap Maskの設定をします。 | |
Matcap Mask |
MatCapにグレースケールのマスクを設定することで、MatCapの出方を調整します。Matcap Maskは、MatCapが投影されるメッシュのUV座標基準で配置されます。黒でマスク、白で抜きになります。 | _Set_MatcapMask |
Matcap Mask Level |
Matcap Maskの強さを調整します。値が1の時、マスクのあるなしに関わらずMatCapを100%表示します。値が-1の時には、MatCapは一切表示されず、MatCapがオフの状態と同じになります。デフォルト値は0です。 | _Tweak_MatcapMaskLevel |
Inverse Matcap Mask |
Active にすることで、Matcap Maskを反転します。 |
_Inverse_MatcapMask |
上の例では、Matcapを疑似環境マップとして利用しています。
他にもMatcapを利用することで、つるつるした表面に光が反射するヌルテカ表現も、適度なイラスト感を保ったまま、まとめることができます。
上の例では、サラサラ感のある髪の毛の光沢を表現するのに、MatCap
とNormalMap for MatCap
、Matcap Mask
を使用しています。
- MatCap Sampler : 髪の上に乗算合成される、光の輪を表現します。
- NormalMap for MatCap : MatCap単体だとそのままの形状で合成されてしまいますが、NormalMap for MatCapを細かいリピートで重ねることで、三日月型の光沢をサラサラ感のある光に散らしています。このような使い方を
スペキュラマスク
と呼びます。ここで使われるノーマルマップは、バンプ的な表現には使われません。 - Matcap Mask : MatCapが表示される範囲を調整します。垂直方向のグラデーションマスクを設定することで、
Matcap Mask Level
スライダーを調整することで、MatCapが表示される範囲を簡単に制御することができます。
MatcapMaskを使うことで、上のようなライトクッキー的な表現も可能です。
「AngelRing(天使の輪)」 とは、カメラから見て常に固定の位置に現れるハイライト表現で、髪のハイライト表現として使われます。「天使の輪」機能を持つシェーダーは、AngelRing
フォルダ以下に収録されています。
「天使の輪」は、それが投映されるメッシュのUV2を参照しますので、Mayaや3ds Max、BlenderなどのDCCツールで、事前にUV2を設定しておく必要があります。
アイテム |
機能解説 | プロパティ |
---|---|---|
AngelRing Projection |
Active の場合、「天使の輪」機能を有効にします。 |
_AngelRing |
AngelRing Sampler Settings | 以下、AngelRing Samplerの設定をします。 | |
AngelRing |
「天使の輪」テクスチャを指定します。右に指定したカラーがテクスチャに乗算されます。 | _AngelRing_Sampler, _AngelRing_Color |
Offset U |
「天使の輪」表示を水平方向に微調整します。 | _AR_OffsetU |
Offset V |
「天使の輪」表示を垂直方向に微調整します。 | _AR_OffsetV |
Use α channel as Clipping Mask |
Active の場合、「天使の輪」テクスチャに含まれるαチャンネルをクリッピングマスクとして利用します。Off の場合、αチャンネルは利用しません。 |
_ARSampler_AlphaOn |
まず「天使の輪」機能を適用する髪の毛のメッシュに、2つめのUVを設定しましょう。
「天使の輪」用のUVは、通常の髪用テクスチャのUVとは別に、「天使の輪」を適用する髪全体をキャラの正面方向から平面投影して作成します。
※UV2の作成を含むこれらの作業は、Mayaや3ds Max、BlenderなどのDCCツールで行います。
「天使の輪」用UVをガイドに、ハイライト部分のテクスチャを描きます。ハイライト部分のカラーは元のカラーに加算で合成されます。
作成したテクスチャは、AngelRing
のテクスチャに登録します。
ハイライトは白で描いて、後に乗算でカラーを載せてもよいでしょう。
Use α channel as Clipping Mask
をActive
にすると、下の図のように「天使の輪」テクスチャのαチャンネルがクリッピングマスクとして利用できるようになります。
「天使の輪」のカラーを加算でなく、直接指定できるようになります。
「エミッシブ」 とは、自己発光のことです。
カラーにHDRカラー(明るさとして1以上の値を持てるカラー仕様のこと)を定義することで、周りのカラーよりも明るい領域を設定することができます。
Post Processing Stackのブルームなど、カメラにアタッチされるポストエフェクトと共に使われることで、パーツを効果的に光らせることができます。
アイテム |
機能解説 | プロパティ |
---|---|---|
Emissive |
エミッシブ用のテクスチャを設定します。グレースケールでテクスチャを作成し、それに乗算するカラーを載せることで光らせることもできます。 右側のカラーが、テクスチャの各ピクセルカラーに乗算されます。多くの場合、 HDRカラー を設定します。他のパーツと重ねて光って欲しくない部分は、テクスチャ上で黒(RGB:0,0,0)にしておきます。 | _Emissive_Tex.rgb, _Emissive_Color |
Emissivテクスチャのαチャンネル |
v.2.0.7より、αチャンネルがエミッシブテクスチャのマスクとして使えるようになりました。UVベースで、αチャンネルを白(RGB = (1,1,1))に設定した位置にエミッシブを表示します。黒(RGB=(0,0,0))でエミッシブが表示されなくなります。 | _Emissive_Tex.a |
Emissive Animation |
Active にすることで、Emissive で指定したテクスチャのRGBチャンネル部分を、様々な方法でアニメーションします。αチャンネルはマスクですので、アニメーションの対象にはなりません。 |
EMISSIVE MODE = ANIMATION |
Base Speed (Time) |
アニメーションの基本となる更新スピードを指定します。値1の時、1秒で更新することになります。値2を指定すると、値1の時の2倍のスピードになりますので、 0.5秒で更新することになります。 | _Base_Speed |
UV Coord Scroll 、View Coord Scroll |
スクロールに使用する座標系を指定します。UV Coord Scroll の場合、Emissive_TexのUV座標を基準にスクロールをします。View Coord Scroll の場合、MatCapと同様のビュー座標を基準にスクロールをします。ビュー座標系でのスクロールは、テクスチャのUV座標を考慮しないで済むのでとても便利ですが、キューブのようなフラットな面を持つオブジェクトでは、うまく表示できない場合がほとんどです。一方、キャラクターなどの曲面が多いオブジェクトでは、ビュー座標系は大変便利に使えます。 |
_Is_ViewCoord_Scroll |
Scroll U direction |
アニメーションの更新にあたり、EmissiveテクスチャをU方向(X軸方向)にどれだけスクロールさせるかを指定します。-1~1範囲で指定し、デフォルトは0です。スクロールアニメーションは、最終的には、Base Speed (Time) ×Scroll U Direction ×Scroll V Direction の結果として決まります。 |
_Scroll_EmissiveU |
Scroll V direction |
アニメーションの更新にあたり、EmissiveテクスチャをV方向(Y軸方向)にどれだけスクロールさせるかを指定します。-1~1範囲で指定し、デフォルトは0です。 | _Scroll_EmissiveV |
Rotate around UV center |
アニメーションの更新にあたり、EmissiveテクスチャをUV座標の中央(UV=(0.5,0.5))を軸にどれだけ回転させるかを指定します。Base Speed=1の時、値1で右まわり方向に1回転します。スクロールと組み合わせた場合、スクロール後に回転することになります。 | _Rotate_EmissiveUV |
PingPong Move for Base |
Active にすることで、アニメーションの進行方向をPingPong(行ったり来たり)にします。 |
_Is_PingPong_Base |
ColorShift with Time |
Active にすることで、Emissiveテクスチャに掛け合わせるカラーを、Destination Color に向かう線形補間(Lerp)で変化させます。この機能を利用する時には、Emissiveテクスチャでの指定はグレースケールとし、掛け合わせるカラー側でカラー設計をしたほうがよいでしょう。 |
_Is_ColorShift |
Destination Color |
カラーシフトをする際の、ターゲットとなるカラーです。HDRで指定できます。 | _ColorShift |
ColorShift Speed (Time) |
カラーシフトをする際の、基準となるスピードを設定します。値が1の時、1サイクルの変化はおおよそ6秒程度を目安としてください。 | _ColorShift_Speed |
ViewShift of Color |
Active にすることで、オブジェクトを見るカメラのビュー角に対してカラーをシフトさせます。オブジェクトのサーフェイスに対し真っ正面から見た場合は、通常状態のEmissiveカラーが表示され、ビュー角が徐々に傾いていくにつれてシフト先のカラーに変化します。 |
_Is_ViewShift |
ViewShift Color |
ビューシフトする際の、変化先となるカラーです。HDRで指定します。 | _ViewShift |
あいんつばい(@einz_zwei)さんの作例。エミッシブパーツが大変効果的に使われています。
しかもカラーマップとエミッシブマップを組み合わせることで、ライトの明るさの変化に応じて、ディティールが追加されるような仕組みになっています。
αチャンネル付きテクスチャは、PhotoshopなどのDCCツールで作成します。
チャンネルタブより、新規チャンネルを追加し、できたチャンネルの上にグレースケールの画像を貼り付ければ、αチャンネルとして利用出来ます。Targa形式などαチャンネルが持てる画像形式の場合は、このままセーブできます。
Unity上でαチャンネルを有効にするためには、各テクスチャのImport Settingsで、Alpha Source
をInput Texture Alpha
にしてください。
PNG形式の場合は画像仕様上、直接αチャンネルを持てないので、Photoshop上でαチャンネルを選択範囲として読み込んだ後で、「レイヤーマスク>選択範囲外をマスク」で指定し、PNG形式で保存します。
続いてUnityに読み込み、Import Settingsで、Alpha Source
をInput Texture Alpha
に、Alpha Is Transparency
をON
にしてください。
カラーシフト機能を使う際に、Destination Color
をターゲットに設定しますが、元のカラーとターゲットとなるカラーが同色相の場合、想定していないカラーがフレームに混じることがあります。例えば、下図の矢印左側のカラーから、一見見た目は同じような右側の2つのいずれかのカラーにシフトさせると、矢印右側1つめのカラーは同色相の範囲でカラーシフトしますが、矢印右側2つめのカラーは、青っぽいフレームが混じります。
これは、青っぽいフレームが混じるほうのカラーには、元のカラーのRGBと比較してみると、値が高くなっているBチャンネルがあるからです。
このように、同色相内で輝度が違うカラーをターゲットにシフトさせる場合、各RGBの変化の方向を揃えることで、想定外のカラーがフレームに混入するのを避けることができます。
↑同一色相内でカラーがシフトする例。ターゲットカラーのRGBの値は、いずれも元のカラーよりも小さい。
↑色相外のフレームが混じる例。ターゲットカラーのBの値が元のカラーよりも高く、かつG値の変化が極端に大きい。
UTS2では、アウトライン機能として、マテリアルベースのオブジェクト反転方式のアウトラインを採用しています。
この方式を簡単に説明すると、シェーダーで元のオブジェクトよりも少し大きめのオブジェクトを面法線だけ反転して生成します。
新たに生成したアウトライン用オブジェクトには、フロントカリングで描画されますので、元よりも少し大きめに生成したぶんだけ、それが元のオブジェクトによって上書きされると、はみ出した部分がアウトラインのように見えるというものです。
この方式は比較的軽い上に調整が楽にできるので、ゲーム用のアウトラインとして伝統的に使われてきました。
実際にオブジェクトの周りにラインを引いているわけではないということに、注意してください。
*参考:実際にオブジェクトの周りにラインを描画する方式もありますが、それらは主にポストプロセス(ポストエフェクト)方式のアウトラインとして知られています。
ポストプロセス方式のアウトラインは採用する方式によって、スピードもクオリティも異なります。実際のゲームでは、従来型のオブジェクト反転方式に、軽めのポストプロセス方式を加えて補正する場合が多いです。
アイテム |
機能解説 | プロパティ |
---|---|---|
Outline Mode |
アウトライン用反転オブジェクトの生成方式を指定します。Normal Direction (法線反転方式) / Position Scalling (ポジションスケーリング方式)から選択できます。多くの場合、法線反転方式が使われますが、ハードエッジだけで構成されているキューブのようなメッシュの場合、ポジションスケーリング方式のほうがアウトラインが途切れにくくなります。比較的単純な形状はポジションスケーリング方式で、キャラクターなどの複雑な形状のものは法線反転方式を使うといいでしょう。 |
_OUTLINE |
Outline Width |
アウトラインの幅を設定します。 ※注意:この値は、Unityへのモデルインポート時のスケールに依存します ので、取り込みスケールが1でない時には注意してください。 | _Outline_Width |
Outline Color |
アウトラインのカラーを指定します。 | _Outline_Color |
BlendBaseColor to Outline |
オブジェクトの基本カラーにアウトラインのカラーを馴染ませたい場合に、Active にします。 |
_Is_BlendBaseColor |
Outline Sampler |
アウトラインの幅に入り抜きを入れたい場合や特定のパーツにのみアウトラインを乗せたくない場合などにアウトラインサンプラー(テクスチャ)で指定します。白で最大幅、黒で最小幅になります。必要がない場合、設定しなくても大丈夫です。 | _Outline_Sampler |
Offset Outline with Camera Z-axis |
アウトラインをカメラの奥行き方向(Z方向)にオフセットします。スパイク形状の髪型などの場合、プラスの値を入れることでスパイク部分にはアウトラインがかかりにくくなります。通常は0を入れておいてください。 | _Offset_Z |
本サブメニューのアイテムで、アウトライン機能をさらに強化することができます。
アイテム |
機能解説 | プロパティ |
---|---|---|
Farthest Distance to vanish |
カメラとオブジェクトの距離でアウトラインの幅が変化する、最も遠い距離を指定します。この距離でアウトラインがゼロになります。 | _Farthest_Distance |
Nearest Distance to draw with Outline Width |
カメラとオブジェクトの距離でアウトラインの幅が変化する、最も近い距離を指定します。この距離でアウトラインがOutline_Width 等で設定した最大の幅になります。 |
_Nearest_Distance |
Use Outline Texture |
アウトライン用反転オブジェクトにテクスチャを貼りたい場合、Active にします。 |
_Is_OutlineTex |
Outline Texture |
アウトラインに特別なテクスチャを割り当てたい時に使用します。テクスチャを工夫することで、アウトラインに模様を入れたりすることができる他、フロントカリングされる反転オブジェクトに貼られるテクスチャだと考えると、一風変わった表現ができます。 | _OutlineTex |
Use Baked Normal for Outline |
Active の場合、BakedNormal for Outline を有効にします。このアイテムは、アウトラインの描画方式が法線反転方式の時のみ現れます。 |
_Is_BakedNormal |
Baked NormalMap for Outline |
事前に他のモデルから頂点法線を焼き付けたノーマルマップを、法線反転方式アウトラインの設定時に追加として読み込みます。詳しい説明は下を参照してください。 | _BakedNormal |
黒でラインなし、白でラインの幅が100%になります。
適宜 Outline_Sampler を設定することで、アウトラインに入り抜き(強弱)が発生します。
※Tips:Outline Sampler を複数キャラに適用する際に、各キャラのパーツのUV配置を共通化する一工夫をすると、モデル汎用に入り抜きの制御が調整できるようになって便利です。
頂点法線を焼き付けたノーマルマップを、法線反転アウトラインの設定時に追加的に読み込むことができるようになりました。本機能を使うことで、ハードエッジのオブジェクトに、ソフトエッジのオブジェクトのアウトラインを、事前にベイクしたノーマルマップを経由して適用することができるようになります。
Baked Normalマップを使用する時には、UTS2のアウトライン設定メニューで、
- Outline Mode を "Normal Direction" に
- Use Baked Normal for Outline を "Active" に
- Baked Normal for Outline に使用したいマップを適用します。
Baked Normal for Outline として適用できるノーマルマップは以下のような仕様となっています。
- 適用するオブジェクトの UV は重ならないこと。つまり、全てのノーマルマップが重ならないように UV 展開がされていることが必須です。
- ノーマルマップ自体の仕様は、Unity と同じで、OpenGL 準拠となります。
- 使用するノーマルマップのテクスチャ設定は、以下のようになります。
・Texuture Type は "Default" にする。 ※注意: "Normal map" に設定してはいけません。
・sRGB (Color Texture) を必ず "OFF" にする。
詳しくはサンプルプロジェクト内の Baked Normal フォルダ内のアセットを確認してください。
※注意:この方式による頂点法線の調整は、バーテックスシェーダー側で行われますので、適用される頂点数にそのまま依存します。つまり、ピクセルシェーダー側のように頂点法線間で補正するものではありませんので、注意してください。
Offset Outline with Camera Z-axis
に値を入れることで、アウトラインがカメラの奥行き方向(Z方向)にオフセットされます。
図のようなスパイク形状の髪型の場合に、スパイク部分のアウトラインの出方を調整するのに使用します。
通常は0を入れておいてください。
UTS2のテッセレーション機能は、Windows/DX11環境でのみ使用できます。
アイテム |
機能解説 | プロパティ |
---|---|---|
Edge Length |
カメラとの距離に基づいて、よりテッセレーションを分割します。同じ距離では、値が小さいほうが細分化されます。デフォルトは 5 です。 | _TessEdgeLength |
Phong Strengh |
テッセレーションによって細分化された分割面の引っ張り強度を変化させます。デフォルトは 0.5 です。 | _TessPhongStrength |
Extrusion Amount |
テッセレーションの結果として発生する、膨張分を全体としてスケーリングします。デフォルトは 0 です。 | _TessExtrusionAmount |
対応部分のコードは、Nora氏の https://github.com/Stereoarts/UnityChanToonShaderVer2_Tess を参考にさせていただきました。
Tessellationは、使えるプラットフォームが限られている上に、かなりパワフルなPC環境を要求しますので、覚悟して使ってください。想定している用途は、パワフルなGPUを搭載しているWindows10/DX11のマシンを使って、映像&VR向けに使用することです。
Light版とあるものは、ライトをディレクショナルライト1灯に制限した代わりに軽量化したバリエーションです。
各カラーに対する、シーン内のリアルタイムライトのカラーの影響を、個別にON/OFFできるスイッチを集めたものです。
Active
の場合、各カラーに対するリアルタイムライトのカラーの影響が有効となり、Off
の場合、インテンシティが1の時の各カラーの設定色がそのまま表示されます。
本メニューから、各カラーへのライトカラーコントリビューション(寄与)のあり/なしを一元的に管理できます。
実際にシーン内で使用するキャラクターライトを使いながら、各カラーへの影響がライトコントリビューションのあり/なしでどう変わるかをリアルタイムで確認できます。ルックデブの仕上げに使うとよいでしょう。
アイテム |
機能解説 | プロパティ |
---|---|---|
Base Color |
基本色に対しライトカラーを有効にします。 | _Is_LightColor_Base |
1st ShadeColor |
1影色に対しライトカラーを有効にします。 | _Is_LightColor_1st_Shade |
2nd ShadeColor |
2影色に対しライトカラーを有効にします。 | _Is_LightColor_2nd_Shade |
HighColor |
ハイカラーに対しライトカラーを有効にします。 | _Is_LightColor_HighColor |
RimLight |
リムライトに対しライトカラーを有効にします。 | _Is_LightColor_RimLight |
Ap_RimLight |
APリムライト(対蹠リムライト)に対しライトカラーを有効にします。 | _Is_LightColor_Ap_RimLight |
MatCap |
MatCapに対しライトカラーを有効にします。 | _Is_LightColor_MatCap |
AngelRing |
「天使の輪」に対しライトカラーを有効にします。 | _Is_LightColor_AR |
Outline |
アウトラインに対しライトカラーを有効にします。アウトラインに対するライトカラーの寄与は次のとおりです。「OFF」の時、アウトラインカラーに設定したカラーがそのまま表示されます。「Activeの時でシーン中にリアルタイムディレクショナルライトが1灯ある」時、リアルタイムディレクショナルライトのカラーと明るさにアウトラインカラーが反応します。「Activeの時でシーン中にリアルタイムディレクショナルライトがない」時、Environment LightingのSourceの内、Colorの色と明るさにアウトラインカラーが反応します。この時、Skyboxを使用していてもColorの値が参照されることに注意してください。またリアルタイムのポイントライトやColor以外の環境光には、反応しませんので合わせてご注意ください。 | _Is_LightColor_Outline |
※ヒント:各カラーの設定が Off
の場合、シーン内のライトの強さに関わらず、「オフにされたカラーは、常にライトのIntensityが1、ライトカラーが白の状態で照らされている状態」になります。
本メニューには、シーン内の環境光設定(Skybox、Gradient、ColorなどのEnvironment Lighting)やライトプローブに対して、UTS2がどの程度反応をするか調整したり、リアルタイムディレクショナルライトがない環境で起動するシェーダービルトインライトの明るさを調整をするアイテムが含まれています。
またVRChatユーザーに便利な機能である、SceneLights Hi-Cut Filterのような白飛び防止機能のON/OFFも、このメニューからコントロールすることが可能です。
アイテム |
機能解説 | プロパティ |
---|---|---|
GI Intensity |
GI Intensity を0以上に設定することで、UnityのLightingウィンドウ内で管理されているGIシステム、特にライトプローブに対応します。 GI Intensity が1の時、シーン内のGIの強度が100%となります。 v.2.0.6で機能強化をしましたので、ライトプローブを含むGIを利用したい場合には、まず1を設定した後(Standard Shaderとほぼ同様の明るさになります)で、必要に応じて調整してください。 |
_GI_Intensity |
Unlit Intensity |
シーン内に有効なリアルタイムディレクショナルライトが1灯もない時に、Environment LightingのSource設定を元にシーンの明るさとカラーを求め、それをUnlit Intensity の値でブーストして光源として使用します(本機能を 「アンビエントブレンディング」 と呼んでいます)。デフォルトは1(アンビエントカラーをそのまま受ける)で、0にすると完全に消灯します。本機能は環境カラーにマテリアルカラーを馴染ませたい時に使いますが、 より暗めに馴染ませたい場合は 0.5~1 程度 に設定し、 より明るくカラーを出したい場合は 1.5~2 程度 に設定するとよいでしょう。(v.2.0.6より、最大値が4になりました。) |
_Unlit_Intensity |
SceneLights Hi-Cut Filter |
シーン内に極端に明るさ(Intensity)が高い、複数のリアルタイムディレクショナルライトやリアルタイムポイントライトがある場合に、白飛びを抑えます。Active にすることで、各々のライトのカラーと減衰特性を保ちつつ、マテリアルカラーが白飛びするような高いインテンシティだけをカットします。デフォルトはOff です。本機能を使用する時には、「LightColor Contribution to Materials」メニュー内の、基本3色の設定がすべてActive になっていることを確認してください。 VRChatユーザーはActive にすることをお薦めします。 ※ヒント:この機能を使っても白飛びが発生する場合、ポストエフェクト側のブルームなどの設定をチェックしてみてください。(特にブルームのスレッショルドの値が1以下だと白飛びしやすくなります。) |
_Is_Filter_LightColor |
Built-in Light Direction |
上級者向け機能として、ビルトインライトディレクション(シェーダー内に組み込まれているバーチャルライトの方向ベクトル)を有効にします。本機能が有効な時、ライトの明るさとカラーは、シーン内の有効なリアルタイムディレクショナルライトの値を使用します。もしそのようなライトがない場合は、アンビエントブレンディングの値を使用します。 | _Is_BLD |
Built-in Light Direction Settings | 以下、ビルトインライトディレクションの設定をします。 | |
Offset X-Axis Direction |
ビルトインライトディレクションによって生成される、バーチャルライトを左右に動かします。 | _Offset_X_Axis_BLD |
Offset Y-Axis Direction |
ビルトインライトディレクションによって生成される、バーチャルライトを上下に動かします。 | _Offset_Y_Axis_BLD |
Inverse Z-Axis Direction |
ビルトインライトディレクションによって生成される、バーチャルライトの向きを前後で切り替えます。 | _Inverse_Z_Axis_BLD |
↑ 左側:GI Intensity = 0、右側:GI Intensity = 1。GI Intensityの数値を上げると、マテリアルカラーにライトプローブのカラーが加算される。
↑ ステージ上に配置された、ベイク用ポイントライトとライトプローブの例。ベイクドライトは、各レンジが重なっても問題ない。ライトプローブは、ユニティちゃんの足元から背の高さまで敷き詰める。
GI Intensity
を0以上に設定することで、ライトプローブなどの加算合成系のGIシステムに対応します。
ベイクドライトと一緒にシーン内にベイクされたライトプローブは、環境補助色としてマテリアルカラーに加算されます。
GI Intensity
が1の時、ライトプローブに焼き付けられたカラーを100%加算します。0の時は、元のマテリアルカラーのままです。
↑ GI Intensity = 0
↑ GI Intensity = 1
アンビエントライトの設定をライトカラーが反映するようになりました。
その結果として、ディレクショナルライトのインテンシティの下限が、シーンのアンビエントライトの設定となります。
VRChatで、アンビエントライトの設定に基づくワールドごとの明るさの差異を自動で調整できます。
なおアンビエントライトからの明るさは、Unlit_Intensity スライダーで調整することができます。Unlit_Intensityは、アンビエントライトの明るさをブーストします。
デフォルトは 1(そのまま)になっています。
また有効なディレクショナルライトがシーン中にない場合、シェーダーに組み込まれたデフォルトライトが有効になりますが、その向きが常にカメラが見る方向に追従するようになりました。
結果、カメラから見て常に良い感じにライティングされるようになりました。
このライトは、アンビエントライトブレンディング動作中に機能します。
以下に、アンビエントブレンディングとUnlit_Intensityの機能を解説するムービーを用意しました。
SceneLights Hi-Cut Filter は、VRChatユーザーには大変便利な機能です。
下に詳しい機能説明のムービーを用意しました。
またムービー中では、PPSでトーンマッパーを設定する方法も簡単に説明しています。
上級者向け機能として、シェーダー内にビルトインされているライトディレクションベクトルを任意の方向に設定できるようにしました。
Built-in Light Directionを有効にしたマテリアルは、それが適応されるメッシュのオブジェクト座標に対して、独自のシェーディング用ライトディレクションベクトルを持つことができるので、専用の固定ライトを持つことと同じ効果が得られます。
そのパーツが落とすドロップシャドウは、シーン中のディレクショナルライトを使いますので、シェーディングの落ち方とドロップシャドウの落ち方を変えることもできます。
Built-in Light Directionのライトカラーは、シーン中のメインとなるディレクショナルライトの設定を使います。
Built-in Light Directionの使い方は、下のムービーを見てみてください。
「ユニティちゃんトゥーンシェーダーVer.2.0」は、 UCL2.0(ユニティちゃんライセンス2.0) で提供されます。
ユニティちゃんライセンスについては、以下を参照してください。
https://unity-chan.com/contents/guideline/
※ヒント: しばしば質問されることですが、UCL2.0で配布されるUTS2のシェーダーファイル(.shader)およびそのインクルードファイル(.cginc)は、これらのファイルを自作の3Dモデルなどに同梱し、商用/非商用を問わず再配布するのは自由です。また、どのようなタイプ/デザインの3Dモデルやコンテンツ(アダルト向けも含みます)に適用しても構いません。
再配布を受けるユーザーの便宜のために、「UTS2 v.2.0.5を使用している」などの後のバージョンアップのために便宜を図る情報を記載することはお願いしたいですが、それ以外には特に掲示すべきものはありません。
各ファイルのヘッダー部には、UCL2.0のライセンス表記がありますので、そちらは修正しないでそのまま同梱することをお願いします。
※コンテンツに採用した場合 :UTS2を使ったステキなモデルやコンテンツができましたら、是非、Unity Technologies Japanにまでご連絡ください。皆さんの力作のご報告を、スタッフ一同、楽しみに待ってます!
UTS2を使う上で便利なTipsを紹介します。
上図のような、Unityのシステムシャドウとカスタムライティングとの境界に生じるアーティファクトの軽減法を解説します
現在のカラースペースが、ガンマカラースペースの場合には、まずリニアカラースペースに変更します。
リニアカラースペースのほうが、アーティファクトの階調変化は柔らかくなる傾向があります。
ライティングおよびシェーダーのパラメタが全て同じ条件だったら、メッシュの分割度を上げます。
メッシュの分割度をあげることで、これらのアーティファクトの多くは消失します。
図①の影の境界の位置では、Unityのシステムシャドウとカスタムライティングの閾値より作られる影が、ほぼ一致しています。
そのことは、この状態で Receive System Shadows
をオフにしても、影の境界位置が動かないことからわかります。
図①の状態の時に、Base/Shade Feather
スライダーを右に動かすと、アーティファクトが発生します(図②)。
これは、Unityのシステムシャドウの内側にカスタムライティングの影の閾値が食い込むために発生します。
このような時には、図③のように BaseColor Step
スライダーも右に動かしてやることにより、カスタムライティングが作る影の領域を増やしてやります。
すると良い感じにアーティファクトも消失し、境界ぼかしが発生します。
また同様に、System Shadows Level
スライダーを使って、システムシャドウ側のレベル補正をすることで、アーティファクトを消すこともできます。
※まずはこちらからお試しになることをお薦めいたします。
最後に、キーライトとして球を照らしているディレクショナルライトのバイアスをあげてやるという方法があります。
バイアスを上げることで、システムシャドウの位置が変化するからです。
ただしバイアスを上げすぎると、今度は落ち影全体の発生位置がオブジェクトから大きくずれることも発生しますので、注意が必要です。
シーン内に4つ以上のリアルタイムポイントライトのレンジが重なっている場所がある場合、UTS2を適用したモデルに当たるライトがフリップすることがあります。
これは、「フォワードレンダリングでは、リアルタイムポイントライトは4つまで」というUnityの制限に基づく現象で、UTS2でも仕様となります。
本ムービーでは、そのようなフリップ現象をなくす方法を紹介します。こちらはUTS2だけでなく、Stadard Shaderなどでもそのまま使えます。
こちらでは、Twitterなどを通じて寄せられたトラブル事例につきまして、マニュアルを見ているだけでは解決が難しそうなものをピックアップして紹介いたします。
ご参考にしてください。
図中の矢印の位置の黒い影が、それに当たります。
この例では、予期していない影が出ているほうのパイプは、UVが展開されていません。同様にUVが潰れている場合も、このように予期しない影が出ることがあります。
このような場合、再度DCCツールでモデルを開いてUVをきちんと展開すると、右のパイプのように正常な表示になります。
DCCツールにMayaを使っている場合には、滅多に発生しませんが、Blenderを使っている場合や、CADなどのアプリからデータをインポートした場合にご注意いただくとよいかと思います。
※スクリーンショット提供:@NonameReUnder さん
ごくたまに、VRChatサーバにアバターをアップロードしてHMDで見たところ、左右の視差がずれてしまっているという報告を受けることがあります。
こちらは詳しい原因は不明ですが、なんらかの理由でVRChatのサーバにアップロードされたシェーダーが壊れてしまっているためと考えられています。
この症状が発生した場合、以下の手順のいずれかで改善されますので、お試しください。
-
アバターが含まれるプロジェクトを新規に作成し直して、再度VRChatにアップロードする。
-
プロジェクトから、UTS2が入っているAssets内のToonフォルダを削除する。続いて、UTS2をインストールし直してから、再度VRChatにアップロードする。
1もしくは2の手順を行った後で、VRChatサーバへ再度アップロードを試みると、上手くいくとの報告を受けています。
おそらくVRChatサーバの混み具合等も関係していると思われますので、もし不具合が発生した場合には、時間を変えて何回かアップロードを試みるとよいとのことです。
※スクリーンショット提供:@nD_ntny さん
VRChatで使われている、Post-Processing Stack(PPS)に含まれるBloom効果が酷く光ってしまうことが、まれにあります。
※なお本不具合は、@nD_ntny さんによれば、UTS2やStandard Shaderでは発生しないとのことです。
こちらはPPS側の不具合と思われますが、現象としては、スケールが0のパーティクルが画面内にあったり、UVが一点に集中しているパーツが画面内にあると発生します。カメラの角度によっては、UVは正常でもカメラに対して面が水平になる瞬間にも発生することがあります。特にパーティクルで発生しやすいので、スケールには気をつけたほうがよいでしょう。
本エラーはゼロ除算エラーに基づくもののようですが、VRChat内のPPSには対策が施されていないようで、現在でも症状が見られます。
さらに詳しい情報に関しては、以下をご確認ください。
- Bloom White-out
- [V2] Temporal AA creates NaNs (or infinities?) when handling alpha blended particle shader