查看: 2891|回复: 1
打印 上一主题 下一主题

如何解决Lightmap-FirstPass shader 的受光问题

[复制链接]

2508

主题

2

听众

3万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
32806
精华
12

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2013-3-21 09:30:30 |只看该作者 |倒序浏览
 Lightmap-FirstPass 是为地形提供的一种混合贴图材质,是由RGBA四个通道分别控制四种不同的贴图!但是模型贴上这种材质后则不接受实时光照也不接受阴影,只有烘焙出光照贴图才能看见其固定的光照效果!求高手解决此问题!(源代码)拜谢!! // Upgrade NOTE: replaced &#39ositionFog()' with multiply of UNITY_MATRIX_MVP by position
// Upgrade NOTE: replaced 'V2F_POS_FOG' with 'float4 pos : SV_POSITION'Shader "olyTerrain/Splatmap/Lightmap-FirstPass" {
Properties {
_Control ("SplatMap (RGBA)", 2D) = "red" {}
_Splat0 ("Layer 0 (R)", 2D) = "white" {}
_Splat1 ("Layer 1 (G)", 2D) = "white" {}
_Splat2 ("Layer 2 (B)", 2D) = "white" {}
_Splat3 ("Layer 3 (A)", 2D) = "white" {}
_BaseMap ("BaseMap (RGB)", 2D) = "white" {}
}Category {
// Fragment program, 4 splats per pass
SubShader {
  Tags {
   "SplatCount" = "4"
   "Queue" = "Geometry-100"
   "RenderType" = "Opaque"
  }
  Pass {
   Tags { "LightMode" = "Always" }
   CGPROGRAM
   #pragma vertex simplevert
   #pragma fragment simplefrag
   #pragma fragmentoption ARB_fog_exp2
   #pragma fragmentoption ARB_precision_hint_fastest
   #pragma multi_compile LIGHTMAP_ON LIGHTMAP_OFF
   #define TEXTURECOUNT 4   #include "UnityCG.cginc"s***ct appdata_lightmap {
    float4 vertex : POSITION;
    float3 normal : NORMAL;
    float2 texcoord : TEXCOORD0;
    float2 texcoord1 : TEXCOORD1;
};s***ct v2f_vertex {
float4 pos : SV_POSITION;
float4 uv[3] : TEXCOORD0;
float4 color : COLOR;
};uniform sampler2D _Control;
uniform float4 _Control_ST;#ifdef LIGHTMAP_ON
uniform float4 unity_LightmapsT;
uniform sampler2D unity_Lightmap;
#endifuniform sampler2D _Splat0,_Splat1,_Splat2,_Splat3;
uniform float4 _Splat0_ST,_Splat1_ST,_Splat2_ST,_Splat3_ST;v2f_vertex simplevert (appdata_lightmap v) {
v2f_vertex o;
o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
o.uv[0].xy = TRANSFORM_TEX (v.texcoord.xy, _Control);
#ifdef LIGHTMAP_ON
o.uv[0].zw = v.texcoord1.xy * unity_LightmapST.xy + unity_LightmapST.zw;
#else
o.uv[0].zw = half2(0,0);
#endif
o.uv[1].xy = TRANSFORM_TEX (v.texcoord.xy, _Splat0);
o.uv[1].zw = TRANSFORM_TEX (v.texcoord.xy, _Splat1);
o.uv[2].xy = TRANSFORM_TEX (v.texcoord.xy, _Splat2);
o.uv[2].zw = TRANSFORM_TEX (v.texcoord.xy, _Splat3);
o.color = half4(1,1,1,1);
return o;
}float4 simplefrag (v2f_vertex i) : COLOR {
half4 splat_control = tex2D (_Control, i.uv[0].xy);
half4  splat_color = splat_control.r * tex2D (_Splat0, i.uv[1].xy);
splat_color += splat_control.g * tex2D (_Splat1, i.uv[1].zw);
splat_color += splat_control.b * tex2D (_Splat2, i.uv[2].xy);
splat_color += splat_control.a * tex2D (_Splat3, i.uv[2].zw);
#ifdef LIGHTMAP_ON
splat_color.rgb *= DecodeLightmap( tex2D (unity_Lightmap, i.uv[0].zw));
#endif return splat_color;
}   ENDCG
  }
  }
}// Fallback to base map
Fallback "Hidden/TerrainEngine/Splatmap/Lightmap-BaseMap"
}
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

Zack    

459

主题

1

听众

5478

积分

高级设计师

Rank: 6Rank: 6

纳金币
5531
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2013-3-21 11:34:42 |只看该作者
这个还真是没用过,,求指点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

手机版|纳金网 ( 闽ICP备2021016425号-2/3

GMT+8, 2024-11-26 05:54 , Processed in 0.084453 second(s), 28 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部