• 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

  • 相关阅读:
    问题解决-Plugin with id 'com.github.dcendents.android-maven' not found
    hadoop 04 一 HA高可用配置
    hadoop 03 一 Hadoop机架感知配置
    Windows平台安装配置Hadoop
    hadoop 02一 hadoop配置
    hadoop 01一 hadoop安装配置
    Centos7下载和安装教程
    mysql 命令行导出数据
    RabbitMQ 集群部署(linux-centos6.5)
    Spring 集成RabbitMq
  • 原文地址:https://www.cnblogs.com/zhaoqingqing/p/5651776.html
Copyright © 2020-2023  润新知