Transfer Lightmaps in Unity | Unity中转移光照贴图

unity中光照贴图(lightmapping)的存储方式比较特殊,烘焙好的光照贴图存储在场景中,而参与烘焙的物体本身不记录光照贴图,只记录一组uv数据对应光照贴图。在显示的时候,shader通过这组uv坐标访问物体的光照贴图信息,再显示出来。 并且这些光照贴图没法用手动编辑,只能写脚本编辑。 而相对应的如果不在unity中烘焙,而在maya中烘焙,就是一张lightmapping放在shader的自发光贴图里面了。 所以问题在于,在unity中一个场景里烘焙的物体很难带着光照贴图放到另一个场景里。如果我们非要这么干,就得给被烘焙的Prefab加个脚本,记录光照贴图,在加入其它场景中重新加载光照贴图。 1. 光照贴图访问 首先是要访问一下Prefab里面所有子物体,从根节点遍历一下这个树就可以了,非常简单就不提了。 烘焙过的物体会有一个光照贴图的uv信息,以及所使用的...
Read More

Transformation in ShaderLab | ShaderLab中的空间变换

写Shader经常会碰到一堆得空间变换,而又经常想不起来变换矩阵的名字,因此整理一下。 1 物体空间(Object Space), 顶点着色器接收的语义项比如POSITION, NORMAL, TANGENT都是在这个空间下 2 世界空间(World Space) 3 观察空间(View Space),以摄像机为原点 4 裁剪空间(Clip Space),裁剪空间,最常用的UNITY_MATRIX_MVP就是转换到这个空间 5 切线空间(Tangent Space),用了法线贴图就会涉及这个空间 关系到空间的转换,所以有5C2=10类。 再加上物体和世界空间中都有可能访问两种固定的类型,比如灯光,视线。 1. 物体空间-世界空间(1-2) 以前叫_Object2World,新版本改叫unity_WorldToObject了,其逆变换为unity_ObjectToWo...
Read More