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

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. Java学习day7面向对象编程1-对象和类

    一.Java编程中对象和类的概念 1,什么是类? 答:类是客观存在的,抽象的,概念的东西. 2,什么是对象? 答:对象是具体的,实际的,代表一个事物.例如:车是一个类,汽车,自行车就是他的对象. 关于 ...

  2. ARM汇编2

    一. 数据处理汇编指令 1.1. 数据传输指令 1.1.1.  mov(Move) 指令 示例:mov  r0, r0, LSL#3           ; r0 = r0* 8 mov  pc, r ...

  3. TensorFlow 解决“ImportError: Could not find 'cudnn64_6.dll'”

    解决“ImportError: Could not find 'cudnn64_6.dll'” 1. 问题描述 运行一个基于Tensorflow的代码时报错,如下所示: ImportError: Co ...

  4. 2019牛客暑期多校训练营(第三场) - J - LRU management - 模拟

    https://ac.nowcoder.com/acm/contest/883/J 根据这个数据结构的特点,也就是计算机组成原理里面学过的cache的LRU管理算法,每次访问都会在cache中查询一页 ...

  5. sftp没有关闭session导致服务器sshd进程未关闭

    项目中需要用Sftp上传下载文件,通过jsch中的sftp实现.代码上了服务器之后,发觉服务器多了很多进程没有被关闭. 连接sftp代码: protected boolean connectToSer ...

  6. HBase HA分布式集群搭建

    HBase HA分布式集群搭建部署———集群架构 搭建之前建议先学习好HBase基本构架原理:https://www.cnblogs.com/lyywj170403/p/9203012.html 集群 ...

  7. Opencv中KNN背景分割器

    背景分割器BackgroundSubtractor是专门用来视频分析的,会对视频中的每一帧进行"学习",比较,计算阴影,排除检测图像的阴影区域,按照时间推移的方法提高运动分析的结果 ...

  8. 一、Vs2019扩展多了 导航到反编译的源码中运行

    一.导航到反编译的源码中运行

  9. $_POST 和 php://input 的区别

    手册中摘取的几句话: 当 HTTP POST 请求的 Content-Type 是 application/x-www-form-urlencoded 或 multipart/form-data 时, ...

  10. Tarjan 复习小结

    总算把这几个东西策清楚了. 在\(Tarjan\)算法里面,有两个时间戳非常重要,一个是\(dfn\),意为深度优先数,即代表访问顺序:一个是\(low\),意为通过反向边能到达的最小\(dfn\), ...