截取遊戲3D模型並導入Mathematica

截取遊戲3D模型並導入Mathematica

來自專欄 Mathematica 還能這樣玩13 人贊了文章


Background

首先Mathematica可以導入3維模型,並且進行一些簡單貼圖效果製作,還可以修改與組合再生成三維列印的模型。

其次,在遊戲中截取一些模型是滿足個性化需求的一種手段。 比如你自己喜歡的或擁有的某個遊戲的某個角色在指定的姿態。

本文介紹下截取模型這個事情對於普通大眾的一個現狀,並給出一個把截取的模型導入Mathematica並貼圖的一個示例。

示例

因為後面扯了點歷史+文字,因此這裡先放兩個圖片,讓大家一看就明白本文在幹了個什麼事情。

人臉貼圖

把貼圖在Mathematica中成功應用,一張3D人臉

遊戲與模型的一些基本知識


當前2018年,畫質最好的國產武俠遊戲有幾款:劍網3,天涯明月刀,逆水寒。 劍網3有一個動畫編輯器[前身@劍網3視頻插件],天涯明月刀也在內測一個動畫編輯器。

常見截取工具

三款常見的截取工具,3DReaperDX、GA[Game Assassin]、NinjaRipper

常見玩家作品形態

MMD=截取一個遊戲人物,跳個舞蹈,做個MV是常見作品。 。。。

歷史

3DReaperDX是以前的一個巔峰,他支持把截取的模型直接導出為obj文件[文本]啊,可以直接用Mathematica解析模型格式並正確貼圖,可惜停更了,只支持到了DirectX 9.0,一代神器。3DReaperDX+動畫編輯器[視頻插件]的結合達到了一個遊戲資源截取的巔峰,此後再無如此方便的工具。動畫編輯器可以任意載入你想要的資源和角色,然後按不同的類型顯示或隱藏然後截取出來,或者單獨打開,並且可以批量截取。。。[把100個想要的角色放到同一個地圖上,然後截取,也就是說如果我想用Mathematica做一個萬劍歸宗並使用所有的劍和貼圖,我只要花幾分種截取一次即可獲得所有素材]

GA和NinjaRipper就可惜了,截取出來的模型不是文本格式,並且截取也不方便,鬼知道你截取到的模型是什麼。比如昨天我試驗了一下NinjaRipper,終於還是在遊戲里打開成功截取了一張臉或一棵樹,但是這個體驗跟我以前使用3DReaperDX隨便就把所有場景地圖截取下來的體驗還是差遠了。

因此,三個軟體均提供了一些官方插件,比如3dsmax腳本來進行解析和導入,有時並不能批量操作。如果你想自定義,你得去改3dsmax腳本,你還得學那個。 而如果是文本格式的話,我們只要簡單學一下一些相關背景知識,花一天時間就能自己寫一個腳本,導入Mathematica玩起來了,重點是學習成本如果太高,手工操作成本太高的話,我們就不會去玩或棄坑。

GA也是個比較老的工具了,NinjaRipper最新還有更新的,支持到了DirectX 11.0,可惜UV不支持,沒法很方便地貼圖。

Texture示例


核心基礎知識

Mathematica里的3D模型主要是Polygon表示,並且主要是三角形,並且上面的貼圖和平面貼圖上的對應的三角形能對應上,貼圖就能正確顯示。 案例的代碼在GitHub上可以下載,這裡展示的部分代碼踢除了一些數據處理的過程。

scaleTransform = {Xscale = 1.36030, Yscale = 0.41423, Zscale = 1.0};三角形vertexListFinal = Map[scaleTransform*# &, 三角形vertexList, {4}];Graphics3D[Polygon@三角形vertexListFinal[[1, 1]], ViewPoint -> Bottom]

Graphics3D[Map[Polygon, 三角形vertexListFinal, {2}]]

校正後的模型List = Table[Graphics3D[g = Table[{EdgeForm[], Texture[貼圖集[[parts]]], Polygon[三角形vertexListFinal[[statesNumber, parts]], VertexTextureCoordinates -> 三角形材質坐標List[[statesNumber]][[parts]]]}, {parts, bodyPartsNumber}], PlotRange -> All, Boxed -> False, ImageSize -> 500, SphericalRegion -> True, Lighting -> {{"Ambient", White}}, ViewPoint -> Bottom], {statesNumber, fileCount}]

FashionTexture

貼圖集 = {face}~Join~(ExampleData /@ RandomChoice[ExampleData["ColorTexture"], 10]);模型TextureList = Table[Graphics3D[g = Table[{EdgeForm[], Texture[貼圖集[[parts]]], Polygon[三角形vertexListFinal[[statesNumber, parts]], VertexTextureCoordinates -> 三角形材質坐標List[[statesNumber]][[parts]]]}, {parts, bodyPartsNumber}], PlotRange -> All, Boxed -> False, ImageSize -> 500, SphericalRegion -> True, Lighting -> {{"Ambient", White}}, ViewPoint -> Bottom], {statesNumber, fileCount}]

總結


你能做什麼事情?

你目前至少可以用NinjaRipper截取一張臉或一個或多個模型,並成功導入Mathematica。

必備工具:遊戲+NinjiaRipper+3dsMax+Mathematica

3DReaperDX支持的遊戲你可以使用我的腳本去嘗試一下模型截取與導入。

必備工具:遊戲+3DReaperDX+Mathematica

如果你有一個模型+貼圖+貼圖映射數據,你可以直接導入Mathematica。

其他

其他可以玩的還是很多的,比如把你自己的人臉映射到3維模型上去。

GitHub?

github.com


FashionGallery

上面第二張圖是2018款遊戲的截取模型,可以看到人臉的面數更多了。

壁紙


推薦閱讀:

PBRT-E2.7-變換(Transformations)
聊聊Unity2018的LWRP和混合光照
pbrt學習(二):攝像機建模
聊聊2018.2的Scriptable Build流水線
針對 3D 計算機視覺的簡介

TAG:WolframMathematica | 計算機圖形學 | 遊戲 |