跳转到内容

Blender 3D:从新手到专业/黑客Blender

来自Wikibooks,开放世界开放书籍

Blender是一个开源项目。这不仅仅意味着你可以免费使用它,你还可以看到它的工作原理,甚至可以自己进行修改并与他人分享。

Blender也是一个大型软件项目(代码超过一百万行),在十多年的生命周期中拥有众多活跃的贡献者,并且以惊人的速度不断发展。这可能会让经验不足的程序员感到有些害怕。

本单元假设您有一定的编程经验。Blender主要使用CC++Python编程语言编写。它可以使用CMakeSCons构建系统进行构建。

获取Blender源代码

[编辑 | 编辑源代码]

官方的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源代码的布局

[编辑 | 编辑源代码]

假设您已检出一个主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

通用子目录布局

[编辑 | 编辑源代码]

source/blender/

and intern/

中的许多子目录中,您会看到以下模式

  • 一堆.h目录中的文件,以及
  • 一个intern子目录。

这些.h文件定义了导出到其他模块的功能,而intern子目录包含.c.cpp实际实现模块的文件。有时,这些.h文件被放在extern子目录中而不是上层目录级别。

(是的,这些internextern的含义与internextern在顶层目录级别的含义不同。)

Blender的“遗传密码”:“DNA”和“RNA”

[编辑 | 编辑源代码]

您将在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”和“U”

[编辑 | 编辑源代码]

有一个经常引用的名为“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

source/blender/blenkernel/intern/context.c

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_ 平台无关的计时

. PIL_time_utildefines.h

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]
华夏公益教科书