導航:首頁 > 源碼編譯 > 柏林雜訊演算法取最值

柏林雜訊演算法取最值

發布時間: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。所以在每個晶格頂點附近區域的變化過渡會更加的平滑。

【圖形學】談談雜訊

閱讀全文

與柏林雜訊演算法取最值相關的資料

熱點內容
順豐app專享優惠券怎麼用 瀏覽:667
酷狗音樂分享文件夾 瀏覽:826
伺服器mgmt旁邊的介面是什麼 瀏覽:844
單片機發光二極體原理圖 瀏覽:50
在北京當程序員6年 瀏覽:128
編譯器gcc如何用 瀏覽:412
androidbringup 瀏覽:977
演算法設計與分析英文版 瀏覽:911
java程序員加班嗎 瀏覽:142
編譯檢查的是什麼錯誤 瀏覽:405
加密兔f碼生成器免費 瀏覽:292
思科路由器命令明文加密 瀏覽:171
方舟生存進化伺服器如何改名字 瀏覽:892
央行數字貨幣app怎麼注冊 瀏覽:431
51單片機顯示時間 瀏覽:770
我的世界網易版怎麼壓縮地圖 瀏覽:682
qq小程序雲伺服器和 瀏覽:740
方舟伺服器怎麼玩才好玩 瀏覽:561
單片機的部件 瀏覽:623
編譯原理遍的過程 瀏覽:274