Mars3D(含Cesium)数据及服务篇:单体小模型转为glTF格式
glTF是用于小場景的三維模型。 Cesium支持包含關鍵幀(key-frame)動畫、骨骼(skinning)動畫 的glTF格式的三維模型,并且支持模型節點(node)的拾取。 glTF是 Khronos Group 定義的一個基于web上的新興三維模型格式行業標準。Khronos Group是WebGL和 COLLADA的背后財團。
#1. 三維模型源數據的設計要求
#1.1 建模設計要求
無論是通過什么工具來設計建模,最終obj等格式即可。設計時需要主要的地方,有以下幾點:
模型單位:三維模型采用米(m)作為單位,模型大小與物體的真實大小要接近,比如車輛的長度在幾米到十幾米長,不要生產成100米、1000米的大小。
模型方向:車輛等具備方向的模型時,車頭朝向南
模型中心點:模型需要將視角效果的中心放在X=0,Y=0,Z=0的原點位置,XY軸方向居中,Z軸方向都放0上面(如下圖所示)。?
材質要求: 使用 Standard 標準材質,材質類型使用 Blinn。程序紋理盡量只使用位圖,有些程序紋理FBX導出時會報錯出問題導致灰色材質(并不是全部的程序紋理)(例:Color Correction),紋理圖片不能再Max中進行裁剪,FBX不支持。?
#紋理圖片
- 紋理圖片必須是jpg,png等web兼容格式,圖片名稱不要有中文。
- 能夠完整反映模型的外觀,精度控制合理,在保證三維模型視覺效果的前提下,減少模型點面數和材質數量,貼圖盡量烘焙整合減少貼圖數量,貼圖分辨率最大不超2048×2048(能小則小,能壓縮就壓縮,PNG圖片可以嘗試用Photoshop導出8位色彩的),做到數據量的精簡。
- 所有的紋理使用同一個頂點數據。可以使用多重紋理把uv的作用最大化,但是所有紋理只能分享同一個紋理坐標。
- 盡量使用紋理合并集( texture atlases 多個小紋理和到一張大紋理上)而不是很多獨立紋理。這樣會使文件下載次數最小化,并且使引擎批量渲染,會提升不少性能。
- 使用mipmaping。這個會提升顯示效果和渲染性能,尤其是對大的紋理合并集 ,否則會產生很多內存碎片( poor memory coherence)。
- 如果貼圖在cesium里不透明,有可能是blend屬性沒有開啟造成的,修改修改模型的屬性。
#幾何體
- 不要包含任何比不需要的頂點元素。雖然導出Collada dae會增大一點點,但是對glTF確增大了很多。因為glTF不支持頂點屬性的索引( per-attribute indices),所有的頂點屬性都是和頂點個數一致。
- 盡量減少節點(node)和 三角網(mesh)的個數。通常一個大的三角網渲染效率要比很多個小的三角網效率高。
- 盡量把模型身上的修改器塌陷掉,特別是UVW展開與自動展開UVs,如不塌陷掉在后期轉換中處理后預覽時可能會看到雙重模型。
#1.1 交付物數據及格式要求
#如果交付提供max原始文件【建議】
如果是max文件,注意同時發送所有貼圖材質。可以在max里重新指定貼圖路徑,選中所有的貼圖后,把路徑更改為當前機器上的貼圖所在位置路徑。?
#如果交付物是提供obj格式文件
按下面參數設置步驟操作導出數據即可,同樣注意別丟失材質貼圖文件。?
#2. 單體小模型轉為glTF格式
轉換工具:?obj轉gltf?fbx轉glTF?dae轉gltf?gltf轉glb?max導出gltf插件
下面介紹其中2種比較常用的工具:
#2.1 使用obj2gltf工具
請確認處理機器安裝有Node環境,如果沒有請下載安裝?Node下載地址
obj2gltf工具?主要是將obj數據轉換成gltf2.0格式數據,如果您是其它格式數據可以通過3dmax軟件另存導出obj格式數據。
#命令行支持的參數:
| -h,?--help | 顯示幫助 | 否 | |
| -i,?--input | obj文件的路徑。 | ? 必須 | |
| -o,?--output | 轉換后的glTF或glb文件的路徑。 | 否 | |
| -b,?--binary | 保存為二進制glTF (.glb)。 | 否 | false |
| -s,?--separate | 寫出單獨的緩沖區和紋理,而不是將它們嵌入到glTF文件中。 | 否 | false |
| -t,?--separateTextures | 只寫出單獨的紋理。 | 否 | false |
| --checkTransparency | 通過查看每個像素的alpha通道來做一個更詳盡的紋理透明度檢查。默認情況下,紋理是不透明的。 | 否 | false |
| --secure | 防止轉換器讀取輸入obj目錄之外的紋理或mtl文件。 | 否 | false |
| --packOcclusion | 在金屬粗糙紋理的紅色通道中填充遮擋紋理。 | 否 | false |
| --metallicRoughness | mtl文件中的值已經是金屬粗糙度PBR值,不應該應用轉換步驟。金屬存儲在Ks和map_Ks槽中,粗糙度存儲在Ns和map_Ns槽中。 | 否 | false |
| --specularGlossiness | Tmtl文件中的值已經是鏡面光澤度PBR值,不應該應用轉換步驟。鏡面光澤度存儲在k和map_Ks槽中,光澤度存儲在n和map_Ns槽中。glTF將被保存為khr_materials_pbrspeculargloss擴展名。 | 否 | false |
| --unlit | glTF將以KHR_materials_unlit擴展名保存。 | 否 | false |
| --metallicRoughnessOcclusionTexture | 到金屬粗糙遮擋紋理的路徑,它應該覆蓋.mtl文件中的紋理,其中遮擋存儲在紅色通道中,粗糙存儲在綠色通道中,金屬存儲在藍色通道中。模型將保存為pbrMetallicRoughness材質。在.mtl不存在或沒有設置為使用PBR材料的工作流中,這通常是很方便的。適用于單一材料的模型。 | 否 | |
| --specularGlossinessTexture | 高光光澤度紋理的路徑應該覆蓋。mtl文件中的紋理,高光顏色存儲在紅色、綠色和藍色通道中,高光光澤度存儲在alpha通道中。使用khr_materials_pbrspeculargloss擴展,模型將和材質一起保存。 | 否 | |
| --occlusionTexture | 遮擋紋理的路徑,它應該覆蓋.mtl文件中的紋理。 | 否 | |
| --normalTexture | 普通紋理的路徑,它應該覆蓋.mtl文件中的紋理。 | 否 | |
| --baseColorTexture | baseColor/diffuse紋理的路徑,它應該覆蓋.mtl文件中的紋理。 | 否 | |
| --emissiveTexture | 應該覆蓋.mtl文件中的紋理的發射紋理的路徑。 | 否 | |
| --alphaTexture | alpha紋理的路徑,應該覆蓋。mtl文件中的紋理。 | 否 |
#2.2 dae轉gltf轉換工具
下載COLLADA2GLTF工具?下載最新工具包。
進入下載包的目錄,啟動命令行工具,輸入命令:?COLLADA2GLTF [.exe] [-i輸入] [ -o輸出] [選項]
#命令行支持的參數:
| -i, --input | 必須 ? | 輸入COLLADA文件的路徑 | |
| -o, --output | output/${input}.gltf | 否 | 輸出glTF文件的路徑 |
| --basepath | 輸入路徑的父路徑 | 否 | 使用此作為引用路徑解析外部uri |
| -s, --separate | false | 否 | 輸出單獨的二進制緩沖區,著色器和紋理 |
| -t, --separateTextures | false | 否 | 分別輸出紋理 |
| -b, --binary | false | 否 | 輸出二進制glTF(.glb) |
| -m, --materialsCommon | false | 否 | 使用KHR_materials_common擴展名輸出材料 |
| -v, --version | 否 | 輸出glTF版本(例如:“1.0”、“2.0”) | |
| -d, --dracoCompression | false | 否 | Output meshes using Draco compression extension |
| --qp | 否 | Quantization bits used for position attributes in Draco compression extension | |
| --qn | 否 | Quantization bits used for normal attributes in Draco compression extension | |
| --qt | 否 | Quantization bits used for texcoord attributes in Draco compression extension | |
| --qc | 否 | Quantization bits used for color attributes in Draco compression extension | |
| --qj | 否 | Quantization bits used for joint indice and weight attributes in Draco compression extension | |
| --metallicRoughnessTextures | 否 | Paths to images to use as the PBR metallicRoughness textures | |
| --specularGlossiness | false | 否 | output PBR materials with the KHR_materials_pbrSpecularGlossiness extension |
| --lockOcclusionMetallicRoughness | false | 否 | Set?metallicRoughnessTexture?to be the same as the?occlusionTexture?in materials where an ambient texture is defined |
| --doubleSided | false | 否 | Force all materials to be double sided. When this value is true, back-face culling is disabled and double sided lighting is enabled |
| --preserveUnusedSemantics | false | 否 | Don't optimize out primitive semantics and their data, even if they aren't used. |
#3. 處理操作流程完整示例
#3.1 導出obj格式
下面是以3ds Max軟件為例,導出為obj格式;
#3.1.1 打開模型并確認模型位置
確認或調整模型中心點位置,如圖中所指,需要將模型處于兩線交叉口,繪制時處于中心位置;
偏移量會導致模型繪制之后出現偏差;
#3.1.2 導出obj文件
通過3dmax導出文件,根據下圖所指引進行導出;?
轉換后的模型最好放在obj2gltf工具目錄的data文件夾下
#3.2 obj格式轉換gltf
下面是以obj2gltf工具為例,轉換為gltf文件,轉換前確保已經按上面步驟安裝好obj2gltf;
- 打開本地的obj2gltf-master文件夾,
- 執行數據轉換,命令行如下圖:
- 轉換成功后的gltf文件如下:
轉換成功之后將.gltf文件放在項目中,
或者放在獨立站點服務,可以參考發布三維數據服務。
#6.3 在平臺中加載gltf
可以在Gltf模型編輯頁面?進行驗證,是否成功轉換,加載成功效果如下圖:
總結
以上是生活随笔為你收集整理的Mars3D(含Cesium)数据及服务篇:单体小模型转为glTF格式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基金 、社保和QFII等机构的重仓股排名
- 下一篇: 近似概率编程文献综述