ユニティ・シェーダより完全な照明

//アップグレード注: 'UnityObjectToClipPos(*)' で 'MUL(UNITY_MATRIX_MVP、*)' を置き換え

シェーダ"消灯/ lightFull"
{
プロパティ
{
_MainTex( "テクスチャ"、2D)= "白" {}
}
SubShader
{
タグ{ "RenderType" = "不透明"}
LOD 100

パス
{
タグ{ "LightMode" = "ForwardBase"}
CGPROGRAM
の#pragma頂点VERT
の#pragmaフラグメントFRAG
霧作業せる//
の#pragma multi_compile_fwdbase

の#include "をUnityCG.cginc"
の#include "Lighting.cginc"
の#include "AutoLight.cginc"
構造体APPDATA
{
するfloat4頂点:POSITION。
するfloat2 UV:TEXCOORD0。
通常するfloat3:NORMAL;
}。

構造体V2F
{
するfloat2 UV:TEXCOORD0。
float4 POS:POSITION;
float4 pos_world:TEXCOORD1。
通常するfloat3:TEXCOORD2を。
SHADOW_COORDS(3)
}。

sampler2D _MainTex;
float4 _MainTex_ST;

V2Fヴェール(APPDATA V)
{
V2F 0。
o.pos_world = MUL(UNITY_MATRIX_M、v.vertex)。
o.normal = v.normal。
o.pos = UnityObjectToClipPos(v.vertex)。
o.uv = TRANSFORM_TEX(v.uv、_MainTex)。
TRANSFER_SHADOW(http://www.my516.com)。
Oを返します。
}

(I V2F)fixed4 FRAG:SV_Target
{
//テクスチャをサンプリング
fixed4 COL = tex2D(_MainTex、i.uv)。
float4 lightColor = _LightColor0。
するfloat3 lightDir = WorldSpaceLightDir(i.pos_world)。
UNITY_LIGHT_ATTENUATION(ATTEN、私は、i.pos_world.xyz)。
リターンCOL * lightColor *飽和(ドット(lightDir、i.normal))* ATTEN。
}
ENDCG
}
のパス
{
タグ{ "LightMode" = "ForwardAdd"}
ブレンド一つ一つ
CGPROGRAM
の#pragma頂点VERT
の#pragma断片FRAG
の#pragma multi_compile_fwdadd_fullshadows

の#include "UnityCG.cginc"
の#include "Lighting.cginc"
の#include "AutoLight.cginc"
構造体V2F
{
するfloat4 POS:POSITION。
float4頂点:TEXCOORD0。
通常するfloat3:NORMAL;
SHADOW_COORDS(2)
}。

V2Fヴェール(appdata_fullデータ)
{
V2FのV。
v.pos = UnityObjectToClipPos(data.vertex)。
v.vertex = MUL(UNITY_MATRIX_M、data.vertex)。
v.normal = data.normal。
TRANSFER_SHADOW(V);
Vを返します。
}

float4 FRAG(V2F V):SV_Target
{
するfloat3 lightColor = _LightColor0。
#ifdefのUSING_DIRECTIONAL_LIGHT
するfloat3 lightDir = _WorldSpaceLightPos0。
#else
するfloat3 lightDir = _WorldSpaceLightPos0 - v.vertex。
#endifの
UNITY_LIGHT_ATTENUATION(ATTEN、V、v.vertex.xyz)。
するfloat3色= lightColor *飽和(ドット(lightDir、v.normal)* ATTEN)。
リターンするfloat4(色、1);
}
ENDCG
}
}
フォールバック"鏡面"
}

おすすめ

転載: www.cnblogs.com/liyanyan665/p/11304806.html