創作內容

9 GP

【製作進度】3D技術研究1-引擎本體

作者:Shark│2015-02-10 18:30:44│贊助:18│人氣:528
(第一次在文章裡讓看板娘登場,看這種風格如何)
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萬多面,其實不適合用在遊戲裡。
艾莉兒:對呀,處理這麼多面,這麼多材質的模型好累。



艾莉兒:新招完成啦,不管什麼模型矩陣打光儘管來吧!
艾莉兒:咦,你問鈷寶哪裡去了?沒錯,這次先做引擎本體,也就是我的部分。
  主人接著要研究輔助工具,到時候就換鈷寶表現了。

鈷寶:嗯,再來就輪到我了。

下一步是研究編輯模型的軟體,有需要的話自己做輔助工具,把整個生產線架出來。
引用網址:https://home.gamer.com.tw/TrackBack.php?sn=2743655
All rights reserved. 版權所有,保留一切權利

相關創作

留言共 2 篇留言

HsiN
抱歉
冒味問個較低能的問題
python在我的印象中一直是網頁後台語言之一
它也能拿來寫desktop程式 甚至是遊戲引擎?

02-10 19:18

Shark
可以,很多人寫好相關的函式庫了
腳本語言一般都能用C/C++寫擴充模組,只要寫得出擴充就做得到

我這裡引擎本體是C++寫的,Python用在輔助工具,例如檔案格式轉換02-10 20:50
學姊不加老o小汝
好可愛喔XD

02-10 21:40

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

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

前一篇:FF25遊戲攤位一覽... 後一篇:【製作進度】3D技術研究...


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