转 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

时间: 2024-10-21 23:36:46

转 lightmap的相关文章

烘培完场景的lightmap,贴图上很多黑斑

realtime时,贴图正常 烘培以后: 原因是: 导入fbx的时候,需要在导入设置里把Generate LightMap  UVs勾选上 唉,浪费2小时阿....

Unity3D之Lightmap详解

作者:李志健 Unity 完全集成了光照贴图,可以通过编辑器创建完整的光照贴图,你完全不用担心,所有材质会自动获得光照贴图.光照贴图的意思是,所有灯光的特性将被直接映射到Beast lightmapper并烘培到纹理,以此获得更好的性能.UnityPro版扩展了全局光照功能,可以烘焙出真实而漂亮的光照,当然这就不能同时使用实时光照.此外,Unity专业版带给你天光和发光材质,为你增加更有趣的场景照明. 在此页中,你会发现更深入的描述,可以找到在Lightmapping窗口的所有属性.从菜单中Wi

unity3d lightmap贴图加载、替换、切换

unity中烘过图的场景很难做lightmap的平滑过渡,只能实现按钮的切换.难点是多套lightmap的加载,还有如何替换. 步骤: 1.创建个ui <ignore_js_op> <ignore_js_op> 3.编辑js [AppleScript] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 3

解决Lightmap在PC上与ios和Android上表现不同的问题

Lightmap在PC上与android和ios的区别以及解决方法 1.  问题描述 相信很多人碰到过Lightmap的一些问题: 烘培好Lightmap之后,在PC上看起来相当给力,而打包成ios或android之后,就傻眼了,Lightmap往往就出现了改变,例如灯光曝光度不够.光照颜色偏冷色调.有时候甚至黄色光也能变成绿色光等等. 2.造成Lightmap在PC.ios和android上表现不同的原因. 在u3d里,Lightmap的格式是.exr(openEXR),exr格式的储存方式是

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

最近在做unity shader forge和marmoset的优化,TA那边遇到了一个阴影显示的问题,具体如下: 在Forward Rendering状态下,静态场景使用了是shader forge生成的blendlayer类的shader,使用lightmap烘培贴图后,动态角色走到静态物体附近时,方向光在角色上的投影,无法投射到使用shader forge材质的物体上,但其他材质和使用marmoset的材质可以正常接收.查询了一些网站解决方案后,最终确定是custom shader 写法的

Unity5 Shader Stripping 导致 LightMap 全部丢失的解决方法

当使用 SceneManager.LoadScene 的时候,会自动载入LightMap 和 NavMesh的数据.然后再对MeshRender 进行指定 LightMapIndex 以及 LightMapScaleOffset 就可以了. 这真是很方便的一个功能. 以上是前提. http://www.magicsite.cn/blog/Windows/cpp/cpp64011.html 迷惑了一下午+一晚上. 在Graphic 设定面板上看到一个 Shader stripping设置…… 这让

Unity3d中lightMap的使用

环境:unity3d4.1,windows8.1 unity3d可以产生较好的光照贴图,在程序中使用它们可以产生较好的效果. 一.光照贴图偏移的获得 Renderer.lightmapTilingOffset 光照贴图平铺偏移 Description描述 The tiling & offset used for lightmap.用于光照贴图的平铺和偏移值. A scene can have several lightmaps stored in it, and Renderer can use

Unity3D在Android编辑模式下使用lightmap出现高亮解决方案

在Unity开发中会遇到一个问题就是在Anroid下使用Lightmap会出现场景高亮,曝光效果,这个问题折腾了一段时间,后来找到问题解决方案.需要我们设置如下: 以较低的预览参数设置,bake全体Lightmap.然后检查有无灯光过亮灯问题. 选中灯光,可在Lightmapping窗口中单独设置灯光参数.根据需要跟改Bounce Intensity值,调整光源. 把SunLight的Bounce Intensity: 2 (正式) Ambient Occlusion:1 Max Distanc

列出场景对象Lightmap属性

首先上效果图: 编辑器代码: using UnityEngine; using UnityEditor; using System.Collections; public class LightmapAnalysisEditor : EditorWindow { private static EditorWindow window; [MenuItem("MyEditor/LightmapAnalysis &q")] private static void Execute()