Unity 社区
9
3

浅谈《博德之门3》中的技术点

独立开发者陈世杰
塞尔达是天,我是上帝
阅读 2939
2024年1月6日
2023年年度游戏尘埃落定,《博德之门3》毫无悬念,作为游戏开发者,我们可以看看,这样一款全满分的游戏,他在技术层面,有哪些值得我们学习的,笔者长期从事Unity独立开发,玩了几个礼拜该游戏,玩的过程中对于印象较为深刻独到的地方做了一些视频Mark,给大家分享一下心得

前言

该文章不探讨游戏玩法、剧情策划、数值与系统的设计,单纯只通过开发者视角去分析这里面的一些独特的技术点,用Unity引擎怎么实现它,仅供大家参考,肯定有不全与遗漏的地方,欢迎补充校正. 谢谢

第一 Part 人物渲染TA向

1.头发的抖动抗锯齿处理半透明排序中深度问题
博德之门中刚开创建人物首先我会关注头发这一块的渲染,头发一直是实时引擎里性能与渲染表现头疼的问题,传统的做法我们会在建模上分好层级关系,然后在半透明排序中区分层级队列,但这样由于深度缓冲区的关系,后续游戏中一系列基于屏幕空间的运算的一系列效果,例如“屏幕扰动模拟气浪等”,半透明排序就会在不透明物体渲染之后,那此时像scenecolor这样的输入就不能正确得到表现,还需要额外的开销一个自定义后处理来解决半透明混合的问题。而博德之门的做法应该是参考虚幻使用的不透明队列上做的抖动与运动模糊、抗锯齿优化来实现的. Unity内实现的效果: 主要需要在自定义Pass/自定义后处理 用两个RT前后处理下然后在shader上处理下运动重影,最后一个带异向高光的不透明shader上输入抖动剔除下边缘得到一个利用不透明渲染队列深度信息正确的排列的渲染效果.
2.肤色定制,色盘丰富
博德之门中所有可供换色的选项色盘都很多,每一个颜色都精心的设置了控制颜色显示表现的PBR参数,黑人和白人之间饱和度和对比度的区别很明显,Unity里这里就没有什么值得提的,一个标准的PBRshader,定制化一下Mask,让策划和程序捣鼓一下,想做多少色卡就有多少!
3.皱纹与白癜风
博德之门中的皱纹我能想到,白癜风我真没想到,有点惊到我,一般的审美可能驾驭不住,但我觉得有突破! unity里实现主要用到法线加强、雀斑Mask的UV平铺、还有白癜风这个范围应该是白癜风的遮罩Blend加阶梯算下SDF可以实现一个扩张MASK覆盖的效果,就不一一实现了,都比较简单,给大家贴几个shadergraph节点就行了
4.异瞳定制
一般捏人系统里眼球这一块基本是双瞳一致,异瞳也没想到、挺有意思的,而且仔细看它色版换色后的效果、应该不只是简单的修改颜色贴图、一些颜色还修改了眼白、虹膜、所以任然是一整套Shader参数的高度定制化,非常用心啊!
5.唇部换色
这里应该看出博德之门的角色也是砍头方案,脸部和身体是分开的shader,脸部上有多个可供定制的Mask,这里看换纯色修改PBR有针对于该通道的单独管理!
6.头皮问题貌似没有处理
我应该是3号补丁以后版本录得,这里明显是因为短发,考虑到性能,没有对短发贴头皮部分建模头皮,使得看得到头皮表面,这应该不是故意要的效果吧~~! 解决这个问题很简单,短发一般都要做脑瓜皮儿,但我觉得这个不影响大局,哈哈!这不是不给10分的理由。
7.各向异性高光颜色定制
这里也是一个主流的PBR各项异性高光模型,不过它好像多了一个中层的颜色定制,一般我们就处理一个Hightlight Color和偏移量宽度就行了,不过再加一层就多一套UV,应该要美术配合来划分内、中、外层UV进行定制。这里我给大家分享一个各向异性的模板,主要的节点如下
8.脸部表情走的Blendshpe,胡须没有K上嘴部动画
我专门仔细看了下嘴巴的运动,发现胡须没有跟着变形,说明表情系统走的BS,应该是面捕录的,这样胡须就没有专门是手K,如果嘴巴表情走的骨骼驱动,那么胡须的蒙皮应该会跟着运动,嘿嘿,不影响大局!反正博德之门的卖点不在这。
9.头发的物理碰撞和蒙皮有一些僵硬
一些长发披肩的可能是绑定的时候pose原因也有可能是解算碰撞体包围盒大了点,有一些较大的空隙,长发没有物理、辫子上了动态骨骼。这里可以给大家安利一个unity商城插件MagicCloth2很好用,还可以实现羞羞的效果哦!
10.人物的切换效果
角色整个部件包括body的切换并不生硬的处理Mesh 的材质 蒙皮重组关系,在更换时还用了一个淡入淡出的效果,细节不错!实现这个有两个思路,第一个较为传统,肯定时在shader上做文章,但是这样要控制好每个身体和部件的渲染顺序,否则可能出现身体不见的时候衣服先出来、衣服不见的时候身体先出来!第二个方案就是用相机层级的剔除在后处理上自定义一个淡入淡出的遮罩,用TimeLine来控制过渡,让换装时用脚本去控制一个时间量,具体我还没去实践,但大概思路应该是二者其一。
11.纹身很多,符合游戏的种族文化设定
纹身还是量大、到此为止,我已经感受到了坊间流传的博德之门量大的传说是真的了,这还没到选职业、玩法、刚开始捏脸的选项就很多,不过作为游戏开发者,大家也不用紧张,只要有时间,这些纹身都是基于灰度图的shader定制出来的,现在AIGC可以帮助你实现这一量大的需求,只不过还是需要一些修改而已,可以节省大量的时间啦。
12.遮挡剔除用了基于相机方向的溶解效果
这个我要重点说下,博德之门有点打破我之前对回合制游戏的固有印象,先不讨论机制的设定很有革命性,先看看这个对于玩习惯mmo的视角遮挡,一般我们采样碰撞位移相机或者半透明剔除甚至是角色描边来处理,但博德之门这三者都没用,在一些白天的室内你可以非常明显的看到,他们对建筑物的溶解剔除做了很抽象的过渡,其实并没有给玩家留下毛刺的割裂感,符合游戏风格的氛围!实现这个效果基础版不难,一个shader就可以了,但是我想官方的TA在做这个溶解的效果时应该费了不少心思的,哈哈,有空研究一下。
13.Alt键 描边效果
这是一个很常见的游戏效果,实现的原理有简单的单Pass方案,也有两个Pass来实现的,主要就是修改一下深度排序再做一个芬里尔和边缘光
  1. 粒子水花 和 水面深度
水花的表现没有像那些着重表现物理效果的,看的出来时固定的VFX,水面深度就是脚步那一块红色的表示膝盖潜水多少的,仔细看了下有延迟,红色效果好像固定的在脚上,多了一个pass来渲的,不像是基于屏幕空间的深度实时计算的,我想也没有这个必要去扣吧!哈哈!
  1. 基于物理正确的混合光照
看了下地下城很多场景的火把有实时光影,这里关于场景光影效果可以给大家安利一款插件,可以用混合光照,烘焙静态间接光+实时场景光来处理,效果差不多,美术表现主要靠打光与地编了
  1. 发色过渡效果(补充)
头发颜色的过渡看上去应该是在最后输出的片元着色器里最后做了一个灰度距离场或者基于某个法线方向的灰度插值,都是选择色到灰度色
  1. 体积光
体积光现在已经很普遍了,HDRP自带,URP也有很多现成的插件,就不多说啦
----------------------------------------------分割线····································································
上面分享一堆关于TA向的技术点,实际上并不是博德之门最主要的核心,下面才是它取胜之处,我也是塞尔达粉,但我承认,博德之门赢得光明正大。

第二 Part 程序玩法向

  1. 隔空拾物
这里看上去很简单,实际上它用在了最合适最有趣的地方,基于屏幕像素射线检测加一个曲线render,细节上注意到了运动的方式就是一个物体抛物线,但是和人物的运动属性、力量有关联,细节体现了,单把这个玩法拿出来,其实都可以做一个堆积木的小游戏。
2.多段路径的规划
回合制传统一般采样格子或者棋盘的形式,很少直接在真实场景中直接拿导航寻路来做的,而且在选择较远目标,或者做一些跳跃动作时,还会规划与目标点直接的衔接技能,这个细节非常棒,在unity里我们可以NavMesh.CalculatePath运行时动态计算得到寻路点集返回就能拿到最核心的数据了,然后在根据实际功能需要在某个点位置需要做跳跃、那个点位置做其他动作,然后可以用行为树来实现这个多段AI的触发,路径点在Unity里可以这样拿到
  1. 远程施法的阻挡判定真实
选择远程攻击时,基于真实空间的射线检测会castAll,那么就可以对实际的攻击判定给与真实的参考,同样也可以用做区域的检测
4.攀爬动画
攀爬动画我测试了,在执行动作时不可以打断,推导出应该是TimeLine的形式,当然TimeLine也可以打断,只不过,这里的运动表现除了脚步有IK以外,没有发现反向动力学来做的实时运动,每个角色的攀爬动画几乎一致。不过还是丝滑的。
5.智能施法的规划
我不知道是不是独创,但我是第一次玩到回合制和及时制同时存在的,可以在游戏中随时切换,当然战斗时是强制回合的,在任何时候触发动作都会通过输入点鼠标与世界空间位置的判定来决定动作与法术的具体逻辑,有真实的距离判定,阻挡关系,还有角色描边的光影提前量,细节做在了最应该体现的地方,所以我说前面TA向的细节有瑕疵不重要,这些才是让玩家沉浸在游戏里的核心要素!
6.胶囊体碰撞
这里可以看出角色控制和Unity的CC控制器一样,就会存在一半浮空一半在碰撞体上,没有用物理运动角色,但没人在乎这些细节。
7.上下坡 有脚步IK
这里可以看出角色在做台阶运动时,脚上有用到IK,得到了真实的脚步运动效果,在这里就不给大家科普unity的IK代码了,还是给大家安利最方便最直接好用的插件,咱们有时候不需要造伦子就不造!这个插件有多强用过的人都知道,哈哈!
8.剧情对话后效聚焦精准模糊
这里要重点提下,单机游戏剧情和对话是重点,那么如何营造电影级的剧情关系到游戏的质量和文化内涵,我仔细研究了博德之门的剧情对话系统,当出现两个以上人物同画时,画面如果有角色设定切换,一定是用的聚焦模糊,凸显主角,然后角色所有的shaderLod都在剧情环节修改到了最高,头发可以看到在游戏时是不动的,剧情时丝滑的一笔!还有风场飘拂,总之,细节到位!好
9.交互物动画
大部分是坐下,目前没有看到其他,交互物动画没有用IK,影响不大,因为光把所有物体实现坐下这一套IK解算都够做一个大项目了!
10.卓越的操控性
角色的移动操控和与场景的交互,都是一流的,我试过暴力的点击测试,没有出现多段寻路卡bug,也没有出现原地转圈不停,与场景的交互也是直接过渡的,稍微有一点不适应是刚开始玩习惯了像WOW这样的第三人称,很不适应上帝视角,甚至那个wasd移动镜头,突然就失去角色焦点了,让我惊了,但是过渡回来两者之间很快适应,即便 看不到天空盒,玩了几十个小时,现在也没觉得有啥不好
-----------------------------------------------------分割线----------------------------------------
最后,我觉得这些能打满分的3A游戏,一定不单单只是技术和美术层面上的优秀,思考博德之门的成功,让我觉得,有必要写这篇文章,我想告诉大家,尤其是正在做游戏开发的从业者,做一款口碑和money都赚到的游戏并没有想象中的难,游戏是区别与其他艺术之外的一个复杂的综合,它承载着开发者的价值观和世界观,同时还需要有很广很深的技术的沉淀,才能把一个游戏做好,然而只要用心铺垫游戏内容就可以瑕不掩玉,博德之门值得花300多体验了这么多职业的组合、随时自由的切换、对于战斗的思考、对于剧情发展的抉择、对于团队合作搭配的研究,还有海一样的剧情任务,这些都没有让玩家失望,所以博德之门的成功再一次诠释了玩法和内容至上的游戏宗旨,值得把它作为开发游戏的榜样!
如果你想和我交流游戏开发:B站可以搜我名字
最后给大家讲1个博得之门里很爽的事情: 随身带几个烟粉桶,几个一发连爆清屏的打击感真的很带感!
发布于技术交流
3条评论
8
8p1hnEELT2
这脸和我捏的几乎一样哈哈哈
Lingxiu
很赞
Unity技术博客
非常赞的文章👍🏻👍🏻👍🏻

AI

全新AI功能上线

1. 基于Unity微调:专为Unity优化,提供精准高效的支持。

2. 深度集成:内置于团结引擎,随时查阅与学习。

3. 多功能支持:全面解决技术问题与学习需求。

AI