Origin
zhuanlan.zhihu.com
Tags
Unity
渲染
经验分享
性能优化
项目
收藏夹
创建时间
收藏类型
Cubox 深度链接
更新时间
原链接
描述
铛~ 铛~ 铛,兔纸我又来了 马上就春节啦,先提前祝福各位小伙伴,2021!幸福!快乐!新年快乐~!!
==============================================
2020 一切安好,2021 一切更好!
2020 是真的坎坷的一年,不论是个人或者国家,经历过艰难岁月,才明白普通可贵,唉..
抛开悲伤,这一年我学了很多,也悟了很多,知识也好,技能也罢;
学习不仅是为了充实自己,还是为了让自己能看到并看懂这个世界上的更多事物
对啦,第一次跨国合作,Emmm.. 也跨没多远,就在日本,居然.. 居然就和 Keijiro 大神合作了.. 太幸运了 (ㄒ o ㄒ)
哈哈~ 显摆一下,收!
==============================================
嗯哼,今天呢
我就来说一下,Unity 里制作写实渲染,画面实现上需要注意的一些问题,也是我实际碰到的一些问题~
==============================================
Emmm.. 说画面实现之前呢,我先来简单介绍一下渲染原理,目前的实时渲染引擎都还是使用光栅化渲染,有小伙伴问了,什么是光栅化渲染,目前呢,听得比较多的应该是这两种:光线追踪渲染和光栅化渲染
- 光线追踪(ray tracing):光源 –> 物体表面 –> 反射折射….xN 次 –> 摄像机
- 光栅化(rasterization):光源 –> 物体表面 –> 摄像机
光线追踪本质上是 “让光线自主决定一切”, 而不是任何模拟,逼近,就是完全真实的光线弹射,一般呢,在影视合成啊,影视动画呀,室内设计等等这些领域中用的比较多,由于计算太过于复杂呢,完整的光线追踪算法还只能是离线渲染,目前的技术呢,还很难将光线追踪的所有特性都实时性~~ 不过相信这个技术很快就能完全攻破的。
好了,再回到光栅化,什么是 “光栅化” 呢?为了性能,所以默认光线只反射一次,从而可以把反射计算整个放在二维图像空间里做,二维图像就是所谓的“光栅”。
比如下面最好说明光栅化渲染的栗子,一盏聚光灯下去,光线在角色身上没有任何的反射
总之呢,光栅化的光照渲染就是不真实的.. 但是呢,不真实也无所谓啦,反而给小伙伴们提供了很大的艺术创作空间,来形成自己的独特的风格化渲染
画面的美感,更多是感性气氛上的捕捉、情感上的共鸣
当然了,小伙伴也能靠自己对于灯光的敏感程度.. 模拟出营造的真实感。
==============================================
总结一下呢,相比光线追踪呢,光栅化渲染想要逼近现实呢,是需要作出大量尝试和模拟的。
对了,最快的接近光线追踪效果的方法是烘焙啦,对于一些小房间或者一些不大的小场景,用这种方面可以很容易的就达到光线追踪的渲染效果..
这种方法呢也有缺点,太过于静态,因为光照贴图是烘培静态的,所以烘焙过后的所有的物件是不能移动的,还有就是,比如场景大了烘焙的效率就不行啦,光照贴图过多过大都会影响实时渲染的性能的,然后呢,随着物体的数量增加,弹射次数的增加,烘焙的时间也是成倍的增加..
反正我是.. 没有找到方法烘焙成功过大场景../(ㄒ o ㄒ)/~~
我想了一下,我玩过的有印象的… 模拟出很好看的真实光照的游戏
- 刺客信条:大革命
- 荒野大镖客 2
- 教团: 1886
当然啦,应该还有很多.. 我举的这几个栗子,是我印象比较深刻的,这些游戏应该都没有用烘焙光照贴图模拟的吧..
是的吧,看看人家的大神~ 虽然光栅化这个技术并不真实,但是还是依靠这些大神们强大的图形学技术还原出了媲美光线追踪渲染的实时画面效果
当然了,Unity HDRP 中也是很多黑科技的,来最大程度还原光线追踪效果,这个我之前些的文章有介绍哦~
==============================================
Emmmm… 好像跑题了… 因为我这篇说的就是写实渲染,所以呢先简单的介绍一下渲染原理
回归主题,我就来自我总结一下,当然啦也只是我个人的经验哈,Unity 引擎里光栅化实时渲染的项目,画面实现上需要注意的一些问题~
首先呢,画面的组成,Emmmm.. 几乎每一环都是密不可分的,环环相扣的,我先来简化一下,大概的有这么些,当然啦,肯定不止这么些,我这说的是能够实际形成像素的,感性层面的东东就先不介绍啦:
角色,环境,动画,特效,着色器,后期
但是呢,能够在画面中构成像素的,应该就是角色,环境,动画,特效这四个了,再配合着色器和后期,让画面中的这些像素更酷一些
==============================================
好了,重点来了,想了想,重点只有两个字:“整体”,画面就是整体,由各个环节组合形成的整体,无论是我接下来说的角色表现,场景的搭建,动画的辅助,特效的配合等等之类的.. 都离不开这两个字
整体这个词怎么定义呢?
就好比是一桶水,以上的每一个部分都是一块木板,组成了一个木桶,而桶里的水呢,就是视觉上的愉悦感,只要有一块木板断了,那都会对这个木桶能装多少水造成致命的打击的,无论其他的板子的高度有多高
嗯嗯,大概这个样子,好了,我就用我之前做的一个视频来举个栗子,来说一下我遇到的一些问题~
那我就刚才说的这几个逐一的说一下,我遇到的一些问题
==============================================
- 角色
- 环境
- 动画
- 特效
- 着色器
- 后期
角色:
角色嘛.. 如果想要获得玩家的喜爱和认可,要不就做的美美的,要不呢,就极具个性,这里呢,涉及到了角色概念设计的问题,要说的就多啦,我这里就先不谈这个啦,
我来说下我遇到的问题:
哎.. 这应该算是个光栅化渲染的技术难题.. 我是希望我的角色是亚洲面孔的
但是呢,亚洲面孔的角色在引擎里面其实是很难表现的,因为亚洲的五官是不太立体的,无论是正面还是侧面,显得很平
尤其是距离摄像机 5-10 米的距离,Mipmap 之后,人物的五官的贴图细节会抹的几乎没有,同时嘞,不那么立体的脸在光照投影后,很容易就会出现漏光啊,或者呢,出现一些很奇怪的阴影区域,这些问题都会造成角色表现出来很丑的
那么问题来了,怎么解决嘞…
和光线追踪静帧渲染不同,实时渲染下是有各种氛围以及角度,得整体的审视这个角色,这个角色有可能出现在室内,有可能出现在室外,可能白天也可能是在黑夜,有可能摄像机离的很近也有可能离得很远,所以呢,做的时候不要只盯着一个角度,需要全方位的看待问题,在制作的时候就会产生一些约束,
- 角色的贴图得满足物理材质,需要在不同的场景中的不同光照下都自然
- 角色的模型得满足不同距离下都轮廓清晰,好看
好啦,有了这些约束,说一下解决办法..
我自己想到的解决办法呢,就是可以稍微风格化一下角色
- 美妆: 物理材质嘛,那就用物理得解决办法,鼻影,眼影,眼线,唇彩,闪粉,腮红,眉线等等,对面部、五官及其他部位增强立体感,调整形色,掩饰缺陷。那要怎么画呢… Emmm.. 那平时化妆怎么画… 就怎么画,不会画可以参考一下视频… 哈哈,当然了,妆的材质感也是需要做出来的,比如口红,有水润的唇蜜,也有哑色的唇彩.. 化妆嘛,主要解决的问题呢,就是中远距离 Mipmap 后,关键部位的贴图细节被抹掉的问题,以及填补亚洲面孔五官不立体的缺陷
- 整容: 夸张一下角色五官比例,还可以加入双眼皮,卧蚕这些有明显模型结构的特征,同时加大眼睛的比例,眼睛是心灵的窗口嘛.. 大部人看人,应该是从眼睛开始看的,所以眼睛这一块尤为重要,对了,再带个美瞳.. 完美!!
- 补光: 给角色设置单独的灯光层.. 对他进行单独的微弱的补光,这个呢是解决有些场景的光照角度不太好,会把人物照射的很丑,补光可以缓解一下这个问题
哈哈,这就是我目前总结出来的方式.. 来弥补亚洲人的渲染缺陷
接下来呢,可能还有个问题,就是头发吧,头发的话,我想了一下,排序问题应该有很多小伙伴碰到过的,我自己是用手动排序的方式,因为 HDRP 不支持多 pass,所以呢,我是采用两层头发模型来解决头发渲染排序的问题
小技巧:把角色打组成为 prefab 的时候,模型一定要作为 prefab 的子物体哦,千万不要直接把 SkiningMesh 模型直接存成 prefab,这样做的话是有好处的,如果模型有调整或者模型上的脚本有删减,Prefab 都会正确更新的
==============================================
- 角色
- 环境
- 动画
- 特效
- 着色器
- 后期
环境:
环境呢,应该可以拆解为场景以及光照吧,我就统称为环境吧,我自己觉得哈,环境对于画面来说呢,是非常的重要,比如,随便在画面某一帧定格,环境占用画面的比例应该至少是 60% 以上的,如果环境上有任何的不协调,就会立马打断沉浸感,这是很致命的..
环境是角色最好的参照物,能够沉浸在扮演这个角色中,如果制作的素材和世界观有契合的话呢,配合文字或者动画,就能够很好的带入到这个世界观之中
在关卡设计上呢,环境也可以很好的作为一个引导作用,比如使用灯光构成的层次呢,可以很好的引导玩家的视觉,防止迷路什么的
同时呢,环境也是心情以及节奏的映射,有危险气息的,轻松愉悦的等等,配合音乐以及特效,你就能瞬间被带入到这种情境中
当然啦,一个想让别人印象深刻过目不忘的环境,靠这几个是不够的,这个我最近有获得了一些心得,这个我之后再说吧,这里就先不说啦~
好啦,刚才稍微的介绍了一下环境的作用,我来说一下我遇到的环境搭建的问题:
- 比例: 环境在搭建中,一定需要有个角色在场景中作为参照,以确保环境的比例正确,不会出现一个比人还大的可乐瓶啊什么的,哈哈~ 我自己喜欢创建一个 1.6 米的 Cube 作为参照物,比例是非常重要的,因为人对于一些已知事物的感知是非常敏感,比如草,瓶子,砖块,桌子什么的.. 如果场景中有这些物体,但是比例失调的话,瞬间就能感受出来的
- 光照: 应该没有人拍晚上的庐山吧.. 一片黑漆漆的,再好的风景,光照不行.. 那都不好看的… 如何构建出好看的光照呢,.. 首先吧,有自发光贴图的物体是需要有光源的,场景中有些明确知道是光源的物体,得需要为他们打灯,比如广告牌鸭,探照灯之类得这些物体,但是嘞,我想说的是,这些需要反着来.. 为什么这样说呢,还是回到 “整体” 两个字,首先看整体画面,需要先思考想一想,想要营造出怎样的冷暖对比呢?哪些位置需要用灯光来营造层次感呢?想清楚了之后呢,先开始摆光,再根据这些光摆能够发出这些灯光的物体.. 这样就既好看也不违和了~~
- 层次: 好看的画面是需要层次关系的,灯光的明暗冷暖是可以很好的勾勒出画面的层次的,当然了,用 Unity HDRP 一些现成的氛围组件,就能很好的勾勒出画面的层次,比如 Fog,Density Volume 这些,是划分层次最好的工具,牢牢的把我想要突出的视觉中心控制在我想要表达的位置
- 材质: 写实渲染,那一定要把材质表现到位的,比如金属就是金属,水泥地就是水泥地,也就是说模型贴图的金属度和粗糙度是一个正确的颜色,我想了想… 这应该就是大家所谓的画质啦,大部分人对于美感的概念是模糊的,但是每个人对于材质是有刻板印象的,他会用他的常识来判断材质,所以呢,材质的正确性是蛮重要的~
- 当然,还是那个问题… 一定要考虑到整体性哦,不要出现:环境搭建完了,看着还行,但是把角色放在里面,直接就过曝啊,太黑啊.. 比例不正确啊这些问题,在搭建的时候就需要不断的审视和测试,角色在环境中是否自然啊,灯光的强度值,照射在角色身上是否合适啊,比例是否有违和感啊等等,反正呢,从整体出发,全局调整,最终调整平衡即可
如果是游戏环境的话,面对不同的类型,涉及到关卡上么,需要考虑的问题就更加复杂啦.. 这里就先不说啦
小技巧:物件一定要作为 prefab 在场景中摆放哦,因为后面肯定还会有调整的,比如 LOD 距离,碰撞层等等之类的,如果没有作为 prefab 的话.. 那就… 批量修改会非常的麻烦..
==============================================
- 角色
- 环境
- 动画
- 特效
- 着色器
- 后期
动画:
动画呢,是叙事最好的表达方式,也是加强画面感的最好工具!
不只是角色动画啊,场景中有一些动态的物体,也是对于气氛的烘托是加分的,比如说,来往的车辆,行人,摇曳的电线等等,是能够加强画面的拟真度的
当然喽,动画也是有节奏和层次的,一个画面内,也需要整体的看一下效果的,不能说所有的物体都在动,那样的话,会没有视觉重心,动静结合,同时再配合镜头,达到最好的画面表现~~
比如,一个行走动画配合镜头动画,形成一个逆行者的画面
好啦,说一下角色的动画
角色仿真动画制作上是有难度的,尤其是人的行为动画上
因为人对于人真的是太熟悉了,一段行为动画,只要有一丝丝的节奏问题和肢体不协调,这种误差立马能感觉出来的
当然啦,如今有很多的技术手段来解决这个问题,比如说,动作捕捉,对于这类的动画实现就能帮助到很多,节约很多的时间成本
对了,这里需要感谢一下诺亦腾公司,给我提供的惯性动捕方案,在制作效率上那是有不小的提升哦~
那么问题来了,动作捕捉的动画也有局限性的,毕竟是两个空间
- 首先呢;
捕捉的环境是那肯定是完全平整的地面,但是虚拟的环境呢,那就说不定了,地上有可能有台阶,有斜坡之类的,那捕捉的动画那就一定会穿帮了的
- 其次呢;
在实现中呢,角色的面朝方向或者眼睛的方向可能会不太准确,可能会根据镜头的需要,这些方面会有调整,包括角色的姿势也会有调整
- 还有呢;
动捕的演员和虚拟的角色身材有误差,可能虚拟的角色更高一些,手脚更长一些,肩宽胯宽不一致之类的
那这个问题怎么解决呢;
啊哈,Unity 中有很多现成的工具来解决这个问题的
比如呢,模型组件自带的 Muscles setting 可以调整骨骼的伸展幅度,还有就是像 Animation Rigging,Final IK 等等之类的反向动力学组件,都能够很方便的解决这些问题
工具的功能我这里就不详细介绍啦,有很多现成的教程的
像裙摆呀,头发这些的物理的仿真模拟动画呢,手动 K 帧是不太现实的
那怎么办呢?Unity 中也有很多现成的工具来解决这类的问题的,像 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 的目的呢,就是实现这些材质,模拟出这个物体该有的材质以及模拟出这个氛围下材质该有的表现状态,对于画质的提升呢,还有情景带入感,那都是有不小的帮助呢。
Emmm… 遇到的问题应该没有什么,大部分的标准化 shader 效果实现都有现成的案例
怎么说类,对一些标准化的材质实现,是有明确天花板的。
想要表现出高度,制作的模型啊贴图啊这些精度不断的提高效果才是可能性。
但是呢,想制作一些别出心裁的效果,那就可以多尝试一下啦,把各种属性的结合,做出一些炫酷的效果,哈哈,那就发挥你的想象空间吧,当然了,这些视觉性的 shader,也是需要考虑画面的整体性的,不然随便地方什么都用,破坏整体的视觉层次
小技巧:使用 Shader Graph 制作 shader 的话,可以做一些通用的 sub graph 来节约时间哦
==============================================
- 角色
- 环境
- 动画
- 特效
- 着色器
- 后期
后期:
后期的话,对于画面的效果提升,尤其是弥补光栅化渲染的一些缺陷,是非常重要的哦
比如说,Bloom,AO,Screen Space Reflection 这些,加入这些效果,可以离光线追踪的效果更近一些~
当然了,也可以自己添加一些自定义的后期(Custom Post Process),比如说,我这个环境,就添加屏幕雨水效果和 Glith 朋克效果,因为下雨嘛,镜头上肯定会有水珠挂在上面什么的,Glith 也会比较符合朋克的定义,增强了我想要的氛围代入感
但是类,还是有一些问题需要重点注意的
后期效果的有些参数是不能过于夸大的给值的,因为后期是属于屏幕效果,是渲染在最上层的,所有的你之前制作的角色呀,场景呀,特效呀,这些像素,都需要齐刷刷的再让这些后期效果叠一遍的。
所以呢,在调参数的时候,一定要整体的全局的思考一下
尤其是多场景,灯光的参数不同,Post Process 也不同的情况下,有些参数一定要设范围的,如果不这样呢,那肯定就会出现这个情况:这个角色这个特效怎么在这个环境下还行,再另一个环境里怎么就这么丑嘞
小技巧:后期效果可以试试 Local 模式,可以营造出不一样的感觉的哦
==============================================
好啦,差不多写完啦,感动了,您居然看完了(。^▽^)
我总结一下重点哈
整体性思维,同样的适用于制作画面上,将画面结构拆解成几个环,每一个环都会影响后一环,环环相扣,需要小伙伴们整体性的,全局性的思考每一环
还是举之前举过的栗子哈,画面呢,本身是一个大整体也是一个大木桶,每个环节呢,是块小木块也是一个小整体,从每个小整体出发,整个桶子能够延申到怎样的高度,以及呢,里面能够装多少水,就靠你自己啦
如果可以的话,记得评论,点赞,转发,收藏哦 > 本文由简悦 SimpRead 转码