前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >简单聊聊 Perlin 噪声(上篇)

简单聊聊 Perlin 噪声(上篇)

作者头像
用户2615200
发布2020-08-28 09:37:49
9650
发布2020-08-28 09:37:49
举报

程序开发中总会用到随机方法,一般的随机方法虽然通用,但是产生的随机数又因为过于"随机",不适合用来生成平滑连续的随机数据(譬如自然地形的高度),这个时候我们便需要使用特殊的随机方法了, Perlin 噪声便是一种能够产生平滑(随机)数值的随机方法.

Value 噪声

为了更容易的理解 Perlin 噪声,我们先从较简单的 Value 噪声看起:

首先我们考虑 一维 情况(即通过一维坐标来获取随机值),如果我们仅使用一般随机方法的话,得到的随机数值是这样的:

perlin_1_2
perlin_1_2

可以看到数据杂乱无章,远不能说是平滑连续,有什么办法可以改进呢?

一种朴素的想法就是在整数坐标处仍然使用一般随机方法来生成随机值,但是对于处在(相邻)两个整数坐标之间的点(即浮点坐标点),则使用线性插值的方式(在这两个整数坐标点对应的随机值之间线性插值)来生成随机值,最后得到的随机数值是这样的:

perlin_2
perlin_2

可以看到数据比起之前已经平滑连续了不少,但是在整数坐标处仍然不够平滑连续(整数坐标处不可导(自然也不连续)),而这是由于我们之前采用了线性插值的方式来生成随机值造成的,改善的方式也比较明晰,就是改用非线性插值的方式来生成整数坐标间的随机值.

perlin_3
perlin_3

上述的非线性插值公式还可以进一步改进,基本思想就是使(相邻)端点(整数坐标)处更加"平滑连续"(即在(相邻)端点(整数坐标)处二阶导数相同(连续)):

t' = 6t^5 - 15t^4 + 10t^3 \\ r = (1 - t')u + t'v

基于改进的公式,我们得到的随机数值是这样的:

perlin_4
perlin_4

至此,我们便得到了 一维 的 Value 噪声.

未完待续

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Value 噪声
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档