萬盛學電腦網

 萬盛學電腦網 >> 圖文處理 >> MAYA教程 >> Maya改變Sprites型粒子的方向

Maya改變Sprites型粒子的方向

  01Sprites型粒子可以在每一個粒子上貼圖或者貼序列圖片,

  有大量的例子從一個點發射器發出,注意上圖中,箭頭的方向沒有指向它們各自的速度方向,下面就講講怎樣改變它們

Maya改變Sprites型粒子的方向 三聯

  02首先在Hypershader裡面建一個 vector product 節點,把他命名為"camera_to_world"

  它將要把在攝像機空間裡的UP vector轉化為世界坐標系裡面的

Maya改變Sprites型粒子的方向

  03設置"input1" 為 <<0,1,0>>,選擇 "Vector Matrix Product" 作為運算方法

Maya改變Sprites型粒子的方向

  04連接渲染攝像機得 Xform Matrix 到vector product節點得"Matrix"

Maya改變Sprites型粒子的方向

  05注意兩點

  看清上面的連接編輯器的連接方向!(紅框標注)

  選擇outliner裡面的persp(透視圖攝像機),不要選Hypershade裡面的perspShape,要不你找不到 Xform Matrix 這一項

  outliner persp

Maya改變Sprites型粒子的方向

  06給粒子添加“spriteTwistPP“屬性

  [NextPage]

Maya改變Sprites型粒子的方向

  07添加Runtime 表達式

  vector $up=<<0,1,0>>;

  vector $cameraup=<>;

  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;

  就可以了

Maya改變Sprites型粒子的方向

  08下面簡單解釋一下表達式得意思

  最開始的vector product 節點,把在攝像機空間裡的UP vector轉化為世界坐標系裡面的

  maya help裡面解釋的攝像機得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 節點得input 1是<<0,1,0>>,就是y軸得方向,這個矢量應該是攝像機坐標系得

  通過vector product 節點得Vector Matrix Product運算把 input 1變為世界坐標系

  下面試著分析

  一下這個表達式(如有不對得,請指出,呵呵)

  vector $up=<<0,1,0>>;

  定義一個矢量

  vector $cameraup=<>;

  [NextPage]

  再定義一個矢量,分別取剛才vector product 節點算出的output

  vector $ref = cross($up,$cameraup);

  定義矢量,矢量 $ref 等於$up,$cameraup這兩個矢量得差乘

  上面定義了三個矢量,下面

  float $ang=acos(dot($up,unit(particleShape1.worldVelocity)))/3.14*180;

  $ang得到是一個角度,

  他是$up 和粒子速度(worldVelocity)的一個夾角

  dot——點乘,由於$up是一個單位矢量(0,1,0),速度矢量也單位化了(unit),所以點乘得到兩個矢量得余弦值——cos X

  通過acos,求反余弦,得到角度,也就是夾角

  這時候求得的夾角是用弧度制的

  所以要轉化為角度制——後面的:

  /3.14*180

  畫個圖,可能好理解一些!

Maya改變Sprites型粒子的方向

  09紅色的坐標系代表的是世界坐標系

  深藍色的是攝像機坐標系

  這裡我們的兩個坐標系的關系,據了個最簡單的:

  世界坐標系得xy平面和攝像機坐標系zy平面是共面的,

  所以世界坐標系z和攝像機坐標系x軸自然平行

  棕色的矢量是攝像機坐標系得一個矢量

  也就是我們在 vector product 裡面的input 1

  通過 vector product 的運算,就把input 1轉化為了紫色的矢量

  這是在世界坐標系得,也就是 vector product 得output

  這個output得值賦給了$cameraup

  也就是$cameraup等於output了,

  矢量$ref是$up點乘$cameraup的結果(就試圖中得淺綠色的矢量,哦我這個可能畫翻了,應該是z軸向相反的,不好意思,影響不大)

  深藍色得是速度矢量,它和$ref求夾角德余弦cos

  因為從y軸順時針,逆時針旋轉相同角度得到的余弦值真好是相反數

  來判斷spriteTwistPP應該旋轉的角度,

  這個角度就是變量$ang,只不過是由個角度問題,這個偏向角要和速度方向吻合,也達到最開始我的說的目的了—&md

  ash;————箭頭的方向指向它們各自的速度方向

        :更多精彩教程請關注三聯圖文教程 頻道,

copyright © 萬盛學電腦網 all rights reserved