小记一下用法与问题,时更

surface shader就不用操心了,自带lightmap计算

主要是vertex fragment shader部分

Unity5 bake light map有三种情况:

1.Non-directional

2.directional

3.directional specular

Non-directional

这种计算最为简单,消耗也最少,

注意不会烘焙上normal map的信息,只是模型顶点法线计算得的diffuse结果

首先需要声明lightmap变量

sampler2D unity_Lightmap;

float4 unity_LightmapST;

重复声明异常(unity 5.4),在UnityCG.cginc已经声明过了,就不用再声明

需要在appdata中用一个新的坐标变量来计算lightmap的uv,否则开始可能正确,但是博主在把模型generate lightmap uv后再烘焙,uv全部都是错的了。

        structappdata {

            float4vertex : POSITION;

            float4tangent : TANGENT;

            float3normal : NORMAL;

            float2texcoord : TEXCOORD0;

            float2texcoord2 : TEXCOORD1;

            fixed4color : COLOR;

        };

然后vertex部分的struct声明(名字随意)

float2 uv_lightmap : TEXCOORD1;

vertex shader生成计算lightmap uv

o.uv_lightmap =v.texcoord2.xy *unity_LightmapST.xy + unity_LightmapST.zw;

在fragment shader中获取lightmap数据的方法,得到的是三元向量,如果未烘焙默认值为0:

DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap,i.uv_lightmap))

判断是否烘焙,这样就可以分为两种算法,没有lightmap就实时算,有lightmap就用

        #ifdefLIGHTMAP_ON

DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap,i.uv_lightmap))。。。。lightmap相关计算

        #endif

烘焙lightmap后,shader获取的阴影自阴影信息为1,光照方向为0(与光的Baking模式设置有关,realtime(有)/mixed(有)/baked(无))

directional specular

这种会产生两种lightmap,一种是带normal map的diffuse信息也就是普通的light map,一种是direction map也就是光照方向,我们可以使用烘焙的光照方向来计算specular及其他

应该是这样可以得到direction map,但是博主试过会报错

UNITY_SAMPLE_TEX2D_SAMPLER(unity_LightmapInd,unity_Lightmap,1);

 ---wolf96 2017/1/11

Unity shader with lightmap的更多相关文章

  1. 关于Unity动态物体无法向使用使用custom shader和lightmap的物体投射阴影

    最近在做unity shader forge和marmoset的优化,TA那边遇到了一个阴影显示的问题,具体如下:   在Forward Rendering状态下,静态场景使用了是shader for ...

  2. Unity Shader入门精要学习笔记 - 第9章 更复杂的光照

    转载自 冯乐乐的<Unity Shader入门精要> Unity 的渲染路径 在Unity里,渲染路径决定了光照是如何应该到Unity Shader 中的.因此,如果要和光源打交道,我们需 ...

  3. Unity Shader入门

    Unity Shader入门 http://www.cnblogs.com/lixiang-share/p/5025662.html http://www.manew.com/blog-30559-1 ...

  4. Unity Shader IDE — Sublime Text2

    使用MonoDevelop写了一段时间的Shader代码,发现效率太低了,所以换用Sublime Text. 安装Sublime Text 1.下载 sublime Text2 官网:http://w ...

  5. 【我的书】Unity Shader的书 — 文件夹(2015.12.21更新)

    写在前面 感谢全部点进来看的朋友.没错.我眼下打算写一本关于Unity Shader的书. 出书的目的有以下几个: 总结我接触Unity Shader以来的历程,给其它人一个借鉴.我非常明确学Shad ...

  6. Unity Shader 知识点总结(一)

    在学习了一段时间的Unity Shader后,打算写一些知识总结,便于今后的查找.如有错误,希望大家指出更改. 本文参照的unity入门精要一书,做一个知识归纳,如有兴趣可以看看其开源的部分,是一本比 ...

  7. Unity Shader 知识点总结(二)

    紧接着上一篇文章的shader入门知识的总结,本文主要总结shader中的纹理贴图.透明度混合.顶点动画.后期特效处理等操作.如果有什么地方有错,请指出更正,谢谢.本文的代码主要来自开源书:unity ...

  8. 【原】Unity Shader VS UDK Material Editor

    UDK 的材质编辑器十分好用,毕竟是所见即所得的.虽然unity也有类似第三方插件,但易用性还是差很多,下面主要是,把一些常见表达式概念对应起来. 1. UDK CameraVector (相机位向量 ...

  9. Unity Shader入门教程(一)

    参考文献:http://www.360doc.com/content/13/0923/15/12282510_316492286.shtml Unity Shader是着色器,将纹理.网格信息输入,得 ...

随机推荐

  1. sparkStreaming复习笔记(1)

    一.SparkStreaming 1.sparkcore模块的扩展,具有可扩展,高吞吐量,容错机制,针对实时数据流处理,数据可以来自于kafka,flume以及tcp套接字,可以使用更加复杂的函数来进 ...

  2. C语言如何使输出的数字对齐

    右对齐%numd(num是位数,比如按5位数的长度输出,num为正数则右对齐) #include <stdio.h> int main() { printf(, ); printf(, ) ...

  3. Vue 实现文件的上传

    要把文件上传的web,需要分几步? 答:三步 第一步:创建一个上传文件的标签 <input type="file" id="fileExport" @ch ...

  4. 2018-11-15-UWP-how-to-get-the-touch-width

    title author date CreateTime categories UWP how to get the touch width lindexi 2018-11-15 18:49:12 + ...

  5. 基于Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 四路光纤卡

    基于Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 四路光纤卡 1. 板卡概述   板卡主芯片采用Xilinx公司的XC7K325T-2FFG900 FPGA,pin_ ...

  6. nginx中break和last的区别

    一.环境准备 资源文件创建 mkdir -p /opt/tmp/wqy/test/aaa mkdir -p /opt/tmp/wqy/test/bbb echo "aaa" > ...

  7. unittest单元测试框架总结(转)

    unittest单元测试框架不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果.今天笔者 ...

  8. 转Serial,Parallel,CMS,G1四大GC收集器特点小结

    转 https://blog.csdn.net/u013812939/article/details/48782343 1.Serial收集器 一个单线程的收集器,在进行垃圾收集时候,必须暂停其他所有 ...

  9. count(*),count(1),count(列名)的区别

    count(*)和count(1)无任何差别,永远优于count其他字段只要存在普通索引,count就会使用普通索引,只存在主键时,count(*)和或count(1)会使用主键索引 count(a) ...

  10. Nginx-配置负载均衡实例

    配置负载均衡实例 实现效果: 配置负载均衡 实验代码 1) 首先准 备两个同时启动的 Tomcat 2) 在 nginx.conf 中进行配置 随着互联网信息的爆炸性增长,负载均衡(load bala ...