gdc23, sony santa monica关于god of war的分享;
back ground
- 作者stephen mcauley现在是santa monica的technical director;
- 20年加入santa monica,作为rendering lead,有9年的经验,之前在ubisoft montreal,做farcry系列,所以提到的一些技术带有一些farcry的痕迹;
开发思路 & team
因为定位是rendering lead,所以本质上非技术的沟通工作占据比较多的位置;
stephen加入的时候,会做非常多的沟通,以及查阅之前任务的todo list来获取之前没有完成的事情等等;
同时自我定位也比较清晰,定位技术团队为棒球比赛中的击球手,是一个辅助和强化的作用,但是不是design和artist这种能直接取得胜利的角色;
所以要花很多时间来开发workflow,让content creator能够比较快速的开发;
当然在后期也开始注意到,也要让程序团队能够有一个好的流程;
技术
一个物理正确的框架
上来stephen惊奇的发现,光照亮度等等方面没有“正规化”,会有比较多的美术随意设置的情况;
太阳光设置使用十几这种情况,hmmm,战神也会出现这种情况;
这个实际做起来就是按照正确的物理方式处理就好了:
- 太阳光按照实际的物理数值
- 天光和天空球亮度绑定
- 有一个标准的默认曝光以及tonemapping方法(ACES)
不这么做就在不同阶段有这样或者那样的问题,战神这里就是踩到了其中若干问题:
- 缺乏一个标准的“base lighting”,大家通过比较随意的lighting数值,各方面彼此再配合,小范围没问题,内容多了的时候,就会出现physically based lighting启用阶段,美术团队不按照物理正确方式使用情况下的问题;
简言之是做了物理正确的lighting基础,细节可以看frostbite的PBR的文章,写的更加详细;
ray tracing cubemap
在反射中,从parallax corrected cubemap替换成raytraced cubemap:
- 这里会使用houdini来生成一些geometry mesh来降低trace ray的消耗:
这里只能说是一种做法,stephen自己也说他们对于raytracing不是很熟悉,所以这里不能简单作为一种牛逼的或者最优的方案来看,实际行业中的一些proxy mesh(lumen中的方案),voxel等都可以采用;
harden contact shadow(ray marching)
正常我们会使用screen space技术来做contact shadow来达到细节精准的shadow;
战神中对于contact shadow的需求:
这里奎爷的鼻子这里就是有点不对,这个处理方式就是contact shadow
e.g.
战神这里使用了较好的办法:
- 在shadow depth中使用ray marching的方法来做contact shadow;
- 且可以针对area light来做
这样在精准度等方面都有很好的提升,而且范围覆盖方面更大,效率可控,目前看来效果比较好:
效果对比:
(without contact shadow)
(with contact shadow,可以两个图切换下看区别,细节可以看弓在atreus身上的投影)