导航:首页 > 源码编译 > 柏林噪声算法取最值

柏林噪声算法取最值

发布时间:2023-02-12 03:25:51

⑴ 二维值噪声是曲面吗

_蒲公英_
博客园首页联系管理随笔 - 36 文章 - 0 评论 - 1 阅读 - 30370
Value Noise——值噪音
参考原文连接

1.简介

Value Noise是最简单的噪声算法,器主要思路是定义若干顶点且每个顶点含有一个随机值,这些顶点会根据自己的随机值对周围坐标产生影响,越靠近顶点则越容易受该顶点影响。当需求某个坐标的输出值是,需要将改坐标附近的各个顶点所造成的影响值进行叠加,从而得到一个总之并输出。

2.原理

2.1首先定义一个晶格结构,每个晶格的顶点有一个伪随机值(Value)。对于二维的Value噪声来说,晶格结构就是一个平面网络(通常是正方形),三维的就是一个立方体。

2.2输入一个点(二维就是二维坐标,三维就是三维坐标,n维就是n维坐标),找到和他相邻的那些劲歌顶点(二维4个,三维下8个),得到这些顶点的伪随机值。

2.3使用缓和曲线来计算这些伪随机值的权重和。原始的噪声使用缓和曲线是,2002年改进为。改进后二阶导上仍满足连续,即曲线更平滑。

3.理解

设想一张纹理,uv范围0~1但是我们讲算法的时候,0~1的范围太小了,最总看起来效果不好,因此我们将uv缩放一下。现在将网格中的每个焦点都计算出一个随机值,用于后续的噪音计算。然后如果我们要取出u2.3,v1.6位置的点p的值我们根据p值的坐标,对当前晶格的u 2~3求一个差值A,再对v1~2求一个差值B,最后在AB上求一个差值P,如下:如果求取插值呢?

最明显简单的差值方法,线性插值:

[公式]

[公式]

[公式]

最终得到p的值时0.4082,转换为灰度(0.4082R+0.4082G+0.4082B)。使用这个算法网格上的任何一个位置都可以转换成灰度。

使用线性插值做到了个点间的平滑生成效果如下:点之间虽然平滑了,但是晶格间的过渡比较生硬。

因为我们使用的是线性插值,从 M 到 N,插值的方式均匀递增。我们假设后面还有一个节点 Q,并且 Q 的灰度值是 0.02:将这些值形成连续的图像如下:从这个图中我们可以明显的看到晶格的交界处过渡生硬。

所以柏林噪声之父提出了缓和曲线计算插值。

[公式]

应用到刚刚的m-n-q模型中,效果就平滑很多。

最后结果如下:

分类: unity
好文要顶 关注我 收藏该文
_蒲公英_
粉丝 - 2 关注 - 0
+加关注
00
« 上一篇: 噪声简介
» 下一篇: Perlin Noise——柏林噪声
posted @ 2021-01-06 18:08 _蒲公英_ 阅读(527) 评论(0) 编辑 收藏 举报
刷新评论刷新页面返回顶部
登录后才能查看或发表评论,立即 登录 或者 逛逛 博客园首页
【推荐】阿里云新人特惠,爆款云服务器2核4G低至0.46元/天
【推荐】腾讯云云产品年终特惠,轻量应用服务器6.58元/月起
编辑推荐:
· 如何更好的使用缓存,Redis 缓存的特殊用法
· 请求量突增一下,系统有效 QPS 为何下降很多?
· 线程池的一个 BUG 直接把 CPU 干到 100% 了
· [ASP.NET Core]按用户角色授权
· .NET 7 新特性
阅读排行:
· 我三十岁,在某公司
· 忙活了一年的开源社区,终于赶上了春节前的末班车!
· 一个想活得简单的程序猿的2022年终总结!
· C#11新特性整理
· C#爬虫开发小结
公告
昵称: _蒲公英_
园龄: 8年5个月
粉丝: 2
关注: 0
+加关注
< 2023年1月 >
日 一 二 三 四 五 六
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11
搜索
找找看
谷歌搜索
常用链接
我的随笔
我的评论
我的参与
最新评论
我的标签
我的标签
大数据(18)
linux(8)
hdfs(8)
maprece(4)
hive(3)
杂(1)
maptask(1)
recetask(1)
scheler(1)
yarn(1)
随笔分类
hdfs(7)
hive(2)
Java学习(2)
Linux学习(8)
maprece(4)
unity(3)
yarn(1)
大数据学习(19)
小杂(1)
随笔档案
2021年3月(1)
2021年1月(4)
2020年11月(1)
2020年9月(9)
2020年4月(9)
2020年3月(12)
阅读排行榜
1. windows下Idea2019.3.4的安装与破解(9920)
2. Centos内核参数优化(大并发)(4186)
3. Macbook 安装VMware专业版11.0.1(1438)
4. linux性能优化与内核参数优化(1349)
5. windows下Scala安装(1067)
评论排行榜
1. Centos内核参数优化(大并发)(1)
最新评论
1. Re:Centos内核参数优化(大并发)
net.ipv4.tc_max_tw_buckets 少了一个p,应该是net.ipv4.tcp_max_tw_buckets,感谢大佬

--Robinlian
Copyright © 2023 _蒲公英_
Powered by .NET 7.0 on Kubernetes

⑵ 柏林噪声函数通过matlab实现并画出图像问题。

1、“不管x输入多少,temp1值一样,为2^32,就是4294967295”
不对啊,我随便试着输入x=3和5,得到的temp1分别为1379104989和1382225069;

2、“既然matlab最大只支持32位,为何a=vpa(4^64,100)却能输出大于2^32的值”
首先,MATLAB最大不是支持32位,至少整形数支持64位的(int64和uint64);
其次,默认输入的数是双精度浮点数,其数值范围大约在-1.7E308至1.7E308之间,但有效数字的位数仅为二进制52位;
第三,vpa使用符号数学工具箱,可实现任意精度的计算;
第四,你使用vpa(4^64,100)可以输出大于2^32的数,而且是精确的,但用vpa(3^64,100)则不能实现精确输出(可以使用vpa(sym(3)^95,100)做到)。

3、这一条和你的算法有关,我还没仔细研究;

4、你调用noise1(x)的参数x是向量,用到x的地方应该使用点运算,例如:
temp1=x.*(x.*x.*15731+789221)+1376312589

⑶ Minecraft的地形生成算法是什么

我来试着简要说一下地形生成吧。其实我一段时间也没怎么关心过地形生成,但是最近我在翻译一个开发文档的时候,那个开发文档提到了一些关于Minecraft地形生成的细节,所以我就被迫了解了一些关于Minecraft地形生成的知识。目前这里只介绍主世界正常情况下的生成,下界和末界或者超平坦什么的再说(可能我会回来填坑呢)。
由于本回答所有内容都是本人照着反编译后的Minecraft源代码手动总结而成,所以难免会有疏漏,欢迎指出。同时,未经本人允许,禁止转载本答案。
这里依照的Minecraft源代码是不包括Forge、Bukkit等任何模组或插件魔改过的纯原版1.10.2服务端代码。当然因为Mojang的代码水平着实不敢恭维,所以说这里我尽可能隐去令人迷惑的代码细节。
Minecraft的地形生成分为两个阶段:Generation和Population(这两个词我也不知道怎么翻译合适,就不翻译了)。我们先从Generation阶段开始。
Generation阶段主要用于生成基本地形、以及一些大型的建筑等,Generation阶段生成的单位是一个长宽为16,高为256的单个区块,区块也可以说是Minecraft中比方块更大一级的组织单位了。
一、获取生物群系
Minecraft会首先获取当前区块下所有的生物群系。对于生物群系的获取,Minecraft代码是使用一种类似于Decorator模式的方式提供生物群系的信息的。换句话说,它就像流水线一样,每个环节都对当前生物群系进行一次处理。这条流水线大概是这样子:
加入河流←平整化←放大化←放大化←添加海岸←放大化←添加更多岛屿←放大化←生成向日葵草原←生成山地生物群系←生成边缘生物群系←放大化←放大化←生成更丰富的生物群系←生成深海←生成蘑菇岛←添加更多岛屿←放大化←放大化←生成稀有生物群系←生成高山←生成沙漠←添加更多岛屿←生成高山森林←去除过多的深海←添加更多岛屿←添加更多岛屿←添加更多岛屿←放大化←添加更多岛屿←有锯齿地放大化←在海洋上生成最基本的平原岛←_←

⑷ 柏林噪声原理介绍

Perlin噪声(Perlin noise) 指由Ken Perlin发明的自然噪声生成算法。

噪声 在信号处理中一般指原信号中不存在的无规则的额外信号。在处理过程中一般是我们不需要的,需要被处理掉的。噪声和信号本身无关,其频率和强弱变化无规律。

就如上面提到的那样,噪声是干扰原信号的存在。在信号处理中,我们一般都希望通过各种方法将其从原信号中剥离出来并除掉。既然如此,为什么我们还需要创造出各式各样的噪声生成算法。原因很简单,就是我们自然界中存在各种各样的噪声。而当我们的程序出于某些目的想要模拟这些随机过程时(例如云朵,火焰等),我们就需要噪声了。

我们用随机数算法产生的二维噪声图,如下图所示:

我们可以看到用随机函数生成的噪声纹理太过嘈杂,不像我们自然界中经常见到一些非常漂亮的噪声(像数目的纹理,石头的纹理,流水等)。因此,用这种噪声来模拟上述噪声难度太大了。这也是为什么图形学的先辈们想出各种各样其他噪声算法的原因。柏林噪声就是其中之一。

柏林噪声属于基于晶格(Lattice based)的生成算法。在介绍柏林噪声算法之前,我们简单介绍下什么是晶格。以二维图像为例,晶格就是等分的网格,以一定单位将我们的图像划分成x*y(x行和y列)的网格。如下图,我们将图像划分成了3 * 3的网格。

当晶格数目越多时,生成的噪声将越“密集”。

下面来介绍柏林噪声的算法:
Perlin noise噪声生成算法总共有三个步骤:

在这里对第三点插值权重值为什么不直接应用距离来算,即选择函数s(t) = t,来进行线性插值。因为我们的晶格长度都是单位长度,所以每个点到该点所处晶格顶点的距离是[0, 1]之间的数。而 s(t) = t 函数在 0 和 1 两点上的一阶导数不为 0(为1)。这样导致噪声变化的平滑程度加剧。而上述的s(t) = 3t 2 - 2t 3 和s(t) = 6t 5 - 15t 4 + 10t 3 的一阶导数在0和1两点的倒数都为0。且s(t) = 6t 5 - 15t 4 + 10t 3 的二阶导数也满足在0和1两点为0。说明s(t) = 6t 5 - 15t 4 + 10t 3 函数不仅在0和1的斜率为零,且斜率本身的变化率也为0。所以在每个晶格顶点附近区域的变化过渡会更加的平滑。

【图形学】谈谈噪声

阅读全文

与柏林噪声算法取最值相关的资料

热点内容
云存储服务器知识 浏览:461
服务器cpu是什么指令集 浏览:590
糖猫t10怎么安装app 浏览:992
电脑加密u盘怎么使用 浏览:517
linux如何升级php版本升级 浏览:841
二级程序员c语言难度 浏览:351
批处理编译qt 浏览:66
铁友app怎么查询机票订单 浏览:197
myeclipselinux破解版 浏览:417
批处理命令语法不正确 浏览:889
pdf合并成一个pdf在线 浏览:383
柱加密区构造要求 浏览:514
地板木龙骨标准跟加密区别 浏览:150
解压放松的好地方河南 浏览:965
搜狗怎么移动到文件夹 浏览:617
文件自动选择到文件夹 浏览:794
赠送的app怎么在ipad下载 浏览:508
颈椎解压后神经恢复 浏览:849
怎么看app订阅扣费 浏览:314
linux系统的负载均衡 浏览:419