シェーダアーキテクチャ
Shader "Tut/NewBie/FirstShader"{
Properties{
[可选的特性] _MyTex2D("Tex2D Value", 2D) = "white"{}
_MyTex3D("Tex3D Value", 3D) = "white"{}
_MyCube("Cube Value", Cube) = "white"{}
_MyColor("Color Value", Color) = (1,1,1,1)
_MyVertor("Vector Value", vector) = (1,1,1,1)
_MyInt("Int Value", int) = 1
_MyFloat("Float Value", float) = 1
_MyRange("Range Value", range(0,1) = 1
}
SubShader{
Tags{"Queue"="Background" "RenderType"="Opaque"}
Pass{
Name "MYPASS"
[Pass Tags]
[RenderSetup]
sampler2D _MyTex2D;
sampler3D _MyTex3D;
samplerCUBE _MyCube;
float4 _MyColor;
float4 _MyVector;
float _MyFloat;
float _MyRange;
}
}
SubShader{
...
}
FallBack "Diffuse"
}
[可选的特性]:
時間からの書き込みに、エディタ上の表示、書き込みを制御する方法。
- [HideInInspectorは]:エディタを表示しません。
- [NoScaleOffsetは]:ディスプレイのタイリング/オフセットエントリの編集テクスチャエディタではありません。
- [ノーマル]:これは、法線テクスチャのテクスチャです。
- [HDR]:これはテクスチャである(HDR)テクスチャー。
- [ガンマ]:フロート/ベクトル属性インタフェースエディタで指定されたsRGB値。
- [PerRendererDataは]:テクスチャ属性はMaterialPropertyBlock、着信シェーダを形成することになります。
[RenderSetup]:
- カル戻ります| フロント| オフ
- ZTEST(レス|グレーター| LEqual | GEqual |男女| NOTEQUAL |常に)
- ZWRITEオン| オフ
- オフセット係数ユニット(オフセット= M *因子+ R *単位)
- M:傾きポリゴン最大深さ(Z変更/ xとyの変化最小変化)。
- R:それは、(特定の実装に特異的に依存して)一定です。
- ブレンド:
Blend Off:
混合しないでください。
Blend src dst:
(ソースカラー* SRC)+(目標色* DST)の値が0個、1個、SrcColor、SRCALPHA、DstColor、DstAlpha、OneMinusSrcColor、OneMinusSrcAlpha、OneMinusDstColor、OneMinusSrcAlpha。
BlendOp colorOp
:colorOpは、最小値、最大値、サブを追加为。
BlendOp colorOp, alphaOp
AlphaToMask On | Off
- ColorMask RGB | A | 0 | R、G、B、Aの任意の組み合わせ
SubShader Tags:
タグでSubShader(タグを渡していません)。
- キュー:レンダリングの順序、値の背景、ジオメトリ、AlphaTest、透明、オーバーレイ、特定の数字。
- RenderType:タイプをレンダリングし、頻繁に交換レンダリングのために、不透明、透明、カスタム文字列です。
- DisableBatching:無効バッチにするかどうか。真、偽、LODFading、
- ForceNoShadowCasting:
- IgnoreProjector:偽、真の予測値を無視します。
- CanUseSpriteAtlas:
- PreviewType:マテリアルエディタ、球、平面、スカイボックスの値を表示する方法。
Pass Tags:
タグに渡します。
- LightMode:ライトモード。
- 常に:
- ForwardBase:事前レンダリング、周囲光に対して、メイン平行光、球面調和光、光テクスチャに。
- ForwardAdd:フォワードレンダリング、追加の照明各ピクセルが一度に行われます。
- 繰延:繰延レンダリングにGBufferにレンダリングします。
- ShadowCaster:深さや深さ、シャドウマップにオブジェクトをレンダリングします。
- MotionVectors:各オブジェクトの動きベクトルを計算するために使用されます。
- PrepassBase:古い遅延レンダリングのために、通常の鏡面指数をレンダリングします。
- PrepassFinal:旧レンダリングの遅延、最終的な色をレンダリングし、発光。
- 頂点:頂点ライティング、物体光頂点が有効にされてライトマップされていない場合。
- VertexLMRGBM(廃止):頂点照明unity_Lightmap処理(PC用)ライトマップを得ることができます。
- VertexLM:頂点照明は(モバイルデバイス用)unity_Lightmapプロセスライトマップを得ることができます。
- PassFlags:
- RequireOptions:
FallBack "Diffuse":
あなたは、適切なSubShaderが見つからない場合は、使用することを「拡散」のデフォルトシェーダを実現しました。
Shader语言:
GLSL:
GLSLPROGRAMとENDGLSL書き込みGLSLコードの間。
CG:
CGとENDCGライトコードの間CGPROGRAM。
ShaderLab
ShaderLab:
あなたがサポート照明、影とシェーダの他の特徴を書きたい場合は、直接シェーダを表面書くことができ、それが私たちのために、すべての複雑さの良いパッケージされています。
Shader "Tul/NewBie/SurfShader"{
SubShader{
Tags{"RenderType"="Opaque"}
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainText;
struct Input{
float2 uv_MainTex;
}
vodi surf(Input IN, inout SurfaceOutput o){
half4 c = tex2D(_MainTex, IN.uv_MainTex);
o.Albedo= c.rgb;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
struct SurfaceOutput{
half3 Albedo;
half3 Normal;
half3 Emission;
half Specular;
half Gloss;
half Alpha;
}
C#でデータを転送するための材料
向Shader的Properties中传递数据:
- Material.SetTexture( "_ MyTexture"、MyTexture)。
- Material.SetTexture( "_ MyCube"、MyCube)。
- Material.SetColor( "_ MyColor"、MyColor)。
- Material.SetVector( "_ MyVector"、MyVector)。
- Material.SetFloat( "_ MyFloat"、MyFloat)。
- Material.SetFloat( "_ MyRange"、MyRange)。
矩阵的传递:
- プロパティは、マトリクス状に定義することはできません。
- 一様するfloat4x4 Mで定義されたシェーダ。
- C#( "M"、マット)に割り当てMaterial.SetMatrix。
継続するには...