日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

游戏中的整容术! 《Honey Select》捏人系统剖析

發布時間:2024/8/26 windows 94 豆豆
生活随笔 收集整理的這篇文章主要介紹了 游戏中的整容术! 《Honey Select》捏人系统剖析 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.




關于游戲中的捏人系統,很少有資料提到怎么做,印象中只有《天涯明月刀》分享過.前段時間關注了個VR資源分享的公眾號,經常推送HS的捏人作品,所以才引發了我的好奇心,決定一探究竟。
?


HS之所以能夠有這么強的定制能力,是因為第三方MOD工具的存在,玩家可以自由導入導出游戲中的資源,這也就為我們分析游戲的實現機制開了個后門。
?


上圖中我們可以看到,臉部有很多骨骼,嘗試把模型導出來,對其進行分析:
?


針對鼻子上的骨骼,進行平移/旋轉/縮放,嗯,看起來捏臉就是這么回事了。
?


比如鼻翼骨骼影響這點頂點,那我們對其調節就可以產生這樣的效果:
?


再比如下巴
?

?


那骨骼都用來捏臉了,面部的表情動畫怎么辦呢?
?

?


對模型資源的規格進行分析,發現存在大量的morph動畫.也就是說,HS中的的頭部骨骼,全部是用于捏臉的,表情動畫使用MorphTargets驅動。

那身體總不能也用MorphTargets做動作吧?
?


對其模型資源進行析,發現MorphTargets個數為0,而骨骼數超越以往的經驗值。
?


查看其蒙皮信息可以發現,所有影響頂點的骨骼名字全部帶有"_s_"字樣,其父骨骼都是不帶"_s_"的同名骨骼.也就是說,HS的身體骨架中,父骨骼負責動畫,子骨骼負責蒙皮。

游戲中的女角色臉部有67項調節參數:
?


女角色身體共有34項調節參數,其中2項為物理參數,跟骨骼無關
?


我們來看看這些滑桿能不能跟骨骼一一對應上:
?


對于"鼻子整體上下"來說,的確是只需要調節NoseBase的Y值就可以了,我們需要做的就是根據滑桿在最大值和最小值之間進行線性插值。
?


對于"眉毛角度Z軸"的調節,這時只調節一根骨骼就不對了,需要左右對稱著來.也就是說,有一些調節項需要同時調節左右對稱的兩根骨骼。
?


對于"眉毛左右位置",如果在直線上兩個端點之間進行插值,很容易就跟面部三角形穿插了.所以這里的插值路徑只有最大值和最小值已經滿足不了需求了,而是需要按照曲線進行位置插值,并且配合旋轉插值貼合面部的法線方向.也就是說,一個調節項的插值可能是基于曲線(或多個關鍵幀),而且可以同時影響骨骼Transform的多個分量。
?


眼睛的大小調節是最復雜的,一共影響6根骨骼.也就是說,一個調節項是可以對應多根骨骼的。

我們總結一下,臉型(或體型)調整原理就是:
?

  • 本質上修改的是骨骼的Local Transform(Translation,Rotation,Scale)
  • 一次只修改Local Transform的某個分量(或多個):Tx/Ty/Tz/Rx/Ry/Rz/Sx/Sy/Sz
  • 使用滑桿在預設的調節范圍之間進行插值
  • 插值不一定是線性的,可能是有多個關鍵幀
  • 每個調節項可能對應不只一根骨骼



以此為指導思想,繼續結合ILSpy對HS進行逆向分析,終于找到了骨骼的配置數據。

首先是骨骼分類表:
?

  • 第1列,類別編號:每個編號代表UI上的一根滑桿.重復出現的編號代表影響多根骨骼
  • 第2列,骨骼名
  • 第3~11列,Transform Mask:代表調節Bone Local Transform的哪些分量,比如000000100代表只影響Sx,即只縮放X軸



其次是骨骼調節關鍵幀表:
?

  • 第1列:骨骼名
  • 第2~N列:關鍵幀數據,每一幀是9個float,正好是一個Transform,總共25幀。



可以說,I社的捏人系統,最核心的就是這兩張表格的數據了,是他們這么多年捏人游戲的經驗積累.也正是這個原因,他們舍不得每次新做一套骨架就重新調一版數據,結果就是,游戲中的骨架跟表格對不上:
?

?


游戲中的骨架,不管是數量也好還是命名也好,都跟表格對不上.那這之間是怎么映射的呢?
?


原來是硬編碼的,真讓人崩潰...好了,那整個捏人的核心邏輯就搞清楚了:

1.根據骨骼分類表生成所有的調節滑桿,并從預置的文件加載滑桿的默認值集合

2.如果滑桿值變了,查分類表得到骨骼名(可能多個),再根據骨骼名查關鍵幀表得到關鍵幀集合,根據滑桿值插值出Local Transform

3.使用代碼邏輯把老的Transform數據轉換成新骨架能用的骨骼Transform

4.把骨骼Transform全部更新到模型上

嘗試在UE4中使用PoseableMesh復刻了一下,效果還不錯:
?


PoseableMesh的問題是不兼容動畫,所以如果要修改SkeletalMesh的BoneTransforms話,二手QQ轉讓平臺就只能在AnimationBlueprint里實現一個自定義的AnimNode了:


配上動畫,貼上材質,效果就好多了:
?

(隨便找了件衣服遮一遮)


最后,順便提一下捏人之外的東西,因為對于角色的定制來說,捏人起的作用還不如換一件衣服.
?


對衣服的資源進行分析可以發現兩點值得學習的地方:
?

  • 每件衣服都配有一個剔除掉被遮住的三角形的裸模,一方面可以提升繪制性能,一方面能避免衣服和皮膚兩層三角形的穿插
  • 裙擺/披風/長衫等都是共用同樣的8條物理骨骼,算是比較傳統的布料模擬做法


?


掛件差不多都是StaticMesh,最多帶有物理骨骼,直接掛在骨架掛點上,可以跟隨體型一起進行變換.
?


眼睛這里的Mesh有點擴張了,分了很多層,甚至有3個Mesh用來做眼淚的表現.材質多了,可以更換的樣式自然也就多了:
?


頭發分了前中后三部分,每一部分可以單獨隱藏或者替換,配合大量的模型資源,真正可以配出各種各樣的發型,更何況還有MOD的支持.

其它的類似皮膚/皺紋/眼影/腮紅/唇彩/紋身/痣/曬痕/指甲等,大多數都是換貼圖,沒有多少技術上的復雜度,但卻是能夠大大提升個性的功能:
?


通過GPA分析發現,這些疊加的圖層在運行時并沒有獨立的貼圖:
?


所以并沒有采用Decal的方式繪制,而是跟皮膚貼圖混合到了一起:
?

總結

以上是生活随笔為你收集整理的游戏中的整容术! 《Honey Select》捏人系统剖析的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。