shader里面光照计算毕竟还是比较复杂的,于是想到下面的性能相对好一些的方案。

  美术提供一张Diffuse贴图,一张lightmap贴图,然后在应用一个自定义的全局的环境光效果,来模拟静态的光照。

  每个模型单独提供自己的lightmap贴图,而不是使用场景烘焙出来的包含所有物体的liangmap,这样做的好处是比较灵活,同一个物体在不同地方提供不同的lightmap贴图即可。

Shader "James/Scene/Diffuse Lightmap"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
_Lightmap ("Light Map", 2D) = "white" {}
} SubShader
{
Tags { "RenderType"="Opaque" "Queue"="Geometry" }
LOD Pass
{
Tags { "LightMode"="ForwardBase" }
Lighting Off CGPROGRAM
#pragma fragmentoption ARB_precision_hint_fastest #pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog #include "UnityCG.cginc"
#include "JamesLighting.cginc" uniform sampler2D _MainTex;
uniform half4 _MainTex_ST; UNITY_DECLARE_TEX2D(_Lightmap); struct vertexIN_base
{
float4 vertex : POSITION;
float3 normal : NORMAL;
float2 texcoord : TEXCOORD0;
float2 uv2 : TEXCOORD1;
}; struct v2f_base
{
float4 pos : SV_POSITION;
half4 uv : TEXCOORD0;
UNITY_FOG_COORDS()
}; inline half3 JamesDecodeLightmapDoubleLDR( half4 color)
{
#if defined(UNITY_COLORSPACE_GAMMA)
return color.rgb * ;
#else
return color.rgb * 4.59;
#endif
} v2f_base vert(vertexIN_base v)
{
v2f_base o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv.xy = TRANSFORM_TEX(v.texcoord, _MainTex);
o.uv.zw = v.uv2; UNITY_TRANSFER_FOG(o,o.pos);
return o;
} fixed4 frag(v2f_base i) : COLOR
{
half4 bakedColorTex = UNITY_SAMPLE_TEX2D(_Lightmap, i.uv.zw);
half3 bakedColor = JamesDecodeLightmapDoubleLDR(bakedColorTex); half4 mainColor = tex2D(_MainTex, i.uv.xy);
half4 clr = mainColor;
clr.rgb *= bakedColor + (AMBIENT_COLOR).rgb; UNITY_APPLY_FOG(i.fogCoord,clr); return clr;
}
ENDCG
}
}
FallBack Off
}

Diffuse贴图+Lightmap+Ambient的更多相关文章

  1. Unity Shader-法线贴图(Normal)及其原理

    简介 以前经常听说“模型不好看啊,怎么办啊?”答曰“加法线”,”做了个高模,准备烘一下法线贴图”,“有的美术特别屌,直接画法线贴图”.....法线贴图到底是个什么鬼,当年天真的我真的被这个图形学的奇淫 ...

  2. Texture 纹理贴图

    基础贴图Shader:只有纹理 1. 在属性中声明纹理贴图: _MainTex ("Texture", 2D) = "white" {} 2. 在Pass中声明 ...

  3. 一个unity3d lightmap问题

    上周美术同学在使用unity3d制作lightmap的过程中,发现部分被lightmap影响的模型在移动端上效果与pc端不一致.当时我大概看了下,分析后,得到一个结论是“在移动端上lightmap的h ...

  4. 【Aladdin Unity3D Shader编程】之四 贴图纹理

    关于纹理贴图介绍 纹理坐标也叫UV坐标,UV坐标都是0~1,并不是我们所理解的像素坐标,相当于是一个百分比. 编写shader映射纹理 将纹理的颜色取代漫反射的颜色 Shader "Alad ...

  5. LearnOpenGL.PBR.工作流贴图

  6. 一个有趣的模拟光照的shader(类似法线贴图)

    最近使用unity,碰到到一个很有趣的例子.场景无光线,却模拟出了光照,效果挺好.其思路与法线贴图原理异曲同工. 原作者提供的效果印象深刻. 模型除了使用原来的diffuse贴图外,还用到了一张模拟记 ...

  7. 3DMax脚本插件--改动材质&贴图名称

    从网上淘到了一套人物的模型,当时的心情是激动无比,掏出用的不熟练的3DMax折腾了半天.突然发现了一个蛋疼的事儿,所有的模型文件,材质名称,子材质,以及贴图所实用的是中文命名!! ! 尽管说是能跑,只 ...

  8. unity texture贴图纹理

    文章内一些内容引用自作者:Aimar_Johnny http://blog.csdn.net/lzhq1982/article/details/75045358 导入png图片,默认显示如下 Text ...

  9. 深度剖析Istio共享代理新模式Ambient Mesh

    摘要:今年9月份,Istio社区宣布Ambient Mesh开源,由此引发国内外众多开发者的热烈讨论. 本文分享自华为云社区<深度剖析!Istio共享代理新模式Ambient Mesh>, ...

随机推荐

  1. linux修改文件为可执行文件

    修改shell为可执行文件 chmod +x test2.sh chmod 751 file   给file的属主分配读.写.执行(7)的权限,给file的所在组分配读.执行(5)的权限,给其他用户分 ...

  2. linux screen 最简单的五个用法

    1.创建新的虚拟终端 screen 2.离开虚拟终端(不关闭) ctrl + a d 3.查看所有正在运行的虚拟终端 screen -ls 4.进入某一个虚拟终端 screen -r id 5.退出虚 ...

  3. usaco-5.3.3Network of Schools 校园网

    题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学校都会给其它的一些学校分发软件(称作“接受学校”).注意如果 B 在 A 学校的分发列表中,那么 A 不必也在 B 学校的列表中. 你要 ...

  4. Windbg live debug步骤

    步骤: 1.安装windbg对应版本:X86,X64 2.Attach到对应进程 3.加载SOS:.load sos clr 4.启用捕获frist chance exception: sxe clr ...

  5. c# 后台绑定treeview 单个tab

    <wijmo:C1TreeView ID="C1TreeView1" runat="server" ShowCheckBoxes="true&q ...

  6. KeepAlived+MySQL互为主从

    http://blog.csdn.net/socho/article/details/51804720 解决Master单点问题,两台mysql互为主备,双向replication.当一master挂 ...

  7. selenium3 文件系列之------ opencsv读取csv文件

    最近在学习selenium有关文件的读取测试,今天先总结一下如何读取csv文件.CSV的定义是与逗号分隔的值(Comma-Separated Values),在Java中需要用到第三方lib去处理读取 ...

  8. Hibernate(8)_单向n对n

    1.n-n 的关联必须使用连接表 与1-n映射类似,必须为set集合元素添加 key 子元素,需要指定中间表 2.实体类 Category.java public class Category { p ...

  9. MAC终端密钥登录自动输入密码

    升级MAC系统后,发现用于MAC终端ssh服务器的登录脚本无法正常执行了,表现为:需要手动输入密钥密码,于是重新整理一下,恢复正常,在此记录一下: #!/usr/bin/expect -fspawn ...

  10. Css3 实现循环留言滚动效果(一)

    一.常见留言滚动效果示例 html代码 <div class="runList"> <div class="runitem"> < ...