You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取GradientTexture2D的梯度值?用于程序化岛屿生成

解决方法

一、直接计算径向梯度(不用纹理更高效)

不用依赖纹理,直接通过坐标计算每个点的径向衰减值,步骤如下:

  • 先定好岛屿中心坐标,比如地图中心(x_center, y_center)
  • 计算当前地形点到中心的直线距离:distance = sqrt((x - x_center)**2 + (y - y_center)**2)
  • 设定岛屿最大半径(比如取地图宽高的一半里较小的那个):max_radius = min(map_width/2, map_height/2)
  • 归一化得到0-1的梯度值:gradient_value = 1.0 - (distance / max_radius)
  • 想要边缘过渡更自然的话,用幂函数调整衰减曲线:gradient_value = pow(gradient_value, 2),数值越大边缘衰减越快

二、用径向渐变纹理采样梯度值

如果你一定要用纹理的话,核心是采样纹理的灰度值,步骤:

  • 把地形点的坐标转成纹理的UV坐标:u = x / map_width,v = y / map_height(如果纹理中心和地图中心不对齐,需要把UV原点移到中心:u = (x/map_width) - 0.5,v = (y/map_height) - 0.5,不过径向渐变纹理本身是中心对称的,直接采样就行)
  • 采样纹理的灰度通道值:不同引擎写法不一样,比如Unity用Texture2D.GetPixelBilinear(u, v).grayscale,Godot用texture.get_pixel_uv(uv).r,这个值就是你要的0(黑)到1(白)的梯度值
  • 你查到的get_offset()是用来调整纹理整体偏移位置的,和采样单个点的灰度值没关系,完全不符合你的需求

三、和地形高度结合

拿到梯度值后,直接和OpenSimplex生成的噪声高度相乘就行:final_height = noise_height * gradient_value,这样边缘的高度会被梯度值拉低,自然形成被水环绕的岛屿。想要过渡更平滑的话,可以用smoothstep(0.1, 0.9, gradient_value)替代原始梯度值,让中间区域保持原高度,边缘平滑衰减。

内容的提问来源于stack exchange,提问作者TI-84-plus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 12:22:38