v7投稿 | hello world:cocos creator3.x程序化地图

程序化生成地图一般都是不用uv的,而是直接在着色器里取当前点的世界坐标来对纹理进行采样。
3d地图里经常用3向采样的方式,也就是从y轴 x轴、z轴三个方向看过去,用xz yz xy三个坐标进行纹理采样,然后根据当前点的法线三个分量进行混合。
例如极端情况下,一个完全水平的平面,法线y分量为1,其余两分量为0,采样获得的值完全等同于俯视角的图案。
image
https://cloud.tencent.com/developer/article/1659752
可以看下这个文章,不过它这篇大体是机翻,原文是catlikecoding系列里的一篇:
https://catlikecoding.com/unity/tutorials/advanced-rendering/triplanar-mapping/

另一种方式是不用纹理贴图,给地形定义一个或者几个单色。一般可以用高度来做过渡。然后用一个噪声图来做法线计算。

如果你要考虑不受高度影响的地图过渡,比如一块平地上,一部分是草地,一部分是荒漠,一般可以用一个噪声图来做处理,自己定义一个分界阈值,给一个过渡区间。

这个应该不太现实, 美观难以满足

如果按个方法, 那是否是要先生成基于xz,yz,xy三张的嘈声图? 比如xz决定地型高底与湿度分布, yz,xy决定 在山边/悬崖边是岩石纹理还䓍坪/雪地, 在shader先判断xz, 然后再基于yz,和xy决定纹理様式?但material上直接绑定好单张岩石, 单张水, 单张草坪与单张雪地纹理?

yz,xy两个分量是侧面的,可以用同一个纹理,比如岩石。然后在shader里乘上法线分量后,如果有块地方比较陡峭,那么侧面就暴露出来显示成岩石的纹理。平地则显示草地或者雪地之类的。
噪声图一般不用三张,用一张来表示地形分布即可。
shader中不决定纹理样式,而是直接将三个方向都进行采样,然后按法线分量比例来混合。

你首先要将纹理划分成俯视的纹理和侧视的纹理。
然后俯视纹理一般会有地形区域分别,比如沼泽地、草地、雪地等。

始终不太明白如何在单一张纹理取, 能否提供一个案例?

类似这种
image

已上架cocos store 。审核终于过了 https://store.cocos.com/app/detail/6108

image

虽然毛关系都没有,但还是有幸被引用了哈哈哈,大佬牛逼!

看上去不错