日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【微課程】houdini中的屬性 數(shù)據(jù) vs 參數(shù) 變量(局部+全局)_CG獵人

 cghunter 2021-04-16

——  微資訊 · 微課程  ——

利用零碎時(shí)間,走上超神之路!


從其他三維軟件轉(zhuǎn)到houdini的用戶(hù)往往會(huì)被下面詞匯所嚇倒,特別是沒(méi)有編程基礎(chǔ)的同學(xué):

屬性(attribute)和數(shù)據(jù)(data),當(dāng)然還有參數(shù)(parameter)變量(variable)局部變量(local vairable)和全局變量(global variable)等。特別是houdini還支持houdini表達(dá)式expression,hscript,python,vex和C++等語(yǔ)言,各種語(yǔ)言使用方法又不一樣,新舊版本houdini變化有比較大,讓人無(wú)所適從。

這些名詞到底指代什么,很可能需要從計(jì)算機(jī)發(fā)展和一些內(nèi)部原理解釋?zhuān)贿^(guò)我們是學(xué)習(xí)如何使用houdini(當(dāng)然,如果你要從事底層開(kāi)發(fā)可以深入研究的話,歡迎去研究里面的差別),所以對(duì)我來(lái)說(shuō),幾乎是一樣的。

昨天文章中,有熱心的同學(xué)指正了小編的錯(cuò)誤,具體如下

1局部變量是map,翻譯為映射或者適配,小編說(shuō)成是轉(zhuǎn)換(至于大家是否更好理解就不得而知了)

2vex中應(yīng)該是屬性,而不是變量。(不過(guò)這個(gè)其實(shí)有點(diǎn)混淆了概念)

首先感謝這位同學(xué)的留言,如果還有其他問(wèn)題歡迎大家指正,在后面的文章我會(huì)繼續(xù)更新的。但是還是會(huì)堅(jiān)持這樣寫(xiě),主要原因有二:

第一,作為對(duì)于剛?cè)腴T(mén)還對(duì)變量,屬性之類(lèi)不太理解的同學(xué),直接解釋里面核心差異無(wú)異于聽(tīng)天書(shū),解釋了反而讓大家更暈乎。有點(diǎn)類(lèi)似與聽(tīng)程序員講了一堆程序語(yǔ)言,最后你只希望對(duì)方說(shuō)人話。

第二,其實(shí)在最終的使用上是非常類(lèi)似的,當(dāng)然,如果都能夠非常熟練地使用, 希望更上一層樓,可以再去追究其差異。有句話說(shuō)得好:聽(tīng)了很多道理,卻依然過(guò)不好這一生。我們定義各種名詞,各種規(guī)則最終是為了用而不是為了記憶。

今天我們就來(lái)做個(gè)整體的介紹

概述

上面分了三行,這樣分的原因如下

1屬性和數(shù)據(jù)實(shí)際上是同樣的東西,也是houdini定義的客觀存在的東西。

2你要對(duì)屬性/數(shù)據(jù)進(jìn)行創(chuàng)建,訪問(wèn),修改或者刪除,而已通過(guò)參數(shù)/表達(dá)式/hscript/vexvop/pthon進(jìn)行操作。

3節(jié)點(diǎn)可以用來(lái)操控屬性,實(shí)際上也就是對(duì)第二點(diǎn)工具的可視化編程/封裝

4部變量和全局變量是相對(duì)于編程語(yǔ)言而言的概念,也就是在expression,Hscript,vex/vop和python。所以不存在局部屬性和全局屬性一說(shuō)。

總結(jié),屬性和數(shù)據(jù)為對(duì)象,而參數(shù),表達(dá)式,Hsript,vex,pythton使我們?nèi)绾尾倏貙?duì)象的工具/方法。昨天小編介紹的就是在工具/方法中的 表達(dá)式VS vex語(yǔ)言的兩種方法,也是大家最常見(jiàn)和改動(dòng)比較大的地方。

屬性attribute,數(shù)據(jù)與參數(shù)和表達(dá)式,vex等關(guān)系

當(dāng)使用add節(jié)點(diǎn)創(chuàng)建一個(gè)點(diǎn),那么這個(gè)點(diǎn)就具備了一個(gè)默認(rèn)的屬性:位置,反過(guò)來(lái)說(shuō),沒(méi)有不存在位置屬性的點(diǎn),沒(méi)有位置就不會(huì)有這個(gè)點(diǎn)。

這時(shí)候你要移動(dòng)這個(gè)點(diǎn),在maya或者3dsmax的做法通常就是選擇點(diǎn),然后選擇移動(dòng)工具向y軸正方向移動(dòng)一個(gè)單位(PS:maya的多邊形點(diǎn)是不能單獨(dú)存在的,可以假設(shè)為box上的一個(gè)點(diǎn))。

在houdini中你有多種方式實(shí)現(xiàn)

1實(shí)際上,你可以直接在屬性面板中直接把P[y]的值修改為1.0,只是這樣修改不直觀,對(duì)于多個(gè)點(diǎn)的操作太麻煩,所以houdini為我們提供一下工具。

2直接add的point參數(shù)上輸入0,1,0  使用參數(shù)的方法,雖然這個(gè)看起來(lái)和第一個(gè)方法是一樣的,不過(guò)對(duì)于復(fù)雜的變化比如旋轉(zhuǎn)和縮放等就更加人性化操作了。

我們?cè)趨?shù)面板上能查看每個(gè)節(jié)點(diǎn)的參數(shù)(每個(gè)節(jié)點(diǎn)都有自己的參數(shù)編輯面板)

3選擇點(diǎn),添加edit節(jié)點(diǎn)/transform節(jié)點(diǎn)進(jìn)行向上移動(dòng)一個(gè)單位  使用手動(dòng)或者transform 節(jié)點(diǎn)

4添加point_old節(jié)點(diǎn),在表達(dá)式輸入@P.y+1 使用了vex語(yǔ)言 直接使用vex語(yǔ)言控制

5使用attributecreate創(chuàng)建一個(gè)局部變量$VAR,設(shè)置值為1,然后在point_old上使用$TX+$VAR 使用表達(dá)式和局部變量

6 當(dāng)然你也可以使用vex定義個(gè)var屬性,然后疊加上到@P.y上 使用vex創(chuàng)建屬性然后疊加計(jì)算


其實(shí)感覺(jué)用了各種方法進(jìn)行操作,最終結(jié)果都是讓屬性P在y軸上+1的值,視圖上點(diǎn)上升了一個(gè)單位。

數(shù)據(jù)

在dop動(dòng)力學(xué)中,見(jiàn)到更多的是data數(shù)據(jù),比如添加force力,是一個(gè)數(shù)據(jù),添加了constraint約束也是一個(gè)數(shù)據(jù),包括solver也是一個(gè)數(shù)據(jù),我們通過(guò)添加各種數(shù)據(jù)影響著動(dòng)力學(xué)中的解算行為。

我們創(chuàng)建一個(gè)簡(jiǎn)單的flip流體解算,在geometry spreadsheet中你會(huì)發(fā)布局和sop中完全不一樣

其實(shí)當(dāng)我們選擇geometry的時(shí)候,熟悉的視圖又回來(lái)了。這個(gè)可以理解為動(dòng)力學(xué)中,我們給物體添加了很多的data數(shù)據(jù),只是這些數(shù)據(jù)不存在點(diǎn)/面層級(jí)里面,比如gravity,都所有點(diǎn)/面都一樣的效果,所以直接在geometry外部作為一個(gè)整體數(shù)據(jù)影響所有的點(diǎn),類(lèi)似存放與在detail中的的局部變量。

如果這時(shí)候我給flipsolver中添加了pop force節(jié)點(diǎn),這里個(gè)節(jié)點(diǎn)使得物體上每個(gè)點(diǎn)受到的力都可以不一樣,這樣在geometry中會(huì)添加force這個(gè)屬性(自然也會(huì)生成v速度這個(gè)屬性)。

從這個(gè)意義上說(shuō),動(dòng)力學(xué)data中的數(shù)據(jù)包含了屬性attribute。

屬性和數(shù)據(jù)總結(jié)

簡(jiǎn)單地說(shuō),存儲(chǔ)在物體層級(jí)上的(point,vertex,primitive和detail上)對(duì)象的可以被當(dāng)做屬性。反過(guò)來(lái)說(shuō),屬性必須依附在幾何體上的。

而數(shù)據(jù)無(wú)需依附在幾何體上,在dop中被解算器識(shí)別。

但是從本質(zhì)上說(shuō),并沒(méi)有什么不同,其實(shí)都是一些houdini識(shí)別的值,用來(lái)呈現(xiàn)不同的效果/實(shí)現(xiàn)功能。比如Cd屬性可以高數(shù)houdini顯示/渲染特定的顏色,v代表速度,可以被mantra識(shí)別計(jì)算運(yùn)動(dòng)模糊等等。

屬性的特點(diǎn)

屬性 通??梢杂米兞?的形式寫(xiě)入表達(dá)式,例如變量$TX 表示屬性P[x]。

一些屬性可以自動(dòng)被渲染引擎、動(dòng)力學(xué)引擎或其他內(nèi)置的節(jié)點(diǎn)識(shí)別并應(yīng)用,比如顏色Cd會(huì)被mantra surface材質(zhì)識(shí)別,N和up會(huì)被copy SOP識(shí)別等等。

用戶(hù)可以自定義任意數(shù)量的屬性,即使他們不會(huì)被任何內(nèi)置節(jié)點(diǎn)識(shí)別,你也可以在表達(dá)式、腳本、VOP等地方使用。自定義的屬性也可以被適配為局部變量

并非所有參數(shù)都支持本地變量,如VOP SOP,Color SOP等都不支持。

下面我們來(lái)討論一下操控屬性的方法

這里所說(shuō)的操控包括 創(chuàng)建,訪問(wèn),修改或者刪除等操作。

參數(shù) parameter

剛才我們第一個(gè)案例中就是用add節(jié)點(diǎn),直接修改points的位置參數(shù),讓其y軸位移一個(gè)單位。這個(gè)就是使用參數(shù)對(duì)屬性P的修改。但是,這里要說(shuō)明的是,并不是參數(shù)面板中的所有參數(shù)都是屬性,比如添加transform節(jié)點(diǎn),調(diào)整ty也可以讓屬性P.y向上移動(dòng)??雌饋?lái)是一一對(duì)應(yīng)。但是transform節(jié)點(diǎn)還有rotate,scale和pivot等參數(shù),他們實(shí)際上也是控制點(diǎn)的P屬性

我們新建一個(gè)小球sphere,轉(zhuǎn)化為polygon多邊形,添加transform節(jié)點(diǎn),調(diào)整rotate或者scale,實(shí)際上看到是屬性P的值在變化。

從這里可以看出,參數(shù)面板中參數(shù)很多是為了方便我們?nèi)说闹庇^思維和設(shè)計(jì)出來(lái)的,實(shí)際上對(duì)于houdini來(lái)說(shuō),都是調(diào)整同一個(gè)屬性。比如scale,實(shí)際上就是讓點(diǎn)沿著法線運(yùn)動(dòng),實(shí)際上修改的還是點(diǎn)的位置屬性。這也說(shuō)明,參數(shù)是我們操控屬性的一個(gè)工具而已。

houdini expression和Hscript

這個(gè)是houdini原生的表達(dá)式和編程語(yǔ)言,有點(diǎn)類(lèi)似與maya的表達(dá)式和mel的關(guān)系。說(shuō)得簡(jiǎn)單一點(diǎn),表達(dá)式就是hscript的簡(jiǎn)潔版,可以直接在參數(shù)通道中使用的一兩句簡(jiǎn)單的函數(shù)。而如果需要使用復(fù)雜的代碼,那么就要使用的Hscript。

vex和vop

vex是類(lèi)似與C/C++的一門(mén)語(yǔ)言,最開(kāi)始是應(yīng)用在shader材質(zhì)編寫(xiě)中。特點(diǎn)是運(yùn)行效率非常高,書(shū)寫(xiě)也比較簡(jiǎn)潔。vop是vex的可視化編程。也就是vex代碼的功能都可以使用vop中的節(jié)點(diǎn)的實(shí)現(xiàn),并且對(duì)于某些特殊的功能,比如noise和pattern等使用vop更加方便。

python

主要用于UI和某些節(jié)點(diǎn)的創(chuàng)建,對(duì)于制作各種快捷工具設(shè)置也非常方便。

上面的expression,Hscript,vex和vop,python都屬于編程的范疇,對(duì)于expression表達(dá)式這種不能?chē)?yán)格意義上說(shuō)是編程語(yǔ)言。而這里就會(huì)有變量的說(shuō)法,而這個(gè)變量可以用于定義屬性,訪問(wèn)屬性,和修改屬性等。

局部變量VS全局變量

這里僅僅存在在上述編程概念,不會(huì)有局部屬性和全局屬性的說(shuō)法。

對(duì)于expression表達(dá)式 局部變量比如 $TX,$CR之類(lèi)的必須在某個(gè)特定節(jié)點(diǎn)/對(duì)象上才會(huì)存在(同理,在物體上也需要有對(duì)應(yīng)的屬性,比如P和Cd屬性)。而$FF,$T,和$PI 等存在于軟件中,不管是否有節(jié)點(diǎn)/對(duì)象都可以存在,可以稱(chēng)為環(huán)境變量或者是全局變量。

對(duì)于vex來(lái)說(shuō),也是同樣道理,可以通過(guò)vex創(chuàng)建屬性,但是對(duì)于vex這門(mén)語(yǔ)言來(lái)說(shuō)其實(shí)還是使用局部變量對(duì)其訪問(wèn),比如@P.x和@Cd.r;對(duì)于@Time和@Frame等存在于軟件中的可以稱(chēng)為全局變量。

但是,對(duì)于vex語(yǔ)言來(lái)說(shuō)還有另外一種“局部變量”,這個(gè)中定義是不生成屬性的變量,僅僅在自身代碼段中使用,這個(gè)概念更加偏向與代碼原生的局部與全局的概念,與上面說(shuō)的不是一個(gè)范疇的東西。

vex中創(chuàng)建局部變量

當(dāng)如,除了全局變量,vex還可以創(chuàng)建局部變量,這個(gè)就有點(diǎn)類(lèi)似與編程中的全局與局部的概念了。其實(shí)和屬性不是一個(gè)范疇的東西。

比如下面代碼中

float a=1.0;這里我們定義了一個(gè)局部變量,注意于定義屬性的差異,f→float,并且沒(méi)有@符號(hào)

那么這個(gè)a并不是屬性,所以也不會(huì)在geometry spreadsheet中找到,同時(shí)只能在本節(jié)點(diǎn)代碼中使用,并不能被外部節(jié)點(diǎn)調(diào)用。

組也是屬性的一種,這個(gè)大家可以嘗試一下在個(gè)點(diǎn)分組,會(huì)在geometryspreadsheet中看到對(duì)應(yīng)的屬性。下面分別使用group節(jié)點(diǎn)和wrangle節(jié)點(diǎn)創(chuàng)建同樣的組:

group方式,輸入group name為left,然后在basegroup中基于屬性P.x的位置進(jìn)行分組。

在wrangle中是寫(xiě)法是 @group_組的名字,=號(hào)右邊輸入分組成立的條件。

在geometryspreadsheet中可以都看到 group:left這個(gè)特殊的屬性,數(shù)據(jù)類(lèi)型為布爾類(lèi)型 0代表不在組里,1代表在組里。

總結(jié)

上面說(shuō)了一大堆,對(duì)于初學(xué)者來(lái)說(shuō)可能會(huì)有點(diǎn)繞,到最后可能都不敢怎么用了。那么下面來(lái)做一個(gè)總結(jié)。

1屬性(數(shù)據(jù))可以說(shuō)是一樣的東西(要具體細(xì)分看上面).

2屬性的操作可以直接修改,更多是通過(guò)參數(shù),expression表達(dá)式,Hscript,vex語(yǔ)言,python,只是形式上和方法上不同,或者說(shuō)是不同系統(tǒng),但是可以實(shí)現(xiàn)同樣的效果。記住,核心就是對(duì)屬性的調(diào)用與控制。

3在houdini的世界里面,屬性可以說(shuō)是客觀存在的對(duì)象,對(duì)于這些對(duì)象的操作我們使用第二點(diǎn)說(shuō)的工具,并且通過(guò)變量進(jìn)行創(chuàng)建,訪問(wèn),修改和刪除。

4在編程體系中談到變量,分為局部變量和全局變量。

希望在討論這些之后不會(huì)讓大家暈乎,總之一句話。定義這些詞匯和定義都是為了方便我們?nèi)ナ褂?,如果無(wú)法全面掌握這些,那么用就是了~

獲得教程的方法:

如果大家對(duì)哪些知識(shí)點(diǎn)不是特別清楚的可以在文章后面留言,小編會(huì)把自己知道的整理成微課程幫大家解答。

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多