2013-08-16 28 views
1

我有一個面部動畫設備,我以兩種不同的方式駕駛:在Maya視口中有一個藝術家UI,這是常見的交互式動畫設置,我已連接它與FaceShift無標記運動捕捉系統一起使用。Maya Mel項目look在運動捕獲後導入到目標位置

我設想一個工作流,其中捕獲性能,導入到Maya中,平滑和減少樣本數據,然後動畫師接管完成。

我們的臉部設備的眼睛注視由三個對象(全局lookAtTarget和左右眼部偏移)的迷你層級控制。

因爲眼睛注視是由這個LookAt設置控制的,所以當眼睛注視時(包括動作捕捉數據被導入),它們需要被禁用。

運動捕捉數據導入後,眼睛注視現在設置爲運動捕捉旋轉。

我尋求短梅爾例程執行以下操作:它遊行通過動作捕捉眼球的轉動樣品,向後計算,並設置每個眼注視目標位置,並平均兩到獲得全球注視目標的位置。

之後,運行Mel例行程序,我可以將眼睛的LookAt約束重新打開,眼睛注視控制返回到鑽臺,視覺上沒有任何變化,動畫師將再次在Maya視口中使用其眼睛UI。

我想這應該是任何人做面部動作的共同邏輯。任何人都有這樣的事情嗎?

回答

0

該解決方案最終非常簡單。情況是在眼睛的旋轉節點上的動作捕捉數據,同時希望(非技術)動畫師對眼睛注視進行控制。在Maya中,約束有一個權重因子:控制約束影響的參數0-1值。解決方案是當動畫師想要控制眼睛注視時,將約束權重設爲1,當他們想要捕捉眼睛注視的動作時,將這些權重設爲0,並使用這些約束權重的平滑過渡掩蓋過渡。這比我上面描述的原始想法更好,因爲原始的動作捕捉數據保持原樣,可作爲參考,允許動畫製作者在需要時來回切換。

0

我沒有這個腳本,但它會相當簡單。你能提供一個瑪雅人的例子嗎?你不需要任何數學。以下是你如何去做的:

假設通過瞳孔的軸是正X,焦距是10個單位。

  1. 創建2個定位符。每個人都有一隻眼睛。將他們的翻譯設置爲 (10,0,0)。
  2. 在世界空間中創建另外2個定位器。點限制他們對其他人。
  3. 創建一個plusMinusAverage節點。
  4. 世界空間定位器的翻譯連接到plusMinusAverage1輸入1和2
  5. 創建另一個定位器(所述的lookAt)
  6. plusMinusAverage1的輸出連接到定位器的lookAt的翻譯。
  7. 烘焙lookAt定位器的翻譯。
  8. 刪除其他4個定位器。
  9. 目的是將眼睛的X軸限制在lookAt。

這一切都可以在腳本中使用命令完成:spaceLocator,createNode,connectAttr,setAttr,bakeSimulation,pointConstraint,aimConstraint,delete。

+0

棘手的問題是確定焦距的初始值:我認爲OP正在尋找一種方法來推導出數學上的結果。它的複雜性在於,如果真實目標距離數米以外,眼睛可能不會聚焦 - 在該距離處,眼球掃視可能會平均化爲更平行的凝視,而不是純粹的觸發解決方案 – theodox

+0

如果鑽機是爲動畫製作人員使用而製作的,他們很可能需要在鑽機附近使用控制定位器。OP還說:「每隻眼睛」都看着目標位置,並將兩者平均以獲得全局LookAt目標的位置「。對於一隻眼睛來說,它看起來是一條線,所以獲得位置的唯一穩定方法是指定焦距。如果你試圖從收斂中計算一個lookat,那麼結果並沒有很好的定義,並且會跳到任何真實世界的數據集上,然後動畫師將不得不手動清理它。我不確定什麼眼鏡與它有關。 –

1

mocap中的眼動追蹤有多好?如果目標很遠,可能會出現問題:根據數據的採樣情況,您可能會看到似乎不會收斂的「瘋狂的眼睛」,或者數據不穩定。如果是這種情況,您可能需要將眼睛數據完全垃圾,或在重定目標之前對其進行平滑處理。

爲了找到兩隻眼睛的融合,你可以試試這個(就像@ julian我使用的是定位器等等,因爲在mel中做所有的數學操作都會讓人煩惱)。

1)將定位器限制爲一隻眼睛,使得一個軸線沿着外觀矢量而另一個軸線位於第二隻眼睛的平面中。比方說,眼睛旨在下來Z和第二隻眼睛是在XZ平面

2)進行第二次定位,父爲先,並以同樣的方式限制第二隻眼:朝下Z,與在XZ平面

3)所述第二定位器的局部Y旋轉第一隻眼睛是兩眼之間會聚角。

enter image description here

4)圖出使用正弦定理和用於第二相對於第一眼睛的偏移一個作弊的焦距。第二隻眼睛的局部X距離是直角三角形的一條腿。三角形的角度是從#3到90的會聚角度 - 會聚角度。換句話說:

focal distance     eye_locator2.tx 
--------------  =   --------------- 
sin(90 - eye_locator2.ry)   sin(eye_locator2.ry) 

所以代數:

focal distance = eye_locator2.tx * sin(90 - eye_locator2.ry)/sin(eye_locator2.ry) 

你必須減去eye2的地方Z,因爲我們正在解決的三角形是由多向前或向後移動:

focal distance = (eye_locator2.tx * sin(90 - eye_locator2.ry)/sin(eye_locator2.ry)) - eye_locator2.tz 

5)位置沿在上面導出的距離眼睛定位器的本地Z方向上的目標。這聽起來像是實際的控制使用了兩個可以分開移動以避免交叉污染的目標 - 這是判斷使用多少與實際收斂距離相比的一種判斷。對於大量現實世界的數據來說,融合對於動畫製作者來說可能過於遙遠:30米遠處的目標與其合作非常不切實際,但可能會在距離10米遠的地方用大範圍模擬進行模擬。不幸的是,沒有經驗的答案 - 這是一個判斷的呼聲。

+0

mocap中的眼動追蹤非常好。請參閱下文,瞭解我們如何最終解決問題。 –