现在很多游戏都使用了TOD(Time of Day)系统,我们的大世界也搭配TOD做出了非常不错的美术效果。在这里和大家分享一些关于我们TOD系统和多光源的内容。
我们使用的TOD系统,分别对日光、月光、天空、太阳、月亮、星星、雾效等环境构成组件进行了详细的参数设定。例如主光的颜色、主光的强度,太阳的颜色、大小、亮度等。另外对天空因受光差异而出现的各个分区,颜色上也有详细的设定。
我们将天空划分为四个不同的区域,下图中的蓝色、品红、绿色、墨蓝四个部分就是四个区域的示意,美术同学可以调节不同区域的颜色和不同区域间的混合程度,比如让太阳一侧的色彩更暖更丰富,让另一侧的部分偏冷,增强对比,四个颜色区域,可以给美术同学更高的自由度,调出美术同学所期望的效果。
除了天空的四个颜色区域,还有太阳光晕的效果、地平线的光晕效果等。下图地平线处泛白的部分就是地平线光晕的示意,地平线处的光晕可以让日出和日落时分的地平线色彩层次更丰富也更自然。
我们还对颜色编辑器进行了特别编写。我们基于Unity原始组件系统进行了符合我们需求的修改,把Unity出于性能考虑设置的8个关键点数量上限增加到了任意多个点。8个点对于24小时的TOD系统完全不够用,尤其是日出和日落时分,短时间内的颜色变化非常丰富,8个点是远远不够用的。
下图是曲线编辑器,我们用来调节对应参数的24小时变化。横坐标表示24小时,纵坐标表示对应的参数,这样调节起来非常的方便且直观,对美术同学来说非常友好。
我们在调节TOD效果的时候,把24小时的效果划分成了4个主要的部分,分别是日出、日落、白天、夜晚。白天和夜晚的持续时间长,除了光影和云雾的变化外,在整体色彩上变化不大,不需要过多的效果变化,用少量的调节就能达到效果。而日出和日落的情况则不同,由于瑞利散射的影响,天空呈现出绚丽多彩的画面,但是持续时间短,这就需要在短时间内进行多次色彩以及参数调整。
在调节光照变化大的部分,我们先确定想要的效果,然后对前侧上部天空、前侧下部天空、后侧上部天空、后侧下部天空这四个部分进行参数调节。TOD系统的参数很多,这样调节可以以太阳侧的天空效果为中心,避免调节出来的效果混乱。然后再配合天空的效果对地平线部分、太阳光晕的部分以及其他部分进行调节。天空的部分就完成的差不多了,接下来以同样的逻辑对云朵进行效果的调节,云朵的部分调节完了,整个天空就完成了。不过这只是一个时刻的效果,别忘了,TOD系统是一直在变化的。这时候我们就需要调整时间节点,对下一个时刻进行调节,这个过程就像动画片的绘制一样,一帧一帧的进行,不过我们需要的帧数没有那么多,我们只需要以半小时为节点进行调节,就能得到不错的效果,如果对TOD系统的效果有更为细致的需求,可以把这个时间间隔缩短为15分钟,这样就能得到很细腻的TOD变化效果了。
下面这些截图是我们游戏编辑器里截取的一些TOD系统不同时段和角度的效果。以及我们为项目的美术同学写的TOD系统的使用说明书,说明书可以让美术同学快速上手TOD系统的操作,方便美术同学调节效果。
TOD系统对大环境进行了塑造,剩下的环境氛围塑造自然离不开灯光。相较于白天较少的照明光源,夜晚存在很多区域性的光源,无论是氛围性质的自发光,还是如马灯、路灯等起照明作用的灯光,抑或是对环境氛围起烘托作用的灯光,都对夜晚的场景美术效果起到非常重要的作用。
路灯和马灯等光源是夜景中非常重要的灯光,这些光源照射范围大,氛围强烈,我们采用实时光作为光源。但是在灯光的铺设过程中,我们发现Unity的点光在照射场景物件时,对物体的光照强度会随着光源和物体的距离增加而变弱,当远距离的物体的光照强度满足美术效果需求的时候,离光源近的物体会过曝。这种情况虽然符合物理定律,但是在美术效果上达不到我们的需求。所以我们对灯光的衰减进行了修改,我们把URP的点光计算逻辑改回了Build-in,还原了Build-in下的点光衰减。
这是我们修改灯光衰减对比(在比较夸张的灯光参数下)。Build-in管线的点光衰减是通过LUT图查表采样得到的,我们将LUT生成逻辑写到shader里,还原了Build-in下的点光衰减,然后得到了后者的效果,后者的衰减更为适合我们对灯光的需求。
大世界场景通常需要非常多的局部灯光对场景效果进行美化,过多的灯光带来的就是性能的问题。在多光源的问题上,我们使用了延迟渲染管线来优化光照的问题。延迟渲染的核心思想就是在深度测试之后再进行光照计算,这样只对我们看得见的物体进行光照计算,减少不需要的性能开销。光照计算非常宝贵,没有必要为远处的细小场景去浪费算力做光照计算。
另外我们还对场景中的实时光源进行了视距剔除,把一定距离外的灯光进行剔除,缓解性能压力。在距离剔除的判断上,如果是非0即1的判断标准,那远处的灯光随着距离的改变,就会出现突然出现或者突然消失的情况,会显得非常的突兀。这种情况可以在灯光上加LOD来实现灯光的缓进缓出,让灯光变得更自然。
因为灯光过多,在性能有瓶颈的时候,在不是那么必要的灯光上做一些牺牲,比如把离的比较近的灯光进行合并,或者是把灯光的范围进行一定程度的收缩等,不过这些方法对美术效果会有一定程度的损失。
除了路灯和马灯等光源,夜间场景中,窗户的灯光也对环境氛围起到了很大的作用。窗户是开启了自发光的,但是窗户的自发光不足以产生较大范围的氛围效果,所以我们在此也选择了实时的点光作为窗户氛围的照明。另外像是灶台里的火焰这种小范围环境照明,我们也选择了实施灯光,当然,这是在保证移动端性能的前提下使用的实时光。
欢迎加入我们!
感兴趣的同学可以投递简历至:CYouEngine@cyou-inc.com