李曙光
在三维动画、次时代游戏,以及虚拟现实开发中使用了大量的写实类角色的模型,在三维建模软件将模型制作完成后,将其导入到其他应用程序中进行后期交互制作,如maya或3ds Max中制作模型置入Unity等引擎中.衍生的最终数字产品可能是实时交互视频、视频游戏、影片、印刷品,甚至3D打印机上快速打印的3D模型[1].而在制作流程中如何让写实类角色呈现效果更加细腻、逼真,一直是三维设计师操作处理中的一个技术难点.传统的三维角色制作流程中一般三维软件都不能渲染百万个以上面的网格模型,动画软件和游戏引擎中也对模型的面数有着极其苛刻的限制,而模型面数又对模型视觉的品质有着重要的影响,如何保持高精度的细节,以及引擎中流畅的交互性的平衡对产品的体验至关重要.所以在引擎中为了呈现高细分的多边形,通过在模型上使用低多边形与不同类型贴图相结合的技术方案,解决写实角色基于物理真实皮肤质感的三维人物模型处理中的技术难点,还原出与数字雕刻软件生成的高精度模型类似的超写实视觉效果的数字作品.
三维写实角色首先需要使用如zbrush、modbox等数字雕刻类软件进行细分雕刻,产生足够多的细节层次,然后在此基础上烘焙生成法线贴图、置换贴图等[2].在项目制作中需要使用法线贴图,而不是凹凸贴图,因为通常法线贴图会在渲染时提供实时预览的效果和更多的细节层次,在最高级细分下,三维模型一般有1000万以上的面,在中间级细分下,一般有80万个面.在变量目标下选择中间级细分作为变量目标进行保存,然后把模型区分度降到最低级细分,在这个细分级别下需要检查并确定模型是否匹配高精度模型的大概轮廓,重点检查耳朵、眼眶、口部环形线的位置.如果低模曲度过于平缓,传统的置换贴图则无法达到理想的效果,因为传统的置换方式只能沿着模型的法线方向进行推出或挤入的显示,在最低级细分下模型保持3000~5000个面,这样渲染起来速率很快,在变量目标创建的情况下,UV贴图的大小分辨率设置在2048像素以上,这是即将生成的置换贴图的大小,在Texture map中新建一张贴图,在这张贴图被激活的状态下,在纹理菜单下创建一张Alpha图,使用这张Alpha图作为置换贴图进行载入,将置换贴图激活,然后将置换贴图提升至2级、确认Mode是打开的,否则生成的就是凹凸贴图而不是法线贴图,激活Adaptive、SmoothUV,翻转贴图的V方向,设定为3个通道,DPsubpix设为2,中间灰度设置为0.5,烘焙出一张保留大量细节信息的置换贴图.
随后再制作法线贴图,在最高级细分中,保存变量目标,然后回到中间级细分,为了得到更多的细节,法线贴图分辨率大小不能小于2048像素,在法线贴图栏中打开贴图,设置adaptive、tangent、smoothUV等选项,生成法线贴图.导出模型时,回到最低级细分,检查模型是否设置翻转选项,设定Export选项中Mrg为激活状态,从而确保导出的模型是完整的,不会因为UV拆开而导致法线贴图、置换贴图出现错误显示.不同的贴图属性对比见表1.
表1 不同贴图属性的对比
线性工作流程即通过色彩管理空间管理纹理贴图,使其得到正确的色彩和明度的表现.在maya中建立线性工作流程的意义在于显示器中显示的颜色使用的是sRGB的色彩空间,大部分的颜色贴图也是sRGB的色彩空间,人眼对于光线亮度的感觉是非线性的,与实际的线性增长是有区别的,但在实际三维软件中渲染时,使用的是线性模式,因此需要采用色彩管理,使用gamma校正来纠正这个偏差的问题,以得到正确的色彩及明度显示,gamma校正原理图见图2.在色彩管理中设置默认输入信息为sRGB,sRGB也就是给纹理贴图一个(R:0.454,G:0.454,B:0.454)gamma校正节点,设置默认输出信息为线性模式,置换贴图、法线贴图与纹理贴图不同,色彩的输入信息就是线性模式,所以在文件属性里的颜色信息中,要设置为Linear,才能得到正确的渲染设置,在相机的Len shade中连接Ma_exposure_simple曝光节点,这个节点可以矫正maya相机的渲染输出,使之匹配显示器的sRGB的色彩空间,当然如果后期要渲染32位图像的时候,就不能使用这个节点,否则就会出现二次gamma校正的曝光过度的情况[3].
图2 gamma校正原理图
在导入的最低级细分低精度模型上连接差值贴图,包括置换贴图和法线贴图,在导入模型前,首先是检查单元设置,以确认模型的大小与物理世界中的真实大小一致,在渲染置换效果和SSS材质时,模型大小会直接影响渲染的效果,接着检查模型的渲染统计,打开反射与折射可见选项,并解锁模型的法线,把模型的法线设为软边显示以得到一个光滑的预览效果.
先设置一个Blinn材质,用来测试灯光的效果,这样可以充分提高渲染的速度并能有效地观察模型的细节,展开材质节点,自动生成一个材质组节点,在这个节点中直接连接置换节点,在连接置换贴图时,色彩的管理设为linear线性,关闭贴图过滤,否则会因平滑贴图而损失大量的细节,maya的中间灰度显示无置换.为了得到较好的置换效果,在Alpha offset中设置表达式:=1*0.5*file模型名称Dispace.alphaGain.在mentalray的近似属性编辑器中,创建细分代理节点到模型上,最小的细分为二级,最大的细分为最高一级细分减一.这样才能得到较好的置换效果.在材质的bump通道中,添加法线贴图,模式设置为切线空间法线.
为了得到写实的皮肤效果,需要使用Misss_fast_skin_maya材质,默认的Misss_fast_skin_maya材质自动连接并创建灯光缓存节点,这个灯光节点对于次表面散射的正确运行是必不可少的,灯光缓存节点可以读取灯光的照明信息,然后显示在材质上,实现最终聚集的效果[4].将置换的节点连接到材质组节点,法线贴图连接到次表面散射材质属性里的Bump通道上,默认的材质散射将会比较严重,有两种解决方案:第一种调整Subsurface ScatteringLayer次表面散射层的表皮散射半径、真皮散射范围和背面散射半径,通常要与真实世界的尺寸保持一致,光线在皮肤层中的散射效果见图3,另一种方案则是在Algorithm control算法控制里按真实比例进行换算.
图3 光线在皮肤中的散射效果
在Misss_fast_skin_maya材质中,Ambient是控制环境对次表面散射材质照明的强弱,也可以理解成控制物体的亮度,一般不会使用此属性.Overall Color全局覆盖色可以给所有颜色统一作色彩的校正,Diffuse Color漫反射色用于控制色彩的漫反射效果,漫反射颜色会与Overall Color整体颜色和次表面散射颜色产生叠加混合,该通道的色彩对皮肤颜色影响不大,因为皮肤的实际颜色主要来源于皮下的血液和脂肪等物质通过次表面散射层发出.在次表面散射层中,表皮层的颜色是最上面的一层颜色,大部分的皮肤色彩由该通道决定,所以颜色贴图会连接到此通道.第二层皮肤颜色是真皮层,也就是皮肤的中间层,其中包含了一些躁点.如果模型尺寸以及散射范围与真实世界不一致,那么就会损失大量的细节,在灯光缓存节点下,散射偏差值控制着光线穿过物体的数量以及反射的数量比例,光线穿过物体的数量与反射的数量的比值在程序中默认设定为1:1.正负值分别表示光线反射数量较多和穿过物体的数量较多,而皮肤的物理属性则决定了光线的反射数量应该更多,所以应该取正值,散射色彩的混合叠加方式如图4所示.
图4 散射色彩的混合叠加方式
差值贴图主要解决低模的细节结构,而纹理贴图主要解决模型的质感表现,纹理贴图主要包括SSS材质中的表皮层纹理贴图、真皮层纹理贴图、背面纹理贴图,以及高光贴图、反射贴图等,其中主要以表皮层纹理贴图为主,表皮层纹理贴图确定皮肤的基本颜色,在纹理的绘制时需要添加大量的毛孔、血管、皮肤褶皱等细节,在色彩上饱和度较高,在眉弓处、血管处使用冷色,与皮肤本身的暖色形成一个补色的对比.真皮贴图在表皮层纹理贴图的基础上加强色彩的饱和度,并进行模糊处理,添加与表皮层纹理贴图不一致的噪点,这样在渲染时皮肤的层次感会更丰富.背部散射层纹理贴图基本上只在耳朵附近,在希望有光透过的地方绘制一点红色,其他部分都是黑色.在纹理贴图的基础上,通过去色绘制和叠加肌理的方式,得到高光贴图和反射贴图,来控制模型的整体高光及反射强度.通过连接纹理贴图,皮肤的材质会更精准地呈现光线的发散程度与光线强度衰减的关系[5].现材质的明暗与色彩关系.在渲染引擎中模拟皮肤常常使用SSS材质,通过对表皮层散射、真皮层散射、背面层散射及深度的色彩、半径的控制,以及与置换节点、灯光缓存节点的连接,准确地模拟出写实人物基于物理真实的皮肤质感,从而制作出具有写实风格的三维角色模型.
在虚拟现实应用、次时代游戏以及三维动画中写实类角色的模型,为了通过实时交互得到更加流畅的动画效果,制作流程是先在低模上雕刻,然后利用低模和高模烘焙出多通贴图,实现了低面数模型在引擎中或渲染时能达到高精度显示的良好视觉表现效果,同时兼顾流畅性,在渲染模型前,线性工作流程对纹理贴图进行gammer校正,使其在线性渲染过程中能准确表