最近在做地形生成,想做一个俯视角的地形系统,玩家可以改变地形,类似勇者斗恶龙建设那种,但又不想做得太过复杂占用太多开发时间,于是想到环世界那种不包括Z轴移动的方式。没有那么多精力做程序化生成地形,也不想用2DTILEMAP的方式拼接地形,于是开始做地形融合效果。
一开始想到魔兽的地图实现方式,https://blog.csdn.net/blizmax6/article/details/6736783,魔兽的实现方式每一格通过4个顶点控制,和我目前的地形生成方式不太契合,所以弃用这个方案。
环世界地形方式正是我想要的。
拆包环世界发现墙壁的融合主要是通过一张贴图控制。
具体实现思路如下:
1,用一张高精度纹理做地形素材,通过世界坐标赋予
2,用一张遮罩控制纹理透明度,每块地形根据融合方式设置特定的UV坐标。
3,用顶点颜色控制四个边角的融合
材质实现如下:
然后是代码设置每个地块的融合:
给每个地块设置一个融合标志:
public enum MergType
{
None = 0,
Left = 1 << 0,
Right = 1 << 1,
Top = 1 << 2,
Bottom = 1 << 3,
LT=1<<4,
RT=1<<5,
LB=1<<6,
RB=1<<7,
Full = ~0,
}
设置每个地块的融合:
private static void ResetMerg(GridMap<GridNode> grid, GridNode node)
{
Assert.IsNotNull(node);
GridNode left = grid.GetGridObject(node.X - 1, node.Y);
GridNode down = grid.GetGridObject(node.X, node.Y - 1);
GridNode right = grid.GetGridObject(node.X + 1, node.Y);
GridNode up = grid.GetGridObject(node.X, node.Y + 1);
GridNode lt = grid.GetGridObject(node.X - 1, node.Y + 1);
GridNode rt = grid.GetGridObject(node.X + 1, node.Y + 1);
GridNode lb = grid.GetGridObject(node.X - 1, node.Y - 1);
GridNode rb = grid.GetGridObject(node.X + 1, node.Y - 1);
//设置边融合
SetMerg(node, left, MergType.Left, MergType.Right);
SetMerg(node, down, MergType.Bottom, MergType.Top);
SetMerg(node, right, MergType.Right, MergType.Left);
SetMerg(node, up, MergType.Top, MergType.Bottom);
//设置角融合
bool ltMerg = node.Merg.HasFlag(MergType.Left | MergType.Top) && lt.Merg.HasFlag(MergType.Right | MergType.Bottom);
bool rtMerg = node.Merg.HasFlag(MergType.Right | MergType.Top) && rt.Merg.HasFlag(MergType.Left | MergType.Bottom);
bool lbtMerg = node.Merg.HasFlag(MergType.Left | MergType.Bottom) && lb.Merg.HasFlag(MergType.Right | MergType.Top);
bool rbMerg = node.Merg.HasFlag(MergType.Right | MergType.Bottom) && rb.Merg.HasFlag(MergType.Left | MergType.Top);
SetMergCorner(lt, left, up, node, ltMerg);
SetMergCorner(up, node, rt, right, rtMerg);
SetMergCorner(left, lb, node, down, lbtMerg);
SetMergCorner(node, down, right, rb, rbMerg);
//Debug.Log(node.ToString() + "重置融合" + node.Merg);
}
实现效果:
另外发现一个免费的高精度材质网站,https://ambientcg.com/list
暂无关于此日志的评论。