(第一次在文章裡讓看板娘登場,看這種風格如何)
C.S.Lab官網的看板娘介紹,其實就是我的自製引擎擬人化,在進度文就理所當然讓她們登場。
艾莉兒:大家好!這是我們第一次在文章裡演出,請各位多指教。
艾莉兒:那開始吧。主人想在下一個遊戲做一個改變:使用3D模型,我們必須追加3D的能力。
所以主人這幾天一直在幫我們升級,這次主人分享他的開發經過。
1.載入模型檔檔案格式用PMD(MikuMikuDance的模型檔),它的構造幾乎就是按照Direct3D和OpenGL函式的需求,只要很少的轉換。
參考資料:
PMD檔案格式先只讀取頂點、index和材質,骨骼和IK沒有使用,現在先不做動態。
艾莉兒:先請Python姊姊解析裡面的資料。艾莉兒:Python姊姊的報告來了
model name ちび霊夢GL ちび霊夢 Ver.G_L …… vertexNum 20402 vertex 0.00 10.56 0.74 normal 0.01 0.70 -0.72 texture 0.54 0.14 vertex 0.07 10.55 0.75 normal 0.48 0.65 -0.59 texture 0.55 0.14 vertex 0.24 10.44 1.06 normal 0.99 -0.02 -0.11 texture 0.62 0.12 …… triangleNum 31460 triangle 13 1 9 triangle 12 13 9 triangle 15 0 1 …… material 25 diffuse 0.80 0.80 0.80 1.00 specular 1.00 0.10 0.10 0.10 ambient 0.50 0.50 0.50 toonNumber 6 edgeFlag 1 triangles 1034 fileName r_hair.bmp diffuse 0.80 0.80 0.80 1.00 specular 6.00 0.10 0.10 0.10 ambient 0.50 0.50 0.50 toonNumber 6 edgeFlag 1 triangles 90 fileName r_cloth.bmp …… |
艾莉兒:對人類來說很難懂吧,可是主人說要先了解構造才能繼續做,這樣也有個工具可以看模型的底細。
艾莉兒:再來才開始改造我。(now coding)
弄好了,讀取模型並用printf輸出其中幾個數值看看。
艾莉兒:……(執行中)(顯示資料),主人,這樣對嗎?有錯誤,要改一下。
(now coding)
再試試看。
艾莉兒:……(執行中)(顯示資料),現在呢?好,OK了。
2.坐標轉換和shader之前Cyber Sprite這個2D遊戲就用過矩陣和shader,對這方面並不陌生,但是寫3D程式還是第一次。
把書上和網路上看來的公式寫進去,「投影矩陣[2][2]=(zFar+zNear)/(zNear-zFar)」、「diffuse=法線與光源位置內積」等等的。
打光跳過per-vertex lighting,直接用per-pixel lighting。
艾莉兒,功能追加好了,試試看吧
艾莉兒:好,拿出剛剛載入的模型,看我的!艾莉兒:總算秀得出東西了,可是我還不會用貼圖,只能先秀我算出的打光強度。中間卡在一個地方,用OpenGL的glFrustum()算投影矩陣畫面會一片黑,卡了一陣子才發現glFrustum把Z>0視為鏡頭背後,Z<0才在鏡頭前面(即右手坐標系),而我把模型位置Z坐標設為正值。因為想配合PMD的左手坐標系,只能自己算矩陣而不能用OpenGL的函式。
艾莉兒:還有一次開啟depth test畫面也變一片黑,結果是沒幫我配置Z buffer。嗯,是啊,很多細節是慢慢試才弄對。
3.貼圖首先做個準備,這兩個模型原本的貼圖是BMP和TGA,但艾莉兒能用的是PNG和JPG,所以要把圖檔轉成PNG,並且修改模型檔裡的貼圖檔名(再寫一個Python程式)。
艾莉兒:讀PNG以前就做過,沒問題,幫我改一下shader就好了。艾莉兒:看起來比較完整了,可是主人還想改一個地方。4.修改材質這一步用PMXEditor做,修改一些材質的ambient顏色。
艾莉兒:對了,Patchouli的袖子為什麼凹下一塊?我看看……,有一個頂點的法線有錯,改一下。
我寫了兩種打光演算法,來試試看。
艾莉兒:好的。艾莉兒:顏色好看多了,不是灰壓壓的。這來自我畫圖的經驗,暗處不能單純降低明度,彩度和色相也要調整,這裡把皮膚和衣服的ambient設成偏紅,頭髮也有調整,改變材質在暗處的顏色。
艾莉兒:原來畫圖技術也能用在寫程式。測試用的模型檔
靈夢Patchouli分別是3萬多和5萬多面,其實不適合用在遊戲裡。
艾莉兒:對呀,處理這麼多面,這麼多材質的模型好累。
艾莉兒:新招完成啦,不管什麼模型矩陣打光儘管來吧!
艾莉兒:咦,你問鈷寶哪裡去了?沒錯,這次先做引擎本體,也就是我的部分。
主人接著要研究輔助工具,到時候就換鈷寶表現了。鈷寶:嗯,再來就輪到我了。下一步是研究編輯模型的軟體,有需要的話自己做輔助工具,把整個生產線架出來。