shader吧只有一个subshader吧可以吗

因为Unity中基础的固定功能shader吧的知识點基本上讲完下期开始就要准备讲表面着色器(Surface shader吧)了,所以在文章开头让我们复习和更深入了解一下Unity中shader吧的三种形态。

在Unity中shader吧便鈳以分成如下三种基本类型:

// 第二步:在面板中设置相关鼠标速度 // 第二步:在面板中设置相关鼠标速度


Subshader吧 はタグを使用して、いつどのようにしてレンダリングエンジンでレンダリングするか示します

タグの TagName1 が値として Value1、タグの TagName2 が値として Value2 であることを指定します。タグは好きなだけ指定できます

タグは基本的に Key-Value ペアです。 の中でタグは、Subshader吧 順番や他のパラメーターを判定するのに使用します次のタグは Unity により認識され、Pass の中でなく 必ず Subshader吧 セクションの中とする、ことに注意ください。

Unity が識別するビルトインタグに加え、ご自身のタグを使用してそれらをクエリーにかけることもできますそれには を使用します。

Queue (キュー)によりオブジェクトを描画する順番を判定できますシェーダーは、オブジェクトが属するレンダリングキューを判定し、これによっていずれかの透過シェーダーが不透明のオブジェクトを描画した後に描画する、といったように判定していきます。

4 つの定義済みのレンダリングキューがありますが、定義済みのキューの間に追加することはできます定義済みのキューは

  • Background - このレンダリングキューは最初にレンダリングされます。一般的には、背景に本当に必要とさするもののみに使用します
  • Geometry (default) - ほとんどのオブジェクトに使用されます。不透明なジオメトリはこのキューを使用します
  • AlphaTest - アルファテストする形状でこのキューを使用します。Geometry とは別のキューであるのはアルファテストのオブジェクトをすべての不透明のオブジェクトの後に描画するほうが効率的であるためです
  • の後に、後ろにあるものから先に順番で、レンダリングされます。アルファブレンディングするもの(すなわち、デプスバッファに書き込みしないシェーダー)はすべて、ここにあるべきです(ガラス、パーティクルエフェクト)
  • Overlay - このレンダリングキューはオーバーレイエフェクトのためです。最後にレンダリングするものはここにあるべきです(例えば、レンズフレア)
// シェーダーのボディの残りの部分...

透過キューでレンダリングする方法の例

特別な用途において、間にキューを使用することができます。各キューは内部で整数インデックスにより表現され、Background は 1000、Geometry は 2000、AlphaTest は 2450、Transparent は 3000、そして Overlay は 4000 ですもしシェーダーがつぎのようなキューを使用する場合:

これによりオブジェクトはすべての不透明のオブジェクトの後にレンダリングされますが、レンダリングキューが 2001 ( Geometry に 1 を加算)のため、透過オブジェクトより先にレンダリングされます。これは、他のオブジェクトのグループの前に描画をさせたい場合に便利です例えば、多くの場合に透明な水は不透明なオブジェクトの後に、ただし透明なオブジェクトの前に、描画されるべきです。

2500 (“Geometry+500”) までのキューは「不透明」とみなされ、オブジェクトの描画順を最良パフォーマンスの為に最適化します これより大きいレンダリングキューは「透明なオブジェクト」用とみなされ、オブジェクトが距離によってソートされ、レンダリングは最も遠いものからを開始され最も近いもので終わります。スカイボックスは完全に不透明なオブジェクトと完全に透明なオブジェクトの中間で描画されます

RenderType タグはシェーダーを定義済みのいくつかのグループに分類します。これは により使用され、多くの場合 を生成するのに使用します

シェーダー(大抵はオブジェクトスペースで頂点を変形させるもの) のなかには、 を使用していると、動作しないものがあります。– ドローコールバッチングは、すべてのジオメトリをワールドスペースに変換するので、オブジェクト空間が失われるためです

DisableBatching タグを使って、どのようにするかを指示できます。3 つの値に設定できます“True” (このシェーダーでは、常にバッチングを無効にする)、“False” (バッチングを無効にしない、デフォルト設定)、“LODFading” ( LOD fading がアクティブな時は、バッチングを無効にする、大抵は樹木で使われます)。

もし ForceNoShadowCasting が使用されていて、値が “True” である場合、このサブシェーダーを使用するオブジェクトはシャドウを投影しませんこれは、透過オブジェクトに shader吧 Replacement を使用している場合や、別のサブシェーダーからシャドウパスを継承したくない場合にもっとも便利です。

もし IgnoreProjector が使用されていて、値が “True” である場合、このシェーダーを使用するオブジェクトは により影響されませんこれは、Projectors が影響するためのよい方法がないため、部分的に透過であるオブジェクトで便利です。

シェーダーがスプライトに用いられる場合やアトラス(を参照)にパッキングされたとき動作しない場合、CanUseSpriteAtlas タグを “False” に設定します

PreviewType は、マテリアルのインスペクタープレビューがどのようにプレビューを表示するか示します。マテリアルはデフォルトで球体(sphere)として表示されるが、PreviewType タグは “Plane”(2D のように表示する)や “Skybox”(空テクスチャ(Skybox)のように表示する)にも設定できます

パスにもタグを割り当てることができます、 を参照してください。

我要回帖

更多关于 shader吧 的文章

 

随机推荐