Unity3D所使用的第三方工具


前言

最近在研究Unity3D的結構和原理。關於Unity3D怎么用之類的教程在網上一找一大堆,想看教程之類的就不用看這篇文章了。我想做的是從使用Unity3D所看到的表象(表),摸透其設計原則和組織結構(里)。到現在以來做了不少工作了,現在理一下思路,將所分析到的東西和大家分享一下。這是第一篇,主要說明一下Unity3D所使用的第三方工具

一、環境

Unity4.6.0f3(這里提一下,4.6版本的最主要的新特色是新GUI系統,這部分Unity已開源)
Win7 64bit系統(我想其他系統應該是差不多的)

二、安裝目錄結構

首先,列出Unity4.6的安裝目錄層次和一些值得注意的文件(像一些臨時文件、log就不列出了),並做上標注。現在我還一點都不明白的就不標注了,存疑的我也會標注好,如果大家有知道的或者我哪里說錯了,請一定在評論中指出!

Editor[編輯器]

│  │  beast32.dll[Autodesk Beast]
│  │  beast64.dll[Autodesk Beast]
│  │  cairo.dll[Cairo繪圖庫]
│  │  CFLite.dll[Webkit的第三方擴展,OpenCFLite是一種便攜式版本的蘋果公司的開源CoreFoundation框架]
│  │  comerr32.dll[?Common error handler for mit kerberos v5 / gss distribution,Kerberos 5協議的免費實現的常見錯誤處理庫]
│  │  FreeImage.dll[FreeImage圖像處理庫]
│  │  gssapi32.dll[Generic Security Service API,訪問安全服務的API,Kerberos 5協議相關]
│  │  iconv.dll[GNU 字符編碼轉換庫]
│  │  JavaScriptCore.dll[?JS處理庫,應該是WebKit的一部分]
│  │  k5sprt32.dll[Kerberos 5協議相關]
│  │  krb5_32.dll[Kerberos 5協議庫]
│  │  libcurl.dll[客戶端URL傳輸庫,可實現很多網絡層協議]
│  │  libeay32.dll[OpenSSL相關庫]
│  │  libiconv2.dll[GNU 字符編碼轉換庫]
│  │  libintl3.dll[GNU library for native language support]
│  │  libmp3lame.dll[LAME MP3編碼庫]
│  │  libpq.dll[PostgreSQL訪問庫]
│  │  libxml2.dll[XML解析庫]
│  │  libxslt.dll[提供XSLT支持,是libxml2的擴展]
│  │  mono.pdb[pdb文件?這不是VS編譯時生成的的符號文件嗎?]
│  │  msvcm80.dll[VC運行庫]
│  │  msvcp80.dll[VC運行庫]
│  │  msvcr71.dll[VC運行庫]
│  │  msvcr80.dll[VC運行庫]
│  │  pthreadVC2.dll[pthread多線程庫]
│  │  sqlite3.dll[SQLite3庫]
│  │  ssleay32.dll[OpenSSL相關庫]
│  │  umbraoptimizer32.dll[藝術渲染中間件Umbra的優化組件]
│  │  umbraoptimizer64.dll[藝術渲染中間件Umbra的優化組件]
│  │  Uninstall.exe[卸載程序]
│  │  Unity.exe[主程序]
│  │  Unity.pdb[安裝目錄里帶着163M的調試用的文件是什么鬼?]
│  │  UnityBugReporter.exe[錯誤報告程序]
│  │  UnityWebPlayer.exe[Unity WebPlayer的安裝程序]
│  │  WebKit.dll[WebKit庫]
│  │  zlib1.dll[zlib庫]
│  ├─CFLite.resources[WebKit的一個第三房庫CFLite的相關資源]

Data[數據]

│  │  ├─BuildTargetTools[生成目標所用的工具]
│  │  │  └─AndroidPlayer[?]
│  │  ├─CGIncludes[CG shader的包含文件,Surface Shader的生成會用到]
│  │  │      AutoLight.cginc[光照相關]
│  │  │      HLSLSupport.cginc[HLSL相關,包含大量的宏定義]
│  │  │      Lighting.cginc[光照相關]
│  │  │      TerrainEngine.cginc[地形相關]
│  │  │      Tessellation.cginc[曲面細分相關]
│  │  │      UnityCG.cginc[一些常用函數(CG版本)]
│  │  │      UnityCG.glslinc[一些常用函數(GLSL版本)]
│  │  │      UnityShaderVariables.cginc[一些Unity內部Constant定義、宏定義]
│  │  ├─Documentation[文檔]
│  │  ├─Managed[?托管的,存放C#編譯的dll]
│  │  ├─Mono[Mono的運行庫]
│  │  ├─MonoBleedingEdge[?最新的Mono庫,這些庫有可能不穩定而導致問題]
│  │  ├─PackageManager[?包管理器,但具體管理的是什么包就不清楚了]
│  │  ├─PlaybackEngines[?引擎文件,可能是構建各個平台上的程序時所用的一些適配用的組件]
│  │  │  ├─androidplayer[安卓]
│  │  │  ├─blackberryplayer[黑莓]
│  │  │  ├─flashsupport[Flash]
│  │  │  ├─iossupport[IOS]
│  │  │  ├─linuxstandalonesupport[Linux]
│  │  │  ├─macstandalonesupport[mac]
│  │  │  ├─metrosupport[Metro]
│  │  │  ├─WebPlayer[?網頁游戲]
│  │  │  ├─windowsstandalonesupport[Windows]
│  │  │  └─wp8support[Windows Phone 8]
│  │  ├─Resources[資源]
│  │  │  ├─Layouts[Unity編輯器的UI Layout]
│  │  │  ├─ScriptTemplates[Sctipt的模板,比如Surface shader、C#腳本,新建shader或腳本中的默認內容]
│  │  │  └─WebPlayerTemplates[?]

Tools[工具]

│  │  │  │  7z.dll[7Zip]
│  │  │  │  7z.exe[7Zip]
│  │  │  │  astcenc.exe[ARM ASTC紋理圖像壓縮/解壓縮工具]
│  │  │  │  auto_quitter.exe[?]
│  │  │  │  binary2text.exe[?]
│  │  │  │  cg.dll[CG核心運行庫]
│  │  │  │  convert.exe[ImageMagick,一種圖像處理軟件,可用於格式轉換]
│  │  │  │  D3Dcompiler_46.dll[HLSL編譯庫]
│  │  │  │  D3Dcompiler_47-x64.dll[HLSL編譯庫]
│  │  │  │  D3Dcompiler_47.dll[HLSL編譯庫]
│  │  │  │  diff.exe[文件比較工具,2個文件間]
│  │  │  │  diff3.exe[文件比較工具,3個文件間]
│  │  │  │  etcpack.exe[壓縮/解壓縮ETC格式的圖像的工具]
│  │  │  │  etcpack2.exe[壓縮/解壓縮ETC1/ETC2格式的圖像的工具]
│  │  │  │  FBXMaxExport.ms[3DSMAX的MaxScript腳本,用於從MAX文件導出FBX文件]
│  │  │  │  FBXMayaExport.mel[Maya的MEL腳本,用於從MB文件導出FBX文件]
│  │  │  │  FBXMayaExport5.mel[Maya的MEL腳本,用於從MB文件導出FBX文件]
│  │  │  │  FBXMayaMain.mel[Maya的MEL腳本,主程序(看內容是對導出插件的版本進行了選擇)]
│  │  │  │  GeometryToolbox.dll[?]
│  │  │  │  ImportFBX.dll[?]
│  │  │  │  ImportFBX.exp[?]
│  │  │  │  ImportFBX.lib[?]
│  │  │  │  lzma.exe[LZMA壓縮/解壓縮工具]
│  │  │  │  ModoToUnity.py[將MODO的lxo文件導出為FBX文件或DAE文件的工具]
│  │  │  │  Mono.Cecil.dll[Mono的Cecil庫]
│  │  │  │  monolinker.exe[Mono CIL Linker]
│  │  │  │  PVRTexTool.exe[PVR格式紋理處理工具]
│  │  │  │  QuicktimeTools.exe[QuickTime視頻處理工具]
│  │  │  │  ShaderFixor.exe[?]
│  │  │  │  umbraoptimizer32.dll[藝術渲染中間件Umbra的優化組件]
│  │  │  │  umbraoptimizer64.dll[藝術渲染中間件Umbra的優化組件]
│  │  │  │  umbraprocess32.exe[?]
│  │  │  │  umbraprocess64.exe[?]
│  │  │  │  Unity-BlenderToFBX.py[將Blender的文件導出為FBX文件或DAE文件的工具]
│  │  │  │  UnityShaderCompiler.exe[?估計是Surface Shader的編譯器]
│  │  │  │  UnusedBytecodeStripper.exe[?]
│  │  │  │  Unwrap.dll[?好像是用來做UV展開的一個庫]
│  │  │  ├─Beast[Autodesk的光照仿真中間件]
│  │  │  ├─SocketPolicyServer[?]
│  │  │  ├─UNITY-C4DToFBXConverter[將Cinema 4D的C4D文件轉換為FBX的工具]
│  │  │  └─VersionControl[版本控制]
│  │  └─UnityExtensions[Unity的擴展]
│  │      └─Unity
│  │          └─GUISystem
│  │              └─4.6.0[新的GUI系統]

其它文件夾

│  ├─JavaScriptCore.resources
│  ├─Standard Packages[一些標准示例]
│  ├─Temp[臨時文件夾,一些轉換FBX時產生的中間文件就在這里面,當然用完即刪]
│  └─WebKit.resources[WebKit的相關資源]
└─MonoDevelop[MonoDevelop IDE]

三、分析

可以看得出來,Unity用了超多的第三方工具!下面就列舉下看看。

就按照出現的順序來說吧。

1. Autodesk Beast

文件:beast32.dll/beast64.dll/thebeast.exe/thebeast-64.exe等

它是什么?

參考: http://gameware.autodesk.com/beast?lang=cn
Autodesk® Beast™ 是一組用於制作游戲中的逼真光照 (Realistic Lighting) 的工具。利用 Beast,開發者可以模擬自然光照效果:實時游戲環境中的色彩反彈 (Color Bounce)、柔和陰影、高動態范圍光照 (High Dynamic Range Lighting) 和移動對象光照。Beast 有助於制作者提高游戲的視覺質量,創造更加引人注目的游戲體驗。

應用

光照圖的生成

2. Cairo

文件:cairo.dll

它是什么?

參考: http://cairographics.org/
Cairo提供了跨平台2D繪圖的支持

應用

2D繪圖,也可能是其他庫的依賴項

3. Webkit

文件:WebKit.resources、JavaScriptCore.dll、WebKit.dll、JavaScriptCore.resources等

它是什么?

參考: http://www.webkit.org/
WebKit是一個開源的瀏覽器引擎

應用

與瀏覽器相關的功能,可能應用於內置的Asset Store、Web player等,也可能是其他庫的依賴項

4. Kerberos 5協議

文件:comerr32.dll、k5sprt32.dll、krb5_32.dll、gssapi32.dll等

它是什么?

參考: http://zh.wikipedia.org/zh/Kerberos
Kerberos協議是一種計算機網絡授權協議,用來在非安全網絡中,對個人通信以安全的手段進行身份認證。

應用

可能用於網絡認證中,比如游戲登錄等(個人猜測,不確定),也可能是其他庫的依賴項

5. FreeImage

文件:FreeImage.dll

它是什么?

參考: http://freeimage.sourceforge.net/
FreeImage是一款免費的、開源的、跨平台的,支持很多種圖像類型的圖像處理庫。

應用

可能用於圖像資源導入,圖像格式轉換,圖像處理(如縮放、修改)中,也可能是其他庫的依賴項

6. gettext(iconv / libiconv2 / libintl3)

文件:iconv.dll、libiconv2.dll、libintl3.dll

它們是什么?

參考: http://gettext.sourceforge.net/ http://www.gnu.org/software/libiconv/ http://www.gnu.org/software/libiconv/
iconv提供了在多種國際編碼格式之間進行文本內碼的轉換的功能;libiconv是iconv的實現;libintl3提供了本地化語言支持

應用

可能用於文本的編碼轉換、本地語言支持(比如說一個游戲的不同語言版本)

6. cURL

文件:libcurl.dll

它是什么?

參考: http://curl.haxx.se/libcurl/
libcurl是一個免費易用的客戶端URL傳輸庫。

應用

基本和應用層網絡相關的一切都可以用libcurl來實現(個人猜測),如FTP、HTTP、SMTP等協議

7. OpenSSL

文件:libeay32.dll、ssleay32.dll

它是什么?

參考: http://www.openssl.org/
OpenSSL是套開放源代碼的軟件函數庫包,實現了SSL與TLS協議。

應用

可能是網絡相關的如Webkit的依賴項

8. LAME

文件:libmp3lame.dll

它是什么?

參考: http://lame.sourceforge.net/
LAME是一個高質量MP3編碼器(LGPL)

應用

可能用於MP3音頻文件的生成,如將錄音輸出為MP3文件,也可能是其他庫的依賴項

9. PostgreSQL

文件:libpq.dll

它是什么?

參考: http://www.postgresql.org/docs/9.4/static/libpq.html
libpq是PostgreSQL的C應用程序接口。libpq是一套允許客戶程序向PostgreSQL服務器服務進程發送查詢並且獲得查詢返回的庫函數。

應用

用於訪問PostgreSQL數據庫

10. XML

文件:libxml2.dll、libxslt.dll

它是什么?

參考: http://xmlsoft.org/
libxml是一個用來解析XML文檔的函數庫;libxslt提供XSLT支持。

應用

用於讀取、導入XML數據,也可能是其他庫的依賴項

11. Pthreads

文件:pthreadVC2.dll

它是什么?

參考: http://zh.wikipedia.org/zh/POSIX%E7%BA%BF%E7%A8%8B
libxml是一個用實現了POSIX線程標准的庫

應用

可能是Unity自身的一些功能采用了多線程時會用到,也可能是其他庫的依賴項

12. SQLite3

文件:sqlite3.dll

它是什么?

參考: http://sqlite.org/
SQLite是一個獨立的、無服務器的、無需配置的transactional SQL數據庫引擎。

應用

可能是Unity自身的一些功能采用了SQLLite時會用到,或者某些游戲機制使用了SQLLite作為數據存儲的手段,也可能是其他庫的依賴項

13. Umbra

文件:umbraoptimizer32.dll、umbraoptimizer64.dll

它是什么?

參考: http://umbra3d.com/ http://www.cnblogs.com/umbra/archive/2012/07/31/2617456.html
Umbra 3提供了一種自動化遮擋裁剪系統。

應用

游戲中的遮擋裁剪

14. zlib

文件:zlib1.dll

它是什么?

參考: http://www.zlib.net/
zlib是提供數據壓縮用的庫。

應用

可能是FreeImage的依賴項,也可能用於其他需要數據壓縮功能的程序或庫中。

15. 7Zip

文件:7z.dll、7z.exe、lzma.exe

它是什么?

參考: http://www.zlib.net/
7-Zip是一款擁有極高壓縮比的開源壓縮軟件。lzma.exe是其LZMA壓縮、解壓縮算法的實現。

應用

用於解壓縮7z壓縮文件,或者壓縮文件為為7z壓縮文件,可能在導入7z格式的文件時使用

16. ARM ASTC紋理

文件:astcenc.exe

它是什么?

參考: http://community.arm.com/thread/3981
astcenc是用於ARM ASTC紋理圖像的壓縮/解壓縮工具。

應用

用於壓縮/解壓縮ARM ASTC紋理圖像,可能用於移動設備的紋理轉換過程

17. CG

文件:cg.dll

它是什么?

參考: https://developer.nvidia.com/cg-toolkit
Cg語言(C for Graphics)是為GPU編程設計的高級着色器語言,由NVIDIA公司開發。cg.dll是CG的運行庫。

應用

用於CG語言的支持,這個比較老了,現在一般都用HLSL或者GLSL了

18. ImageMagick

文件:convert.exe

它是什么?

參考: http://www.imagemagick.org/script/convert.php
ImageMagick是一個用於查看、編輯位圖文件以及進行圖像格式轉換的開放源代碼軟件套裝。convert.exe是其組件,用於轉換圖像文件格式。

應用

用於處理圖像,如格式轉換、縮放等

20. HLSL

文件:D3Dcompiler_46.dll、D3Dcompiler_47-x64.dll、D3Dcompiler_47.dll

它是什么?

參考: https://msdn.microsoft.com/en-us/library/windows/desktop/dd607340.aspx
D3Dcompiler是Direct3D的一個組件,用於編譯HLSL。

應用

用於編譯HLSL

21. diff diff3

文件:diff.exe、diff3.exe

它是什么?

參考: http://en.wikipedia.org/wiki/Diff_utility http://en.wikipedia.org/wiki/Diff3
文件比較工具

應用

用於比較文件,可能用於檢測某Asset文件是否變化,比如腳本文件是否變化,從而決定是否重新編譯它

22. ETC/ETC1/ETC2紋理

文件:etcpack.exe、etcpack2.exe

它是什么?

參考: https://bitbucket.org/wolfpld/etcpak/wiki/Home http://en.wikipedia.org/wiki/Ericsson_Texture_Compression
etcpack是壓縮/解壓縮ETC格式的圖像的工具;etcpack2是壓縮/解壓縮ETC1/ETC2格式的圖像的工具。

應用

用於壓縮/解壓縮ETC/ETC1/ETC2紋理圖像,可能用於移動設備的紋理轉換過程

23. Maxscript腳本 MEL腳本

文件:FBXMaxExport.ms FBXMayaExport.mel FBXMayaExport5.mel FBXMayaMain.mel

它是什么?

參考: MAXScript MEL
FBXMaxExport.ms用於從MAX文件導出FBX文件;FBXMayaExport.mel FBXMayaExport5.mel FBXMayaMain.mel用於從MB文件導出FBX文件。

應用

用於MAX文件、MB文件導入Unity的過程(即轉換為FBX的過程)

24. Python腳本

文件:ModoToUnity.py Unity-BlenderToFBX.py

它是什么?

參考: http://en.wikipedia.org/wiki/Diff_utility
ModoToUnity.py用於將MODO的lxo文件導出為FBX文件或DAE文件的腳本。MODO是一個3D建模軟件;Unity-BlenderToFBX.py是將Blender的文件導出為FBX文件或DAE文件的腳本

應用

用於將MODO的lxo文件、Blender的3D文件導入Unity(即轉換為FBX的過程)

25. QuickTime

文件:QuicktimeTools.exe

它是什么?

參考: https://developer.apple.com/quicktime/
視頻處理工具

應用

用於處理視頻文件,如壓縮、轉碼等

26. UNITY-C4DToFBXConverter

文件:UNITY-C4DToFBXConverter下的cdl、cdl64文件

它是什么?

參考: http://en.wikipedia.org/wiki/Diff_utility
用於將Cinema 4D的C4D文件轉換為FBX的工具

應用

用於將Cinema 4D的C4D文件轉換為FBX的工具(這個應該是Unity自己寫的)

四、總結

現在對上面的各類工具做一下分類和小結。

  1. 圖形圖像 - 3D模型導入(FBX): Maxscript腳本(3DSMax) / MEL腳本(Maya) / Python腳本(Modo/Blender)
  2. 圖形圖像 - 圖像處理: FreeImage、ARM ASTC紋理、ImageMagick、ETCx紋理
  3. 圖形圖像 - 渲染: Autodesk Beast、Umbra、CG、HLSL
  4. 圖形圖像 - 2D繪圖: Cairo
  5. 音頻: LAME
  6. 視頻: QuickTime
  7. 文本: gettext(iconv / libiconv2 / libintl3)、XML(libxml2)、diff / diff3
  8. 網絡: Webkit、Kerberos 5協議、cURL(libcurl)、OpenSSL
  9. 數據庫: PostgreSQL(libpq)、SQLite3
  10. 多線程:Pthreads
  11. 數據壓縮:zlib、7Zip

這里只是從文件層面分析和列舉了Unity4所使用的第三方工具。可以看出來,數量很多,類別很多,這也說明了游戲引擎或者說游戲開發工具的復雜性。

出處

本文轉載自:https://zwcloud.net/  作者:zwcloud


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM