Skip to content

Commit 38f4703

Browse files
committed
Add in requested changes for advanced glTF tutorial.
1 parent b9896a4 commit 38f4703

5 files changed

Lines changed: 73 additions & 5 deletions

File tree

antora/modules/ROOT/nav.adoc

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,55 @@
151151
** Appendix
152152
*** xref:Building_a_Simple_Engine/Appendix/appendix.adoc[Appendix]
153153
154+
* Advanced glTF: High-Performance Character Pipelines
155+
** xref:Advanced_glTF/introduction.adoc[Introduction]
156+
** Scene Graph & Transform Hierarchy
157+
*** xref:Advanced_glTF/Scene_Graph_Hierarchy/01_introduction.adoc[Introduction]
158+
*** xref:Advanced_glTF/Scene_Graph_Hierarchy/02_engine_expansion.adoc[Engine expansion]
159+
*** xref:Advanced_glTF/Scene_Graph_Hierarchy/03_physics_syncing.adoc[Physics syncing]
160+
*** xref:Advanced_glTF/Scene_Graph_Hierarchy/04_metadata_and_physics_extras.adoc[Metadata & physics extras]
161+
*** xref:Advanced_glTF/Scene_Graph_Hierarchy/05_conclusion.adoc[Conclusion]
162+
** Skeletal & Compute Skinning
163+
*** xref:Advanced_glTF/Skeletal_Compute_Skinning/01_introduction.adoc[Introduction]
164+
*** xref:Advanced_glTF/Skeletal_Compute_Skinning/02_skinning_math.adoc[The mathematics of skinning]
165+
*** xref:Advanced_glTF/Skeletal_Compute_Skinning/03_compute_skinning.adoc[The compute skinning pipeline]
166+
*** xref:Advanced_glTF/Skeletal_Compute_Skinning/04_shared_vertex_buffer.adoc[Skin once, use everywhere]
167+
*** xref:Advanced_glTF/Skeletal_Compute_Skinning/05_interpolation_blending.adoc[Interpolation & blending]
168+
*** xref:Advanced_glTF/Skeletal_Compute_Skinning/06_conclusion.adoc[Conclusion]
169+
** Physics Integration
170+
*** xref:Advanced_glTF/Physics_Integration/01_introduction.adoc[Introduction]
171+
*** xref:Advanced_glTF/Physics_Integration/02_bone_proxy_colliders.adoc[Bone proxy colliders]
172+
*** xref:Advanced_glTF/Physics_Integration/03_constraints_and_joint_limits.adoc[Constraints & joint limits]
173+
*** xref:Advanced_glTF/Physics_Integration/04_ragdoll_handoff.adoc[Ragdoll handoff]
174+
*** xref:Advanced_glTF/Physics_Integration/05_self_collision_filtering.adoc[Self-collision filtering]
175+
*** xref:Advanced_glTF/Physics_Integration/06_conclusion.adoc[Conclusion]
176+
** Procedural Animation & IK
177+
*** xref:Advanced_glTF/Procedural_Animation_IK/01_introduction.adoc[Introduction]
178+
*** xref:Advanced_glTF/Procedural_Animation_IK/02_ccd_ik.adoc[CCD IK]
179+
*** xref:Advanced_glTF/Procedural_Animation_IK/03_fabrik.adoc[FABRIK]
180+
*** xref:Advanced_glTF/Procedural_Animation_IK/04_foot_placement.adoc[Foot placement]
181+
*** xref:Advanced_glTF/Procedural_Animation_IK/05_look_at.adoc[Look-at]
182+
*** xref:Advanced_glTF/Procedural_Animation_IK/06_physics_driven_lean.adoc[Physics-driven lean]
183+
*** xref:Advanced_glTF/Procedural_Animation_IK/07_conclusion.adoc[Conclusion]
184+
** Morph Targets & Facial Animation
185+
*** xref:Advanced_glTF/Morph_Targets_Facial_Animation/01_introduction.adoc[Introduction]
186+
*** xref:Advanced_glTF/Morph_Targets_Facial_Animation/02_shape_key_ingestion.adoc[Shape key ingestion]
187+
*** xref:Advanced_glTF/Morph_Targets_Facial_Animation/03_bindless_morph_buffers.adoc[Bindless morph buffers]
188+
*** xref:Advanced_glTF/Morph_Targets_Facial_Animation/04_conclusion.adoc[Conclusion]
189+
** Tooling & Production Pipeline
190+
*** xref:Advanced_glTF/Tooling_Production_Pipeline/01_introduction.adoc[Introduction]
191+
*** xref:Advanced_glTF/Tooling_Production_Pipeline/02_blender_workflow.adoc[Blender workflow]
192+
*** xref:Advanced_glTF/Tooling_Production_Pipeline/03_validation.adoc[Validation]
193+
*** xref:Advanced_glTF/Tooling_Production_Pipeline/04_gltf_viewer_audit.adoc[glTF viewer audit]
194+
*** xref:Advanced_glTF/Tooling_Production_Pipeline/05_conclusion.adoc[Conclusion]
195+
** Debugging & Visual Auditing
196+
*** xref:Advanced_glTF/Debugging_Visual_Auditing/01_introduction.adoc[Introduction]
197+
*** xref:Advanced_glTF/Debugging_Visual_Auditing/02_debug_drawers.adoc[Debug drawers]
198+
*** xref:Advanced_glTF/Debugging_Visual_Auditing/03_skinning_heatmaps.adoc[Skinning heatmaps]
199+
*** xref:Advanced_glTF/Debugging_Visual_Auditing/04_renderdoc_analysis.adoc[RenderDoc analysis]
200+
*** xref:Advanced_glTF/Debugging_Visual_Auditing/05_conclusion.adoc[Conclusion]
201+
** xref:Advanced_glTF/appendix_types.adoc[Appendix: Common Types Reference]
202+
154203
* Synchronization 2
155204
** xref:Synchronization/introduction.adoc[Introduction]
156205
** Anatomy of a Dependency

en/Advanced_glTF/Scene_Graph_Hierarchy/04_metadata_and_physics_extras.adoc

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,24 @@ The glTF format provides a powerful but often overlooked feature for solving thi
1010

1111
In a professional production, an artist shouldn't have to write code to define where a character's collision shapes go. Instead, they define them as custom properties in Blender. When the glTF is exported, these properties are embedded in the `extras` field of the corresponding node.
1212

13+
=== Adding Custom Properties in Blender
14+
15+
To attach physics metadata to a node, select the object or bone in Blender and navigate to the **Properties panel → Object Properties → Custom Properties** (or **Bone Properties → Custom Properties** for armature bones). Click **New** to add a property and name it `physics`. Set its value to a JSON-compatible dictionary using Blender's property editor or a small Python script in the scripting workspace:
16+
17+
[source,python]
18+
----
19+
import bpy
20+
21+
obj = bpy.context.active_object
22+
obj["physics"] = {"type": "capsule", "radius": 0.1, "height": 0.4}
23+
----
24+
25+
When you export via **File → Export → glTF 2.0**, enable **Include → Custom Properties** in the export dialog. Blender will serialize those properties into the `extras` field of the corresponding node in the output `.glb` / `.gltf` file.
26+
27+
image::images/blender_custom_properties.png[Blender Custom Properties panel showing a physics capsule property on a forearm bone,600]
28+
29+
NOTE: The screenshot above shows the Custom Properties panel in Blender 4.x. The panel location is the same in Blender 3.x.
30+
1331
Consider a character's forearm bone. In Blender, we can add a custom property called `physics` with a value that defines a capsule collider. When our engine parses the glTF, it doesn't just see a bone node; it sees a request to attach a physical proxy.
1432

1533
[source,cpp]

en/Advanced_glTF/Skeletal_Compute_Skinning/03_compute_skinning.adoc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ While you may be familiar with GLSL from the "Simple Engine," Slang offers sever
7171

7272
[NOTE]
7373
====
74-
To follow this section, you will need the **Slang compiler (`slangc`)**. You can download the latest binaries from the link:https://github.com/shader-slang/slang/releases[Slang GitHub releases page]. Ensure `slangc` is in your system PATH.
74+
The **Slang compiler (`slangc`)** is bundled with the link:https://vulkan.lunarg.com/sdk/home[Vulkan SDK], so if you have already installed the SDK to follow this tutorial, `slangc` should already be available in your PATH without any additional download. If you need a standalone installation or a newer version, binaries are also available on the link:https://github.com/shader-slang/slang/releases[Slang GitHub releases page].
7575
====
7676

7777
=== Compiling and Loading Slang Shaders

en/Advanced_glTF/introduction.adoc

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,8 @@ Even with a perfect pipeline, things go wrong. We'll build specialized debugging
3939
Throughout this series, we will upgrade our development toolkit to reflect modern standards:
4040

4141
* **Slang Shaders**: All of our new shader work—from compute skinning to PBR enhancements—will be written in **Slang**. Slang's modularity and natural alignment features make it far more productive than raw GLSL for complex rendering pipelines.
42-
* **Vulkan 1.4**: We will utilize features like **Dynamic Rendering** and **Descriptor Indexing** to simplify our pipeline management and improve performance.
43-
* **Jolt Physics**: We have selected **Jolt Physics** as our simulation engine. Its performance-first design and clean C++ API make it the ideal choice for real-time character dynamics and ragdolls.
42+
* **Vulkan 1.3**: We will utilize features like **Dynamic Rendering** and **Descriptor Indexing** to simplify our pipeline management and improve performance.
43+
* **Jolt Physics**: We have selected link:https://jrouwe.github.io/JoltPhysics/[Jolt Physics] (link:https://github.com/jrouwe/JoltPhysics[source on GitHub]) as our simulation engine. Its performance-first design and clean C++ API make it the ideal choice for real-time character dynamics and ragdolls.
4444

4545
== Setting Up Your Development Environment
4646

@@ -70,14 +70,15 @@ FetchContent_MakeAvailable(Jolt)
7070

7171
=== 3. Khronos glTF-Validator
7272
To ensure our custom glTF assets are valid, we will use the official validator.
73+
7374
* **Installation**: Follow the instructions on the link:https://github.com/KhronosGroup/glTF-Validator[glTF-Validator repository]. It is available as a standalone CLI tool or via NPM.
7475

7576
== Preparing the Starter Project
7677

7778
This series assumes you have a working engine from the "Building a Simple Engine" series. To transition to the Advanced glTF architecture, you should prepare a "Starter Project" that:
7879

79-
1. **Supports Vulkan 1.4**: Ensure your instance and device creation request the 1.4 API version.
80-
2. **Enables Dynamic Rendering**: This series moves away from fixed Render Passes and Framebuffers in favor of `VK_KHR_dynamic_rendering`.
80+
1. **Supports Vulkan 1.3**: Ensure your instance and device creation request the 1.3 API version.
81+
2. **Enables Dynamic Rendering**: Ensure `VK_KHR_dynamic_rendering` is enabled; this should already be active if you completed the Simple Engine series, which introduced dynamic rendering in its Advanced Topics chapter.
8182
3. **Integrates GLM**: We will use GLM extensively for math operations, specifically for quaternion support in skeletal animation.
8283

8384
If you are starting fresh, we recommend refactoring your Simple Engine core to support a global scene graph before proceeding to the next chapter.
18.2 KB
Loading

0 commit comments

Comments
 (0)