シェーダを書く場合のパフォーマンスのヒント
カスタム マテリアルエディタ

Replaced Shadersでのレンダリング

いくつかのレンダリングエフェクトは異なるセットのシェーダを用いてシーンをレンダリングする必要があります。例えば,優れたエッジ検出には,表面の凸凹が異なるエッジを検出するために,シーンに法線のあるテクスチャが必要です。他のエフェクトでも,シーンにデプスのあるテクスチャが必要だったり,と続いていきます。これを達成するためには,シーンを,全てのオブジェクトを置き換えたシェーダ(Replaced Shader)でレンダリングすることが出来ます。

シェーダの置き換えをスクリプティングで行うためには,Camera.RenderWithShader またはCamera.SetReplacementShader 関数を使用します。両方の関数はshaderreplacementTag を使用します。

次のように動作します:カメラはシーンを通常にレンダリングします。オブジェクトはマテリアルを使用しますが,実際に使用されることになるシェーダが変更されます:

  • replacementTag が空の場合,シーンの全てのオブジェクトは,指定されたReplaced Shaderでレンダリングされます。
  • replacementTag が空でない場合,レンダリングされる各オブジェクトについて:
    • The real object’s shader is queried for the tag value.
    • If it does not have that tag, object is not rendered.
    • A subshader is found in the replacement shader that has a given tag with the found value. If no such subshader is found, object is not rendered.
    • Now that subshader is used to render the object.

もし全てのシェーダが,例えば,“RenderType” タグの値に “Opaque” ,“Transparent” ,“Background” ,“Overlay”があった場合,不透明なオブジェクトのみレンダリングするReplacement Shaderを,RenderType=Solid tag であるひとつのサブシェーダを使用して,記述することが出来ます。他のタグのタイプはReplacement Shaderで見つからないため,オブジェクトはレンダリングされません。あるいは複数のサブシェーダを,異なる“RenderType” のタグの値のために,記述することが出来ます。偶然に,全てのUnityビルトイン シェーダは“RenderType” タグのセットを持っています。

Lit shader replacement

Shader Replacement を使用するとき,シーンはカメラで設定されたレンダリングパスを使用してレンダリングされます。つまり Replacement に使用されるシェーダは シャドウ および ライティングパス を含めることが出来るということです(サーフェイス シェーダ を Shader Replacement に使用できます)。これは特殊エフェクトのレンダリング および シーンのデバッグに便利です。

Unityビルトイン シェーダでのReplacement Shaderタグ

全てのUnityビルトイン シェーダは“RenderType” タグのセットを持ち,Replaced Shaderで使用することが出来ます。タグの値は次の通りです:

  • Opaque: ほとんどのシェーダ(Normal ,Self Illuminated ,Reflective ,Terrainシェーダ)。
  • Transparent: ほとんどの部分的に透過なシェーダ(Transparent ,パーティクル,フォント,Terrain追加パスシェーダ)。
  • TransparentCutout: マスキングされた透過シェーダ(Transparent Cutout ,2パス植生シェーダ)。
  • Background: Skyboxシェーダ。
  • Overlay: GUITexture,ハロー,フレア シェーダ。
  • TreeOpaque: TerrainエンジンTreeの樹皮。
  • TreeTransparentCutout:TerrainエンジンTree Leaves。
  • TreeBillboard: Terrainエンジン ビルボードのTree。
  • Grass: TerrainエンジンのGrass。
  • GrassBillboard: Terrainエンジン ビルボードのGrass。

内蔵のシーン デプス/法線 テクスチャ

カメラには内蔵で,どれかのエフェクトで必要な場合に,テクスチャのデプスまたはデプス+法線をレンダリングする機能があります。Camera Depth Texture を参照下さい。いくつかのケース(ハードウェアによって),テクスチャのデプスまたはデプス+法線は内部的にReplacement Shaderでレンダリングできることに留意して下さい。このためシェーダに正しい“RenderType” タグがあることが重要です。

シェーダを書く場合のパフォーマンスのヒント
カスタム マテリアルエディタ