ここではGraphicsToolsStandardSaderで使用できる機能や使い方を解説します。
シェーダーを使用するうえですべての機能を知っている必要はありませんので知りたい機能を目次から選択ください。
- 〇基本機能
- 〇RenderingMode
- 〇ReneringOption
- 〇Light Mode(ライトをどう受けるか?)
- 〇Distance Light
- 〇Specular Highlights(光沢のハイライト)
- 〇Spherical Harmonics(環境になじませる)
- 〇Non-Photorealistic Rendering(トゥーン調にする)
- 〇Reflections(鏡面効果)
- 〇RimLight(縁を発光させる)
- 〇Vertex Colors(モデルの頂点カラーを使用)
- 〇Vertex Extrusion(モデルの膨張縮小)
- 〇Clipping Border(オブジェクトのカット)
- 〇Near Fade(ユーザーとの距離に応じてフェードイン、フェードアウト)
- 〇Fluent Options
- 〇Advanced Option
〇基本機能
GraphicsToolsStandardShaderの基本機能はRenderingModeに加えMainMapsの項目になります。
このブロックでマテリアルの基本的な見た目を構築することができます。
〇RenderingMode
マテリアルの性質を設定します。
表示 | 説明 | 透明度 |
---|---|---|
Opaque | 透明度を持たない不透明なオブジェクトの描画を行う | × |
Cutout | Png画像による切り抜きなど不透明、透明と描画を分ける | 透明か不透明か |
Fade | 非物理学的な透明を行う | 半透明も可能 |
Transparent | 物理学的な透明を行う | 半透明も可能 |
Additive | エフェクトなどに使用するオーバーレイを行う | 半透明も可能 |
Custom | テンプレートから自身でカスタマイズする | 半透明も可能 |
Opaque以外を選択している際に次のような警告が表示されることがあります。
これは深度を取得するZWriteが有効になっていない場合に表示されるダイアログで、問題ない場合は無視をしてかまいません。
FixNowを選択することでZWriteがオンになりますが、代わりにRenderingModeがCustomへと変わります。
・もっと詳しく
〇CullMode(描画する面)
Cullとはカリングを指し、描画の最適化にかかわる機能です。
メッシュには表面と裏面の向きの情報を保持しており、Cubeなどの立方体のようなシンプルの形の場合は通常表面のみが描画され、メッシュの裏面は見えることはありません。
このような通常メッシュの表面のみが見え、裏面が見えないという3Dモデルを閉じたメッシュと呼ぶこともあります。
このような場合透過率を持ったシェーダーのような特殊な場合を除いて裏面の描画計算は必要ありません。
CullModeを指定することで指定した面を描画しないということができます。このため実際に描画される面はCullModeの反対の面になります。
◆CullMode Back
◆CullMode Front
◆CullMode Off
・もっとくわしく
〇Albedo(メイン色)
MainMapという表示の冒頭にはAlbedoと呼ばれるプロパティがあります。
この値はメインとなる画像(テクスチャ)と色を指定できます。
〇AlphaFade/AlphaCutout(透明度の閾値)
AlphaCutoffはレンダリングモードがCutoutの場合、AlphaFadeはレンダリングモードがFade、Transparent、Additive、Customの場合に表示されます。
それぞれ透明度であるアルファ値の閾値を指しており、AlphaCutoffの場合指定した値より下のアルファ値を持つピクセルは破棄され透明になり、それ以上のアルファ値を持つピクセルは描画されるという仕組みになっています。
AlphaFadeは指定された透明度に応じて全体的な透過率が決まってきます。
〇ChannelMap(軽量な表現を行う)
ChannelMapはGraphicsTools StandardShader及びMRTK StandardShaderに特有の機能です。
ChannelMapを使用することで金属光沢(メタリック)、オクリュージョン、発光、スムースネスの4つの情報を制御できます。
ChannelMapがあることによって本来であればメタリックマップ、オクリュージョンマップ、発光マップ、スムースネスマップの4つの画像が必要であるところを1つの画像にまとめてしまうことができ、GPU上での処理の軽量化を行っています。
ChannnelMapではそれぞれの値をRGBAの画像の成分に割り振ることで実現しています。
・もっと詳しく
ChannelMapの作成方法は以下で紹介しています。
〇ノーマルマップ(質感やディティールアップ)
ノーマルマップはほかの一般的なシェーダーでもよく使用されるパラメータでノーマル=法線=面の向きの情報をカスタマイズする機能とその画像です。
ノーマルマップを使用することでローポリゴンでありながら細かい凸凹を与えることや本来は存在しないディティールを与えて質感を向上させることができます。
MRGT GraphicsTools StandardShaderではノーマルマップの強度をカスタマイズすることもできます。(v4.0以降のバージョンで使用できます。)
・もっと詳しく
準備中
〇Emission 発光
Emissionはその名の通り発光表現を行うことができます。
MRTK StandardShaderではEissionの機能は色と強度の情報だけを扱うことができ、対象のマテリアルを使用している部分全体が発光する仕様となっていましたが、GraphicsToolsStandardShaderではEmissionMapの機能が実装され、オプションで画像を指定することで細かく発光のパターンを変えることや一部のみが発光するようなマスク表現を行うことができるようになりました。
この機能実装には筆者が担当させていただいています。
・もっと詳しく
〇TriplanerMap(モデルのUVに依存しないテクスチャサンプリングを行う。)
TriplanerMapは例えば地面やSpatialMapで動的に張られたメッシュなどへ画像をサンプリングする際に使用されるオプションです。
通常3DモデルはUVと呼ばれるテクスチャのどの部分をメッシュのどこの部分に貼るのか?という情報を持っています。
TriplanerMapを使用することでこの情報を無視して画像を張ることができます。
簡単に説明するとTriplanerMapを使用することで画像のゆがみや破断がなくなります。
ただし通常のサンプリングに比べて処理が重いことが知られていますので使用は最低限に抑えるべきと言われています。
・もっと詳しく
準備中
〇Super Sampling AntiAliasing(画像のノイズを取り除く)
SSAAは画像を使用しているオブジェクトに対して使用するオプションになります。
通常の場合画像を使用しているオブジェクトから一定の距離が離れた場合MiniMapと呼ばれるもとの画像を小さくした画像へ切り替えられます。
この仕組みは次のUnityの動画がわかりやすいです。
通常MiniMapを使用することで見た目がぼやけてしまうことがありますが、SSAAを使用することでぼやけがなくはっきりと描画を行うことができます。
・もっと詳しく
〇ReneringOption
レンダリングオプションはその名の通り、基本機能に追加して使用できるアクセントになります。
GraphicsToolsStandardShaderの機能の多くを占めるのがこのRenderingOptionになります。
・もっと詳しく
〇Light Mode(ライトをどう受けるか?)
LightModeはv4.0以降で新たにまとめられた機能です。
それ以前はDirectionalLightのチェックボックスで構成されていました。
Enumで3種類から選択することになります。
表示 | 説明 |
---|---|
Unlit | Unityのライトの影響を受けない |
Lit - Directional | UnityのDirectionalLightを使用する |
Lit - Distant | DistantLightのを使用する |
Unlitの場合はUnityのライトの影響を受けない都合上スムースやメタリックなどのパラメータは使用できなくなります。
またライトモードによって使用できるオプションが変わります。
・もっと詳しく
準備中
〇Distance Light
Light ModeがDistance Lightの場合、Unity内にDistanceLightコンポーネントをアタッチしたオブジェクトを光源として使用することができます。
Distance Lightコンポーネントは、DirectionalLight の代わりとして使用することができ、太陽や月など、環境にとって重要な光源を再現することができます。
これはDirectionalLightとは別に使用できるため複雑な表現が可能となっています。
・もっと詳しく
・C#側の実装と使い方
〇Specular Highlights(光沢のハイライト)
Specular Highlightsはメタリックを使用している場合など反射を使用している場合にハイライトを使用するかという機能です。
・もっと詳しく
準備中
〇Spherical Harmonics(環境になじませる)
日本語では球面調和関数と呼ばれています。
ライトプローブを使用してシーン内の環境光を近似する機能です。
・もっと詳しく
準備中
〇Non-Photorealistic Rendering(トゥーン調にする)
この機能は非写実的描画を行う機能です。
日本ではToonShaderとも呼ばれる機能で影がはっきりつくことでオブジェクトのメリハリがつき、コミック調な印象を受ける機能です。
筆者のおすすめの使い方としてはNormalMapと併用することでよりコミック調を演出できます。
・もっと詳しく
この機能は筆者が提案、実装を行っています。
〇Reflections(鏡面効果)
Redlectionsを有効にしている場合Smoothnessの値に応じて周囲の環境光を取り入れた反射を実現します。
・もっと詳しく
準備中
〇RimLight(縁を発光させる)
RimLightを有効にすることでオブジェクトの淵部分にほんのり光が付くような見た目を実現できます。
Powerの係数で強さを変えることもできます。
透過するオブジェクトと使用するととくに相性が良いです
・もっと詳しく
準備中
〇Vertex Colors(モデルの頂点カラーを使用)
Vertex Colorsとは頂点カラーのことを指します。
これはモデルの頂点が保持している色情報を使用するという意味でテクスチャなどを使用せずモデル単体で完結するため軽量ですが、反面モデル側の実装が必要です。
・もっと詳しく
準備中
〇Vertex Extrusion(モデルの膨張縮小)
Vertex Extrusionとは直訳すると頂点押し出しという意味です。
これはその名の通りモデルのもつ頂点を法線方向に展開(押し出し)する機能で、スケールが変わるように見えますが、UnityのTransform.scaleを変更しているわけではないのでこれは見た目上のものになります。
また、メッシュ事に分離されているモデル(=面同士がつながっていないモデル)ではこの機能によってメッシュが散る、集まるような特殊なアニメーションを行うこともできます。
・もっと詳しく
〇Clipping Border(オブジェクトのカット)
Clopping BorderはMRGTで提供されているスクリプトと併用して使用することが想定されている機能です。
Clipping Borderを使用することでオブジェクトの切り抜きを行うことができ、これによってたとえば人体のモデルの皮膚だけクリッピングし、筋肉や骨を表示させるといったような使い方ができます。
またColorとしてカット面から色を付けることができ、Widthで大きさを変えることができます。
・もっと詳しく
準備中
〇Near Fade(ユーザーとの距離に応じてフェードイン、フェードアウト)
Near Fadeはユーザーが近づいた場合にオブジェクトにFadeを掛けるという機能です。
Nearと名前はついていますが、パラメータ次第ではFar Fadeも行うことができます。
・もっと詳しく
準備中
〇Fluent Options
FluentとはGraphicsTools StandardShaderはMicrsoftの提供するFluent Designeに基づいて開発、提供がされています。
これはMicrosoftの提唱するUIデザイン思想で、以下の要素から構築されています。
ここではこの思想に基づいたオプションが提供されています。
〇Hover Light(ポインターがあたっている個所にハイライト)
Hover Lightを有効にした場合HoverLightコンポーネントを使用しているオブジェクトと接触することでメッシュの表面にハイライトがあたります。
MRTKを使用している場合はHandRayなどに見られる機能で、CursorVisualオブジェクトにHoverLightコンポーネントがアタッチされています。
基本的な設定はHoverLightコンポーネントから行います。
例えば次の例ではHoverLightを赤に設定しています。
またOverride Colorのオプションを使用することでそのマテリアルの場合の色を指定できます。
・もっと詳しく
準備中
〇Proximity Light(接近時にハイライトを出す)
Proximity Lightはその名の通りProximity Lightコンポーネントがアタッチされているオブジェクトが接近した場合に表示されるハイライトです。
オプションとしてOverride Colorを使用することができ、有効にすることでCenter Color(中心色)、Middle Color(中間色)、Outer Color(外縁色)のカスタマイズができます。
オプションとしてSubtractive(減算)が選択できます。
ライトは通常加算方式で行われます
"描画結果"="オブジェクトの色"+"ライト"
しかしながらこのオプションを有効にした場合ライトの計算が加算ではなく減算になります。
"描画結果"="オブジェクトの色"-"ライト"
オブジェクトの色が黒の場合わかりやすいです。
最後のオプションがTwo Sidedです。
これはオブジェクトの背面にもProxmityLightを適応する機能です。
・もっと詳しく
準備中
〇Border Light(UVに合わせて縁を表示)
Widthはライトの大きさになります。またBrightnessは光の強さになります。
モード | 説明 |
---|---|
Brightness | デフォルト |
HoverColor | HoverLightの色を利用する |
Color | Border Colorを上塗りする |
Gradient | GradientColorの色を使用する |
・もっと詳しく
準備中
〇Round Corners(エッジをまるくする)
Round Cornersを使用するとエッジを丸くすることができます。
これはMRTKのUIなどでもよく使用されている表現方法になります。
オプションのIndependent Cornersを使用するとエッジごとに曲線を調整できます。
Radiusは全体の曲線を管理し、Marginは角だけではなく全体的に縮小を行うことができます。
Edge Smoothing Modeはアンチエイリアシングの設定になります。
Automaticの場合シェーダーがアンチエイリアシング値を計算します。
・もっと詳しく
準備中
〇Inner Glow(UVに沿って縁を発光させる)
Innner GlowはRimLightとは異なりUVベースでの縁発行を行うことができます。
ColorがInner Glowの色、Powerが強さになります。
・もっと詳しく
準備中
〇Gradient Mode(グラデーションをかける)
Gradient Modeはグラデーションをかける機能です。
いくつかのタイプがあります。
Gradient Mode Iridescenceはユーザーから見たオブジェクトの角度や位置によって色味が変わるように見える機能です。
画像を割り当てることができ、Intensityで強さ、Thresholdは角度の閾値、Angleは割り当てた画像のTilingを行えます。
Gradient Mode FourPointはUV座標の四隅を基準として色を配置できるモードです。
Gradient Mode Linearはカラーカーブを用いて自分でグラデーションを作ることができる機能です。
・もっと詳しく
準備中
〇Environment Coloring(ユーザーがオブジェクトを見る角度で色を変える)
Environment Coloringはユーザーがそのオブジェクトを見る角度によって色が付く機能です。
・もっと詳しく
準備中
〇Blur Mode(URPでぼかしをかける機能)
こちらはAcrylicの機能です、URPのRenderFeatureと併用してぼかし表現を行うことができます。
・もっと詳しく
〇Advanced Option
Advanced Optionはシェーダーとしての追加機能です。
〇Render Queue Override(描画順)
Render Queue Overrideは描画順にかかわるRender Queueを変更するパラメータです。
デフォルトで-1となっていますが、デフォルト以外の値はRenerQueueと連動しており、例えば3000に設定した場合はRenderQueueも3000となります。
あるオブジェクトより常に手前に描画したいといった場合に使用します。
〇Enable GPU Instancing(少ないドローコールで描画)
デバイスによってはGPU Instancingを使用することで数多くのオブジェクトを少ないドローコールで描画できます。
詳細はUntiyのドキュメントに詳しいです。
〇Enable Stencil Testing(ステンシルの設定)
ステンシルとはシェーダーが保有できる値で、オブジェクト同士でステンシルを比較することで例えばあるオブジェクトを通して初めて見えるようにするという表現ができます。
この際にStencil Referenceが保持するステンシル値、Stencil Comparisionがほかのステンシル値とどのような場合に比較するのか? Stencil Operationは比較したステンシルのピクセル色をどのように操作するのか?というパラメータがあります。
・もっと詳しく
準備中