日前,一位荷蘭學生Tom Kemna通過Unreal引擎為手指應用了基本的反向運動學,并分享介紹了自己的開發歷程。以下是映維網的具體整理:
Tom Kemna實現的效果
1. 背景
簡單的背景介紹,如果沒有興趣你可以跳過這一段。我是一名學生,而我們正在用HTC Vive Pro開發一款VR恐怖游戲。我希望獲得更多與VR交互相關的經驗,因此我爭取到了玩家角色實現這一職責。在開發過程中,我看到一個視頻關于將反向運動學用于上樓梯時雙腳,于是我就問自己:嘿,我是否也能這樣做呢?
2. 介紹
首先,如果你不知道什么是反向運動學,我推薦你看這個視頻:
簡單來說,這是為骨骼網格制作動畫的方法。在Unreal引擎中,你可以在動畫藍圖中采用名為“Two Boned IK”節點的選項來實現這一點。你提供兩個位置:一個“效應器”和一個“關節”,而它們將允許允許你操縱骨骼。
2. 實現
我已經開發了一個簡單的系統:當你抓住對象時,系統將允許你用手指包裹它們。有很多方法可以實現反向運動學,下面我將介紹問題是什么,而我又是如何進行解決。然后,我將簡要說明為什么會選擇這個解決方案。
2.1 問題
對于沉浸感,我們需要雙手的操作盡可能逼真。為此,我們需要用手指包裹對象并與之交互,這樣我們就不會出現截斷或非常靜態的雙手。
這是一個問題,我們需要為一堆手指檢測碰撞,然后它們需要停留在遇到的第一個對象上。
2.2 解決方案
最后,我選擇了一個采用常規藍圖邏輯和動畫藍圖邏輯組合的系統。
要實現反向運動學,你需要準備一定的工具:1.正確rigged的骨架網格;2.rig的動畫藍圖。3.利用骨架網格的藍圖。
首先,我們需要找到手指所在的位置。我決定創建隱藏在游戲中的UE4箭頭組件,并根據每個箭頭的變換計算線條軌跡。
下面是采用默認Unreal 4手部網格的藍圖視圖:
第三則與反向運動學有關。Unreal引擎允許用戶設置Two-Boned反向運動學。如果采用動畫藍圖,你可以將每個手指設置為通過兩個位置將反向運動應用于兩個骨骼。
最大的障礙是設置效應器位置和關節目標位置。效應器位置是IK嘗試放置骨骼的位置,而關節目標位置則是說明骨骼應如何旋轉。關節目標位置實際上是一個誤導性的名稱,因為它位于你希望骨骼旋轉的位置的對面,我花費了一定的時間才弄明白這一點。
我們使用一個關節來旋轉骨骼,并通過一個目標來定向骨骼。我們使用常規藍圖中的函數設置值來正確設置所有的值。我在示例項目中創建了三個函數,按以下順序調用。
SetAllFingerIK:一個調用SetSingleFingerIK()五次的函數(每個手指一次)。這意味著將代碼組合成一個大函數。SetSingleFingerIK:每個手指最后都需要調用3個跟蹤,所以這是一個line trace 集合。這將計算和設置動畫藍圖中的變量。LineTraceAlongArrow:根據箭頭的變換返回line trace的擊中結果。
下圖是食指的效果:
3. 選擇這一解決方案的原因
除了單獨為所有一切制作動畫外,我找不到任何替代方案。當然,單獨為所有一切制作動畫是一項非常耗時的任務。動態地為手指制作動畫是唯一可選的替代性解決方案,而反向運動學可以做到這一點。
這很難做到這一點的原因是,關于這個具體問題的信息很少,這意味著我必須自己解決這個問題。最后,我自己開發了這樣一個系統。如果你想在Unreal引擎中看看具體的實現,這里是一個示例項目。
原文鏈接:https://yivian.com/news/55926.html
來源:映維網