转 lightmap
小记一下用法与问题,时更
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
转 lightmap的更多相关文章
- Unity Lightmap动态加载研究
什么情况下需要Lightmap? 移动平台上目前暂时还不能开实时光影效果,会卡成幻灯片.所以就需要将光影烘焙到贴图上. 什么情况下需要动态加载Lightmap? 1.当项目抛弃了Unity的多场景模式 ...
- 关于Unity动态物体无法向使用使用custom shader和lightmap的物体投射阴影
最近在做unity shader forge和marmoset的优化,TA那边遇到了一个阴影显示的问题,具体如下: 在Forward Rendering状态下,静态场景使用了是shader for ...
- world machine, 输出lightmap
一,输出黑白lightmap: 二,输出彩色lightmap: 需要注意的是:当输出黑白lightmap时,输出设备要用Height Output:当输出彩色lightmap时,输出设备要用Bitma ...
- 无限大地图:lightmap拆分
无缝地图涉及到地形.物件的分块加载,同样,lightmap也需要动态加载.而场景烘焙时,所有物件都是一起烘焙的,那怎么把某些物件指定烘焙到某一张lightmap贴图中?网上找了很久,也没有看到具体的实 ...
- Diffuse贴图+Lightmap+Ambient
shader里面光照计算毕竟还是比较复杂的,于是想到下面的性能相对好一些的方案. 美术提供一张Diffuse贴图,一张lightmap贴图,然后在应用一个自定义的全局的环境光效果,来模拟静态的光照. ...
- Unity3D之Lightmap详解
作者:李志健 Unity 完全集成了光照贴图,可以通过编辑器创建完整的光照贴图,你完全不用担心,所有材质会自动获得光照贴图.光照贴图的意思是,所有灯光的特性将被直接映射到Beast lightmapp ...
- 解决Lightmap在PC上与ios和Android上表现不同的问题
Lightmap在PC上与android和ios的区别以及解决方法 1. 问题描述 相信很多人碰到过Lightmap的一些问题: 烘培好Lightmap之后,在PC上看起来相当给力,而打包成ios或 ...
- Unity5 Shader Stripping 导致 LightMap 全部丢失的解决方法
当使用 SceneManager.LoadScene 的时候,会自动载入LightMap 和 NavMesh的数据.然后再对MeshRender 进行指定 LightMapIndex 以及 Light ...
- unity lightmap
indirect light /shadow /ao light probe for dynamic 或者细小琐碎的物体 ========================== unity2018.3 ...
随机推荐
- GUI界面修饰
function varargout = GUI20(varargin) % GUI20 MATLAB code for GUI20.fig % GUI20, by itself, creates a ...
- 计蒜客--移除数组中的重复元素 (set)
给定一个升序排列的数组,去掉重复的数,并输出新的数组的长度. 例如:数组 A = \{1, 1, 2\}A={1,1,2},你的程序应该输出 22 即新数组的长度,新数组为 \{1, 2\}{1,2} ...
- msyql -3m架构详解
我们先来回顾一下mmm的概念,它是一套灵活的基于perl编写的脚本程序,自己本身不提供mysql服务的功能,它是用来对mysql replication 进行监控和故障迁移,并能管理mysql Mas ...
- Jquery 插件 图片验证码
摘自:https://www.cnblogs.com/lusufei/p/7746465.html !(function(window, document) { var size = 5;//设置验证 ...
- 在MyEclipse中使用javadocAPI文档
开始啦 1.打开MyEclipse,选中要导出的项目,右击Exprot弹出窗口,选择java----javadoc点击next到下一界面. 2.选出要导出的项目或要添加的项目,在browse中选择路径 ...
- MyEclipse配置默认自带的XML代码格式化
1.XML中的注释保持原样,不格式化为一行(Join lInes)内
- HTML <canvas> testing with Selenium and OpenCV
from: https://www.linkedin.com/pulse/html-canvas-testing-selenium-opencv-maciej-kusz Since HTML < ...
- nginx 启动 + uwsgi + django
https://www.cnblogs.com/chenice/p/6921727.html https://blog.csdn.net/Aaroun/article/details/78218131
- js通过DOM改变html和css
1.改变html输出流,通过document.write() 直接向 HTML 输出流写内容 <body> <p>段落</p> <script> doc ...
- 阿里云Maven settings.xml文件
<?xml version="1.0" encoding="UTF-8"?> <!-- Licensed to the Apache Soft ...