改變Sprites型粒子的方向
01Sprites型粒子可以在每一個(gè)粒子上貼圖或者貼序列圖片, 有大量的例子從一個(gè)點(diǎn)發(fā)射器發(fā)出,注意上圖中,箭頭的方向沒有指向它們各自的速度方向,下面就講講怎樣改變它們
02首先在Hypershader里面建一個(gè) vector product 節(jié)點(diǎn),把他命名為"camera_to_world"
它將要把在攝像機(jī)空間里的UP vector轉(zhuǎn)化為世界坐標(biāo)系里面的
03設(shè)置"input1" 為 <<0,1,0>>,選擇 "Vector Matrix Product" 作為運(yùn)算方法
04連接渲染攝像機(jī)得 Xform Matrix 到vector product節(jié)點(diǎn)得"Matrix"
05注意兩點(diǎn)
看清上面的連接編輯器的連接方向?。t框標(biāo)注)
選擇outliner里面的persp(透視圖攝像機(jī)),不要選Hypershade里面的perspShape,要不你找不到 Xform Matrix 這一項(xiàng)
outliner persp
06給粒子添加“spriteTwistPP“屬性
07添加Runtime 表達(dá)式
vector $up=<<0,1,0>>;
vector $cameraup=<<camera_to_world.outputX,camera_to_world.outputY,camera_to_world.outputZ>>;
vector $ref = cross($up,$cameraup);
float $ang=acos(dot($up,unit(particleShape1.worldVelocity)))/3.14*180;
if(dot($ref,particleShape1.worldVelocity)>0)
particleShape1.spriteTwistPP=$ang;
else
particleShape1.spriteTwistPP=-$ang;
就可以了
08下面簡(jiǎn)單解釋一下表達(dá)式得意思
最開始的vector product 節(jié)點(diǎn),把在攝像機(jī)空間里的UP vector轉(zhuǎn)化為世界坐標(biāo)系里面的
maya help里面解釋的攝像機(jī)得Xform Matrix和 Matrix包含同樣的信息
( Contains the same information as the matrix attribute on dagNode but it is stored in a format that can be interpolated easily.——maya help )
vector product 節(jié)點(diǎn)得input 1是<<0,1,0>>,就是y軸得方向,這個(gè)矢量應(yīng)該是攝像機(jī)坐標(biāo)系得
通過vector product 節(jié)點(diǎn)得Vector Matrix Product運(yùn)算把 input 1變?yōu)槭澜缱鴺?biāo)系
下面試著分析一下這個(gè)表達(dá)式(如有不對(duì)得,請(qǐng)指出,呵呵)
vector $up=<<0,1,0>>;
定義一個(gè)矢量
vector $cameraup=<<camera_to_world.outputX,camera_to_world.outputY,camera_to_world.outputZ>>;
再定義一個(gè)矢量,分別取剛才vector product 節(jié)點(diǎn)算出的output
vector $ref = cross($up,$cameraup);
定義矢量,矢量 $ref 等于$up,$cameraup這兩個(gè)矢量得差乘
上面定義了三個(gè)矢量,下面
float $ang=acos(dot($up,unit(particleShape1.worldVelocity)))/3.14*180;
$ang得到是一個(gè)角度,他是$up 和粒子速度(worldVelocity)的一個(gè)夾角
dot——點(diǎn)乘,由于$up是一個(gè)單位矢量(0,1,0),速度矢量也單位化了(unit),所以點(diǎn)乘得到兩個(gè)矢量得余弦值——cos X
通過acos,求反余弦,得到角度,也就是夾角
這時(shí)候求得的夾角是用弧度制的
所以要轉(zhuǎn)化為角度制——后面的:
/3.14*180
畫個(gè)圖,可能好理解一些!
09紅色的坐標(biāo)系代表的是世界坐標(biāo)系
深藍(lán)色的是攝像機(jī)坐標(biāo)系
這里我們的兩個(gè)坐標(biāo)系的關(guān)系,據(jù)了個(gè)最簡(jiǎn)單的:
世界坐標(biāo)系得xy平面和攝像機(jī)坐標(biāo)系z(mì)y平面是共面的,所以世界坐標(biāo)系z(mì)和攝像機(jī)坐標(biāo)系x軸自然平行
棕色的矢量是攝像機(jī)坐標(biāo)系得一個(gè)矢量
也就是我們?cè)?vector product 里面的input 1
通過 vector product 的運(yùn)算,就把input 1轉(zhuǎn)化為了紫色的矢量
這是在世界坐標(biāo)系得,也就是 vector product 得output
這個(gè)output得值賦給了$cameraup
也就是$cameraup等于output了,
矢量$ref是$up點(diǎn)乘$cameraup的結(jié)果(就試圖中得淺綠色的矢量,哦我這個(gè)可能畫翻了,應(yīng)該是z軸向相反的,不好意思,影響不大)
深藍(lán)色得是速度矢量,它和$ref求夾角德余弦cos
因?yàn)閺膟軸順時(shí)針,逆時(shí)針旋轉(zhuǎn)相同角度得到的余弦值真好是相反數(shù)
來判斷spriteTwistPP應(yīng)該旋轉(zhuǎn)的角度,
這個(gè)角度就是變量$ang,只不過是由個(gè)角度問題,這個(gè)偏向角要和速度方向吻合,也達(dá)到最開始我的說的目的了——————箭頭的方向指向它們各自的速度方向
入學(xué)要求 | 課程設(shè)置 | 暴雪動(dòng)態(tài) | 我要報(bào)名
學(xué)員作品 | 就業(yè)學(xué)員 | 招生問答 | 暴雪簡(jiǎn)介
公司作品 | 周邊介紹 | 教學(xué)環(huán)境 | 乘車路線