unity shader实现较完整光照效果
本文实例为大家分享了unityshader实现光照效果的具体代码,供大家参考,具体内容如下
效果图:
shader被附给了球。
灯光需要在属性面板开启阴影。
//UpgradeNOTE:replaced'mul(UNITY_MATRIX_MVP,*)'with'UnityObjectToClipPos(*)'
Shader"Unlit/lightFull"
{
Properties
{
_MainTex("Texture",2D)="white"{}
}
SubShader
{
Tags{"RenderType"="Opaque"}
LOD100
Pass
{
Tags{"LightMode"="ForwardBase"}
CGPROGRAM
#pragmavertexvert
#pragmafragmentfrag
//makefogwork
#pragmamulti_compile_fwdbase
#include"UnityCG.cginc"
#include"Lighting.cginc"
#include"AutoLight.cginc"
structappdata
{
float4vertex:POSITION;
float2uv:TEXCOORD0;
float3normal:NORMAL;
};
structv2f
{
float2uv:TEXCOORD0;
float4pos:POSITION;
float4pos_world:TEXCOORD1;
float3normal:TEXCOORD2;
SHADOW_COORDS(3)
};
sampler2D_MainTex;
float4_MainTex_ST;
v2fvert(appdatav)
{
v2fo;
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(o);
returno;
}
fixed4frag(v2fi):SV_Target
{
//samplethetexture
fixed4col=tex2D(_MainTex,i.uv);
float4lightColor=_LightColor0;
float3lightDir=WorldSpaceLightDir(i.pos_world);
UNITY_LIGHT_ATTENUATION(atten,i,i.pos_world.xyz);
returncol*lightColor*saturate(dot(lightDir,i.normal))*atten;
}
ENDCG
}
pass
{
Tags{"LightMode"="ForwardAdd"}
BlendOneOne
CGPROGRAM
#pragmavertexvert
#pragmafragmentfrag
#pragmamulti_compile_fwdadd_fullshadows
#include"UnityCG.cginc"
#include"Lighting.cginc"
#include"AutoLight.cginc"
structv2f
{
float4pos:POSITION;
float4vertex:TEXCOORD0;
float3normal:NORMAL;
SHADOW_COORDS(2)
};
v2fvert(appdata_fulldata)
{
v2fv;
v.pos=UnityObjectToClipPos(data.vertex);
v.vertex=mul(UNITY_MATRIX_M,data.vertex);
v.normal=data.normal;
TRANSFER_SHADOW(v);
returnv;
}
float4frag(v2fv):SV_Target
{
float3lightColor=_LightColor0;
#ifdefUSING_DIRECTIONAL_LIGHT
float3lightDir=_WorldSpaceLightPos0;
#else
float3lightDir=_WorldSpaceLightPos0-v.vertex;
#endif
UNITY_LIGHT_ATTENUATION(atten,v,v.vertex.xyz);
float3color=lightColor*saturate(dot(lightDir,v.normal)*atten);
returnfloat4(color,1);
}
ENDCG
}
}
Fallback"Specular"
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。