|
説明 |
説 |
SubShaderの中でしか使えない |
Queu(レンダーキュー) |
通称 指定した値が小さいほど先に描画される CustomRenderQueueが0以上の時はここで設定された値は無視される
2500までは手前のオブジェクトから描画され、 2501以降は奥のオブジェクトから描かれます。
例) 自然数と用意された定数を使用できる Tags { "Queue" = "1000" } Tags { "Queue" = "Geometry" } // 2000 Tags { "Queue" = "Geometry+1" } //2100
Unity描画順 |
手前から後方へ(後方のオブジェクトが深度テストで破棄されるため) Background(1000) : 背景 Geometry(2000) : 不透明なオブジェクト AlphaTest(2450) : アルファテストをする(透明)オブジェクト
後方から手前へ(手前に透明なオブジェクトがあると深度バッファに書き込まれていないので合成されてしまうため) Transparent(3000) : ガラスなどアルファブレンディングしない(深度バッファに書き込みを行わない)オブジェクト Overlay(4000) : レンズフレアなどオーバーレイ効果を行うオブジェクト https://docs.unity3d.com/ja/2019.4/Manual/class-LensFlare.html |
RenderType |
カメラのレンダリング対象のオブジェクトのシェーダーを切り替える
//指定したシェーダーに切り替える _camera?.SetReplacementShader(Shader.Find("シェーダー名"), null);
// シェーダーのTagと引数Tagが一致しているなら指定したシェーダーに切り替わる // 一致しているTagがない場合は描画されない _camera?.SetReplacementShader(Shader.Find("シェーダー名"), "Tag名");
Unity側で用意されたシェーダーを使用することができる 例) Tags { "RenderType" = "Opaque" }
詳しい解説 |
Opaque: ほとんどのシェーダー(Normal、Self Illuminated、Reflective、Terrain シェーダー)。 Transparent: ほとんどの部分が透過なシェーダー(Transparent、パーティクル、フォント、Terrain 追加パスシェーダー)。 TransparentCutout: マスキングされた透過シェーダー(Transparent Cutout、2 パス植生シェーダー)。 Background: Skybox シェーダー。 Overlay: ハロー、フレアシェーダー。 TreeOpaque: Terrain エンジン Tree の樹皮。 TreeTransparentCutout:Terrain エンジン Tree 葉っぱ。 TreeBillboard: Terrain エンジンビルボードの 木。 Grass: Terrain エンジンの 草。 GrassBillboard: Terrain エンジンビルボードの草。 |
DisableBatching |
グラフィックスAPIを使用して、画面に描画を行う際に呼び出す命令の事を DrawCallといい、 複数のオブジェクトをまとめて一つのDeawCallで行うことをという。 ドローコールバッチング
ダイナミック(動的)バッチング スタティック(静的)バッチング
バッチングされるとすべてのジオメトリがWorldSpaceに変換されるため、ModelSpaceでの座標系がShader内で利用できなくなります。 ModelSpaceしたい場合はバッチングを無効にする必要があります。 |
False : バッチングを有効 デフォルト True : バッチングを無効 LODFading : LOD フェードがアクティブな時は、バッチングを無効にする |
ForceNoShadowCasting |
キャストシャドウを強制的に禁止する際に使用します。 例) Tags {"ForceNoShadowCasting" = "True"} |
True : キャストシャドウを投影しない False : キャストシャドウを投影する |
IgnoreProjector |
Projectorコンポーネントの影響を受けないシェーダーを作成する際に使用します。 Projector コンポーネントは投影テクスチャマッピング(任意のテクスチャをプリミティブの表面に描写する。壁に弾痕を刻むような演出で使用する)を実行する機能です Projectorコンポーネント
半透明オブジェクトの表面に投影されると意図しない結果になるので、このタグで強制的にオフにします。 例) Tags {"IgnoreProjector" = "True"} |
True : プロジェクターコンポーネントの影響を受けない False: プロジェクターコンポーネントの影響を受ける |
CanUseSpriteAtlas |
Sprite オブジェクト用に実装しているシェーダーの中で、テクスチャがアトラス化されている 場合には使用できないことを明示します。以下のようにタグを宣言すると有効になります。 |
True False |
PreviewType |
マテリアルインスペクタのPreview画面の3D形状 基本的に必要ない |
Sphere : 球体(初期値) Plane : 2D Skybox : スカイボックス |
LOD宣言 |
|
|
LOD(シェーダーLOD) |
LODに設定した値以下で一番大きい閾値が設定されている SubShader が実行されます。
モデル単位 Shader.maximumLOD 全モデル Shader.globalMaximumLOD |
|
|
|
|
PASS宣言 |
Name |
Passに名前をつける
例) Name "PassName" 全て大文字扱いになるのでPASSNAMEになっている |
|
Taggs |
Passの役割を指定する |
|
LightMode |
Passがどのライトの影響下で実行されるかを指定します。 LightMode に応じて必要なデータを Passに渡します。
また、設定された LightMode によっては、同じPass が複数回実行されたり、Pass の実行が飛ばされたりもします。 SubShader 内に記述された複数のPass が、それぞれどのタイミングで実行されるかは、使用しているレンダリングパスと、設定されているLightMode の内容によって決まります。 例) Tags { "LightMode" = "ForwardBase" } |
フォワードレンダリング Always 常にレンダリングされる。ライティングは適用されない。 ForwardBase メインのディレクショナルライト、頂点単位ライト、アンビエントライト、SH(球面調和)ライトを適用する。 ForwardAdd ピクセル単位ライトを適用する。ライトの数だけ Pass を実行する。 ShadowCaster オブジェクトの深度をシャドウマップや深度テクスチャに描画する。
ディファードレンダリング Deferred レンダリングパス実行時に、G-Buffer をレンダリングするために使用 MotionVectors オブジェクトの動きベクトルを計算する為に使用 |
|
|
|
Stencil |
ref |
リファレンス値 |
0-255 |
Comp |
ステンシルバッファとリファレンス値をどのように比較するか |
Greater ピクセルのレファレンス値がバッファの値より大きい場合のみレンダリングします。 GEqual ピクセルのレファレンス値がバッファの値より大きいか等しい場合のみレンダリングします。 Less ピクセルのレファレンス値がバッファの値より小さい場合のみレンダリングします。 LEqual ピクセルのレファレンス値がバッファの値より小さいか等しい場合のみレンダリングします。 Equal ピクセルのレファレンス値がバッファの値と等しい場合のみレンダリングします。 NotEqual ピクセルのレファレンス値がバッファの値と等しくない場合のみレンダリングします。 Always 常にステンシルテストをパスさせます。 Never 常にステンシルテストを通しません。 |
Pass |
ステンシルテストをパスした場合、バッファの内容をどうするか決めます。 |
Keep バッファの現在コンテンツを保持します。 Zero バッファに 0 を書き込みます。 Replace リファレンス値をバッファに書き込みます。 IncrSat バッファの現在値をインクリメントさせます。値がすでに 255 の場合は 255 のままです。 DecrSat バッファの現在値をデクリメントさせます。値がすでに 0 の場合は 0 のままです。 Invert すべてのビットを反転させます。 IncrWrap バッファの現在値をインクリメントさせます。値がすでに 255 の場合は 0 にします。 DecrWrap バッファの現在値をデクリメントさせます。値がすでに 0 の場合は 255 にします。」 |
Fail |
ステンシルテストに失敗した時 |
例) Stencil { Ref 2 // リファレンス値 Comp Always // 常にステンシルテストをパスさせます。 Pass Replace // リファレンス値をバッファに書き込みます。 } |
ZFail |
ステンシルテストは成功したが、深度テストに失敗した場合 |
|
レンダリングステート |
説明 |
値 |
ColorMask |
出力するチャンネルを指定できる |
0:描画しない RGBA:全て描画 RとGとBとAの好きな組み合わせ |
Cull |
カリングの設定 |
Off : カリングしない Back : 背面をカリング front : 正面をカリング |
ZWrite [On | Off] |
深度値を書き込むかどうか決める |
On : Zバッファを書き込む Off : Zバッファに書き込まな |
Ztest |
深度テスト |
Less 深度バッファの値より小さい Greater 深度バッファの値より大きい LEqual 深度バッファの値より小さいか同じ(デフォルト) GEqual 深度バッファの値より大きいか同じ Equal 深度バッファの値と同一 NotEqual 深度バッファの値と不一致 Always 常に成立 |
Offset |
Zファイティングが発生しそうな際に片方のプリミティブのピクセルの深度を算出する際にオフセット値が加算される 例)Offset -1,-1 |
|
Blend |
Blend [SrcFactor] [DstFactor](ソースファクター)(デストファクター)
計算式 フラグメントシェーダーの出力値 * SrcFactor + フレームバッファの出力値 * DstFactor |
|
AlphaToMask |
Alpha-to-coverage というアンチエイアリシング処理を有効にします。 これは MSAA(※1)では滑らかにならない,アルファテストで破棄された箇所の境界線を滑らかにします。草木のテクスチャのように、テクスチャが複雑に切り抜かれる物で効果を発揮します。 例)AlphaToMask On
SSAA:隣接するピクセルの平均色 MSAA:隣接するピクセルの深度値の差が大きければ境界部分、小さければ物体内部のピクセルと判断する。 ジャギーが発生するのは境界部分なので、境界にあるピクセルでだけ、シェーディングするサンプルの数を増やせば、物体内部の画素に対するシェーディング評価は1回でいいので、大幅に計算時間が削減できる。 しかし、プリミティブの境界にしか適用されないので、 ポリゴン内部に生じた描画されない(=アルファテストで破棄された)ピクセルの境界に対しては効果を発揮しません。 Alpha-to-coverage:α値0.5のとき 0.5 x 元のサンプリング数のピクセルを取得することで、α=50%でのブレンド処理と近い画像になります。 α=0のピクセルは出力しないため、アルファテストは不要になります。
https://zerogram.info/blog/?p=2029 |
|
GradPass |
フ レ ー ム バ ッ フ ァ の 値 を テ ク ス チ ャ として取得します GrabPass{} Pass内に宣言する sampler2D _GrabTexture; 現在の描画結果のテクスチャ ComputeGrabScreenPos(o.vertex); Uv値を求めるために使用 |
ガラスの屈折を表現するには、周囲の色を取得して歪みとし て描写する必要があります。GrabPass を使えば実質的にフレームバッファ全体にアクセスできるので、 そのような表現に必要な情報の取得が可能になります。 |
Fallback |
全ての SubShader が実行できない時に指定したシェーダー名を使用する 例)Fallback "name" 引数に "Off" を設定した場合、実行できる SubSahder をハードウェアが見つけられなかった場合も、 警告を出さず、フォールバック処理も行いません。 例)Fallback Off |
|