當前位置:
首頁 > 科技 > 製作奇異博士般的傳送門

製作奇異博士般的傳送門

奇異博士大家應該都看過,片子中的傳送門真的很酷炫,這麼酷炫的效果我們也可以通過houdini來實現!

GIF/1K

01

我們可以通過一個circle曲線,並利用時間變數$T作為驅動,讓曲線上的每個點自身產生一個向外旋轉的粒子,無需對circle曲線做過多動畫 k幀,一切都是自己解算。

GIF/1K

02

場景中的物體大致會分為4個部分

參數設置

首先我們需要創建一個Circle曲線並利用Convert節點將其轉換為一個Polygon類型,再連接Point節點,增加Edge_Dir屬性

圖示

03

創建並連接attribute blur節點將增加的edge_dir屬性改名為v

參數設置

圖示

顯示變數v

周圍黃色的線條就是v的方向,是 沿著圓的切線方向的

04

然後創建Point Wrangle節點,編寫VEX函數

vector NewP = @P * ch( freq )+set(0,0,1) * ch( offset );

NewP *= maketransform(0,0,set(0),set(0,0,ch( radian )),set(1));

@pscale = @Cd = float(anoise(NewP,3,0.6,0.7));

@v = normalize(@v) * fit01(@Cd.r,0.3,1) * ch( v );

參數設置

圖示

函數小課堂

anoiseVEX function

floatanoise(vectorpos)

vectoranoise(vectorpos)

floatanoise(vectorpos,intturbulence,floatrough,floatatten)

vectoranoise(vectorpos,intturbulence,floatrough,floatatten)

pos:位置信息

turbulence:強度

rough:粗糙度,細節

atten:衰減

These functions are similar to the Worley noise functions listed above. It is currently not possible to simulate alligator noise using the Worley functions, but it』s possible to get a very similar "look"。The bounds on the noise are roughly (0, 1). Only 3D noise is supported. However, this noise has the ability to compute turbulence with roughness and attenuation on the noise.

anoise與wnoise比較相似,wnoise 可以在空間中將點進行隨機散射(基於Poisson分布法),wnoise函數返回的是距點最近的N(N可以是2或4)。函數會與第一個接近點的N進行關聯計算返回一個seed值。這種seed可以保證幾乎每一個點都是唯一的(這就是說兩個挨著的點是不可能具有相同seed的)

normalizeVEX function

vectornormalize(vector)

Returns the normalized vector.

返回一個被normalize後的Vector值

normalize()是一個標準化函數,使向量的長度值為「1」,只為了對向量的長度做一個標準化的控制。它不對方向進行控制,只是對長度保持一致,做規範化的處理,(向量由長度和方向構成的,Normalize()函數只是對長度值做修改)。

fit01VEX function

floatfit01(floatvalue,floatnmin,floatnmax)

vectorfit01(vectorvalue,vectornmin,vectornmax)

vector4fit01(vector4value,vector4nmin,vector4nmax)

Takes the value in the range (0, 1) and shifts it to the corresponding value in the new range (nmin, nmax).

只有在變數參數的取值範圍在0-1之間是才可以使用fit01()函數進行映射取值。

題外話:

這些fit()函數相對比較麻煩。現在用fit()函數代替以上幾種fit()函數的形式

fit()函數的格式:

fit(變數,原有的範圍最小值,原有的範圍最大值,新的範圍最小值,新的範圍最大值)

eg:

fit($PT,$NPT-1,0,1) 這樣可以將取值規範化處理。

fit($PT,$NPT-1,0,10) 這樣將取值的範圍擴大了10倍。

maketransformVEX function

Builds a 3×3 or 4×4 transform matrix.

matrix3maketransform(constvectorzaxis, yaxis)

matrixmaketransform(constvectorzaxis, yaxis, translate)

matrixmaketransform(constinttrs, xyz; constvectort, r, s)

matrixmaketransform(constinttrs, xyz; constvectort, r, s, p)

創建一個3乘3的矩陣或者4乘4的矩陣空間。

trs:分別代表transform、rotator、Scale

xyz:xyz軸

p:是 pivot

GIF/1K

offset控制點的偏移值

GIF/1K

freq控制點的隨機值

ch( V )

ch( freq )

ch( offset )

ch( radian )

通過vex建立的屬性通道設置圖

05

創建一個ends節點,讓打斷圓環的點,讓中間形成中空,然後創建scatter節點,讓Circle曲線以顏色(Cd)來產生粒子,數量由半徑的大小進行關聯,這樣可以隨著半徑越大,粒子的產生就越多,設置如下

參數設置

Force Total Count:ch("../circle1/radx")*5000

圖示

圖示

06

創建Point Jitter節點,進行一個錯亂隨機的效果

參數設置

勾選Visualize Pieces

圖示

錯亂效果演示

GIF/1K

07

創建Transform節點,命名為OffsetY,控制Circle曲線Y軸的方向。

再創個Transform節點命名為Animation,並將時間軸的變數與Circle的Z軸關聯,隨著時間軸的位移,Circle也會朝Z軸方向進行位移運動。

參數設置

圖示

08

創建Attribute Wrangle 節點,這裡 這個節點的作用是控制粒子發射速度V在Z軸方向上的偏移量,以達到和諧的狀態。

@v += chv( OffsetV );

09

創建DOP Network(動力學節點)

雙擊計入,裡面已經有一個簡單的動力學節點結構了

參數設置

選中popobject

Physical選項中

Bounce:0

Bounce Forward:1

Friction:0

Dynamic Friction Scale:1

Temperature:0

選中source_first_input

Source選項中

Emission Type 設置為All Points

Birth選項中

Life Expetancy:0.25

Life Variance:0.25

在Attributes選項中

Inital Attributes 設置為v

創建groundplane(碰撞地面)

physical選項

Bounce:0.025

Bounce Forward:0.5

Friction:10

Dynamic Friction Scale:1.5

Temperature:0

創建popproperty(為粒子增加阻力)

popproperty 可以為粒子增加各種常用的pop屬性,並對粒子的pscale, mass, spinshape, bounce, friction, dynamicfriction, drag, dragcenter, dragshape, dragexp 以及 cling屬性進行修改操作

選中popsolver

在Collision Behavior選項中

勾選Add Hit Attributes(後面會用這個函數將碰撞粒子和發射粒 子進行分隔)

點開Attributes

僅勾選Add Hit Num Attribute其他都取消勾選

最後讓popsolver與groundplane一起連接到merge

動力學小課堂

POP Source 常用選項Attributes解釋

impulse Activation:開啟或關閉脈衝放射方式。脈衝發射的粒子數量是由「Impulse Birth Rate 」參數定義的。值為0表關閉,其它值表開啟。

impulse Count: 一幀出現粒子數量

Const Activation::開啟或關閉連續發射。連續發射的粒子數量是由「Constant Birth Rate 」參數定義的。值為0表關閉,其它值表開啟。(可以加入條件 例如$FF==20或者$FF=>20 當在20幀或大於20幀後執行)

Const Birth Rate:1秒產生多少個粒子

Just Born Group:將新生成的粒子放入一個組中,此處定義組名。

Seed:隨機點

Life Expectancy:指定多少秒後粒子消失

Life Variance:隨機值壽命,會用「Life Expectancy 」值加減它

Jitter Birth Time:並非讓所有粒子在出生時年齡都為1,此會在該時間步幅內創建一個隨機年齡。

Interpolate Source:發射源可以被線性插值計算,可以更好的從移動的發射源中產生粒子。

POP Object 常用選項 Physical 解釋

Bounce: 設置粒子的彈性。兩個彈性為1的物體碰撞,他們會反彈,且無能力損失。兩個彈性為0的物體碰撞,他們會保持靜止。如果粒子有一個名為bounce的點屬性,那麼點屬性值會覆蓋該參數值。

Friction:設置粒子的摩擦係數。0表示沒有摩擦力。如果粒子有一個名為friction的點屬性,那麼點屬性值會覆蓋該參數值。

Dynamic Friction Scale:設置粒子的動摩擦力係數。值為1表示動摩擦力等於靜摩擦力。值為0表示運動時,沒有摩擦力(在未運動前有靜摩擦力)。

POP Object 常用選項Collisions 解釋

Tolerance:設置碰撞容差,粒子接近曲面時,若處於該容差範圍內,則會被視為發生碰撞。

10

創建Gorup節點,默認名gropu1

pointdeform1transform1連接到gropu1

參數設置

Group Name:Break_Grp

Group Type:Points

在Keep in Bounding Regions 項中

勾選Enable

Bounding Type:Bounding Object(points only)

圖示

11

接著就是給粒子著色,我們創建Attributes VOP,雙擊進入設置,看到節點設置界面。

實現效果:

我們要讓粒子顏色隨著速度的變化而進行變化,並且要在散射的同時發出火花,越裡面的顏色越亮。

1.我們可以將物體的V(速度)用Lengh計算出速度向量的長度

2.取Id並連接random進行隨機取值

3.讓所得的V向量取值與隨機數值進行乘法運算,並再乘以一個常量(0.1)以控制粒子顏色的亮度不至於曝光,這個值我們暫時命名為A

4.然後接著還是取Id值,連接modulo節點(這是一個求余的節點),這個節點中設置的可以通過Divisor的值調節粒子發射時產生的小亮點,值越大,亮點越小,這個計算的值暫命名為B

5.創建Twoway節點,讓B的值連接Condition(判斷條件,如果符合判斷條件,那麼input2就輸出指定的值),A的值連接到Input1,然後輸出的結果連接到Ramp上,再連接到物體的Cd上,這樣,粒子的著色就完成了。

6.為了讓粒子的大小也產生一個隨機感,我們還是利用Id值產生隨機數,然後連接一個Fit節點,輸出值綁定到pscale(粒子半徑)的值。

VOP完整連接圖示

12

創建filecache緩存,讓粒子結算後,可以保存數據

參數設置

緩存路徑設置

13

進行發射粒子與碰撞粒子的隔離。

創建Attribute Wangle節點,然後輸入

@group_ground = @hittotal > 0;

創建了一個發生碰撞的粒子組,組名為ground。

14

通過Split節點,可以將除指定組外的元素隔離,這樣我們就能剝離出碰撞粒子與非碰撞粒子了,然後分別創建兩個null節點,命名為Circle_Main、Circle_Ground,用來表示組。

最後渲染成品出來

合成了一個封面:)

教程若有不明白之處歡迎留言諮詢

點擊「閱讀原文」獲取源文件


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 電影特效報告 的精彩文章:

奇趣:明日凌晨可夜觀天象之「月亮吞食恆星」

TAG:電影特效報告 |