Unity全局光照以及shader的使用方法

unity自带的shader都是支持光照贴图的,光照贴图可以让Unity中的模型在没有光照的情况下,在物体上产生阴影效果。5.0以后光照贴图的形式都有一定的改变。而在自己写的shader中需要对光照贴图进行相应的设置。


光照贴图准备工作:

1.light中Baking的模式选为Baked,为了查看效果,此处Shadow Type的模式选为Soft Shadows。

2.选中需要进行烘焙的物体,将其static选项设置为Lightmap Static,windows=》lighting=》Setting 中取消Auto Generate,同时取消任何看到的realtime的选项,然后generate lighting即可。

需要调用的UnityCG.cginc中的函数

//解码光照贴图,返回一个三维的颜色信息。

inline half3 DecodeLightmap( fixed4 color )
{
#if defined(UNITY_NO_RGBM)
    return DecodeLightmapDoubleLDR( color );
#else
    return DecodeLightmapRGBM( color, unity_Lightmap_HDR );
#endif

}


Shader "Licher/Texture_02" {
Properties 
{
_MainTex("MainTex",2D)=""{}
}
SubShader 
{
pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"


sampler2D _MainTex;
sampler2D unity_Lightmap;//对应光照贴图的2d纹理
float4 _MainTex_ST;
float4 unity_LightmapST;//对应光照贴图的Scale 和Translation信息


struct v2f
{
float4 pos:POSITION;
float2 uv:TEXCOORD0;
float2 uv2:TEXCOORD1;
};


v2f vert(appdata_full v)
{
v2f o;
o.pos=UnityObjectToClipPos(v.vertex);//将处于本地坐标的定点转化为视图坐标
o.uv=TRANSFORM_TEX(v.texcoord,_MainTex);//封装为宏的纹理对应计算
o.uv2=v.texcoord1.xy*unity_LightmapST.xy+unity_LightmapST.zw;//最原始的纹理对应计算
return o;
}


fixed4 frag(v2f IN):COLOR
{
float3 lm=DecodeLightmap(tex2D(unity_Lightmap,IN.uv2));//对光照贴图进行解码,得出对应的颜色
fixed4 color=tex2D(_MainTex,IN.uv);
color.rgb*=lm*2;//将主贴图的颜色与光照贴图进行融合,乘以2是为了加大亮度,可以不加
return color;
}
ENDCG
}
}
FallBack "Diffuse"
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值