我会考虑只使用3D噪声并在球体表面进行评估。
对于自然位于球体表面范围内的梯度噪声,您需要在表面上使用规则的采样点模式,这些采样点应具有自然的连通性信息,并且每个像元的面积大致相等,因此可以对相邻值进行插值或求和。我不知道像斐波那契网格这样的东西是否可以工作:
我还没有仔细研究过数学以确定要计算出四个邻居的指数和距离的工作量(我什至不知道您是否在所有情况下最终都拥有四个定义明确的邻居),而且我怀疑它可能比仅使用3D噪点效率低。
编辑:有人咀嚼了数学!请参阅有关球形斐波那契映射的新论文。使其适应球面噪声似乎很简单。
如果您要绘制球体,不仅要评估球体表面上的噪声,而且可以将球体细分为噪声格的分辨率,则可以在球体表面上创建测地线网格(细分的二十面体,通常):
球体的每个顶点都可以具有随机生成的用于梯度噪声的梯度。要将这些信息传递到像素着色器(除非您希望像值噪声那样简单地进行插值),您可能需要类似本文的带有重心坐标的线框渲染的技术:进行无索引渲染,每个顶点都包含三角形中该顶点的重心坐标。然后,您可以从SV_PrimitiveID
像素着色器中读取(或OpenGL等价的),基于所处的三角形从顶点读取三个噪声梯度,并使用插值重心坐标使用任何喜欢的噪声计算。
我认为此方法最困难的部分是想出一种方案,将三角形ID映射到三个样本,以便查找每个顶点的噪声值。
如果需要比噪声模型更精细的分辨率的多个八度音或噪声,则可以使用顶点制作粗略的测地线网格,并可以在像素着色器中进行几个细分。即从重心坐标,找出如果网格进一步细分,您将处于哪个细分三角形,然后找出该三角形的原始ID和重心坐标。