原作者:樱花兔
本文主要小结了Unity 里制作写实渲染,画面实现上需要注意的一些问题
渲染基础原理
说画面实现之前先来简单介绍一下渲染原理,目前的实时渲染引擎都还是使用光栅化渲染。
目前用的比较多的是光线追踪渲染和光栅化渲染
- 光线追踪(ray tracing):光源 —> 物体表面 —> 反射折射….xN 次 —> 摄像机
- 光栅化(rasterization):光源 —> 物体表面 —> 摄像机
光线追踪
本质上是 “让光线自主决定一切”, 而不是模拟,是完全真实的光线弹射。一般在影视合成、影视动画、室内设计等领域中用的比较多。由于计算太过于复杂,完整的光线追踪算法还只能是离线渲染。目前的技术还很难将光线追踪的所有特性都实时化。
光栅化
为了性能,默认光线只反射一次,从而可以把反射计算整个放在二维图像空间里做,二维图像就是所谓的“光栅”。
比如下面最好说明光栅化渲染的栗子,一盏聚光灯下去,光线在角色身上没有任何的反射
光栅化的光照渲染就是不真实的,小伙伴也能靠自己对于灯光的敏感程度,模拟出营造的真实感。
另一方面,不真实反而给小伙伴们提供了很大的艺术创作空间,来形成自己的独特的风格化渲染。
画面的美感,更多是感性气氛上的捕捉、情感上的共鸣**
总结一下呢,相比光线追踪,光栅化渲染想要逼近现实效果,是需要作出大量尝试和模拟的。
烘焙
优点
对于一些小房间或者一些不大的小场景,用这种方面可以很容易的就达到光线追踪的渲染效果
缺点
- 因为光照贴图是烘培静态的,所以烘焙过后的所有的物件是不能移动的。
- 如场景大了烘焙的效率非常低
- 光照贴图过多过大都会影响实时渲染的性能的
- 随着物体的数量增加,弹射次数的增加,烘焙的时间也是成倍的增加
Unity HDRP 中也是很多黑科技的,来最大程度还原光线追踪效果
画面实现上需要注意的问题
Unity 引擎里光栅化实时渲染的项目的画面的组成简单分为角色,环境,动画,特效,着色器,后期 。
能够在画面中构成像素的,应该就是角色,环境,动画,特效这四个,再配合着色器和后期,让画面中的这些像素更酷一些。
归结到画面表现,重点只有两个字: “整体” 。画面就是整体,由各个环节组合形成的整体,无论是我接下来说的角色表现,场景的搭建,动画的辅助,特效的配合等等之类的.. 都离不开这两个字
角色
![06.gif](https://cdn.nlark.com/yuque/0/2021/gif/949264/1615289462884-a4a38341-1f41-4b14-b8a5-464531a8e42b.gif#align=left&display=inline&height=400&margin=%5Bobject%20Object%5D&name=06.gif&originHeight=400&originWidth=584&size=4841932&status=done&style=none&width=584)<br />光栅化渲染下,因为亚洲人的**五官是不太立体的**,所以亚洲面孔的角色在引擎里面其实是很难表现的,无论是正面还是侧面,都显得很平。<br />尤其是距离摄像机 5-10 米的距离,Mipmap 之后,人物的五官的贴图细节会抹的几乎没有。同时不那么立体的脸在光照投影后,很容易就会出现漏光或出现一些很奇怪的阴影区域,这些问题都会造成角色表现出来很丑的。<br />![07.gif](https://cdn.nlark.com/yuque/0/2021/gif/949264/1615290663306-7f4ac4ae-6bf4-40d2-a768-a50efae9475b.gif#align=left&display=inline&height=393&margin=%5Bobject%20Object%5D&name=07.gif&originHeight=393&originWidth=333&size=6160368&status=done&style=none&width=333)
解决思路
和光线追踪静帧渲染不同,实时渲染下是有各种氛围以及角度,得整体的审视这个角色,这个角色有可能出现在室内,有可能出现在室外,可能白天也可能是在黑夜,有可能摄像机离的很近也有可能离得很远,所以呢,做的时候不要只盯着一个角度,需要全方位的看待问题,在制作的时候就会产生一些要求。
模型制作要求
- 角色的贴图得满足物理材质,需要在不同的场景中的不同光照下都自然
-
解决方案
美妆
通过鼻影,眼影,眼线,唇彩,闪粉,腮红,眉线等等 ,对面部、五官及其他部位 增强立体感 ,调整形色,掩饰缺陷。可以参考化妆手法,多看美妆教学。
妆的质感 也是需要做出来的。比如口红,有水润的唇蜜,也有哑色的唇彩。化妆主要解决的问题是中远距离 Mipmap 后,关键部位的贴图细节被抹掉的问题,以及填补亚洲面孔五官不立体的缺陷。
整容
夸张一下角色五官比例 ,还可以加入双眼皮,卧蚕这些有明显模型结构的特征,同时加大眼睛的比例,眼睛是心灵的窗口嘛.. 大部人看人,应该是从眼睛开始看的,所以 眼睛这一块尤为重要 ,对了,再带个美瞳.. 完美!!
补光
给角色设置单独的灯光层.. 对他进行单独的微弱的补光。
- 有些场景的光照角度不太好,会把人物照射的很丑,补光可以缓解这个问题。
头发
- 用手动排序 ,因为 HDRP 不支持多 pass
- 我是采用两层头发模型来解决头发渲染排序的问题
小技巧
- 把角色打组成为 prefab 的时候,模型一定要作为 prefab 的子物体。
- 千万不要直接把 SkiningMesh 模型直接存成 prefab,这样做的话是有好处的,如果模型有调整或者模型上的脚本有删减,Prefab 都会正确更新的。
环境
环境对于画面来说呢,是非常的重要,比如,随便在画面某一帧定格,环境占用画面的比例应该至少是 60% 以上的,如果环境上有任何的不协调,就会立马打断沉浸感,这是很致命的。
环境可以简单拆分为为场景以及光照
- 环境是角色最好的参照物,能够沉浸在扮演这个角色中,如果制作的素材和世界观有契合的话呢,配合文字或者动画,就能够很好的带入到这个世界观之中。
- 在关卡设计上呢,环境也可以很好的作为一个引导作用,比如使用灯光构成的层次呢,可以很好的引导玩家的视觉,防止迷路什么的。
环境也是心情以及节奏的映射,有危险气息的,轻松愉悦的等等,配合音乐以及特效,你就能瞬间被带入到这种情境中。
环境搭建的解决思路
比例
环境在搭建中,一定需要有个角色在场景中作为参照,以确保环境的比例正确。
光照
有自发光贴图的物体是需要有光源的。
- 场景中有些明确知道是光源的物体,得需要为他们打灯,比如广告牌鸭,探照灯之类得这些物体。
- 但是,出发点还是回到 “整体” 两个字。过份真实不一定好看。
- 首先看整体画面, 需要先思考和分析 ,想要营造出怎样的冷暖对比呢?哪些位置需要用灯光来营造层次感等等。
- 分析完后, 先开始布光 ,再根据这些光源,摆出能够发出这些灯光的物体.. 这样就既好看也不违和。
层次
- 好看的画面是需要层次关系的,灯光的明暗冷暖是可以很好的勾勒出画面的层次。
- Unity HDRP 一些现成的氛围组件,就能很好的勾勒出画面的层次,比如 Fog,Density Volume 这些。
-
材质
写实渲染,那一定要把材质表现到位的,比如金属就是金属,水泥地就是水泥地。也就是说模型贴图的金属度和粗糙度必须是一个正确的颜色。
- 大部分人对于美感的概念是模糊的,但是每个人对于材质是有刻板印象的,他会用他的常识来判断材质,材质的正确性非常重要的。
- 一定要考虑到 整体性 。多人协作时候,需要考虑到协作流程是否能兼顾到画面表现的整理效果。
- 不要出现环境搭建完了,看着还行,但是把角色放在里面,直接就过曝啊,太黑啊.. 比例不正确啊这些问题,在搭建的时候就需要不断的审视和测试,角色在环境中是否自然啊,灯光的强度值,照射在角色身上是否合适啊,比例是否有违和感啊等等,反正呢,从整体出发,全局调整,最终调整平衡即可。
小技巧
- 物件一定要作为 prefab 在场景中摆放,因为后面肯定还会有调整的,比如 LOD 距离,碰撞层等等之类的,如果没有作为 prefab摆放,修改会非常的麻烦 。
动画
动画呢,是叙事最好的表达方式,也是加强画面感的最好工具!
不只是角色动画啊, 场景中有一些动态的物体,也是对于气氛的烘托是加分的 ,比如说,来往的车辆,行人,摇曳的电线等等,是能够加强画面的拟真度。
动画也是有节奏和层次的,一个画面内,也需要整体的看一下效果的, 不能所有的物体都在动,那样的话,会没有视觉重心 ,动静结合,同时再配合镜头,达到最好的画面表现。比如,一个行走动画配合镜头动画,形成一个逆行者的画面。
角色动画
角色仿真动画制作上是有难度的,尤其是人的行为动画上。一段行为动画,只要有一丝丝的节奏问题和肢体不协调,这种误差立马能感觉出来。
如今有很多的技术手段来解决这个问题,比如说,动作捕捉,对于这类的动画实现就能帮助到很多,节约很多的时间成本。诺亦腾公司的惯性动捕方案,在制作效率上那是有不小的提升(广告)。
动作捕捉动画的局限性
- 捕捉的环境基本是完全平整的地面,但是虚拟的环境呢,那就说不定了,地上有可能有台阶,有斜坡之类的,那捕捉的动画那就一定会穿帮。
- 在现实中,角色的面朝方向或者眼睛的方向可能会不太准确,可能要根据镜头的需要,进行调整,包括角色的姿势也会有调整。
- 动捕的演员和虚拟的角色身材有误差,可能虚拟的角色更高一些,手脚更长一些,肩宽胯宽不一致等问题。
解决方案
Unity 中有很多现成的工具来解决这个问题的。
- 模型组件自带的 Muscles setting 可以调整骨骼的伸展幅度。Animation Rigging,Final IK 等等之类的反向动力学组件,都能够很方便的解决这些问题
- 裙摆、头发这些的物理的仿真模拟动画,手动 K 帧是不太现实的。
- Magica Cloth,Dynamic bone 之类的组件,是很方便解决刚说的这些物理模拟的问题的。
- 还有一些问题可能需要解决起来时间会很久,比如这个下车的动画,如果角色要完全的匹配下车,那就需要很长的时间来制作这段动画了.. 我觉得划不来,就直接用镜头规避掉了
小技巧
Skinningmesh 记得将 Update when offscreen 勾上,以防骨骼有位移时,mesh 不会被摄像机剔除掉
特效
辅助视觉的特效
这类的特效,出现的时候,一般都是附和动画啊模型一起出现的,节奏感很强,视觉冲击力很强,如果配合着一些后期效果,很容易就将视线吸引住了。
制作上是非常需要整体思考的,节奏啊,明暗啊,特别是特效的明暗,需要很巧妙的拿捏住的,太暗的话,效果出不来,太亮的话,视觉不适,而且会破坏整体画面。
营造氛围的特效
一般就是指环境的特效,如下雨、落叶这些。主要的作用就是丰富视觉啦,进一步的加强代入感和画面丰富度。
如果要做天气效果的话,也和特效密不可分的,再配合一些匹配的 shader 效果,就很容易营造出做出下雨、下雪天气什么的。
制作思路
平衡
- 为了防止特效的颜色过曝或者过暗呢,在制作的时候呢,最好是给特效颜色的 HDR 值定一个 标准范围值 。
- 每个环境的 Post Processing 上的一些可能会影响颜色的后期效果,比如 Bloom,Color Adjustments,Exposure 这些的,给的值呢,幅度最好不要相差太大了。
- 避免出现:把特效放在这个场景效果好棒,但是在放进另一个场景就黑到不行,或者爆到眼睛都睁不开。
穿插
- 目前特效模拟流体类的效果,都是用片的做法制作的,节省性能的同时呢,也能伪造出流体的感觉,所以特效的 shader 制作上呢,一定要考虑到 特效的排序 以及 模型穿插 的问题,开启 Soft particle 可以解决这些问题,如果是自定义 Shader 的话呢,需要用深度剪裁一下贴图的 Alpha
小技巧
Particle System 特效制作的时候可以尝试使用 Sub Emitters,Trails,Custom Data 这些功能,可以做出意想不到的效果
着色器
shader对模拟出物体该有的材质以及模拟出这个氛围下材质该有的表现状态,对于画质的提升呢,还有情景带入感,都是有不小的帮助。
对一些标准化的材质实现,是有明确天花板的。
想要表现出高度,制作的模型啊贴图啊这些精度不断的提高效果才是可能性。
这些视觉性的 shader,也是需要考虑画面的整体性的,不然随便地方什么都用,破坏整体的视觉层次。
小技巧
使用 Shader Graph 制作 shader 的话,可以做一些通用的 sub graph 来节约时间
后期
后期对于画面的效果提升,尤其是弥补光栅化渲染的一些缺陷,是非常重要的。比如说,Bloom,AO,Screen Space Reflection 这些,加入这些效果,可以离光线追踪的效果更近一些~
当然了,也可以自己添加一些自定义的后期(Custom Post Process),比如说,我这个环境,就添加屏幕雨水效果和 Glith 朋克效果,因为下雨嘛,镜头上肯定会有水珠挂在上面什么的,Glith 也会比较符合朋克的定义,增强了我想要的氛围代入感