日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Houdini中四种实现龙卷风速度场的方法及比较

發(fā)布時(shí)間:2023/12/8 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Houdini中四种实现龙卷风速度场的方法及比较 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

龍卷風(fēng)的實(shí)驗(yàn)斷斷續(xù)續(xù)持續(xù)了較長(zhǎng)一段時(shí)間,主要是想通過(guò)這個(gè)方式把流體的速度場(chǎng)和力場(chǎng)好好磨一磨,之前一直覺得流體的形態(tài)可控性不高,所以希望能找到一些方法或者經(jīng)驗(yàn)?zāi)軌蛎噶黧w的運(yùn)動(dòng)。

說(shuō)到龍卷風(fēng)大家都不陌生,在特效圈子里面也是一個(gè)非常經(jīng)典的案例,做好龍卷風(fēng)能一定程度上體現(xiàn)出一個(gè)特效師在多個(gè)方面綜合的素質(zhì)體現(xiàn)。現(xiàn)在市面上的方法確實(shí)不少,各種軟件在龍卷風(fēng)的時(shí)候也有各種不一樣的特性體現(xiàn),但最終表現(xiàn)大多都離不開流體和粒子這兩種。今天我就梳理一下,通過(guò)流體和速度場(chǎng)搭建龍卷風(fēng)效果的不同方法和橫向的效果比較。

在講應(yīng)用之前還是先從龍卷風(fēng)講起,這段時(shí)間也是查了不少資料。其中比較有用的就是下面的幾張圖,以及在國(guó)外網(wǎng)站上找到的一個(gè)研究生的畢業(yè)論文。這個(gè)學(xué)生也是想用houdini做一個(gè)可控的龍卷風(fēng),但是全片下來(lái)除了把現(xiàn)有的龍卷風(fēng)類型講的比較透徹,在應(yīng)用那一塊基本上也可以直接忽略了,可想國(guó)外的研究生有些過(guò)得也是比較水的。

? ?

第二張圖是從wiki的vorticity中截取的,這個(gè)截面比較直觀的體現(xiàn)了龍卷風(fēng)風(fēng)場(chǎng)橫截面的速度與中心的關(guān)系了。

原理搞懂后不難得出,龍卷風(fēng)的運(yùn)動(dòng)特性是渦流的一種體現(xiàn),很多時(shí)候飛機(jī)引擎的前后也能出現(xiàn)類似小旋風(fēng)的情況也就是這個(gè)道理。所以在houdini中應(yīng)用主要就是看怎樣認(rèn)為的形成類似渦流的速度場(chǎng)。

1:先講第一個(gè)方法

這個(gè)方法也是沿用的國(guó)外某個(gè)教程的方法,簡(jiǎn)單明了,也適合很多人的理解,下面是速度場(chǎng)的骨架:

這個(gè)方法主要是利用了龍卷風(fēng)具有螺旋線的運(yùn)動(dòng)特征,所以最直觀的搭建了這樣的骨架,但是流體通過(guò)這個(gè)表現(xiàn)出來(lái)還是會(huì)有一些些的小瑕疵,那就是幾個(gè)螺旋線都是最后變成管道的,而管道與管道之間就會(huì)形成B一樣的外形凹槽,這個(gè)槽有可能會(huì)在流體的運(yùn)動(dòng)中體現(xiàn)出來(lái)而出現(xiàn)類似螺絲釘?shù)臉幼印_@個(gè)有好也有壞,如果把點(diǎn)云擾亂了,這種效果就不會(huì)那么明顯了。

這是用這個(gè)方法生成的一版效果,精度比較低,筆記本就是爛,湊合看吧。

?

?

2,第二種方法完全是自己試探性的玩法,也就是幾個(gè)平行的管道加一點(diǎn)惱亂形成的平行高速運(yùn)轉(zhuǎn)的旋風(fēng)效果,這個(gè)方法可以使用在已經(jīng)穩(wěn)定的龍卷風(fēng)身上。

這個(gè)方法能讓流體在速度場(chǎng)類非常穩(wěn)定的跟著擾動(dòng)的變化而更改位置,效果還不錯(cuò),能夠適用在比較魔幻的效果里面。

下圖的這個(gè)效果應(yīng)為把turbulence加大了一點(diǎn),結(jié)果就像有妖氣了一樣:

再來(lái)張福利:

?

3,第三種方法是直接使用一個(gè)運(yùn)動(dòng)軌跡的外殼來(lái)確定速度場(chǎng)方向的,這個(gè)連續(xù)性比較強(qiáng),而且運(yùn)動(dòng)的外觀也類似第一個(gè)方法那樣可控性比較強(qiáng)。

效果圖:

?

4,第四個(gè)方法,我本來(lái)以為是應(yīng)該最好的方法,因?yàn)槭怯贸绦驅(qū)懙牧?chǎng),速度渦輪和大小都非常類似真是物理中的樣子,而且是整個(gè)box里面都充斥這非常精準(zhǔn)的速度值。但是效果不盡人意,也許是我深挖的不夠,目前來(lái)說(shuō)就是效果趣味性不強(qiáng),也許我加大擾亂場(chǎng)可能會(huì)有很大改觀,這里我就不再做這個(gè)測(cè)試了。所有類型的工程文件都在文章最后,有時(shí)間點(diǎn)朋友可以拿著繼續(xù)測(cè)試下去,也很歡迎有更好的結(jié)果出現(xiàn)。

程序是在vex里面寫的,整體來(lái)說(shuō)不難,得出的矢量場(chǎng)也感覺沒(méi)太多問(wèn)題,也許就是太沒(méi)問(wèn)題太規(guī)則了 :P

1 float worldScale = chf("worldScale"); 2 float curlExp = chf("curlExp"); 3 float lengthExp = chf("lengthExp"); 4 float upScale = chf("upScale"); 5 float upExp = chf("upExp"); 6 7 8 9 int handle = pcopen(1, "P", @P, 1e6, 1); 10 11 vector guidePos = set(0,0,0); 12 float radius = 0; 13 14 //get skeleton guide position and radius values 15 while(pciterate(handle)){ 16 pcimport(handle, "P", guidePos); 17 pcimport(handle, "radius", radius); 18 } 19 20 //get the curl direction 21 float distance = length(guidePos - @P); 22 23 vector front = set(0,0,0); 24 if(distance > radius){ 25 front = normalize(guidePos - @P); 26 } 27 vector up = set(0,1,0); 28 vector right = cross(front, up); 29 30 //define the curl bias from the edge to the center 31 vector minBox, maxBox; 32 getbbox(geoself(), minBox, maxBox); 33 float maxRadius = min((maxBox.x - minBox.x),(maxBox.z - minBox.z))/2; 34 float centerWeight = fit(distance, radius, maxRadius, 0.95, 0.02); 35 36 float frontBias = pow(centerWeight, curlExp); 37 vector curlForce = lerp(front, right, frontBias); 38 39 //define the up direction vector 40 vector empty = set(0,0,0); 41 float upBias = pow(centerWeight, upExp); 42 vector upForce = set(0,0,0); 43 if(distance > radius){ 44 upForce = lerp(empty, up * upScale, upBias); 45 }else{ 46 upForce = @P - guidePos; 47 } 48 49 50 //combine all forces together 51 float lengthBias = pow(centerWeight, lengthExp); 52 vector mainForce = (curlForce + upForce) * lengthBias * worldScale; 53 54 @N = mainForce;

最后一個(gè)方法也許能夠用來(lái)物理模擬之類的吧,但是單看效果來(lái)說(shuō)就是渣渣了。不過(guò)我還是固執(zhí)的認(rèn)為這只是暫時(shí)的,因?yàn)樗男螒B(tài)是最沒(méi)有人工痕跡的,之后再好好琢磨整一整應(yīng)該也能出好的結(jié)果的。

?

聊了這么多,貼圖也貼累了。個(gè)人來(lái)講比較喜歡使用第二種和第三種方法。當(dāng)然還有很多其他的方法是我沒(méi)有考慮到的,很明顯這篇博客就沒(méi)有包括粒子速度場(chǎng),沒(méi)講的原因主要還是覺得粒子本來(lái)形態(tài)的可控性就沒(méi)有固定點(diǎn)云的形態(tài)好控制,如果再使用粒子來(lái)驅(qū)動(dòng)流體,簡(jiǎn)直就是給自己找麻煩,所以這里我也直接忽略了。但是絕對(duì)不排除有大神直接玩得轉(zhuǎn)的。還有一個(gè)大方向是直接使用粒子來(lái)模擬,這篇文章講的是流體,所以這個(gè)方法也不在這講了。

前前后后這些實(shí)驗(yàn)一共花了十天左右的空余時(shí)間,感覺還是挺值得的。也許上面所有的方法都還是有瑕疵,但是實(shí)驗(yàn)的過(guò)程就是一種探明道路的過(guò)程,重點(diǎn)不是你走到哪了,而是自己知道怎么開路了。

接下來(lái)看有時(shí)間吧pyro里面的東西好好捋一下。所謂的可控性就是你知道程序在底下自己在干嘛,千萬(wàn)別被他一堆一堆的參數(shù)給蒙住了。

?

看到這,你就可以接源文件了 :P

轉(zhuǎn)載于:https://www.cnblogs.com/simonxia/p/4358050.html

總結(jié)

以上是生活随笔為你收集整理的Houdini中四种实现龙卷风速度场的方法及比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。