首页 > IT职业 > IT生活 > 使用Covermap实现地形细节
1、对Covermap的理解
常见的地形制作都是使用Heightmap+Splatmap来实现地形和纹理层混合的效果。
2、Covermap的Shader实现
由于草的本身不受其他光照影响,它的着色基本上就是一个diffusecolor,所以,以草的Shader为例来介绍一下Covermap的Shader实现。
Covermap的参数
我们需要声明两个参数,一个参数 _Covermap用于纹理的采样,默认颜色为“gray”灰色。将默认颜色定义为灰色,是因为可以在灰色的基础上进行叠亮或减暗。
另一个参数 _CoverMappingRect是为了设置Covermap的映射范围,方便在世界坐标中做对齐。默认为(0,0,512,512),如果我们创建的地形大小为512,坐标在[0,0,0],那么Covermap的纹理会准确的映射在地形上。如果地形有偏移,我们需要将偏移的值设置给_CoverMappingRect参数。
在返回颜色值时,只需要简单的乘上Covermap纹理的颜色,也就是 *_Covermap_var.rgb*2。这里的乘2是为了将灰色转为1,默认的Covermap颜色为灰,即*_Covermap_var.rgb*2 = 1,不会对最终效果有任何影响。如果Covermap纹理贴图上的颜色值>0.5,那么最后显示的颜色会变亮,<0.5,最后显示的颜色会变暗。建议Covermap在Gamma空间下制作,在线性空间使用时勾选sRGB。
Covermap的开销
从上面的实现来看,Covermap在Shader里的运算很简单,它的开销就在于对Covermap纹理贴图的采样,和两次乘法运算。Covermap纹理贴图的精度不超过1024的情况下,一般不会有太大的性能影响。
Covermap的原理和技术实现都很简单,我们将它应用于游戏的效果表现中,最重要的还是美术流程上的制作过程。
我们把Covermap的制作流程划为地形制作流程的一部分,在WorldMachine的地形制作流程中增加光照方位、水纹等输出纹理,然后在Photoshop中通过图层合并。
在Covermap上添加阴影细节
一般的制作思路都是地形直接参与光照烘焙,但是当地形尺寸达到1024的级别时,一般会出现两个问题,一个是烘焙耗时,一个是对地形做切分优化后烘焙会有接缝。我们想用Covermap来取代地形的光照烘焙,所以在项目的某个阶段我们在3dsMax中烘焙一张阴影图。还有前文说到的草是不受任何光照的,所以草地也需要其他物件的阴影细节。
我们将场景物件和地形一起导出,在3dsMax中模拟一盏场景同角度的灯光,然后添加一个摄像机进行对位,渲染出一张阴影图。将阴影图叠加到Covermap的最后一层。
如果要使用实时阴影,就需要存储两张Covermap进行切换,一张是不带max投影的。而对于草地,使用带max投影的Covermap即可。
下图可以看到最后应用在地形上的效果:
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70019421/viewspace-2906019/ ,如需转载,请注明出处,否则将追究法律责任。