unity3d 5.6烘焙教程
unity5.6是今年发布,作为5.x的最后一个版本,有很多烘焙优势,在此总结一些作为5.x系列完结的笔记
这个版本在烘焙上的特点就是增加了渐进光照贴图(Progressive Lightmapper),这个功能可以说极大地改善场景光照烘焙的工作流程,可以加快场景烘焙效率,再也不怕烘焙一晚上发现有灯光有问题了
当然它不是用来替代Enlighten的,很多地方还是略有不同的,但是感觉这个速度更快。虽然有的新增的灯光混合模式不受支持,但是它在模型迭代中能发挥更大的优势。
Progressive 光照优势就是能很快看到一个区域的光照效果,而且在高参数下烘焙非常快,可以随时停止,效果依然保留,这个功能好多了
缺点也挺多的,比如只支持两个模式(看下面,有些效果会缺失),参数高的时候内存占用非常大,如果内存小的机器很容易崩溃
enlighten比较还是比较传统,内存消耗不多,比较不容易崩溃,支持所有模式,所以需要高端效果的时候还是这种支持的多
但是缺点是不到渲染结束看不到效果,相同参数下烘焙时间感觉长了不只好几倍
下面是两个白模渲染效果对比
可以看到其实渐进式的效果范围ao效果范围更广更暗一些
关于新版本还有4种光照模式,有些理解起来还都是挺纠结的
而且官方和其他教程解释得都比较抽象,所以下面以质量为主进行一些说明
表面上这些设置和mixed灯光有关,属于混合灯光方面的内容
lightmode具体可以看这里
https://docs.unity3d.com/Manual/LightModes.html
关于混合灯光四种模式区别具体看下面的
https://docs.unity3d.com/Manual/LightMode-Mixed.html
但这些与烘焙质量也有很大关系,我测试了以阴影质量为主列下面的表
下面讨论的项目是在bake light下,directional模式下
| enlighten 灯光设置 |
progressive 灯光设置 |
|
|---|---|---|
| Baked Indirect 内存占用少,动态质量一般,消耗一般 |
mixed 近处硬 远处消失 动态投影 baked 软阴影 | baked mixed 软阴影 |
| Distance Shadowmask 内存占用高,动态质量高,消耗高 |
mixed 近处硬 远处软 动态投影 baked 软阴影 | 不支持 如果强行使用效果同上 |
| Shadowmask 内存占用低,动态质量差,静态质量高,消耗低 |
mixed 软 静态物体无动态投影 baked 软阴影 | 不支持 如果强行使用效果同上 |
| Subtractive 内存占用低,质量低,消耗低 |
mixed 软 静态物体无动态投影 baked 软阴影 | baked mixed 软阴影 |
混合灯光模式:
说一下下面的模式主要针对的都是混合灯光也就是mixed方式,动态和静态虽然有的模式能相互投影但是影子依然会非常锐利,具体如何使用实时阴影取决于ShadowDistance的值和光照模式。
shadow map就是普通的即使阴影,就是比较锐利的阴影
有一个不可能,就是不能实时动态物体投下很软的阴影
性能消耗
大型,户外 标准,室内 室内,小型静态,手游 小型,手游
Distance Shadowmask > Baked Indirect > Shadowmask > Subtractive
下面是具体说明,官网内有更详细解释
我的主要是关注阴影质量
Baked Indirect mode
性能消耗一般,适合有动态光源物体的室内项目,中低端pc游戏或者高端移动端游戏
baked灯光会烘焙下所有静态物体并产生软阴影,baked灯光会穿透动态物体(动态物体不会被baked灯光照亮)
realtime和mixed灯光会在阴影距离内产生比较锐利的影子。距离外不投影忽视物体。
mixed和baked灯光能烘焙出静态物体的反射光
realtime lighting下 realtime灯光也能烘焙出静态物体的反射光
https://docs.unity3d.com/Manual/LightMode-Mixed-BakedIndirect.html
Distance Shadowmask (只支持enlighten)
性能消耗高,适合任何有大量动态物体的大场景游戏,适合高端pc
baked灯光会烘焙下所有静态物体并产生软阴影,baked灯光会穿透动态物体(动态物体不会被baked灯光照亮)
mixed灯光会烘焙下所有静态物体并在超出阴影距离的时候使用软阴影,不超出的时候使用实时硬阴影
realtime灯光会在阴影距离内产生比较锐利的影子。距离外不投影忽视物体。
mixed和baked灯光能烘焙出静态物体的反射光
realtime lighting下 realtime灯光也能烘焙出静态物体的反射光
烘焙的shadowmask上的颜色不是灯光颜色,而是静态光的颜色,只能有四盏灯,分为rgba
mixed灯光产生的阴影将被分离到新的烘焙贴图中,所以这个模式下mixed灯光颜色和位置可以在烘焙后改,还是软阴影
https://docs.unity3d.com/Manual/LightMode-Mixed-DistanceShadowmask.html
Shadowmask (只支持enlighten)
性能消耗比较低,适合室内小型无多少动态物体的项目,适合中低端pc和移动端游戏
baked和mixed灯光会烘焙下所有静态物体并产生软阴影,baked和mixed灯光会穿透动态物体(动态物体不会被baked灯光照亮)
realtime灯光会在阴影距离内对动态物体产生比较锐利的影子。静态物体不会在动态灯光下产生投影,距离外不投影忽视物体。
mixed和baked灯光能烘焙出静态物体的反射光
realtime lighting下 realtime灯光也能烘焙出静态物体的反射光
烘焙的shadowmask上的颜色不是灯光颜色,而是静态光的颜色,只能有四盏灯,分为rgba
mixed灯光产生的阴影将被分离到新的烘焙贴图中,所以这个模式下mixed灯光颜色和位置可以在烘焙后改,还是软阴影
https://docs.unity3d.com/Manual/LightMode-Mixed-Shadowmask.html
Subtractive
性能消耗很低,适合小型无多少动态物体的项目,适合中低端pc和移动端游戏
baked和mixed灯光会烘焙下所有静态物体并产生软阴影,baked和mixed灯光会穿透动态物体(动态物体不会被baked灯光照亮)
realtime灯光会在阴影距离内对动态物体产生比较锐利的影子。静态物体不会在动态灯光下产生投影,距离外不投影忽视物体。
mixed和baked灯光能烘焙出静态物体的反射光
realtime lighting下 realtime灯光也能烘焙出静态物体的反射光
是以前的老模式,是用于低性能设备,光照被烘焙到贴图中。
https://docs.unity3d.com/Manual/LightMode-Mixed-Subtractive.html
基本材质烘焙的对比
反射状态final gather效果
关于Directional Specular
由于在前面的版本里就已经标记成将要废弃的选项,这个版本就没有了
但是以前用这个可以表现出高光细节(就是法线贴图下的高光效果),现在要怎么表现呢
这个就只能借助enlighten了,需要将光照模式改成Shadow Mask或者 Distance Shadow Mask,使用directional,而且光照也必须改成mixed模式
参考https://answer.uwa4d.com/question/5902db1da7fbeb4a58bf64a3/unity5.6%E7%89%88%E6%9C%AC%E4%B8%AD%E5%85%89%E7%85%A7%E9%A2%84%E6%B8%B2%E6%9F%93Directional-Mode%E9%80%89%E9%A1%B9%E4%B8%AD%E5%B0%91%E4%BA%86Directional-Specular%E9%80%89%E9%A1%B9
对后面期望当然是渲染最好能分层
比如现在还是烘焙无视layer设置,包括灯光的
unity3d 5.6烘焙教程的更多相关文章
- Unity3D脚本中文系列教程(十五)
http://dong2008hong.blog.163.com/blog/static/4696882720140322449780/ Unity3D脚本中文系列教程(十四) ◆ LightRend ...
- Unity3D脚本中文系列教程(九)
Unity3D脚本中文系列教程(八) name 对象名称hideFlags 该物体是否被隐藏,保存在场景中或被用户修改继承的函数 GetInstanceID 返回该物体的实例id继承的类函数 oper ...
- Unity3D脚本中文系列教程(十六)
Unity3D脚本中文系列教程(十五) ◆ function OnPostprocessAudio (clip:AudioClip):void 描述:◆ function OnPostprocess ...
- Unity3D脚本中文系列教程(十四)
http://dong2008hong.blog.163.com/blog/static/469688272014032134394/ WWWFrom 类Unity3D脚本中文系列教程(十三)辅助类. ...
- Unity3D脚本中文系列教程(十三)
http://dong2008hong.blog.163.com/blog/static/469688272014032334486/ Unity3D脚本中文系列教程(十二) ◆ function G ...
- Unity3D脚本中文系列教程(十)
http://dong2008hong.blog.163.com/blog/static/4696882720140312627682/?suggestedreading&wumii Unit ...
- Unity3D脚本中文系列教程(七)
http://dong2008hong.blog.163.com/blog/static/4696882720140311445677/?suggestedreading&wumii Unit ...
- Unity3D脚本中文系列教程(六)
http://dong2008hong.blog.163.com/blog/static/469688272014031943118/ Unity3D脚本中文系列教程(五) 变量 ◆var colli ...
- Unity3D脚本中文系列教程(五)
http://dong2008hong.blog.163.com/blog/static/4696882720140302848544/?suggestedreading&wumii Unit ...
随机推荐
- CVE-2010-0249 IE8 UAF漏洞分析
CVE-2010-0249 [CNNVD]Microsoft Internet Explorer非法事件操作内存破坏漏洞(CNNVD-201001-153) Microsoft Internet Ex ...
- ddmlib问题总结——同步获取设备信息
通过IDevice.getProperty(String name)得到响应的设备属性.在实际的使用过程中发现,我的manufacturer总是获取不到,为null(获取代码如下),而剩下的属性都可以 ...
- StringUtils一些常用方法
StringUtils是org.apache.commons.lang jar包里面的类方法,当输入参数String为null则不会抛出NullPointerException,而是做了相应处理,nu ...
- php 批量导入昨天的数据(别类版的增量备份安案)
$where = ''; $localogLogin = $this->gamedb_model->query_onerow("select `datetime` from lo ...
- js下判断 iframe 是否加载完成的完美方法
一般来说,我们判断 iframe 是否加载完成其实与 判断JavaScript 文件是否加载完成. 采用的方法很类似: var iframe = document.createElement( ...
- docker容器重启故障
问题 强杀docker进程后,重启docker.docker中的容器无法启动并报错,报错内容如下 docker restart ae1f7b2c2f15 Error response from dae ...
- PHP内置函数实现简单洗牌
function wash_card($num_card) { $a = array_keys(array_fill(0, $num_card, '')); $b = array_keys(array ...
- P3397 地毯
P3397 地毯 前缀和最开始接触是在日照夏令营,lca的一段子树中加或减一个数然后打标记,求前缀和000+10000-100000000111110000二维也一样,比如对子矩阵都加10+10000 ...
- C#开发Unity游戏教程之游戏对象的行为逻辑方法
C#开发Unity游戏教程之游戏对象的行为逻辑方法 游戏对象的行为逻辑——方法 方法(method),读者在第1章新建脚本时就见过了,而且在第2章对脚本做整体上的介绍时也介绍过,那么上一章呢,尽管主要 ...
- Codeforces Round #370 (Div. 2) A. Memory and Crow 水题
A. Memory and Crow 题目连接: http://codeforces.com/contest/712/problem/A Description There are n integer ...