我所遭遇過的中介軟體 3D MAX SDK

2021-09-06 13:44:24 字數 2486 閱讀 7466

搞圖形的人都知道3d max,而3d max sdk就是在該軟體基礎上的一套軟體開發包.至於該不該將3d max sdk歸納為中介軟體,不要在意這細節了,反正我覺得sdk和中

間件就差不多是乙個東西.實際上我看網上有些文章將中介軟體與外掛程式混為一談.在我看來,中介軟體是用於做軟體開發的,外掛程式則是已經開發好的軟體產品.對於外掛程式我

們經常聽到的是瀏覽器外掛程式,ocx外掛程式.遊戲外掛程式也屬於外掛程式的一種.外掛程式嵌入到另外的執行程式中,或擴充套件其功能,或篡改其功能,或進行惡意破壞.一般情況下,外掛程式

並不好寫,它需要其宿主程式提供一套介面支援.例如我寫的軟體:whyengine遊戲合集就有點外掛程式的思想.

扯了些外掛程式,貌似有點跑題了.其實我使用3d max sdk所做的事件就是寫max匯出外掛程式.max匯出外掛程式只是其外掛程式的一種型別,有匯出也就會有匯入外掛程式.我感覺很多max

自身的功能也是用外掛程式寫的.3d max sdk是一套博大精深的開發包.我雖然搞過很長時間的max匯出外掛程式,但卻不敢說自己熟悉max sdk,甚至不敢說了解.只要看過maxsdk的

文件就會發現,這東西是個碩大的坑.我之所以將max sdk放到"我所遭遇過的中介軟體"這個系列文章的最後,又之所以遲遲沒有寫它,就是因為這個原因.

使用中介軟體是件苦逼的事情,寫外掛程式也是件苦逼的事情,那麼最苦逼的事情莫過於使用max sdk寫max外掛程式了.你想:使用中介軟體是軟體開發的底層一頭被堵住了,外掛程式

是軟體執行的一頭被堵住了,那麼使用max sdk寫max外掛程式絕對是件兩頭堵的事情.寫的時侯總是處處受限,有數不盡的潛規則要注意,有數不盡的坑要去躲避,總會有

莫名其妙又難以除錯的bug出現.有沒有比寫max外掛程式更苦逼的事情?有,是維護一套已經開發好的,架構十分混亂的max外掛程式.這就是我剛入行時幹的事情.

話說這套max匯出外掛程式的歷史可以追溯到十年前,期間有若干個人接手.給我的感覺是每當來了新人之後,就將它轉交給新人去打理,當新人上手後,就迫不急待地交給

更新的人去打理.而我運氣不太好,前前後後維護了它兩年多.這套**給我的感覺就是,維護性極差,每次要修改功能,新增功能什麼的,都非常費事.就連查詢乙個具

體功能的**都要找很久.在我維護的期間經歷了無數次的bug修改,無數次的功能新增,無數次與美術的扯皮.期間也無數次的想將其完全重構一遍,但始終沒能實現

.2023年的時候,重寫引擎特效模組,於是也順代著新寫了乙個特效匯出的max外掛程式,也算是給自己乙個交待.這個特效匯出的max外掛程式是個很全面的東西,包括mesh模型匯出,骨骼動畫,材

質動畫,bilboard,刀光,拖尾,帖地.

與max sdk相應的還有一套max指令碼系統.給我的感覺是max sdk能做的事情,max指令碼全能做.同樣可以使用max指令碼寫max匯出外掛程式.有些事情使用max指令碼更合適,比如

寫一套檔案批量匯出的邏輯,還有max指令碼的屬性是可以儲存到.max檔案中的.當模型後在匯出時需要設定一些選項,在沒有使用max指令碼之前,美術人員每次匯出時都

需要設定一遍匯出配置,而使用了max指令碼便可以將這些配置儲存到max檔案中.

最後寫點對大家有用的東西:

(1)max外掛程式的介面不能使用:

#include

而是使用:

#include

也就是對話方塊物件的類定義為: class cdlgcolorset : public cdialogimpl

而不是: class cdlgcolorset : public cdialog.

至於為什麼,我也不知道,我寫的mfc的程式也不多,總之就當它是龜腚吧.

(2)max中的資料組成為node的樹形結構,遍歷其資料元素時,從根結點開始,寫個遞迴一層層的處理.

而max提供給使用者兩套訪問其資料的介面,一套是早期的,另一套是以igame開頭的.我印象中兩套介面返回的資料可能會有不同,具體什麼情況記不清了.我記得max8

版本中igame的返回切線副法線資料的介面是錯的,之後的版本就好了.

(3)max骨骼動作建模.從max中拖bip角色其骨骼的父子關係有幾根是錯的.如果動作檔案中不記錄每一幀的骨骼位移資料,則會出現錯誤.比如兩個肩膀的父骨骼應該是胸,而

max卻給的是脖子.腰部的父子關係也不對,這個不容易發現.這個問題的解決辦法是寫乙個簡單的max指令碼,重設這幾根骨骼的父子關係.當然也可以在匯出外掛程式中用

程式寫死.

(4)max中為z軸向上的右手座標系,而通常遊戲中使用y軸向上的左手座標系,所以在匯出檔案要做座標系變換.

max的匯出的骨骼其本地座標系是左手還是右手?這個讓我覺得很混亂,因為我發現匯出的骨骼有左手座標系的,也有右手座標系的.因為這個問題不影響其對蒙皮的渲染,所

以我也沒去深究.

(5)從igame介面獲得乙個mesh頂點的法線,切線,副法線.這三個是正交的嗎?不是,我的測試發現,只有切線,副法線是正交的.一直覺得可以將頂點資料的副法線刪去,但

始終沒辦法刪除.

(6)骨骼動作幀的匯出,呼叫max的介面,是做取樣,通常每秒取樣30幀.遊戲中對取樣出的動作通常做線性插值處理,而在max中動作的變換為非線性的,所有

總有人說遊戲中的動作沒有max的有力度,反正我是看不出來.這是個很難搞的問題,曾經糾結過很久,最後也不了了之.

我所遭遇過的中介軟體 3D MAX SDK

搞圖形的人都知道3d max,而3d max sdk就是在該軟體基礎上的一套軟體開發包.至於該不該將3d max sdk歸納為中介軟體,不要在意這細節了,反正我覺得sdk和中 間件就差不多是乙個東西.實際上我看網上有些文章將中介軟體與外掛程式混為一談.在我看來,中介軟體是用於做軟體開發的,外掛程式則...

我所遭遇過的遊戲中介軟體 FlashOcx

在專案中,一開始使用flashocx做ui介面,後來買了scaleform,就成了兩種並存的情況.再後來的兩年半時間裡,有若干次的想把所有flashocx的介面翻成scaleform的.這個翻介面的工作不是我做,本來我認為不是什麼難事,畢竟二者的資源都是flash的swf檔案.但翻改起來,工作量比想...

我所遭遇過的遊戲中介軟體 HumanIK

我所遭遇過的遊戲中介軟體 humanik 憑心而論,humanik是我接觸的autodesk的三款中介軟體中最讓我省心的,另外兩款是scaleform和kynapse.省心的原因是它的複雜程度比其他兩款小很多,更為重要的是,我做的專案壓根沒用使用到humanik.所以我對humanik的研究只是停留...