Unity URP中PBR与NPR渲染技术的完美结合:以《少女前线2:追放》为例
Unity URP中PBR与NPR渲染技术的完美结合:以《少女前线2:追放》为例
在游戏开发中,如何将PBR(基于物理的渲染)和NPR(非真实感渲染)技术完美结合,一直是开发者们关注的焦点。本文将以《少女前线2:追放》中的角色渲染为例,深入探讨如何在Unity URP框架下实现这一技术。
一、前言
最近在研究PBR和NPR结合的渲染技术,恰好看到《少女前线2:追放》中Vepley角色的渲染效果,虽然没有玩过这款游戏,但感觉这个渲染效果非常独特。于是决定以此为案例进行学习和实践。
灵感来源于很久以前在GitHub上看到的一个项目:
在这个项目里,作者巧妙地在URP Lit的框架下使用各种SmoothStep来形成色阶,达到了PBR和NPR结合的效果。但在使用过程中发现了一些问题,比如手动Ramp映射难以控制,以及在Lit框架下修改的灵活性受限等。因此,我决定在URP中重写一套Lit,保留关键部分,删除多余部分,并使用Ramp图来控制色阶。
二、PBR与NPR的融合方式
PBR x NPR本质上仍然是NPR,因此它不可避免地具有NPR的一些特点,比如主观性。PBR框架下的NPR好处是提供了一个能量守恒的框架,防止某些技巧失控,同时也提供了更多样的材质表达。在实现过程中,我选择了用Ramp去映射PBR中间步骤的方法。
三、其他常见Feature
这部分都是卡通渲染的常见Feature,这里就简单罗列一下:
1.描边
采用平滑法线外扩模型然后剔除正面的做法,很常见。FOV的获取是用脚本传参的,据说现算会很慢,外扩在View空间,z拍扁。其次就是Face的Zoffset加一个bias,让眼眶没描边,不然变成熊猫了。
2.边缘光
边缘光也是常见做法,屏幕空间深度采样偏移,确定阈值step。阈值还可以作为强度细节给个小小的渐变,视角和光的夹角,菲涅尔等也可以决定RimLight的强度。
3.面部阴影
SDF阴影,光方向和脸朝向夹角计算ctrl去step那张SDF脸图。当然为了看起来柔和一点,可以用smoothstep,然后和其它计算一样去ramp就好了。
4.绒毛
就是一个普通的URP多Pass Feature,没做什么特殊的细节处理。
5.刘海投影和眉眼透过刘海
刘海投影和眉眼透过刘海都是用的模板。刘海投影是画了一遍刘海,又画了一遍脸,取交叉地方作为阴影。眉眼透过刘海也是用的模板。
6.后处理
Bloom用了Unity自带的,因为没什么定制需求,而且也挺好用的个人感觉。Tonemapping做了常见的GT,Simple ACES。
四、模型来源
模之屋【少女前线2:追放】维普蕾