Unity5场景应该如何烘焙?



LightMap烘焙技巧

前言:弱弱的说我是一个程序猿。科普名词解释:全局照明(GI):是指除了直接光之外包括天空,物件之间间接光照的总和。环境闭塞(AO):是指间接光在物件间相互遮挡反射不充分导致的微弱阴影。通常在直接光照的暗部才会比较明显。天光:从头顶来的天空颜色造成的间接照明,特别是在晴朗的天气。LightMap:光照贴图HDR:颜色高动态区间,指颜色亮度可以超过1,移动平台暂且不支持间接照明(间接反射):指光源照亮A物体,A物体变亮以后充当间接光源对近距离内B物体有照亮的作用。这种现象只有当物体B在直接光照(比如阳光)的阴影里才会明显。

足够多的明暗对比

  • 适当打平灯光以增加阴影面积(暗部更多更容易做效果)
Unity5场景应该如何烘焙?_第1张图片


  • 适当增大模型增加阴影面积(暗部更多更容易做效果)
Unity5场景应该如何烘焙?_第2张图片


  • 通过只投射不接收来增加假阴影(作假)(不接受投影是因为看不见所以可以节省这种物体的渲染和它占用的litmap面积)
Unity5场景应该如何烘焙?_第3张图片


模拟全局光照

  • 足够充分暗部照明(暗部会有一种明快的感觉,用美术语言说就是暗部很“通透”)
Unity5场景应该如何烘焙?_第4张图片


Unity5场景应该如何烘焙?_第5张图片


  • 天光的使用:
    • 理论上越晴朗的天气阴影暗部越偏蓝(同理也是为了有全局照明的效果,用美术语言说就是暗部很“通透”)(哪天北京晴空万里的时候去大楼的阴影里看看是不是有蓝色,为了对比饱和度的覆盖问题,可以拿一张白纸)
Unity5场景应该如何烘焙?_第6张图片


  • 间接反射夸张
    • 比如守望先锋花村的樱花树下会有很强烈的蓝紫色,实际上是模拟粉红的樱花与天光蓝色的叠加造成的视觉,不过暴雪的美术有更加夸张的表达。(实现方法实际是在暗部增加与区域环境颜色相似的点光,实时GI现在效率跟不上,另外也不可能这么强。)
    • 小幅夸张
Unity5场景应该如何烘焙?_第7张图片


  • 更夸张的做法:现实世界中不会有这么强烈的间接反射,就像叶子把光间接反射出来了一样,守望先锋就是例子
Unity5场景应该如何烘焙?_第8张图片


  • 其实以上技巧都是借鉴自守望先锋
    • 这是一个人的分析,只要有心去找,仔细去看,去思考,网上有很多文章有可以借鉴的地方(因为实时GI还开销太大,暴雪真是能通过技巧把能用的东西用到最好)原文链接
Unity5场景应该如何烘焙?_第9张图片


  • 还有一个对环境光源的理解原文链接
Unity5场景应该如何烘焙?_第10张图片


  • 祭上守望先锋的场景,很夸张的暗部间接光照,实际上是通过暗部打烘焙点光来实现的。更多细节请参考我的另外一篇文章。
Unity5场景应该如何烘焙?_第11张图片


AO的使用

  • AO能更真实的模拟现实世界,能使暗部有更明显的立体感,用美术的话说就是暗部足够“实”,“不飘”
    • 基础知识请参考这篇文章,这里讲了什么是AO,什么是间接反射等
    • 暗部的接缝处AO效果最明显
Unity5场景应该如何烘焙?_第12张图片


LightMap面积的优化

  • LightMap面积(精度)说明:(一个格子就是一个像素点,也就是占用在lightmap上面的面积)
Unity5场景应该如何烘焙?_第13张图片
  • 通过Scale In LightMap这个参数可以单独调整单个物体的精度
Unity5场景应该如何烘焙?_第14张图片


  • 更合理的分配LightMap面积(想要好效果又要节省lightmap面积,就是要研究,并总结经验,没有捷径
    • 只投射不接受的物件Scale In Lightmap填0就行
    • 地面 > 物件,重要物件 > 一般物件, 视觉中心 > 边远地区,大物件 > 小物件
Unity5场景应该如何烘焙?_第15张图片


  • 全部(或者几乎全部)在明处或者全部在暗处的可以用最低分辨率烘焙(比如当前光线下的这个椅子和不管影子多么正都是在暗处的这面墙壁,这种情况下,这两个lightmap精度可以填0.01),需要注意的是必须参加烘焙只是精度可以很低(因为纯白或者纯黑被压缩大小是不会损失精度的)
Unity5场景应该如何烘焙?_第16张图片


    • 地面以下,地图的侧面,或者根本看不见的东西,烘焙占用面积请控制到最小(最惨的情况请参考下面说的浪费)
  • 避免完全没有必要的浪费
    • 像这种完全在别的物体以下,还参加烘焙的完全没有必要,而且浪费很大
Unity5场景应该如何烘焙?_第17张图片


  • 树叶花草等透贴类似的推荐只投射,不接受,而且接受烘焙阴影效果不见得好,会很“脏”
Unity5场景应该如何烘焙?_第18张图片


技巧及问题

  • 发现阴影比较虚,不实
    • 检查是否间接光照反弹次数过大(可以理解成有过大的衍射效果)
    • 增加被投影物体的大小(比如放大花盆)(很显然)
    • 增加投影至物体所占lightmap面积(比如树叶投影到地面比较虚,则提高地面的精度)
  • 效果不好或者黑点、漏光过多
    • 检查2u是否打开
    • 检查顶点分布是否有异常,uv分布是否均匀或过少
    • 如果都没问题而且这个物件很重要,则增加精度
    • 自定义2u(高级,不推荐使用)
  • 过小物体效果太差
    • 如果确实过小,先看能不能放大,或者说这么小的东西有没有存在的必要或者是否可替代(很显然)
    • 如果确实需要,可以不参加litmap烘焙,而直接去diffuse贴图上花盆贴图的底部蹭两笔黑的
    • 这个花盆之前参加烘焙会有很大的漏光和黑点,其实不需要参加烘焙,而且效果比烘焙更好,还能节省lightmap
Unity5场景应该如何烘焙?_第19张图片


压缩的效果优化

  • 通过我烘焙的经验,以kasaierxueyuannew场景为例,发现烘焙10-12张1024压缩到512,比直接烘焙2-3张1024的贴图来的精度和效果都更好
    • 10张512 = 2.5张1024,而以之前的烘焙策略烘焙3-4张1024效果没有我这个好
    • 此外通过合理分配lightmap精度,能节省2-3张lightmap,没有仔细分配之前,保证效果的情况下能烘焙14张左右,现在这版只使用了11张,如果还细抠还能省1张甚至更多
Unity5场景应该如何烘焙?_第20张图片


  • 从1024压缩到512肯定会损失精度,但是通过仔细的分配lightmap精度能使这种损失达到最小
    • 方法一:地面最有用,所以怎么省都不要吝啬地面的精度,地面不管接受多少阴影,所占用的lightmap面积是一样的,所以多打点阴影(不增加消耗,还可以做效果,何乐而不为)
    • 方法二:纯背光纯亮光区域可以减少lightmap精度,因为压缩不影响(就像纯黑纯白的贴图压缩大小没有损失一样),而复杂的结构并且能同时受到阳光和阴影的影响,则也不需要节省精度,因为如果本来精度就不高,则压缩更惨
    • 方法三:压缩大小比压缩格式带来的损失小,如果压缩格式影响巨大,可以不压缩格式,而在其他地方想想办法怎么省(省的办法参考上面)。所以推荐烘焙高质量的光照图来压大小
    • 方法四(重要):尽量使用大阴影,在不压缩情况下本来就很小很虚的阴影,被压缩了只会更惨,优化方法参考以上
    • 方法五:不推荐使用复杂的结构,酌情使用,在压缩的时候很容易损失过大

个人经验

  • 暗部补光,感觉上并不是光越多越好,最好灯光颜色来表达周围环境的间接光照,过多颜色的灯光会让人觉得没有重点和乱
  • 点光通过减小光照强度增加照明范围能得到更好的环境间接光的效果,还能防止有比较突兀的亮斑
  • 个人倾向于用天空材质球来代替全局环境光来烘焙,如果是晴朗天气,用默认纯蓝的天空即可
  • 白模的情况下感觉lightmap很舒服而且很干净,而最终效果图的lightmap效果没有那么明朗。所以猜测为diffuse贴图的饱和度问题,因此推荐使用较低饱和度的颜色,否则lightmap的颜色很容易被盖掉(不保证正确,希望美术同学尝试)

跨平台的问题

  • 因为烘焙Lightmap用的exr,也就是HDR颜色编码,而现在手机平台不支持HDR编码,导致在手机平台和PC平台的解码方式不一样,所以不能使用过强的光来烘焙光照图,否则会造成android与pc差异巨大,因此不推荐使用光照强度超过3的灯光来渲染。

演示

  • 可以从此处下载演示场景
    • 给一张全貌
Unity5场景应该如何烘焙?_第21张图片


作者:徐小厨
链接:https://www.zhihu.com/question/38140464/answer/164860198

你可能感兴趣的:(unity)