【引言】
本篇有兩個目的:
一是通過個實例來學(xué)習(xí)一下,如何用XPRESSO檢測模型物體相互"影響"。
二是交流一下如何研究和學(xué)習(xí)XPRESSO節(jié)點。
【研究】
在C4D的XPRESSO中,有兩個節(jié)點,一個是“碰撞”節(jié)點,判斷分析兩個對象相互接觸事件;二是“射線碰撞”節(jié)點,對象之間不需要接觸,只要運動的對象觸碰到空間看不見的“紅線”,就發(fā)生事件。研究明白這兩個節(jié)點,對模擬機器自動化的動畫有很大好處。

一、首先研究第一個:“碰撞”節(jié)點。
此節(jié)點是能夠檢測到兩個對象的碰撞。
左邊輸入端:
1、對象12:連接兩個相互碰撞的對象。這些對象必須是可編輯多邊形對象。
2、公差:默認是0,就是說兩個物體相互接觸的距離是零的時候起作用,如果輸入不是零,比如是10,那么,兩個物體相距10個單位就發(fā)生作用。工作在屬性面板設(shè)置“碰撞類型”是在距離的模式下。

右側(cè)的輸出端:
1、碰撞:輸出是個布爾值。如果兩個對象相距在公差的范圍內(nèi),那么就是TRUE 或1 ,否則是FALSE或0。這是一個重要的輸出端口。
2、點1和點2:輸出是矢量(有方向有大小的量),而且它們的工作在“碰撞類型”必須是在距離的模式下。
3、多邊形索引1和2:分別對應(yīng)兩個對象表面的序號。輸出考訴你是對象的哪個面相互發(fā)生了影響。
4、距離:返回是兩個對象之間的距離值。而且它的工作在“碰撞類型”必須是在球體和距離的模式下。
碰撞節(jié)點的屬性:
1、碰撞類型:這是非常重要。碰撞物體以什么來確定相互碰撞的范圍。(類似剛體中的碰撞外形一樣)
范圍框、距離、對象、公差、球體(對象外面包裹一個看不見的球體,為碰撞體)。
2、使用變形網(wǎng)點:當(dāng)物體有變形的時候,勾選。
3、矩陣模式:對應(yīng)是輸出“點12”矢量輸出。(全局和局部針對是否有子物體而言)
4、包括子集:如果兩個對象包含子集,就勾選。
5、選集標(biāo)簽12:分別對應(yīng)兩個對象的選擇集。必須是制定對象的某一塊相互碰撞才有效。

舉個例子吧:
1、在場景中建立兩個對象,球體和立方體,然后C。建立一個空白物體賦予XPRESSO標(biāo)簽。

2、打開XPRESSP標(biāo)簽,右鍵--新建--常規(guī)--碰撞標(biāo)簽。把輸入輸出端口都打開。再把兩個對象拖進來,分別打開兩個對象的對象輸出端口,連接如下:

3、添加一個結(jié)果節(jié)點與碰撞輸出相連,默認數(shù)據(jù)類型是實數(shù)。如果你不改,那么兩個對象不碰撞為0,相遇為1。如果結(jié)果數(shù)據(jù)結(jié)構(gòu)更改為布爾,則碰撞為TRUE,不碰撞為FALSE。

4、在碰撞節(jié)點的屬性面板,選擇碰撞模式為“距離”。勾選菜單--計算--動畫刷新(否則,不能實時看到數(shù)據(jù)的更新,要注意?。H缓?,按CTRL復(fù)制結(jié)果節(jié)點(實數(shù)),按照以下連接。

5、現(xiàn)在開始實驗:
移動立方體靠近球體,距離輸出數(shù)值不斷變小。

6、當(dāng)相互接觸時,距離變?yōu)?,最后再靠近變?yōu)?1,不再改變。而其他的端口沒有變化。

7、更改碰撞節(jié)點的碰撞模式為“對象”。當(dāng)相互碰撞時,碰撞輸出點為1,就是“真”。而距離輸出點沒有反應(yīng)。

8、多邊形索引值在接觸的時候,有了顯示,那個數(shù)值代表的是模型面的編號。
選擇球體,點擊構(gòu)造,按O,多邊形模式,找到108號,看看就是發(fā)生碰撞的球體的那個面。(你必須在面模式下查看)

同理看看立方體1號面。

9、新建一個常數(shù)節(jié)點,輸入數(shù)據(jù)50。更改碰撞類型為“公差”。

10,移動立方體靠近球體,當(dāng)他們之間的距離進入50以內(nèi),發(fā)生了作用。碰撞輸出為真。

11、把球體復(fù)制到右邊,選擇“編輯器可見”輸入端口,這個屬性是邏輯值,真就在場景中顯示,假則不顯示。

12、當(dāng)移動立方體與球體接觸的瞬間,球體隱形了。

二、研究第二個:“射線碰撞”節(jié)點。
該節(jié)點在空間生成一條虛擬的線,并檢查與其碰撞的一個多邊形物體,是否發(fā)生碰撞,以及碰撞的坐標(biāo)位置。要檢測的對象必須是多邊形可編輯物體。

輸入端口:
1、對象:被檢測的對象。
2、射線12:可以使用實體模型或空物體的坐標(biāo)位置,由兩個坐標(biāo)位置形成一條虛擬的射線(從1到2)。
輸出端口:
1、碰撞:布爾值,對象與該虛擬線有接觸,輸出為1,否則為0.
2、作為背面:也是布爾值,如果相交為對象的面的背面,輸出為1,否則為0。(如何判斷是正面呢?與法線相同者為正,反之反然。)
3、點擊的位置:返回當(dāng)射線與物體“第一次”相交的位置坐標(biāo)。
4、距離:返回當(dāng)射線與物體第一次相交,射線1與交點的距離值。
5、表面法線、平滑法線:?
6、面邊索引:返回相交位置的對象面的序號。
屬性面板:
1、僅作為測試。默認勾選,為了節(jié)省資源。僅計算機是否碰撞結(jié)果,不勾選,計算其他的輸出項。
2、全局坐標(biāo)。是否用全局坐標(biāo)。
第一個例子:
1、在場景中建立如下物體:兩個圓柱A和B,作為空間的虛擬線的起點終點。用立方體制作如下的模型,作為檢測體。

2、用引導(dǎo)線連接AB兩個圓柱,表示射線。(目的是讓你能看到這條看不見的線而已)

3、建立空物體,設(shè)立一個XPRESSO標(biāo)簽。把三個對象拖進來。建立一個”射線碰撞“節(jié)點。
按照如下鏈接。

4、把A對象節(jié)點進行復(fù)制,做如下鏈接。目的是,如果射線和檢測體相遇,那么,碰撞輸出為真,或1,啟動A模型使用顏色。(A對象默認是不啟用顏色的)

5、下面進行測試,延X移動"檢測體”向“射線”靠近。

6、當(dāng)檢測體遇到射線,碰撞輸出為真,A對象顯示顏色。

7、當(dāng)不相交,碰撞輸出為假或0,A對象不輸出顏色。

8、如此。

再舉一個例子。
1、在場景中建立一條螺旋線,設(shè)置如下:

2、按C轉(zhuǎn)換曲線,勾上閉合樣條。

3、選中上線兩點,右鍵“剛性插值”。

4、建立一個擠壓對象,設(shè)置如下。

5、再建立一個圓柱,設(shè)置如下。

6、把圓柱轉(zhuǎn)化為多邊形,改名字為“被動”。按L,移動它的坐標(biāo)到最低端。(如果圓柱不轉(zhuǎn)化多邊形,這個軸點你是移不動的)

7、建立兩個空物體,命名為A,B。充當(dāng)射線位置。

8、注意AB的位置和方向。再建立一個空物體,添加XPRESSO標(biāo)簽。

9、轉(zhuǎn)換擠壓物體,改名為“檢測體”。

10、打開XPRESSO,把這幾個對象拖入進來。按照下面進行連接:

11、射線時時刻刻檢測如這個的“圓盤”---檢測體是否碰撞,碰撞的結(jié)果為1,在“點擊位置”輸出的是它與虛擬射線的相交點坐標(biāo)值(矢量)。

12、把圓柱體“被動”拖入進來,進行下面連接。但不能直接連接,因為“點擊位置”輸出是矢量,而“被動”物體關(guān)心的是Y,上下的方向。所以中間要添加一個轉(zhuǎn)換。

13、測試一下:旋轉(zhuǎn)“測試體”R.B增加角度,發(fā)現(xiàn)“被動”沒有動。點擊NG線框看看,沒動怎么回事?

14、點擊“射線碰撞”節(jié)點,看看屬性面板。原來在這里:默認“僅作測試”是勾選的,如果勾選,只有碰撞輸出起作用,其他沒有數(shù)值。所以,必須勾掉它。

15、在復(fù)制檢測體到下面,從SYSTEM PRESENTS找到預(yù)設(shè)節(jié)點--rotate,把它連接到檢測體的旋轉(zhuǎn).B上。

16、點擊播放,測試,這一回成功了。



17、有點看不出來。再加點其他的東西豐富一下:




【后記】
第一個教學(xué)目的實現(xiàn)完了。
那么第二個教學(xué)目的呢?如何學(xué)習(xí)xpresso?這篇文章,全部的研究的過程,你不也看到了,就是這樣研究和學(xué)習(xí)XPRESSO的。對了,還有,還要看這個---幫助。你必須熟悉每個節(jié)點的作用和意義,你才能“隨心所欲”地應(yīng)用。

這個范例有點難,提供下載示范文件:
地址:http://pan.baidu.com/s/1o60wJJO