About the Author |
|
xiii | |
About the Technical Reviewer |
|
xv | |
Introduction |
|
xvii | |
|
Chapter 1 The Blender Interface |
|
|
1 | (10) |
|
The Default Blender Interface |
|
|
1 | (2) |
|
|
3 | (1) |
|
|
3 | (1) |
|
|
3 | (1) |
|
Tool Shelf and Tool Properties |
|
|
3 | (1) |
|
|
3 | (1) |
|
|
3 | (3) |
|
|
5 | (1) |
|
|
5 | (1) |
|
|
6 | (1) |
|
Customizing the Interface |
|
|
6 | (1) |
|
Starting Blender from the Command Line (for Debugging) |
|
|
7 | (1) |
|
Running Our First Python Script |
|
|
8 | (1) |
|
|
8 | (1) |
|
|
8 | (1) |
|
|
8 | (1) |
|
|
9 | (2) |
|
|
11 | (16) |
|
|
11 | (1) |
|
|
11 | (1) |
|
|
11 | (1) |
|
|
12 | (1) |
|
|
12 | (1) |
|
bpy.types, bpy.utils, and bpy.props |
|
|
12 | (1) |
|
|
12 | (1) |
|
Selection, Activation, and Specification |
|
|
12 | (4) |
|
|
13 | (1) |
|
|
14 | (1) |
|
Specifying an Object (Accessing by Name) |
|
|
15 | (1) |
|
Pseudo-Circular Referencing and Abstraction |
|
|
16 | (1) |
|
|
17 | (3) |
|
Visualizing Multivariate Data with the Minimal Toolkit |
|
|
20 | (6) |
|
Visualizing Three Dimensions of Data |
|
|
21 | (1) |
|
Visualizing Four Dimensions of Data |
|
|
22 | (2) |
|
Visualizing Five Dimensions of Data |
|
|
24 | (2) |
|
|
26 | (1) |
|
|
26 | (1) |
|
Chapter 3 The bmesh Module |
|
|
27 | (16) |
|
|
27 | (1) |
|
Selecting Vertices, Edges, and Planes |
|
|
28 | (3) |
|
Switching Between Edit and Object Modes Consistently |
|
|
28 | (1) |
|
Instantiating a bmesh Object |
|
|
29 | (1) |
|
Selecting Parts of a 3D Object |
|
|
30 | (1) |
|
Edit Mode Transformations |
|
|
31 | (3) |
|
|
31 | (1) |
|
|
32 | (2) |
|
Note on Indexing and Cross-Compatibility |
|
|
34 | (1) |
|
Global and Local Coordinates |
|
|
35 | (2) |
|
Selecting Vertices, Edges, and Faces by Location |
|
|
37 | (2) |
|
|
39 | (3) |
|
|
42 | (1) |
|
Chapter 4 Topics in Modeling and Rendering |
|
|
43 | (22) |
|
|
43 | (2) |
|
|
43 | (1) |
|
|
44 | (1) |
|
|
45 | (3) |
|
|
45 | (1) |
|
|
46 | (1) |
|
PLY (Polygon File Format) |
|
|
47 | (1) |
|
Blender (.blend) Files and Interchange Formats |
|
|
48 | (1) |
|
Minimal Specification of Basic Objects |
|
|
48 | (8) |
|
|
48 | (1) |
|
|
48 | (3) |
|
Using Indices to Share Vertices and Normals |
|
|
51 | (1) |
|
Using Coplanar Vertices to Reduce Face Count |
|
|
52 | (1) |
|
Using Face Vertices to Simplify Indices |
|
|
53 | (2) |
|
Representing a Cube as a Primitive |
|
|
55 | (1) |
|
|
55 | (1) |
|
Common Errors in Procedural Generation |
|
|
56 | (7) |
|
|
56 | (4) |
|
|
60 | (1) |
|
|
61 | (2) |
|
|
63 | (2) |
|
Chapter 5 Introduction to Add-On Development |
|
|
65 | (22) |
|
|
65 | (4) |
|
Components of Blender Add-Ons |
|
|
69 | (10) |
|
|
69 | (1) |
|
Operators and Class Inheritance (bpy.types.Operator) |
|
|
70 | (1) |
|
Panels and Class Inheritance (bpy.types.Panel) |
|
|
71 | (1) |
|
Register() and Unregister() |
|
|
72 | (2) |
|
Scene Properties and bpy.props |
|
|
74 | (5) |
|
Precision Selection Add-On Example |
|
|
79 | (6) |
|
Code Overview for Our Add-On |
|
|
79 | (5) |
|
|
84 | (1) |
|
|
85 | (1) |
|
Preparing Our Add-On for Distribution |
|
|
85 | (1) |
|
|
85 | (2) |
|
Chapter 6 The bgl and blf Modules |
|
|
87 | (18) |
|
|
87 | (1) |
|
|
87 | (4) |
|
|
88 | (1) |
|
|
89 | (1) |
|
|
89 | (1) |
|
|
90 | (1) |
|
|
91 | (1) |
|
|
92 | (9) |
|
|
99 | (1) |
|
Declaring Button-Activated Drawing Functions |
|
|
100 | (1) |
|
Declare Main Drawing Function |
|
|
101 | (1) |
|
Declaring the Operator with Handlers |
|
|
101 | (1) |
|
Declaring the Panel with Dynamic Drawing |
|
|
101 | (1) |
|
Extending our bgl and blf Template |
|
|
101 | (2) |
|
|
103 | (2) |
|
Chapter 7 Advanced Add-On Development |
|
|
105 | (18) |
|
Developing in Blender's Filesystem |
|
|
105 | (5) |
|
Creating an Add-on in the Filesystem |
|
|
107 | (2) |
|
Using F8 to Reload Add-Ons |
|
|
109 | (1) |
|
|
109 | (1) |
|
|
109 | (1) |
|
IDEs for In-Filesystem Development |
|
|
110 | (1) |
|
Lightweight (Notepad++, Gedit, and Vim) |
|
|
110 | (1) |
|
Midweight (Sublime Text, Atom, and Spyder) |
|
|
110 | (1) |
|
Heavyweight (Eclipse PyDev, PyCharm, and NetBeans) |
|
|
111 | (1) |
|
Compiling Blender as a Python Module |
|
|
111 | (1) |
|
|
111 | (1) |
|
Best Practices for External Data |
|
|
111 | (5) |
|
Using File Interchange Formats |
|
|
112 | (1) |
|
Using Hardcoded Python Variables |
|
|
112 | (1) |
|
Algorithmic Manipulation of Primitives |
|
|
113 | (2) |
|
|
115 | (1) |
|
|
116 | (5) |
|
|
116 | (3) |
|
|
119 | (2) |
|
|
121 | (2) |
|
Chapter 8 Textures and Rendering |
|
|
123 | (14) |
|
|
123 | (3) |
|
Types of Influence in Blender |
|
|
123 | (2) |
|
Types of Textures in Blender |
|
|
125 | (1) |
|
Adding and Configuring Textures |
|
|
126 | (4) |
|
Loading Textures and Generating UV Mappings |
|
|
126 | (3) |
|
Textures Versus Materials in Blender |
|
|
129 | (1) |
|
|
129 | (1) |
|
Another Note on Indexing and Cross-Compatibility |
|
|
130 | (1) |
|
Removing Unused Textures and Materials |
|
|
130 | (1) |
|
Rendering Using Blender Render |
|
|
131 | (5) |
|
|
131 | (1) |
|
|
132 | (1) |
|
|
133 | (3) |
|
|
136 | (1) |
Index |
|
137 | |