【引言】
本篇有兩個(gè)目的:
一是通過(guò)個(gè)實(shí)例來(lái)學(xué)習(xí)一下,如何用XPRESSO檢測(cè)模型物體相互"影響"。
二是交流一下如何研究和學(xué)習(xí)XPRESSO節(jié)點(diǎn)迷扇。
【研究】
在C4D的XPRESSO中,有兩個(gè)節(jié)點(diǎn),一個(gè)是“碰撞”節(jié)點(diǎn)骗村,判斷分析兩個(gè)對(duì)象相互接觸事件;二是“射線碰撞”節(jié)點(diǎn)呀枢,對(duì)象之間不需要接觸胚股,只要運(yùn)動(dòng)的對(duì)象觸碰到空間看不見(jiàn)的“紅線”,就發(fā)生事件裙秋。研究明白這兩個(gè)節(jié)點(diǎn)琅拌,對(duì)模擬機(jī)器自動(dòng)化的動(dòng)畫有很大好處。
一摘刑、首先研究第一個(gè):“碰撞”節(jié)點(diǎn)进宝。
此節(jié)點(diǎn)是能夠檢測(cè)到兩個(gè)對(duì)象的碰撞。
左邊輸入端:
1枷恕、對(duì)象12:連接兩個(gè)相互碰撞的對(duì)象党晋。這些對(duì)象必須是可編輯多邊形對(duì)象。
2、公差:默認(rèn)是0未玻,就是說(shuō)兩個(gè)物體相互接觸的距離是零的時(shí)候起作用灾而,如果輸入不是零,比如是10扳剿,那么旁趟,兩個(gè)物體相距10個(gè)單位就發(fā)生作用。工作在屬性面板設(shè)置“碰撞類型”是在距離的模式下庇绽。
右側(cè)的輸出端:
1锡搜、碰撞:輸出是個(gè)布爾值。如果兩個(gè)對(duì)象相距在公差的范圍內(nèi)瞧掺,那么就是TRUE 或1 耕餐,否則是FALSE或0。這是一個(gè)重要的輸出端口夸盟。
2蛾方、點(diǎn)1和點(diǎn)2:輸出是矢量(有方向有大小的量),而且它們的工作在“碰撞類型”必須是在距離的模式下上陕。
3桩砰、多邊形索引1和2:分別對(duì)應(yīng)兩個(gè)對(duì)象表面的序號(hào)。輸出考訴你是對(duì)象的哪個(gè)面相互發(fā)生了影響释簿。
4亚隅、距離:返回是兩個(gè)對(duì)象之間的距離值。而且它的工作在“碰撞類型”必須是在球體和距離的模式下庶溶。
碰撞節(jié)點(diǎn)的屬性:
1煮纵、碰撞類型:這是非常重要。碰撞物體以什么來(lái)確定相互碰撞的范圍偏螺。(類似剛體中的碰撞外形一樣)
范圍框献联、距離状知、對(duì)象昧狮、公差乖订、球體(對(duì)象外面包裹一個(gè)看不見(jiàn)的球體,為碰撞體)夺巩。
2贞让、使用變形網(wǎng)點(diǎn):當(dāng)物體有變形的時(shí)候,勾選柳譬。
3喳张、矩陣模式:對(duì)應(yīng)是輸出“點(diǎn)12”矢量輸出。(全局和局部針對(duì)是否有子物體而言)
4美澳、包括子集:如果兩個(gè)對(duì)象包含子集销部,就勾選摸航。
5、選集標(biāo)簽12:分別對(duì)應(yīng)兩個(gè)對(duì)象的選擇集柴墩。必須是制定對(duì)象的某一塊相互碰撞才有效忙厌。
舉個(gè)例子吧:
1、在場(chǎng)景中建立兩個(gè)對(duì)象江咳,球體和立方體,然后C哥放。建立一個(gè)空白物體賦予XPRESSO標(biāo)簽歼指。
2、打開(kāi)XPRESSP標(biāo)簽甥雕,右鍵--新建--常規(guī)--碰撞標(biāo)簽踩身。把輸入輸出端口都打開(kāi)。再把兩個(gè)對(duì)象拖進(jìn)來(lái)社露,分別打開(kāi)兩個(gè)對(duì)象的對(duì)象輸出端口挟阻,連接如下:
3、添加一個(gè)結(jié)果節(jié)點(diǎn)與碰撞輸出相連峭弟,默認(rèn)數(shù)據(jù)類型是實(shí)數(shù)附鸽。如果你不改,那么兩個(gè)對(duì)象不碰撞為0瞒瘸,相遇為1坷备。如果結(jié)果數(shù)據(jù)結(jié)構(gòu)更改為布爾,則碰撞為TRUE情臭,不碰撞為FALSE省撑。
4、在碰撞節(jié)點(diǎn)的屬性面板俯在,選擇碰撞模式為“距離”竟秫。勾選菜單--計(jì)算--動(dòng)畫刷新(否則,不能實(shí)時(shí)看到數(shù)據(jù)的更新跷乐,要注意7拾堋)。然后劈猿,按CTRL復(fù)制結(jié)果節(jié)點(diǎn)(實(shí)數(shù))拙吉,按照以下連接。
5揪荣、現(xiàn)在開(kāi)始實(shí)驗(yàn):
移動(dòng)立方體靠近球體筷黔,距離輸出數(shù)值不斷變小。
6仗颈、當(dāng)相互接觸時(shí)佛舱,距離變?yōu)?椎例,最后再靠近變?yōu)?1,不再改變请祖。而其他的端口沒(méi)有變化订歪。
7、更改碰撞節(jié)點(diǎn)的碰撞模式為“對(duì)象”肆捕。當(dāng)相互碰撞時(shí)刷晋,碰撞輸出點(diǎn)為1,就是“真”慎陵。而距離輸出點(diǎn)沒(méi)有反應(yīng)眼虱。
8、多邊形索引值在接觸的時(shí)候席纽,有了顯示捏悬,那個(gè)數(shù)值代表的是模型面的編號(hào)。
選擇球體润梯,點(diǎn)擊構(gòu)造过牙,按O,多邊形模式纺铭,找到108號(hào)寇钉,看看就是發(fā)生碰撞的球體的那個(gè)面。(你必須在面模式下查看)
同理看看立方體1號(hào)面彤蔽。
9摧莽、新建一個(gè)常數(shù)節(jié)點(diǎn),輸入數(shù)據(jù)50顿痪。更改碰撞類型為“公差”镊辕。
10,移動(dòng)立方體靠近球體蚁袭,當(dāng)他們之間的距離進(jìn)入50以內(nèi)征懈,發(fā)生了作用。碰撞輸出為真揩悄。
11卖哎、把球體復(fù)制到右邊,選擇“編輯器可見(jiàn)”輸入端口删性,這個(gè)屬性是邏輯值亏娜,真就在場(chǎng)景中顯示,假則不顯示蹬挺。
12维贺、當(dāng)移動(dòng)立方體與球體接觸的瞬間,球體隱形了巴帮。
二溯泣、研究第二個(gè):“射線碰撞”節(jié)點(diǎn)虐秋。
該節(jié)點(diǎn)在空間生成一條虛擬的線,并檢查與其碰撞的一個(gè)多邊形物體垃沦,是否發(fā)生碰撞客给,以及碰撞的坐標(biāo)位置。要檢測(cè)的對(duì)象必須是多邊形可編輯物體肢簿。
輸入端口:
1靶剑、對(duì)象:被檢測(cè)的對(duì)象。
2池充、射線12:可以使用實(shí)體模型或空物體的坐標(biāo)位置抬虽,由兩個(gè)坐標(biāo)位置形成一條虛擬的射線(從1到2)。
輸出端口:
1纵菌、碰撞:布爾值,對(duì)象與該虛擬線有接觸休涤,輸出為1咱圆,否則為0.
2、作為背面:也是布爾值功氨,如果相交為對(duì)象的面的背面序苏,輸出為1,否則為0捷凄。(如何判斷是正面呢忱详?與法線相同者為正,反之反然跺涤。)
3匈睁、點(diǎn)擊的位置:返回當(dāng)射線與物體“第一次”相交的位置坐標(biāo)。
4桶错、距離:返回當(dāng)射線與物體第一次相交航唆,射線1與交點(diǎn)的距離值。
5院刁、表面法線糯钙、平滑法線:?
6退腥、面邊索引:返回相交位置的對(duì)象面的序號(hào)任岸。
屬性面板:
1、僅作為測(cè)試狡刘。默認(rèn)勾選享潜,為了節(jié)省資源。僅計(jì)算機(jī)是否碰撞結(jié)果颓帝,不勾選米碰,計(jì)算其他的輸出項(xiàng)窝革。
2、全局坐標(biāo)吕座。是否用全局坐標(biāo)虐译。
第一個(gè)例子:
1、在場(chǎng)景中建立如下物體:兩個(gè)圓柱A和B吴趴,作為空間的虛擬線的起點(diǎn)終點(diǎn)漆诽。用立方體制作如下的模型,作為檢測(cè)體锣枝。
2厢拭、用引導(dǎo)線連接AB兩個(gè)圓柱,表示射線撇叁。(目的是讓你能看到這條看不見(jiàn)的線而已)
3供鸠、建立空物體,設(shè)立一個(gè)XPRESSO標(biāo)簽陨闹。把三個(gè)對(duì)象拖進(jìn)來(lái)楞捂。建立一個(gè)”射線碰撞“節(jié)點(diǎn)。
按照如下鏈接趋厉。
4寨闹、把A對(duì)象節(jié)點(diǎn)進(jìn)行復(fù)制,做如下鏈接君账。目的是繁堡,如果射線和檢測(cè)體相遇,那么乡数,碰撞輸出為真椭蹄,或1,啟動(dòng)A模型使用顏色瞳脓。(A對(duì)象默認(rèn)是不啟用顏色的)
5塑娇、下面進(jìn)行測(cè)試,延X(jué)移動(dòng)"檢測(cè)體”向“射線”靠近劫侧。
6埋酬、當(dāng)檢測(cè)體遇到射線,碰撞輸出為真烧栋,A對(duì)象顯示顏色写妥。
7、當(dāng)不相交审姓,碰撞輸出為假或0珍特,A對(duì)象不輸出顏色。
8魔吐、如此扎筒。
再舉一個(gè)例子莱找。
1、在場(chǎng)景中建立一條螺旋線嗜桌,設(shè)置如下:
2奥溺、按C轉(zhuǎn)換曲線,勾上閉合樣條骨宠。
3浮定、選中上線兩點(diǎn),右鍵“剛性插值”层亿。
4桦卒、建立一個(gè)擠壓對(duì)象,設(shè)置如下匿又。
5方灾、再建立一個(gè)圓柱,設(shè)置如下碌更。
6迎吵、把圓柱轉(zhuǎn)化為多邊形,改名字為“被動(dòng)”针贬。按L,移動(dòng)它的坐標(biāo)到最低端拢蛋。(如果圓柱不轉(zhuǎn)化多邊形桦他,這個(gè)軸點(diǎn)你是移不動(dòng)的)
7、建立兩個(gè)空物體谆棱,命名為A快压,B。充當(dāng)射線位置垃瞧。
8蔫劣、注意AB的位置和方向。再建立一個(gè)空物體个从,添加X(jué)PRESSO標(biāo)簽脉幢。
9、轉(zhuǎn)換擠壓物體嗦锐,改名為“檢測(cè)體”嫌松。
10、打開(kāi)XPRESSO奕污,把這幾個(gè)對(duì)象拖入進(jìn)來(lái)萎羔。按照下面進(jìn)行連接:
11、射線時(shí)時(shí)刻刻檢測(cè)如這個(gè)的“圓盤”---檢測(cè)體是否碰撞碳默,碰撞的結(jié)果為1贾陷,在“點(diǎn)擊位置”輸出的是它與虛擬射線的相交點(diǎn)坐標(biāo)值(矢量)缘眶。
12、把圓柱體“被動(dòng)”拖入進(jìn)來(lái)髓废,進(jìn)行下面連接巷懈。但不能直接連接,因?yàn)椤包c(diǎn)擊位置”輸出是矢量瓦哎,而“被動(dòng)”物體關(guān)心的是Y砸喻,上下的方向。所以中間要添加一個(gè)轉(zhuǎn)換蒋譬。
13割岛、測(cè)試一下:旋轉(zhuǎn)“測(cè)試體”R.B增加角度,發(fā)現(xiàn)“被動(dòng)”沒(méi)有動(dòng)犯助。點(diǎn)擊NG線框看看癣漆,沒(méi)動(dòng)怎么回事?
14剂买、點(diǎn)擊“射線碰撞”節(jié)點(diǎn)惠爽,看看屬性面板。原來(lái)在這里:默認(rèn)“僅作測(cè)試”是勾選的瞬哼,如果勾選婚肆,只有碰撞輸出起作用,其他沒(méi)有數(shù)值坐慰。所以较性,必須勾掉它。
15结胀、在復(fù)制檢測(cè)體到下面赞咙,從SYSTEM PRESENTS找到預(yù)設(shè)節(jié)點(diǎn)--rotate,把它連接到檢測(cè)體的旋轉(zhuǎn).B上糟港。
16攀操、點(diǎn)擊播放,測(cè)試秸抚,這一回成功了速和。
17、有點(diǎn)看不出來(lái)剥汤。再加點(diǎn)其他的東西豐富一下:
【后記】
第一個(gè)教學(xué)目的實(shí)現(xiàn)完了健芭。
那么第二個(gè)教學(xué)目的呢?如何學(xué)習(xí)xpresso秀姐?這篇文章慈迈,全部的研究的過(guò)程,你不也看到了,就是這樣研究和學(xué)習(xí)XPRESSO的痒留。對(duì)了谴麦,還有,還要看這個(gè)---幫助伸头。你必須熟悉每個(gè)節(jié)點(diǎn)的作用和意義匾效,你才能“隨心所欲”地應(yīng)用。
這個(gè)范例有點(diǎn)難恤磷,提供下載示范文件:
地址:http://pan.baidu.com/s/1o60wJJO