ETH官方钱包

創作內容

4 GP

UE4的雷區: 小心FTransform與FMatrix的混用

作者:巧克力喬斯達│2022-02-07 20:11:11│巴幣:8│人氣:420
最近的一個工作項目是修正particle沒有按照指定路線走的問題
簡單來說,我們在角色的TPose上拉了幾條線,我們預期particle效果會沿著這條線走,不論角色現在是什麼姿勢~

FMatrix A = USkinnedMeshComponent::SkeletalMesh->GetRefBasesInvMatrix();
FTransform B = USkinnedMeshComponent::GetComponentSpaceTransforms();

為了讓TPose的點能順利mapping到目前的姿勢上,當然要先轉換一波了
透過 P' = P * A * B,就是我們要的結果了,A跟B都是陣列,存著每一根骨頭的transform
匪夷所思的是這樣依舊有問題,而奇怪的是,並不是每個particle都跑錯路徑

後來我僅僅只做了一行修正:
FTransform{ A } * B -> FTransform{ A * B.ToMatrixWithScale() },結果就對了
(計算結果存在一個FTransform裡,後面其他流程才會使用)
WTFFFFFFFFFFFFFFF

原因可能有二
1. FTransform(const& FMatrix)建構子的問題,我看了一下source code,並不只是單純的轉移數值而已,任何輸入都會被視為一個轉換矩陣,而從中抽取縮放/旋轉/平移等等資訊,是有可能導致數值改變而發生問題的
2. FTransform的乘法運算子還有其他計算,導致這種結果


總而言之,我十分建議任何矩陣運算都在FMatrix上做,最後存成FTransform沒問題,不要在中途轉FTransform

(更新: 詳細的原因這邊有一篇文章有分享,簡單來說用在non-uniform scale的情況上會有問題)
引用網址:http://www.jamesdambrosio.com/TrackBack.php?sn=5382816
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 0 篇留言

我要留言提醒:您尚未登入,請先登入再留言

4喜歡★ltes50414 可決定是否刪除您的留言,請勿發表違反站規文字。

前一篇:轉眼間,面試R星已經是一... 後一篇:Rendering: 再...


face基於日前微軟官方表示 Internet Explorer 不再支援新的網路標準,可能無法使用新的應用程式來呈現網站內容,在瀏覽器支援度及網站安全性的雙重考量下,為了讓巴友們有更好的使用體驗,巴哈姆特即將於 2019年9月2日 停止支援 Internet Explorer 瀏覽器的頁面呈現和功能。
屆時建議您使用下述瀏覽器來瀏覽巴哈姆特:
。Google Chrome(推薦)
。Mozilla Firefox
。Microsoft Edge(Windows10以上的作業系統版本才可使用)

face我們了解您不想看到廣告的心情? 若您願意支持巴哈姆特永續經營,請將 gamer.com.tw 加入廣告阻擋工具的白名單中,謝謝 !【教學】