最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Blender 3.4 用幾何節(jié)點程序化生成潘多拉地形

2023-03-19 21:19 作者:AmMoniac1  | 我要投稿

幾何節(jié)點和Shader節(jié)點的不同

某個Shader 節(jié)點產(chǎn)生的數(shù)據(jù)可以自由地在不同節(jié)點間傳遞、組合、嵌套,這是因為shader節(jié)點中所有的數(shù)據(jù)本質(zhì)上都是函數(shù)(對于任意的點M(x, y, z),都可以計算出任意數(shù)據(jù)在這一點的值 [ 在blender中,不存在的值?= 0 (如1/0 = ln 0 = 0) ] ,而這些函數(shù)都定義在整個三維實數(shù)域內(nèi)。

但是,幾何節(jié)點有明確的操作對象 -- 幾何體,更確切地說,是幾何體的每一個頂點。相信很多小伙伴都跟我一樣,看到過這樣的紅色虛線。

錯誤示范

警告出現(xiàn)的原因就是執(zhí)行操作所引用的數(shù)據(jù)并不屬于操作對象。就好比計算蘋果下落軌跡,卻引用了梨子的位置或香蕉的初速度。與shader對比,我們可以發(fā)現(xiàn),幾何節(jié)點的數(shù)據(jù)依托于幾何體而存在:對于某個數(shù)據(jù)A,幾何體的每個頂點都存儲了一個A的值。如下:

Position屬于attribute的一種。attribute節(jié)點提供了一個輸入的端口。當(dāng)某個attribute “B”被引用在Set Position節(jié)點末端時,Blender會逐一查看每個頂點存儲的B值并以這個值為輸入通過運算節(jié)點對這個頂點進行位置變換。


應(yīng)用案例

在生成山峰時,可以計算山峰中心到被移動點A的距離作為自變量,接入一個減函數(shù),將函數(shù)值作為點A在Z軸移動的值:

用余弦函數(shù)并限定定義域在[0, pi)是一種可行的方式

然后,對找到的函數(shù)值進行修飾,如加上隨機函數(shù)值:

引用馬氏分型Musgrave和噪波Noise進行隨機性處理,使山峰看起來更加自然

最后將組合后的函數(shù)值接入z軸偏移量:

用set position應(yīng)用函數(shù)值

在這個例子中,我們引用的幾何體數(shù)據(jù)是點的位置信息(position input)。通過計算每個點到山峰中心的距離,我們獲得了每個點在幾何體變形成山峰后的基礎(chǔ)高度;通過將點坐標(biāo)接入噪波Noise和馬氏分型Musgrave,我們獲得了每個點在基礎(chǔ)高度附近的隨機偏移量。最后,將二者相加得到組合函數(shù),并接入set position節(jié)點,目標(biāo)幾何體就真正變成了山峰的樣子。



潘多拉地形構(gòu)成

潘多拉夜景


浮島

浮島的單體由棱角球icosphere經(jīng)三步變形而來:

浮島粗胚

首先是下方倒置山峰:

倒置山峰

其次是上方山峰

上部山峰

最后是水平方向的噪波處理:

將兩個偏移量不同的隨機函數(shù)分別接入 x 和 y 偏移

在得到單體浮島后,在浮島分布的區(qū)域生成隨機點,并用instance on points節(jié)點將浮島在這些點處生成:

節(jié)點組




山峰

山峰由網(wǎng)格grid變形而來。每個點的z軸坐標(biāo)偏移如上文案例中所示。

修飾余弦函數(shù)獲取山峰基礎(chǔ)形狀
疊加馬氏分型Musgrave和噪波Noise進行隨機化處理



藤蔓

藤蔓是比較復(fù)雜的部分,涉及到attribute的賦值和引用。

先在浮島上取若干隨機點作為藤蔓起點,再將每個點依法線Normal進行射線映射Raycast,終點即為藤蔓另一端點。將網(wǎng)格體直線Mesh Line作為Instance在每個點處生成,并根據(jù)Raycast結(jié)果校準(zhǔn)長度。將隨機點節(jié)點自帶的rotation輸出賦給instance的rotation,使網(wǎng)格線和Raycast的方向相同。網(wǎng)格線的細分程度越低,藤蔓曲線就越粗糙。

先生成藤蔓的網(wǎng)格線

值得注意的是,此處的position輸入最終在instance on point被應(yīng)用。因此“Position”對應(yīng)左下節(jié)點生成的隨機點的坐標(biāo)。


接下來使藤蔓彎曲:

  • 定義兩個新的Attribute“起點”和“終點”(注意要用Instance類型),分別存儲每條藤蔓的起點和終點

  • Realize Instance將在不同點處生成的多個幾何體合并成同一個幾何體,但保留Instance類型的attribute并轉(zhuǎn)為point類型

  • 引用兩個Attribute,用起點到藤蔓上一點的距離除以藤蔓長度作為自變量x(x在0到1之間),定義y = x * (x - 1) * k,將y作為該點z軸的偏移量,k即是下垂程度

藍色是數(shù)據(jù)傳遞方向


最后,將藤蔓曲線變成真正具有粗細程度的網(wǎng)格體:

細分程度不要太高,不然會占用大量性能

注意到存在部分豎直的藤蔓,這是為什么呢?



植被

在法線向量Z值大于0或小于0的區(qū)域分別生成隨機點,并將不同植物作為instance分別應(yīng)用在所有點處。

這是樹的生成節(jié)點

為了節(jié)省性能,我在此直接引用了簡單建模的樹木模型。我做過樹木生成的節(jié)點組,但是僅僅單棵樹木已經(jīng)讓blender有明顯卡頓。倘若那個節(jié)點組進入這個場景成為樹木的幾何體,blender許是會崩潰,且我的電腦大抵是要陪葬的。

樹 - 幾何節(jié)點

如果看的人多,我會再寫一篇文章分享樹和下垂藤蔓的全幾何節(jié)點生成方式。背景的星球是我另外做的“菈妮群星”場景的資產(chǎn),如果對此感興趣的小伙伴多的話我也可以出一期相關(guān)的shader節(jié)點教程。



(本文中所有的 “值”?并不特指數(shù)字,而是包括blender所有能用的數(shù)據(jù)類型,如向量vector、值value、布爾bool、顏色Color等)

PS:發(fā)教程視頻沒人看,那就簡單寫個專欄分享一下自己的blender學(xué)習(xí)經(jīng)驗叭。

Blender 3.4 用幾何節(jié)點程序化生成潘多拉地形的評論 (共 條)

分享到微博請遵守國家法律
普兰县| 麻栗坡县| 长岭县| 曲沃县| 宣汉县| 定边县| 六盘水市| 湛江市| 小金县| 商洛市| 大宁县| 田林县| 桂平市| 安福县| 休宁县| 锡林郭勒盟| 灵宝市| 左贡县| 丽江市| 通江县| 聂拉木县| 来凤县| 博白县| 邻水| 报价| 珠海市| 新疆| 凯里市| 珠海市| 水城县| 阳谷县| 景泰县| 安顺市| 夏津县| 阳泉市| 黔西县| 龙州县| 阳谷县| 登封市| 灌南县| 南华县|