Blender 3D:从新手到专业/黑客Blender
适用Blender版本:2.68。 |
Blender是一个开源项目。这不仅仅意味着你可以免费使用它,你还可以看到它的工作原理,甚至可以自己进行修改并与他人分享。
Blender也是一个大型软件项目(代码超过一百万行),在十多年的生命周期中拥有众多活跃的贡献者,并且以惊人的速度不断发展。这可能会让经验不足的程序员感到有些害怕。
本单元假设您有一定的编程经验。Blender主要使用C、C++和Python编程语言编写。它可以使用CMake或SCons构建系统进行构建。
官方的Blender源代码保存在Git存储库中,位于developer.blender.org. 实际上,有几个单独的存储库
- blender-main — Blender源代码的主要部分,不包括大多数Python插件。
- blender-addons — 标准Blender发行版中包含的Python插件。
- blender-addons-contrib — 额外的有用Python插件。
- blender-translations — 文本消息的本地化语言翻译。
- blender-tests — 一些有趣的示例.blend用于测试和演示Blender功能的文件。
- blender-dev-tools — 用于对Blender源代码执行维护任务的工具,但实际上并不需要用于构建Blender。
- blender-cloud — 看起来像是一个提供新的基于云的Blender服务的框架。
假设您已检出一个主Blender源代码树的副本。顶层看起来像这样
— files used during the build process
— top-level control file for CMake
— note about Blender licensing (GPLv2)
— documentation files, among them:
— the format of .blend files
— how to build Blender, and hack the build system
— the man page
— non-Blender-specific libraries, primarily developed elsewhere, included in the source
— simple build script for those who can’t be bothered to go through the CMake setup process
— libraries which are non-Blender-specific but primarily developed here, also glue code for interfacing to external libraries not included in the Blender source. Notable subdirectories:
— Constructive Solid Geometry routines
— the Cycles renderer
— the fluid simulator
— Blender’s platform-independent GUI (including platform-dependent implementations). See intern/ghost/GHOST_ISystem.h for a more detailed description.
— thread-safe memory management with consistency checking
— the Inverse Kinematics library
— the library for simulating smoke and flames
— additional files to be included in the Blender distribution, including GUI icons and fonts
— top-level control file for SCons
— the main part of the Blender source, further divided (ignoring the CMakeLists.txt and SConscript files which you will find just about everywhere) into
— the bulk of the source, of which some useful parts are
— low-level stuff for file management, geometry algorithms, sorting and suchlike
— core Blender-specific code (no UI stuff)
— code for reading and writing .blend files
— some additional files for building the Blender Player executable
— the Blender mainline
— the Blender Game Engine
— some files specific to the Windows build
— some test scripts
and intern/
中的许多子目录中,您会看到以下模式
- 一堆.h目录中的文件,以及
- 一个intern子目录。
这些.h文件定义了导出到其他模块的功能,而intern子目录包含.c或.cpp实际实现模块的文件。有时,这些.h文件被放在extern子目录中而不是上层目录级别。
(是的,这些intern和extern的含义与intern和extern在顶层目录级别的含义不同。)
您将在Blender的源代码中找到对“DNA”(或“SDNA”)和“RNA”的引用。与遗传学中的术语的类比充其量是薄弱的,但它们指的是
- “DNA”或“SDNA”(“结构”DNA?)是将Blender的内存中数据结构映射到磁盘上的系统.blend文件格式。一个.blend文件只不过是一个内存转储,这使得它可以快速写入。但是,该文件需要能够被在具有不同字节序、32位与64位指针等的机器上的Blender构建读取,更不用说具有不同功能的未来版本了。因此,保存的.blend文件包括对保存在文件中的所有数据结构布局的详细描述,并且此描述存储在末尾的“DNA1”块中。该块由makesdna工具生成,该工具作为整体构建过程的一部分自动构建和运行,因此其输出可以直接包含到Blender可执行文件中。它解析目录source/blender/makesdna/.h中的所有
文件,因此所有可以保存到.blend文件中的数据结构都必须在此定义,并且它们必须谨慎地使用解析工具可以处理的C语言的有限子集。
- “RNA”定义了Blender内部数据结构和例程调用的Python接口。
此处是Ton“Mr Blender”Roosendaal解释DNA和RNA。
有一个经常引用的名为“G”的全局变量,其类型为struct Global,在source/blender/blenkernel/BKE_global.h 中声明。该变量在source/blender/blenkernel/intern/blender.c 中定义。同一个文件还定义了全局“U”,其类型为struct UserDef,在source/blender/makesdna/DNA_userdef_types.h 中声明。
一些(但并非所有)全局符号在其名称上带有前缀,表示(大致)它们来自哪里。以下是部分列表。
前缀 | 含义 | 发现位置 |
---|---|---|
AUD_ | audaspace声音库 | intern/audaspace/ |
BKE_ | 最低级别(非UI)Blender操作 | source/blender/blenkernel/ |
BLF_ | 字体/文本处理 | source/blender/blenfont/ |
BLI_ | 通用库例程 | source/blender/blenlib/ |
BLO_ | 加载/保存.blend文件 | source/blender/blenloader/ |
COM_ | 合成器 | source/blender/compositor/ |
CTX_ | 处理bContext对象 | source/blender/blenkernel/BKE_context.h |
DNA_ | 包含所有保存到.blend文件 | source/blender/makesdna/ |
中的类型定义的头文件 | ED_ | 编辑器UI例程 |
source/blender/editors/ | FRS_ | Freestyle渲染器 |
source/blender/freestyle/ | GHOST_ | intern/ghost/ |
平台无关的UI层 | IMB_ | 图像格式处理 |
source/blender/imbuf/ | MEM_ | 内存管理 |
intern/memutil/ | MOD_ | 修改器 |
source/blender/modifiers/ | NOD_ | 节点编辑器 |
source/blender/nodes/ | PIL_ | 平台无关的计时 |
RE_ | 通用渲染器处理 | source/blender/render/ |
RNA_ | Python 接口 | source/blender/makesrna/ |
STR_ | 字符串例程 | intern/string/ |
WM_ | 窗口管理 | source/blender/windowmanager/ |
用户界面实现
[edit | edit source]UI 代码结构分层,代码还处理用户偏好文件和共享应用程序数据的查找。从最底层开始,各层级分别是
(see source/blender/windowmanager/WM_types.h for an overview)
另请参见
[edit | edit source]- 构建 Blender — Blender Wiki 上的平台特定说明
- 开发资源 在blender.org,包括
- 邮件列表