Unity与UE4引擎源码内使用到的第三方库的比较
Posted u010019717
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity与UE4引擎源码内使用到的第三方库的比较相关的知识,希望对你有一定的参考价值。
首先看UE4中的 Third-Party Libraries
UnrealEngine\\Engine\\Source\\ThirdParty 下:
源码路径:
引擎exe的安装路径下(会发现跟源码路径是一样的):
ADO
注意:这只是为Windows访问权限设置了Windows包含的一组lib的include路径。
AMD
AMD GPU服务(AGS)库使软件开发人员能够查询通常无法通过标准操作系统或图形API获得的AMD GPU软件和硬件状态信息。
解决PC上的AMD驱动程序错误,利用PC上AMD特定的图形功能
https://github.com/GPUOpen-LibrariesAndSDKs/AGS_SDK/
android
This is the Android Software Development Kit(Android软件开发工具包)
- cxa_demangle: UE在Android设备上运行时需要调用堆栈打印,UE需要此函数将错误的函数名称转换为易于理解的名称。 UE通过stlport与cxx-stl链接,但是该库中不包含abi :: cxa_demangle函数。 NDK附带的gnu-libstdc ++库确实包含此功能,但是UE不针对gnu-libstdc ++进行链接,也不想仅针对此功能这样做。 最简单的解决方案是编译cxa_demangle源代码文件并手动链接。 https://android.googlesource.com/platform/external/
- detex:在不支持的情况下,在Android设备上将alpha ETC2解码为RGBA纹理格式。 由于ETC1不支持alpha压缩,因此UE可以分发带有alpha纹理的较小的程序包。 作为OpenGL RHI的一部分,被编译为Android游戏引擎。 https://github.com/hglm/detex/
- extras:是获取Android支持库的更新版本/不同方式(请参阅相关合同)。 是来自Android SDK的附加安装。 该存储库是Google Play服务的依赖项。 提供用于与Google通信的Java API。 允许Android游戏使用Google的成就,排行榜和广告。 AAR文件将被编译到游戏中。
- libunwind:帮助生成通过UE的Android崩溃报告报告的调用堆栈
AndroidPermission
定义应用所需权限, 处理运行时权限请求, 检测权限和请求权限
ANGLE
复制Windows上许多移动设备(包括html)提供的图形功能集。
在为HTML5平台开发时允许更快的迭代,可能在以后为其他移动平台开发,从而允许更快的迭代,而在为HTML5平台开发时允许更高的迭代,而在为HTML5平台以及其他移动平台开发时允许更高的迭代
asio
Asio用作服务器的IO层,以存储和检索从运行时和编辑器发送的跟踪。
Breakpad
https://chromium.googlesource.com/breakpad/breakpad https://github.com/google/breakpad/ 用于为Windows,Mac和Linux二进制文件生成跨平台symbol dumps。Breakpad是实现崩溃报告系统的一组客户端和服务器组件。
CEF3( Chromium Embedded Framework)
允许在应用程序中嵌入Web浏览器 https://github.com/chromiumembedded
UE需要在编辑器和启动器应用程序中使用Web浏览器来显示文档页面并更无缝地集成用于市场等的外部Web页面
coremod
播放音频.mod,.it和XM文件…这是一个自包含的音乐音序器和示例播放引擎,用于播放生成的音乐文件
它将是一个不错的插件,可作为在UE4中播放音频的附加选项 https://github.com/cmatsuoka/libxmp/
Crunch
https://github.com/BinomialLLC/crunch/
用于潜在地压缩光照贴图。
CryptoPP
提供一个加密方案的C ++类库,其中包括加密函数,哈希函数,加密安全的RNG以及其他帮助程序类,以支持加密和哈希
它使UE能够使用经过安全性测试的行业标准加密和哈希函数。 自己实现这些功能可能会导致错误,使系统容易受到攻击。
DirectShow
PC上需要视频捕获,以使UE能够将视频捕获为avi文件格式,以便从游戏和编辑器中进行回放。
http://msdn.microsoft.com/en-us/library/windows/desktop/dd375454(v=VS.85).aspx
Distorm
Live ++使用的第三方之一。适用于x86 / AMD64的强大反汇编程序库
https://github.com/gdabah/distorm/
dlmalloc
该库全部放在一个文件中,以简化最常见的用法:
ftp,将其编译(-O3),并将其链接到另一个程序。所有的
编译时选项默认为合理值,可用于
大多数平台。您稍后可能需要逐步进行各种操作
编译时和动态调整选项。
为了方便起见,使用此malloc的代码的包含文件位于:
ftp://gee.cs.oswego.edu/pub/misc/malloc-2.8.6.h
除非您不调用函数,否则实际上不需要此.h文件
在系统中定义的包含文件。 .h文件仅包含
在ANSI C / C ++上使用此malloc所需的文件摘录
系统,只要您没有更改有关
命名和调整参数。如果这样做,则可以创建您的
自己的malloc.h,它通过切入点包括所有设置
如下所示。请注意,默认情况下您可能已经在使用C
包含基于此版本的malloc的库
malloc(例如在Linux中)。您可能仍想使用
在此文件中以自定义设置或避免相关的开销
与库版本。
DotNetZip
在UDK安装程序和iPhonePackager中. DotNetZip是用于处理zip文件的快速,免费的类库和工具集。使用VB,C#或任何.NET语言轻松创建,提取或更新zip文件。
https://archive.codeplex.com/?p=dotnetzip
Eigen
Eigen是一个用于线性代数的C ++模板库:矩阵,向量,数值解算器和相关算法。
用于将压缩方案应用于需要复杂矩阵运算的顶点动画
http://eigen.tuxfamily.org/index.php?title=Main_Page
Expat
为libstophe提供XML支持
为XMPP支持libstrophe需要对XML的支持。这是James Clark在C中的Expat XML解析器库。它是面向流的解析器,需要设置处理程序来处理解析器
https://sourceforge.net/p/expat/ https://github.com/libexpat/libexpat
作为ios的Facebook SDK的一部分,使开发人员可以访问FB社交功能。
https://github.com/facebook/FBNotifications/
FakeIt
它允许程序员创建接口或对象的轻量级“模拟”实现,可用于编写单元测试。
用于强大的单元测试。
https://github.com/eranpeer/FakeIt/
FBX (Autodesk FBX SDK integration code)
用于读取和写入FBX文件的C ++库(图形交换文件格式。)
ForsythTriOO
- Linear-Speed Vertex Cache Optimization :
用更快的导入速度(快得多的导入时间,更有效的结果)替换现有的对导入时的网格数据进行预处理的网格处理算法。
被许可方想导入大网格,并且导入时间使这个问题成为问题。
http://gameangst.com/wp-content/uploads/2009/03/forsythtriangleorderoptimizer.cpp - Tri Stripper:
生成缓存优化的三角带
可能会大大减少网格的导入时间,可能会改善渲染性能。
https://github.com/spoonless/tristripper
FreeImage
对于纹理调整大小,颜色转换。 在运行时从编辑器动态加载dll。
FreeImage是一个开源库项目,面向希望支持当今多媒体应用程序所需的流行图形图像格式(如PNG,BMP,JPEG,TIFF和其他格式)的开发人员。FreeImage易于使用,快速,多线程安全,与所有32位或64位版本的Windows兼容以及跨平台(适用于Linux和Mac OS X)。
https://freeimage.sourceforge.io/
FreeType2
Slate的字体渲染器需要这个库
FreeType 2是一种软件字体引擎,被设计为小巧,高效,高度可定制和便携式,同时能够产生高质量的输出(字形图像)。它也可以用于图形库,显示服务器,字体转换工具,文本图像生成工具以及许多其他产品。
请注意,FreeType 2是一种字体服务,不提供执行文本布局或图形处理(例如,彩色文本渲染,“凹陷”等)之类的高级功能的API。但是,它通过提供一个简单,易于使用且统一的界面来访问字体文件的内容,极大地简化了这些任务。
http://git.savannah.gnu.org/cgit/freetype/
glslang
https://github.com/KhronosGroup/glslang
Khronos-reference front end for GLSL/ESSL, partial front end for HLSL, and a SPIR-V generator.
GoogleARCore
允许为ARCore开发应用。
https://github.com/google-ar/arcore-android-sdk/
GoogleGameSDK
用于在Android设备上设置垂直同步速率。 链接到Android版本中包含的静态库的C ++源代码。
https://developer.android.com/games/sdk
GoogleInstantPreview
属于GoogleVRSDK相关
https://developers.google.com/vr/develop/unreal/instant-preview
GoogleOboe
Oboe是Google提供的开源兼容性包装程序,用于抽象他们两个完全不同的后端解决方案:OpenSLES和AAudio。
https://www.youtube.com/watch?v=csfHAbr5ilI&list=PLWz5rJ2EKKc_duWv9IPNvx9YBudNMmLSa
GooglePlay
Google Play Games C++ SDK
提供与Google Play游戏服务一起使用的C ++ API。
允许使用Google的登录名,成就,排行榜等在Android上开发C ++游戏。
https://developers.google.com/games/services/
GoogleTest
Google的C ++测试框架,可帮助程序员编写各种形式的测试
用于健壮的单元测试和访问Google Mock
https://github.com/google/googletest/
GoogleVR
允许开发适用于Google Daydream和Cardboard硬件的应用。
https://github.com/googlevr/gvr-android-sdk/
HarfBuzz
在UE4中为Slate中的复杂语言(例如阿拉伯语)提供文本成形支持。
https://github.com/harfbuzz/harfbuzz/
hlslcc
HLSLCC-HLSL交叉编译器
该库将HLSL着色器源代码编译为高级IR,执行与设备无关的优化,并生成GLSL兼容的源代码。 该库主要基于Mesa的GLSL编译器。 前端已被大量重写以解析HLSL并从HLSL AST生成Mesa IR。 该库利用Mesa的IR优化来简化代码,并最终从Mesa IR生成GLSL源代码。 GLSL的生成基于glsl-optimizer中的工作。
https://github.com/aras-p/glsl-optimizer
https://github.com/Unity-Technologies/HLSLcc
https://github.com/James-Jones/HLSLCrossCompiler
ICU
ICU是成熟的,广泛使用的C / C ++和Java库集,可为软件应用程序提供Unicode和Globalization支持。UE4 ship需要这个库
在UE4的核心模块中提供UE culture and internationalization API的ICU实施
https://github.com/unicode-org/icu/
Intel
Intel Extensions Framework
UE在源文件中包含文件,然后在其中调用函数。 没有二进制文件或库(对象),只有一对标头。 与NVAPI和AMD_AGS完全相同。
IntelEmbree
高性能ray tracing光线追踪内核
加速光质量,使照明构建花费的时间大大减少
IntelISPC
ISPC是一种用于数据并行问题的语言,编译器会翻译该语言。
IntelISPCTexComp
Fast ISPC Texture Compressor & ISPC Compiler
将图像压缩为各种DirectX格式,尤其是BC6H和BC7
Black Tusk / Microsoft提交代码以支持UE4中的新纹理格式
https://github.com/GameTechDev/ISPCTextureCompressor/
IntelMetricsDiscovery
这是一个INTEL库,可以访问D3D11的准确GPU时序,这将使UE能够支持INTEL硬件上的动态分辨率。
https://github.com/intel/metrics-discovery/
IntelTBB
Intel Threading Building Block
在引擎中用作优化的64位内存分配器。
IntelVTune
Instrumentation and Tracing Technology (ITT) API files
允许与VTune(性能分析器)增强集成。
IOS
- Bolts
facebook SDK支持库
Facebook SDK升级使用此库
https://github.com/BoltsFramework/Bolts-iOS/ - SoundSwitch
在IOSAppDelegate.cpp中实现。
https://github.com/moshegottlieb/SoundSwitch/
jemalloc
内存分配器。 内存分配器的选项之一。 静态链接库。
eMalloc 是一款内存分配器,与其它内存分配器相比,它最大的优势在于多线程情况下的高性能以及内存碎片的减少。
https://github.com/jemalloc/jemalloc
Kiss_FFT
编辑器工具,用于删除高频元素/或频域中的各种滤波
去除高频元素/或频域中的各种滤波
http://kissfft.sourceforge.net/
libcurl
实现HTTP协议
Ship requirement. Soon enough, needed for Fortnite Linux server .
libJPG
- jpeg-compressor
允许JPEG压缩和解压缩。
在运行时压缩视频帧以减少内存使用。 解压缩后再访问数据。
https://code.google.com/archive/p/jpeg-compressor/ - Jpeg Library
UE需要它,因为它是GFx中的第三方库
http://www.ijg.org/
libOpus
Audio codec
UE将其用于音频文件。 它是通过Internet进行VoIP和IP音频流的理想选择。
https://opus-codec.org/downloads/
libPhonon
游戏和虚拟现实的基于物理的音频
获得逼真的遮挡,混响和空间化技术
libPNG
无损压缩图像
http://www.libpng.org/pub/png/
libSampleRate
用于对音频资产进行下采样。
https://github.com/erikd/libsamplerate/
libstrophe
提供XMPP支持
易于修改且重量轻的XMPP库,为UE提供了支持某些平台所需的控件,并且与UE当前的XMPP库相比,其占用空间更小,更易于维护。
https://raw.githubusercontent.com/strophe/libstrophe/
libWebSockets
将来自浏览器(UE的HTML5客户端)的请求转换为UE服务器可以理解的请求
提供在线游戏等关键功能-可能是HTML5的出厂要求
https://github.com/warmcat/libwebsockets/
Linux
"libc++" C++ Standard Library
针对C ++ 11的C ++标准库的实现。
为了独立于系统C ++标准库(可能会有所不同),UE想将其静态链接
http://llvm.org/viewvc/llvm-project/libcxx/trunk/
llvm
使用Clang C ++编译器前端将代码编译为LLVM兼容的目标文件
使UE能够基于Clang开源项目尝试新的C ++技术
MCPP
将GLSL源代码预处理为紧凑的“distilled”版本
可以用于许多其他目的
http://sourceforge.net/projects/mcpp/
MCPP是便携式C / C ++预处理器,支持GCC,Visual C ++等。其源代码是高度可配置的,并且可以生成各种规格的可执行文件。它带有一个验证套件,可以详尽地检查预处理器的一致性和质量。
MikkTSpace
- ComputingTangentSpace
Computing TangentSpace without explicit storage by Morten S. Mikkelsen
节省性能和内存 http://mmikkelsen3d.blogspot.com/2011/07/derivative-maps.html - MikkTSpace
用于在编辑器中和运行时生成与DCC工具/现有管道匹配的更高质量的切线。
https://github.com/tcoppex/ext-mikktspace/
mimalloc
可配置的内存分配器,由UE4核心库用作选项,以提高性能和降低内存使用量.C代码与核心库静态链接。
https://github.com/microsoft/mimalloc/
mtlpp
通过将Metal提供的Objective-C类与本机C ++类包装在一起,从而为Metal提供C ++接口。 使用此方法而不是直接调用Metal可以避免Objective-C的复杂性,并将扩展mtlpp代码以在C ++包装器中执行数据和功能指针的缓存,从而避免不必要地调用Objective-C并最大程度地减少开销。
https://github.com/naleksiev/mtlpp/
NVIDIA
- NVaftermath
GPU崩溃诊断
修复用户的GPU崩溃 - nvapi
允许在功能强大的显示器上显示Nvidia显卡的3D图像
nvtesslib
- nvTessLib
为PN-AEN细分生成具有邻接信息的索引缓冲区 - PN-AEN
提供邻接信息,该信息随后用于在DX11中渲染无裂纹位移映射
nvTextureTools
- FastTextureCompression
将纹理压缩到BC7
BC7是可用于DX11类GPU的质量更高的纹理压缩方法。
https://software.intel.com/en-us/articles/fast-texture-compression-sample - NVIDIAnvDXT
在SHTools中将纹理压缩为更优化的格式
http://developer.nvidia.com/object/nv_texture_tools.html
nvTriStrip
重新排列模型中的顶点,以便其更快地渲染。
Oculus
LibOVRAudio, LibOVRAvatar, LibOVRPlatform, OVRPlugin
https://developer3.oculus.com/
Ogg
Ogg Vorbis Audio Compression
在引擎中播放声音
OneSky
众包编辑器和引擎的翻译过程
OneSky将为我们的内部翻译人员提供多种工具,无需额外费用即可使用
50多种语言,1,000多个翻译器,1个平台 -完整的本地化解决方案。
OpenAL
在音频设备上提供跨平台抽象。
在开发过程中,我们还以某种方式编译HTML5平台,使其在浏览器外部的Windows上运行,为此,我们需要复制浏览器/ html5工具链提供的某些功能。
https://github.com/kcat/openal-soft/
openexr
OpenEXR 2.3.0 + IlmBase 1.0.3
提供对ILM的OpenEXR图像格式的支持。 它允许加载和保存压缩的无损全范围HDR图像。
对于电影后期处理/过场动画非常有用。
OpenGL
渲染API的接口,该接口在PC以外的平台上使用(但也可以在PC上使用)
OpenSSL
OpenSSL是libcurl使用的可选库
https://www.openssl.org/source/
OpenSubdiv
OpenSubdiv是一组开源库,可在大规模并行CPU和GPU架构上实现高性能细分表面(subdiv)评估。
将作为Geo 2.0的参考和起点。
http://graphics.pixar.com/opensubdiv/docs/
OpenVR
Valve的OpenVR SDK-SteamVR的API,包括其HMD和控制器以及对DK2的支持等。
我们需要支持SteamVR硬件。
https://github.com/ValveSoftware/openvr/
OpenXR
OpenXR在我们的OpenXR插件中提供了跨供应商的API,以通过一个插件就可以使用多种VR和AR平台。
https://github.com/KhronosGroup/OpenXR-SDK/
Perforce
它用于通过C或C ++与Perforce进行通信
http://www.perforce.com/perforce/doc.current/manuals/p4api/02_clientprog.html
与Perforce服务器对话的编辑器和工具的托管代码界面
https://swarm.workshop.perforce.com/projects/perforce-software-p4api-net/files/main/
PhysX3
As a physics engine inside our engine
PLCrashReporter
Mac OS X 和 iOS 的进程中多线程崩溃重新编码和符号化。
Our naive signal handler crash reporting is insufficient for Darwin platforms (OS X & iOS), ,它不能记录所有崩溃,并且无法收集堆栈溢出和其他错误的正确报告详细信息,这些错误需要信号在提升线程以外的线程上处理,不幸的是,这些错误很常见
portmidi
允许内容创建者使用标准的现成的 Midi 硬件在运行时调整 UE4 中任何 Object 的任何数字属性
它比 Windows Midi API 更简洁、更容易理解 API,并且为输入缓冲区溢出等提供了一些自动恢复功能
https://sourceforge.net/projects/portmedia/
Python
Python 解释器和标准库,用于使用 Python 进行开发。
Qualcomm
好像只用到了压缩纹理
https://developer.qualcomm.com/software/adreno-gpu-sdk/tools
rd_route
为UE提供了将系统功能与一个实现"hook"或"interpose"的能力。通常,这不是必需的,但因为UE想用UE自己的替换全局分配器,在苹果的CFNetwork库中有一个系统功能,UE必须替换,没有UE的实现或引擎将崩溃。
https://github.com/rodionovd/rd_route/
RenderDoc
图形调试器、可视化和探查器
为 RenderDoc dlls 提供 API 层
https://github.com/baldurk/renderdoc/
rpclib
https://github.com/rpclib/rpclib
允许 UE4 公开与语言无关的远程过程调用,供外部客户端用于机器学习目的。
SDL2
跨平台库抽象音频、视频和输入
Linux 客户端必需
ShaderConductor
- SPIRVTools
SPIRV 工具包含在着色器导体阴影导体导体中,是一种用于将 HLSL 交叉编译为其他着色语言的工具
https://github.com/KhronosGroup/SPIRV-Tools/ - SPIRVHeaders
SPIRV 标题包含在着色器导体阴影导体导体中,是一种用于将 HLSL 交叉编译为其他着色语言的工具
https://github.com/KhronosGroup/SPIRV-Headers/ - SPIRVCross
SPIRV 十字包含在着色器导体阴影导体导体中,是一种用于将 HLSL 交叉编译为其他着色语言的工具 - ShaderConductor
我们为每个编辑器平台(Windows、Mac、Linux)构建动态库。
https://jira.it.epicgames.net/secure/RapidBoard.jspa?rapidView=748&view=planning.nodetail&epics=visible - NinjaBuild
非 Windows 平台上的生成过程取决于 "ninja" 生成系统
https://github.com/ninja-build/ninja/ - GoogleTest
谷歌测试在着色器检测器中使用。着色器 它是一种工具,用于将 HLSL 交叉编译为其他着色语言
https://github.com/google/googletest/ - DirectXShaderCompiler
DirectXShaderCompiler 在着色器导电器中使用。着色器 它是一种工具,用于将 HLSL 交叉编译为其他着色语言
https://github.com/Microsoft/DirectXShaderCompiler - cxxopts
cxxopts 在着色器中使用。着色器 它是一种工具,用于将 HLSL 交叉编译为其他着色语言
https://github.com/jarro2783/cxxopts/
SpeedTree
https://store.speedtree.com/ue4/
SPIRV-Reflect
SPIRV-Reflect为SPIRV着色器提供了一个反射API,在ShaderCompileWorker / Editor中使用SPIRV-Reflect来解析SPIRV着色器接口并修复资源绑定位置,然后转换为与Direct3D具有不同绑定要求的Metal / GLSL着色器
Steamworks
用于连接Steamworks平台的SDK
支持要与UE一起使用Steam的被许可人
http://store.steampowered.com/subscriber_agreement/
Tencent
- WeGame
WeGame的身份验证,社交和商业功能作为新的OnlineSubsystem UE module/plugin。
VHACD
将三重网格分解为凸包近似以进行碰撞
目前,我们使用的HACD效果不佳,这是一个改进。
Vivox
语音聊天中间件
为UE4提供跨平台语音聊天
Vorbis
- VorbisQualityImprovements
提高vorbis音频压缩的质量
用作libvorbis的一部分
http://www.geocities.jp/aoyoume/aotuv/
Vulkan
Vulkan是具有自己的驱动程序的渲染接口,UE现在支持该接口。 我们仅使用Vulkan C ++标头。
https://vulkan.lunarg.com/software/
WebRTC
与XMPP服务器进行实时通信,这是我们所有游戏以及启动器中社交功能所必需的
Windows
D3DX12
DirectSound
DirectX
DirectXLegacy
DX11
DX12
DX9
glTF-Toolkit
PIX
VisualStudioDTE
WinHttp
WinInet
XAudio2_9
XInput
WindowsMixedRealityInterop
Windows平台混合现实
WiX
用于在Windows平台上创建UE4 .msi安装程序
xxhash
https://github.com/Cyan4973/xxHash
极快的非密码哈希算法
zlib
引擎和其他几个第三方项目使用的压缩库
UnrealEngine\\Engine\\Binaries\\ThirdParty 下:
ANGLE
AppLocalDependencies
DirectXRedist
ucrt
VC140.CRT
VC141.CRT
WinDbg
ARM
ASTC Evaluation Codec command line tool
用于将纹理编码为ASTC格式,这是最新的Android设备支持的新标准。
由于其尺寸和质量优于其他格式,因此很高兴为Android支持ASTC。
http://malideveloper.arm.com/?modals=astc-evaluation-codec
AWSSDK
提供客户端API,以使用.NET Framework与Amazon Web Services通信。
为了将构建系统连接到S3,以便在升级过程中可以将分块的数据复制到S3。
https://github.com/aws/aws-sdk-net/
CEF3
DbgHelp
Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1 (WinDbg)
Engine/Binaries/ThirdParty/DbgHelp/dbghelp.dll
用于从minidump中检索调用堆栈。
FreeImage
glslang
GoogleInstantPreview
ICU
ImgTec
PVRTexTool
在PC上将纹理转换为iPhone格式
https://community.imgtec.com/developers/powervr/
IntelISPCTexComp
Ionic
IOS
- Bouncy Castle
使用各种加密协议和标准的C#API。
http://www.bouncycastle.org/
libSampleRate
用于采样率转换
http://www.libpng.org/pub/png/src/
libsndfile
处理和解码许多声音文件格式,包括ogg,flac,aiff,au等
新的音频引擎工作,更好地支持多种文件格式,实现更简单
http://www.mega-nerd.com/libsndfile/
MCPP
Mono
Mono Runtime
它用于在Unix系统上运行用C#编写的软件
一些UE4工具是用C#编写的(例如UnrealBuildTool和UrealAutomationTool),我们希望用户能够在不手动安装Mono的情况下运行它们
NETDiscUtils
.NET DiscUtils
.NET库,方便创建.iso文件
将用于在构建服务器场上创建光盘映像,以使用自动化方式运送游戏。
http://discutils.codeplex.com/SourceControl/
Newtonsoft
.NET中的JSON序列化/反序列化
在C#自动化代码中对JSON MCP响应进行健壮和快速的序列化/反序列化。 其他解决方案具有局限性,例如在将新字段添加到响应时引发错误,因此该库提供了鲁棒性。 它现在也是事实上的.NET JSON序列化程序,并得到Microsoft的完全支持,并由它们作为Visual Studio中创建的新ASP.NET MVC Web应用程序的默认依赖项提供。
https://github.com/JamesNK/Newtonsoft.Json/
NVIDIA
nvTextureTools
Oculus
Ogg
OpenAL
OpenSSL
OpenVR
OpenXR
Phonon
PhysX3
protobuf-net
解析Google的协议缓冲区格式的二进制数据流
从S3读取由CrashReporter数据路由器写入的数据
https://github.com/mgravell/protobuf-net/
Python
Qualcomm
SDL
SDL2
Steamworks
svn
增加了对除Perforce之外的版本控制系统的支持
Subversion提供了我们需要的所有功能,可以用作Perforce的类似产品(相对于GIT)。
VisualStudio
我们使用它来允许编辑器在创建源文件时打开正确版本的Visual Studio。
Vivox
Vorbis
Windows
增加了对PIX GPU捕获的支持
允许我们和被许可方在Windows上使用DirectX12调试和分析引擎
WindowsDevicePortalWrapper
下面Unity中的第三方库的明细来自如下文章:https://gameinstitute.qq.com/community/detail/121551
Unity Engine 中的 Third-Party Libraries
列出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
它是什么?#
Cairo提供了跨平台2D绘图的支持
应用#
2D绘图,也可能是其他库的依赖项
3. Webkit#
文件:WebKit.resources、JavaScriptCore.dll、WebKit.dll、JavaScriptCore.resources等
它是什么?#
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
它是什么?#
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
它是什么?#
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
它是什么?#
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
它是什么?#
zlib是提供数据压缩用的库。
应用#
可能是FreeImage的依赖项,也可能用于其他需要数据压缩功能的程序或库中。
15. 7Zip#
文件:7z.dll、7z.exe、lzma.exe
它是什么?#
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
以上是关于Unity与UE4引擎源码内使用到的第三方库的比较的主要内容,如果未能解决你的问题,请参考以下文章