欢迎参与讨论,转载请注明出处。
前言
之前由前篇决定场景的制作模式为Tile流,这种面片堆砌的流派对于方方正正的场景(如室内)很有效。但是对于如山地草原一般的场景就很难受了:
上图可能粗看下去感觉还行,实际上是不禁细看的。地形是在方方正正的基础上揉捏而成,可以在斜边处可以到明显的采样变形,且草地边缘的石边是手动暴力贴上去的,制作起来非常的耗时且嗨奴。经此一役后美术决定引入业界更通用的场景制作方案——Terrain流:
如上图所示,所谓Terrain流就是非常常见的那种在场景编辑器对模型揉揉捏捏塑形,涂涂抹抹上色的制作流派。对于制作地形复杂、贴图混杂的场景可谓相当受用。那么按理来说直接使用现有的地形编辑工具不就好了?——若是那么简单便没有本篇喽。
首先经过一番实验后发现,由于美术风格、建模习惯等因素,决定采用传统建模方式,而非这些场景编辑器惯用的揉捏平面生成高度图。如此一来这些场景编辑器便都Pass,将目光放到了传统建模软件·Blender上……于是便有了本文的副标题:从Blender到Unity。Unity版本为2019.4(URP),Blender版本为2.9。
牛刀小试
由于这波算是造轮子了,没得现有的套件可蹭,所以还是先整点最基本的实现吧。在抛开建模那块,Terrain流的贴图着色说白了就是由1张索引贴图+若干张地形贴图组成,通过工具绘制索引贴图,最终根据索引采样对应的地形贴图,实现贴图混杂的显示效果:
大致Shader实现如下:
half4 Frag(Varyings input) : SV_Target
{
half4 mask = SAMPLE_TEXTURE2D(_MaskMap, sampler_MaskMap, input.uv);
half4 color1 = SAMPLE_TEXTURE2D(_TerrainMap1, sampler_MaskMap, input.uv) * mask.r;
half4 color2 = SAMPLE_TEXTURE2D(_TerrainMap2, sampler_MaskMap, input.uv) * mask.g;
half4 color = color1 + color2;
return color;
}
可见实现原理并不算复杂,将贴图的每个通道(RGBA)作为贴图的