diff --git a/antora/modules/ROOT/nav.adoc b/antora/modules/ROOT/nav.adoc index d048945f..e227760f 100644 --- a/antora/modules/ROOT/nav.adoc +++ b/antora/modules/ROOT/nav.adoc @@ -63,3 +63,89 @@ ** xref:courses/18_Ray_tracing/07_Conclusion.adoc[Conclusion] * xref:90_FAQ.adoc[FAQ] * link:https://github.com/KhronosGroup/Vulkan-Tutorial[GitHub Repository, window=_blank] + +* Building a Simple Engine +** xref:Building_a_Simple_Engine/introduction.adoc[Introduction] +** Engine Architecture +*** xref:Building_a_Simple_Engine/Engine_Architecture/01_introduction.adoc[Introduction] +*** xref:Building_a_Simple_Engine/Engine_Architecture/02_architectural_patterns.adoc[Architectural patterns] +*** xref:Building_a_Simple_Engine/Engine_Architecture/03_component_systems.adoc[Component systems] +*** xref:Building_a_Simple_Engine/Engine_Architecture/04_resource_management.adoc[Resource management] +*** xref:Building_a_Simple_Engine/Engine_Architecture/05_rendering_pipeline.adoc[Rendering pipeline] +*** xref:Building_a_Simple_Engine/Engine_Architecture/06_event_systems.adoc[Event systems] +*** xref:Building_a_Simple_Engine/Engine_Architecture/conclusion.adoc[Conclusion] +** Camera Transformations +*** xref:Building_a_Simple_Engine/Camera_Transformations/01_introduction.adoc[Introduction] +*** xref:Building_a_Simple_Engine/Camera_Transformations/02_math_foundations.adoc[Math foundations] +*** xref:Building_a_Simple_Engine/Camera_Transformations/03_transformation_matrices.adoc[Transformation matrices] +*** xref:Building_a_Simple_Engine/Camera_Transformations/04_camera_implementation.adoc[Camera implementation] +*** xref:Building_a_Simple_Engine/Camera_Transformations/05_vulkan_integration.adoc[Vulkan integration] +*** xref:Building_a_Simple_Engine/Camera_Transformations/06_conclusion.adoc[Conclusion] +** Loading Models +*** xref:Building_a_Simple_Engine/Loading_Models/01_introduction.adoc[Introduction] +*** xref:Building_a_Simple_Engine/Loading_Models/02_project_setup.adoc[Project setup] +*** xref:Building_a_Simple_Engine/Loading_Models/03_model_system.adoc[Model system] +*** xref:Building_a_Simple_Engine/Loading_Models/04_loading_gltf.adoc[Loading glTF] +*** xref:Building_a_Simple_Engine/Loading_Models/05_pbr_rendering.adoc[PBR rendering] +*** xref:Building_a_Simple_Engine/Loading_Models/06_multiple_objects.adoc[Multiple objects] +*** xref:Building_a_Simple_Engine/Loading_Models/07_scene_rendering.adoc[Scene rendering] +*** xref:Building_a_Simple_Engine/Loading_Models/08_animations.adoc[Animations] +*** xref:Building_a_Simple_Engine/Loading_Models/09_conclusion.adoc[Conclusion] +** Lighting & Materials +*** xref:Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc[Introduction] +*** xref:Building_a_Simple_Engine/Lighting_Materials/02_lighting_models.adoc[Lighting models] +*** xref:Building_a_Simple_Engine/Lighting_Materials/03_push_constants.adoc[Push constants] +*** xref:Building_a_Simple_Engine/Lighting_Materials/04_lighting_implementation.adoc[Lighting implementation] +*** xref:Building_a_Simple_Engine/Lighting_Materials/05_vulkan_integration.adoc[Vulkan integration] +*** xref:Building_a_Simple_Engine/Lighting_Materials/07_shadows.adoc[Shadows] +*** xref:Building_a_Simple_Engine/Lighting_Materials/06_conclusion.adoc[Conclusion] +** GUI +*** xref:Building_a_Simple_Engine/GUI/01_introduction.adoc[Introduction] +*** xref:Building_a_Simple_Engine/GUI/02_imgui_setup.adoc[ImGui setup] +*** xref:Building_a_Simple_Engine/GUI/03_input_handling.adoc[Input handling] +*** xref:Building_a_Simple_Engine/GUI/04_ui_elements.adoc[UI elements] +*** xref:Building_a_Simple_Engine/GUI/05_vulkan_integration.adoc[Vulkan integration] +*** xref:Building_a_Simple_Engine/GUI/06_conclusion.adoc[Conclusion] +** Subsystems +*** xref:Building_a_Simple_Engine/Subsystems/01_introduction.adoc[Introduction] +*** xref:Building_a_Simple_Engine/Subsystems/02_audio_basics.adoc[Audio basics] +*** xref:Building_a_Simple_Engine/Subsystems/03_vulkan_audio.adoc[Vulkan audio] +*** xref:Building_a_Simple_Engine/Subsystems/04_physics_basics.adoc[Physics basics] +*** xref:Building_a_Simple_Engine/Subsystems/05_vulkan_physics.adoc[Vulkan physics] +*** xref:Building_a_Simple_Engine/Subsystems/06_conclusion.adoc[Conclusion] +** Tooling +*** xref:Building_a_Simple_Engine/Tooling/01_introduction.adoc[Introduction] +*** xref:Building_a_Simple_Engine/Tooling/02_cicd.adoc[CI/CD] +*** xref:Building_a_Simple_Engine/Tooling/03_debugging_and_renderdoc.adoc[Debugging & RenderDoc] +*** xref:Building_a_Simple_Engine/Tooling/04_crash_minidump.adoc[Crash minidumps] +*** xref:Building_a_Simple_Engine/Tooling/05_extensions.adoc[Extensions] +*** xref:Building_a_Simple_Engine/Tooling/06_packaging_and_distribution.adoc[Packaging & distribution] +*** xref:Building_a_Simple_Engine/Tooling/07_conclusion.adoc[Conclusion] +** Mobile Development +*** xref:Building_a_Simple_Engine/Mobile_Development/01_introduction.adoc[Introduction] +*** xref:Building_a_Simple_Engine/Mobile_Development/02_platform_considerations.adoc[Platform considerations] +*** xref:Building_a_Simple_Engine/Mobile_Development/03_performance_optimizations.adoc[Performance optimizations] +*** xref:Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc[Rendering approaches] +*** xref:Building_a_Simple_Engine/Mobile_Development/05_vulkan_extensions.adoc[Vulkan extensions] +*** xref:Building_a_Simple_Engine/Mobile_Development/06_conclusion.adoc[Conclusion] +** Advanced Topics +*** xref:Building_a_Simple_Engine/Advanced_Topics/01_introduction.adoc[Introduction] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Rendering_Pipeline_Overview.adoc[Rendering pipeline overview] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Forward_ForwardPlus_Deferred.adoc[Forward vs Forward+ vs Deferred] +*** xref:Building_a_Simple_Engine/Advanced_Topics/ForwardPlus_Rendering.adoc[Forward+ rendering] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Culling.adoc[Culling] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Mipmaps_and_LOD.adoc[Mipmaps & LOD] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Push_Constants_Per_Object.adoc[Push constants per object] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Synchronization_and_Streaming.adoc[Synchronization & streaming] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Synchronization_2_Frame_Pacing.adoc[Synchronization2 & frame pacing] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Descriptor_Indexing_UpdateAfterBind.adoc[Descriptor indexing (UpdateAfterBind)] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Separate_Image_Sampler_Descriptors.adoc[Separate image/sampler descriptors] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Shader_Tile_Image.adoc[Shader tile image] +*** xref:Building_a_Simple_Engine/Advanced_Topics/GLTF_Animation.adoc[glTF animation] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Planar_Reflections.adoc[Planar reflections] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Ray_Query_Rendering.adoc[Ray query rendering] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Ray_Query_Reflections_and_Transparency.adoc[Ray query: reflections & transparency] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Dynamic_Rendering_Local_Read.adoc[Dynamic rendering local read] +*** xref:Building_a_Simple_Engine/Advanced_Topics/Robustness2.adoc[Robustness2] +** Appendix +*** xref:Building_a_Simple_Engine/Appendix/appendix.adoc[Appendix] diff --git a/attachments/simple_engine/Assets/MainEntry.png b/attachments/simple_engine/Assets/MainEntry.png new file mode 100644 index 00000000..07041317 Binary files /dev/null and b/attachments/simple_engine/Assets/MainEntry.png differ diff --git a/attachments/simple_engine/Assets/PBR_ray_shadows.png b/attachments/simple_engine/Assets/PBR_ray_shadows.png new file mode 100644 index 00000000..e7a4aca0 Binary files /dev/null and b/attachments/simple_engine/Assets/PBR_ray_shadows.png differ diff --git a/attachments/simple_engine/Assets/bookstand.png b/attachments/simple_engine/Assets/bookstand.png new file mode 100644 index 00000000..427a62a8 Binary files /dev/null and b/attachments/simple_engine/Assets/bookstand.png differ diff --git a/en/Building_a_Simple_Engine/Advanced_Topics/01_introduction.adoc b/en/Building_a_Simple_Engine/Advanced_Topics/01_introduction.adoc index 20ed1df0..40e306bd 100644 --- a/en/Building_a_Simple_Engine/Advanced_Topics/01_introduction.adoc +++ b/en/Building_a_Simple_Engine/Advanced_Topics/01_introduction.adoc @@ -6,22 +6,22 @@ Welcome — this section collects short, conversational guides that explain what Start anywhere that matches your interest: -* link:Planar_Reflections.adoc[Planar Reflections] -* link:Ray_Query_Rendering.adoc[Ray Query Rendering] -* link:Ray_Query_Reflections_and_Transparency.adoc[Ray Query Reflections and Transparency] -* link:Rendering_Pipeline_Overview.adoc[Rendering Pipeline Overview] -* link:Forward_ForwardPlus_Deferred.adoc[Forward, Forward+, Deferred] -* link:ForwardPlus_Rendering.adoc[Forward+ Rendering] -* link:Culling.adoc[Frustum Culling and Distance LOD] -* link:Mipmaps_and_LOD.adoc[Mipmaps and LOD] -* link:GLTF_Animation.adoc[glTF Animation & Transform Composition] -* link:Push_Constants_Per_Object.adoc[Push Constants (per‑object material)] -* link:Descriptor_Indexing_UpdateAfterBind.adoc[Descriptor Indexing & Stable Updates] -* link:Separate_Image_Sampler_Descriptors.adoc[Separate Image/Sampler] -* link:Synchronization_and_Streaming.adoc[Synchronization & Streaming] -* link:Synchronization_2_Frame_Pacing.adoc[Synchronization 2 & Frame Pacing] -* link:Robustness2.adoc[VK_EXT_robustness2] -* link:Dynamic_Rendering_Local_Read.adoc[Dynamic Rendering Local Read] -* link:Shader_Tile_Image.adoc[Shader Tile Image] +* xref:Building_a_Simple_Engine/Advanced_Topics/Planar_Reflections.adoc[Planar Reflections] +* xref:Building_a_Simple_Engine/Advanced_Topics/Ray_Query_Rendering.adoc[Ray Query Rendering] +* xref:Building_a_Simple_Engine/Advanced_Topics/Ray_Query_Reflections_and_Transparency.adoc[Ray Query Reflections and Transparency] +* xref:Building_a_Simple_Engine/Advanced_Topics/Rendering_Pipeline_Overview.adoc[Rendering Pipeline Overview] +* xref:Building_a_Simple_Engine/Advanced_Topics/Forward_ForwardPlus_Deferred.adoc[Forward, Forward+, Deferred] +* xref:Building_a_Simple_Engine/Advanced_Topics/ForwardPlus_Rendering.adoc[Forward+ Rendering] +* xref:Building_a_Simple_Engine/Advanced_Topics/Culling.adoc[Frustum Culling and Distance LOD] +* xref:Building_a_Simple_Engine/Advanced_Topics/Mipmaps_and_LOD.adoc[Mipmaps and LOD] +* xref:Building_a_Simple_Engine/Advanced_Topics/GLTF_Animation.adoc[glTF Animation & Transform Composition] +* xref:Building_a_Simple_Engine/Advanced_Topics/Push_Constants_Per_Object.adoc[Push Constants (per‑object material)] +* xref:Building_a_Simple_Engine/Advanced_Topics/Descriptor_Indexing_UpdateAfterBind.adoc[Descriptor Indexing & Stable Updates] +* xref:Building_a_Simple_Engine/Advanced_Topics/Separate_Image_Sampler_Descriptors.adoc[Separate Image/Sampler] +* xref:Building_a_Simple_Engine/Advanced_Topics/Synchronization_and_Streaming.adoc[Synchronization & Streaming] +* xref:Building_a_Simple_Engine/Advanced_Topics/Synchronization_2_Frame_Pacing.adoc[Synchronization 2 & Frame Pacing] +* xref:Building_a_Simple_Engine/Advanced_Topics/Robustness2.adoc[VK_EXT_robustness2] +* xref:Building_a_Simple_Engine/Advanced_Topics/Dynamic_Rendering_Local_Read.adoc[Dynamic Rendering Local Read] +* xref:Building_a_Simple_Engine/Advanced_Topics/Shader_Tile_Image.adoc[Shader Tile Image] -link:../index.html[Back to Building a Simple Engine] +xref:Building_a_Simple_Engine/introduction.adoc[Back to Building a Simple Engine] diff --git a/en/Building_a_Simple_Engine/Advanced_Topics/Planar_Reflections.adoc b/en/Building_a_Simple_Engine/Advanced_Topics/Planar_Reflections.adoc index 7c251344..3e096b83 100644 --- a/en/Building_a_Simple_Engine/Advanced_Topics/Planar_Reflections.adoc +++ b/en/Building_a_Simple_Engine/Advanced_Topics/Planar_Reflections.adoc @@ -152,9 +152,9 @@ If you want to push planar reflections further: If you’re curious about the rest of this sample: -* link:Synchronization_and_Streaming.adoc[Synchronization and Streaming] -* link:ForwardPlus_Rendering.adoc[Forward+ Rendering] -* link:Descriptor_Indexing_UpdateAfterBind.adoc[Descriptor Indexing and Stable Descriptor Updates] -* link:Rendering_Pipeline_Overview.adoc[Rendering Pipeline Overview] +* xref:Building_a_Simple_Engine/Advanced_Topics/Synchronization_and_Streaming.adoc[Synchronization and Streaming] +* xref:Building_a_Simple_Engine/Advanced_Topics/ForwardPlus_Rendering.adoc[Forward+ Rendering] +* xref:Building_a_Simple_Engine/Advanced_Topics/Descriptor_Indexing_UpdateAfterBind.adoc[Descriptor Indexing and Stable Descriptor Updates] +* xref:Building_a_Simple_Engine/Advanced_Topics/Rendering_Pipeline_Overview.adoc[Rendering Pipeline Overview] Enjoy experimenting. This approach is intentionally straightforward so you can focus on learning Vulkan’s moving parts without getting lost in a maze of techniques. diff --git a/en/Building_a_Simple_Engine/Appendix/appendix.adoc b/en/Building_a_Simple_Engine/Appendix/appendix.adoc index c0f3b8f5..a2c79ebd 100644 --- a/en/Building_a_Simple_Engine/Appendix/appendix.adoc +++ b/en/Building_a_Simple_Engine/Appendix/appendix.adoc @@ -335,5 +335,5 @@ When designing your engine architecture, consider: 3. *Team Size and Experience* - More complex architectures may be harder to work with for smaller teams. 4. *Project Scope* - A small project may not need the complexity of a full ECS. -link:../Engine_Architecture/02_architectural_patterns.adoc[Back to Architectural Patterns] -link:../Engine_Architecture/05_rendering_pipeline.adoc[Back to Rendering Pipeline] +xref:Building_a_Simple_Engine/Engine_Architecture/02_architectural_patterns.adoc[Back to Architectural Patterns] +xref:Building_a_Simple_Engine/Engine_Architecture/05_rendering_pipeline.adoc[Back to Rendering Pipeline] diff --git a/en/Building_a_Simple_Engine/Camera_Transformations/01_introduction.adoc b/en/Building_a_Simple_Engine/Camera_Transformations/01_introduction.adoc index 3385682c..28d3493c 100644 --- a/en/Building_a_Simple_Engine/Camera_Transformations/01_introduction.adoc +++ b/en/Building_a_Simple_Engine/Camera_Transformations/01_introduction.adoc @@ -22,10 +22,10 @@ By the end of this chapter, you'll have a solid understanding of 3D transformati Before starting this chapter, you should have completed the main Vulkan tutorial. You should also be familiar with: * Basic Vulkan concepts: -** xref:../../03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] -** xref:../../03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] -* xref:../../04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:../../04_Vertex_buffers/03_Index_buffer.adoc[index buffers] -* xref:../../05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] +** xref:03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] +** xref:03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] +* xref:04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:04_Vertex_buffers/03_Index_buffer.adoc[index buffers] +* xref:05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] * Basic programming concepts and C++ -link:02_math_foundations.adoc[Next: Mathematical Foundations] +xref:Building_a_Simple_Engine/Engine_Architecture/conclusion.adoc[Previous: Engine Architecture Conclusion] | xref:Building_a_Simple_Engine/Camera_Transformations/02_math_foundations.adoc[Next: Mathematical Foundations] diff --git a/en/Building_a_Simple_Engine/Camera_Transformations/02_math_foundations.adoc b/en/Building_a_Simple_Engine/Camera_Transformations/02_math_foundations.adoc index c0b68442..36be87d2 100644 --- a/en/Building_a_Simple_Engine/Camera_Transformations/02_math_foundations.adoc +++ b/en/Building_a_Simple_Engine/Camera_Transformations/02_math_foundations.adoc @@ -1102,4 +1102,4 @@ If you're finding some of the mathematical concepts challenging or want to deepe These resources should help you gain a deeper understanding of the mathematical concepts used in 3D graphics and camera systems. If you're struggling with a particular concept, try looking at multiple resources as different explanations might resonate better with your learning style. -link:03_transformation_matrices.adoc[Next: Transformation Matrices] +xref:Building_a_Simple_Engine/Camera_Transformations/01_introduction.adoc[Previous: Introduction] | xref:Building_a_Simple_Engine/Camera_Transformations/03_transformation_matrices.adoc[Next: Transformation Matrices] diff --git a/en/Building_a_Simple_Engine/Camera_Transformations/03_transformation_matrices.adoc b/en/Building_a_Simple_Engine/Camera_Transformations/03_transformation_matrices.adoc index f1cd791a..6815ee90 100644 --- a/en/Building_a_Simple_Engine/Camera_Transformations/03_transformation_matrices.adoc +++ b/en/Building_a_Simple_Engine/Camera_Transformations/03_transformation_matrices.adoc @@ -173,4 +173,4 @@ glm::mat4 childWorldModel = parentModel * localModel; In the next section, we'll implement a camera system that uses these transformation concepts to navigate our 3D scenes. -link:04_camera_implementation.adoc[Next: Camera Implementation] +xref:Building_a_Simple_Engine/Camera_Transformations/02_math_foundations.adoc[Previous: Mathematical Foundations] | xref:Building_a_Simple_Engine/Camera_Transformations/04_camera_implementation.adoc[Next: Camera Implementation] diff --git a/en/Building_a_Simple_Engine/Camera_Transformations/04_camera_implementation.adoc b/en/Building_a_Simple_Engine/Camera_Transformations/04_camera_implementation.adoc index 8ba538c4..ccf420e2 100644 --- a/en/Building_a_Simple_Engine/Camera_Transformations/04_camera_implementation.adoc +++ b/en/Building_a_Simple_Engine/Camera_Transformations/04_camera_implementation.adoc @@ -686,9 +686,9 @@ void gameLoop(float deltaTime) { [NOTE] ==== -For more advanced camera techniques, refer to the Advanced Camera Techniques section in the link:../Appendix/appendix.adoc[Appendix]. +For more advanced camera techniques, refer to the Advanced Camera Techniques section in the xref:Building_a_Simple_Engine/Appendix/appendix.adoc[Appendix]. ==== In the next section, we'll integrate our camera system with Vulkan to render 3D scenes. -link:05_vulkan_integration.adoc[Next: Vulkan Integration] +xref:Building_a_Simple_Engine/Camera_Transformations/03_transformation_matrices.adoc[Previous: Transformation Matrices] | xref:Building_a_Simple_Engine/Camera_Transformations/05_vulkan_integration.adoc[Next: Vulkan Integration] diff --git a/en/Building_a_Simple_Engine/Camera_Transformations/05_vulkan_integration.adoc b/en/Building_a_Simple_Engine/Camera_Transformations/05_vulkan_integration.adoc index 7c26cdba..c945590f 100644 --- a/en/Building_a_Simple_Engine/Camera_Transformations/05_vulkan_integration.adoc +++ b/en/Building_a_Simple_Engine/Camera_Transformations/05_vulkan_integration.adoc @@ -24,7 +24,7 @@ To keep the integration digestible, think of it in five small steps: [NOTE] ==== -See link:04_transformation_matrices.adoc[Camera transformation matricies] and link:04_camera_implementation.adoc[Camera implementation] for a refresher on Matrix math. +See xref:Building_a_Simple_Engine/Camera_Transformations/03_transformation_matrices.adoc[Transformation matrices] and xref:Building_a_Simple_Engine/Camera_Transformations/04_camera_implementation.adoc[Camera implementation] for a refresher on matrix math. ==== === Uniform Buffer Setup @@ -294,4 +294,4 @@ With these components in place, we now have a fully functional camera system int In the next section, we'll wrap up with a conclusion and discuss potential improvements to our camera system. -link:06_conclusion.adoc[Next: Conclusion] +xref:Building_a_Simple_Engine/Camera_Transformations/04_camera_implementation.adoc[Previous: Camera Implementation] | xref:Building_a_Simple_Engine/Camera_Transformations/06_conclusion.adoc[Next: Conclusion] diff --git a/en/Building_a_Simple_Engine/Camera_Transformations/06_conclusion.adoc b/en/Building_a_Simple_Engine/Camera_Transformations/06_conclusion.adoc index 34017228..03383c11 100644 --- a/en/Building_a_Simple_Engine/Camera_Transformations/06_conclusion.adoc +++ b/en/Building_a_Simple_Engine/Camera_Transformations/06_conclusion.adoc @@ -52,4 +52,4 @@ A well-designed camera system is essential for any 3D application. It serves as Remember that the code provided in this chapter is a starting point. Feel free to modify and extend it to suit your specific needs and application requirements. -link:../Engine_Architecture/conclusion.adoc[Previous: Engine Architecture] | link:../Lighting_Materials/01_introduction.adoc[Next: Lighting & Materials] +xref:Building_a_Simple_Engine/Camera_Transformations/05_vulkan_integration.adoc[Previous: Vulkan Integration] | xref:Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc[Next: Lighting & Materials] diff --git a/en/Building_a_Simple_Engine/Camera_Transformations/index.adoc b/en/Building_a_Simple_Engine/Camera_Transformations/index.adoc index 20d96305..5c142458 100644 --- a/en/Building_a_Simple_Engine/Camera_Transformations/index.adoc +++ b/en/Building_a_Simple_Engine/Camera_Transformations/index.adoc @@ -6,9 +6,9 @@ This chapter covers the implementation of a 3D camera system and the mathematica == Contents -* link:01_introduction.adoc[Introduction] -* link:02_math_foundations.adoc[Mathematical Foundations] -* link:03_transformation_matrices.adoc[Transformation Matrices] -* link:04_camera_implementation.adoc[Camera Implementation] -* link:05_vulkan_integration.adoc[Vulkan Integration] -* link:06_conclusion.adoc[Conclusion] +* xref:Building_a_Simple_Engine/Camera_Transformations/01_introduction.adoc[Introduction] +* xref:Building_a_Simple_Engine/Camera_Transformations/02_math_foundations.adoc[Mathematical Foundations] +* xref:Building_a_Simple_Engine/Camera_Transformations/03_transformation_matrices.adoc[Transformation Matrices] +* xref:Building_a_Simple_Engine/Camera_Transformations/04_camera_implementation.adoc[Camera Implementation] +* xref:Building_a_Simple_Engine/Camera_Transformations/05_vulkan_integration.adoc[Vulkan Integration] +* xref:Building_a_Simple_Engine/Camera_Transformations/06_conclusion.adoc[Conclusion] diff --git a/en/Building_a_Simple_Engine/Engine_Architecture/01_introduction.adoc b/en/Building_a_Simple_Engine/Engine_Architecture/01_introduction.adoc index 0a53384c..880b89a2 100644 --- a/en/Building_a_Simple_Engine/Engine_Architecture/01_introduction.adoc +++ b/en/Building_a_Simple_Engine/Engine_Architecture/01_introduction.adoc @@ -40,10 +40,10 @@ Modern {cpp} features play a crucial role in our implementation approach. Smart You should also be familiar with the following chapters from the main tutorial: * Basic Vulkan concepts: -** xref:../../03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] -** xref:../../03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] -* xref:../../04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:../../04_Vertex_buffers/03_Index_buffer.adoc[index buffers] -* xref:../../05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] +** xref:03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] +** xref:03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] +* xref:04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:04_Vertex_buffers/03_Index_buffer.adoc[index buffers] +* xref:05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] === Why Architecture Matters @@ -59,4 +59,4 @@ Performance opportunities often emerge from architectural decisions made early i Let's begin our exploration of engine architecture with an overview of common architectural patterns used in modern rendering engines. -link:02_architectural_patterns.adoc[Next: Architectural Patterns] +xref:Building_a_Simple_Engine/introduction.adoc[Previous: Building a Simple Engine Introduction] | xref:Building_a_Simple_Engine/Engine_Architecture/02_architectural_patterns.adoc[Next: Architectural Patterns] diff --git a/en/Building_a_Simple_Engine/Engine_Architecture/02_architectural_patterns.adoc b/en/Building_a_Simple_Engine/Engine_Architecture/02_architectural_patterns.adoc index b2e6a395..7fd93f95 100644 --- a/en/Building_a_Simple_Engine/Engine_Architecture/02_architectural_patterns.adoc +++ b/en/Building_a_Simple_Engine/Engine_Architecture/02_architectural_patterns.adoc @@ -23,7 +23,7 @@ image::../../../images/layered_architecture_diagram.png[Layered Architecture Dia * Easier to understand and maintain * Can replace or modify individual layers without affecting others -For detailed information and implementation examples, see the link:../Appendix/appendix.adoc#layered-architecture[Appendix: Layered Architecture]. +For detailed information and implementation examples, see the xref:Building_a_Simple_Engine/Appendix/appendix.adoc#layered-architecture[Appendix: Layered Architecture]. ==== link:https://www.youtube.com/watch?v=rX0ItVEVjHc[Data-Oriented Design] @@ -36,7 +36,7 @@ image::../../../images/data_oriented_design_diagram.svg[Data-Oriented Design Dia * More efficient memory usage * Easier to parallelize -For detailed information and implementation examples, see the link:../Appendix/appendix.adoc#data-oriented-design[Appendix: Data-Oriented Design]. +For detailed information and implementation examples, see the xref:Building_a_Simple_Engine/Appendix/appendix.adoc#data-oriented-design[Appendix: Data-Oriented Design]. ==== link:https://gameprogrammingpatterns.com/service-locator.html[Service Locator Pattern] @@ -49,7 +49,7 @@ image::../../../images/service_locator_pattern_diagram.svg[Service Locator Patte * Allows for easy service replacement * Facilitates testing with mock services -For detailed information and implementation examples, see the link:../Appendix/appendix.adoc#service-locator-pattern[Appendix: Service Locator Pattern]. +For detailed information and implementation examples, see the xref:Building_a_Simple_Engine/Appendix/appendix.adoc#service-locator-pattern[Appendix: Service Locator Pattern]. === link:https://gameprogrammingpatterns.com/component.html[Component-Based Architecture] @@ -164,8 +164,8 @@ While other architectural patterns have their merits, component-based architectu === Conclusion -We've provided a brief overview of common architectural patterns, with a focus on Component-Based Architecture which we'll use throughout this tutorial. For more detailed information about other architectural patterns, including implementation examples and comparative analysis, see the link:../Appendix/appendix.adoc[Appendix: Detailed Architectural Patterns]. +We've provided a brief overview of common architectural patterns, with a focus on Component-Based Architecture which we'll use throughout this tutorial. For more detailed information about other architectural patterns, including implementation examples and comparative analysis, see the xref:Building_a_Simple_Engine/Appendix/appendix.adoc[Appendix: Detailed Architectural Patterns]. In the next section, we'll dive deeper into component systems and how to implement them effectively in your engine. -link:01_introduction.adoc[Previous: Introduction] | link:03_component_systems.adoc[Next: Component Systems] +xref:Building_a_Simple_Engine/Engine_Architecture/01_introduction.adoc[Previous: Introduction] | xref:Building_a_Simple_Engine/Engine_Architecture/03_component_systems.adoc[Next: Component Systems] diff --git a/en/Building_a_Simple_Engine/Engine_Architecture/03_component_systems.adoc b/en/Building_a_Simple_Engine/Engine_Architecture/03_component_systems.adoc index a717797f..c68b880e 100644 --- a/en/Building_a_Simple_Engine/Engine_Architecture/03_component_systems.adoc +++ b/en/Building_a_Simple_Engine/Engine_Architecture/03_component_systems.adoc @@ -542,4 +542,4 @@ Component systems provide a flexible and modular approach to building game objec In the next section, we'll explore resource management systems, which are crucial for efficiently handling assets in your engine. -link:02_architectural_patterns.adoc[Previous: Architectural Patterns] | link:04_resource_management.adoc[Next: Resource Management] +xref:Building_a_Simple_Engine/Engine_Architecture/02_architectural_patterns.adoc[Previous: Architectural Patterns] | xref:Building_a_Simple_Engine/Engine_Architecture/04_resource_management.adoc[Next: Resource Management] diff --git a/en/Building_a_Simple_Engine/Engine_Architecture/04_resource_management.adoc b/en/Building_a_Simple_Engine/Engine_Architecture/04_resource_management.adoc index 8feb8151..f48645e5 100644 --- a/en/Building_a_Simple_Engine/Engine_Architecture/04_resource_management.adoc +++ b/en/Building_a_Simple_Engine/Engine_Architecture/04_resource_management.adoc @@ -917,4 +917,4 @@ A well-designed resource management system is crucial for efficiently handling a In the next section, we'll explore rendering pipeline design, which will build upon the resource management system to create a flexible and efficient rendering system. -link:03_component_systems.adoc[Previous: Component Systems] | link:05_rendering_pipeline.adoc[Next: Rendering Pipeline] +xref:Building_a_Simple_Engine/Engine_Architecture/03_component_systems.adoc[Previous: Component Systems] | xref:Building_a_Simple_Engine/Engine_Architecture/05_rendering_pipeline.adoc[Next: Rendering Pipeline] diff --git a/en/Building_a_Simple_Engine/Engine_Architecture/05_rendering_pipeline.adoc b/en/Building_a_Simple_Engine/Engine_Architecture/05_rendering_pipeline.adoc index c7aee139..a9b7d493 100644 --- a/en/Building_a_Simple_Engine/Engine_Architecture/05_rendering_pipeline.adoc +++ b/en/Building_a_Simple_Engine/Engine_Architecture/05_rendering_pipeline.adoc @@ -529,10 +529,10 @@ Proper synchronization is crucial in Vulkan because: The vulkan tutorial includes a more detailed discussion of synchronization, the proper uses of the primitives described above. -* xref:../../03_Drawing_a_triangle/03_Drawing/02_Rendering_and_presentation.adoc[Synchronization] -* xref:../../03_Drawing_a_triangle/03_Drawing/03_Frames_in_flight.adoc[Frames In Flight] -* xref:../../11_Compute_Shader.adoc[Compute Shader] -* xref:../../17_Multithreading.adoc[Multithreading] +* xref:03_Drawing_a_triangle/03_Drawing/02_Rendering_and_presentation.adoc[Synchronization] +* xref:03_Drawing_a_triangle/03_Drawing/03_Frames_in_flight.adoc[Frames In Flight] +* xref:11_Compute_Shader.adoc[Compute Shader] +* xref:17_Multithreading.adoc[Multithreading] ===== Pipeline Barriers @@ -1499,7 +1499,7 @@ private: === Advanced Rendering Techniques -For detailed information about advanced rendering techniques such as Deferred Rendering, Forward+ Rendering, and Physically Based Rendering (PBR), please refer to the link:../Appendix/appendix.adoc#advanced-rendering-techniques[Advanced Rendering Techniques] section in the Appendix. This section includes references to valuable resources for further reading. +For detailed information about advanced rendering techniques such as Deferred Rendering, Forward+ Rendering, and Physically Based Rendering (PBR), please refer to the xref:Building_a_Simple_Engine/Appendix/appendix.adoc#advanced-rendering-techniques[Advanced Rendering Techniques] section in the Appendix. This section includes references to valuable resources for further reading. === Conclusion @@ -1512,4 +1512,4 @@ A well-designed rendering pipeline is essential for creating a flexible and effi In the next section, we'll explore event systems, which provide a flexible way for different parts of your engine to communicate with each other. -link:04_resource_management.adoc[Previous: Resource Management] | link:06_event_systems.adoc[Next: Event Systems] +xref:Building_a_Simple_Engine/Engine_Architecture/04_resource_management.adoc[Previous: Resource Management] | xref:Building_a_Simple_Engine/Engine_Architecture/06_event_systems.adoc[Next: Event Systems] diff --git a/en/Building_a_Simple_Engine/Engine_Architecture/06_event_systems.adoc b/en/Building_a_Simple_Engine/Engine_Architecture/06_event_systems.adoc index 8e6c4ab1..64c6c5aa 100644 --- a/en/Building_a_Simple_Engine/Engine_Architecture/06_event_systems.adoc +++ b/en/Building_a_Simple_Engine/Engine_Architecture/06_event_systems.adoc @@ -565,4 +565,4 @@ This concludes our exploration of engine architecture. In this chapter, we've co With these foundations in place, you're well-equipped to build a robust and flexible rendering engine that can be extended to support a wide range of features and techniques. -link:05_rendering_pipeline.adoc[Previous: Rendering Pipeline] | link:conclusion.adoc[Next: Conclusion] +xref:Building_a_Simple_Engine/Engine_Architecture/05_rendering_pipeline.adoc[Previous: Rendering Pipeline] | xref:conclusion.adoc[Next: Conclusion] diff --git a/en/Building_a_Simple_Engine/Engine_Architecture/conclusion.adoc b/en/Building_a_Simple_Engine/Engine_Architecture/conclusion.adoc index 6cdd1be0..80d3bd1c 100644 --- a/en/Building_a_Simple_Engine/Engine_Architecture/conclusion.adoc +++ b/en/Building_a_Simple_Engine/Engine_Architecture/conclusion.adoc @@ -36,7 +36,7 @@ The architectural foundation we've established in this chapter will support ever Active implementation proves far more valuable than passive reading when learning engine architecture. Build the code examples as you encounter them, but don't stop there—experiment with variations to understand how different approaches affect your engine's behavior. This experimentation develops the intuitive understanding that separates competent engine developers from those who merely copy implementations. -The architectural concepts we've covered provide a foundation, but production engines require additional sophistication. The link:../Appendix/appendix.adoc[Appendix] explores advanced rendering techniques and architectural patterns that build on these fundamentals, helping you understand how simple patterns scale to handle complex real-world requirements. +The architectural concepts we've covered provide a foundation, but production engines require additional sophistication. The xref:Building_a_Simple_Engine/Appendix/appendix.adoc[Appendix] explores advanced rendering techniques and architectural patterns that build on these fundamentals, helping you understand how simple patterns scale to handle complex real-world requirements. Studying existing open-source engines like link:https://github.com/TheCherno/Hazel[Hazel] or examining the architectural decisions in established frameworks like link:https://github.com/LWJGL/lwjgl3[LWJGL] provides valuable perspective on how these concepts apply in practice. Look for patterns we've discussed and notice how different engines make different trade-offs based on their specific goals and constraints. @@ -50,4 +50,4 @@ Building a rendering engine is a challenging but rewarding endeavor. By applying Good luck with your engine development journey! -link:06_event_systems.adoc[Previous: Event Systems] | link:../Camera_Transformations/01_introduction.adoc[Next: Camera Transformations] +xref:Building_a_Simple_Engine/Engine_Architecture/06_event_systems.adoc[Previous: Event Systems] | xref:Building_a_Simple_Engine/Camera_Transformations/01_introduction.adoc[Next: Camera Transformations] diff --git a/en/Building_a_Simple_Engine/GUI/01_introduction.adoc b/en/Building_a_Simple_Engine/GUI/01_introduction.adoc index b3b2b67a..b5dab669 100644 --- a/en/Building_a_Simple_Engine/GUI/01_introduction.adoc +++ b/en/Building_a_Simple_Engine/GUI/01_introduction.adoc @@ -35,12 +35,12 @@ A basic understanding of input handling concepts will help you follow along as w You should also be familiar with the following chapters from the main tutorial: * Basic Vulkan concepts: -** xref:../../03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] -** xref:../../03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] -* xref:../../04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:../../04_Vertex_buffers/03_Index_buffer.adoc[index buffers] -* xref:../../05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] -* xref:../../06_Texture_mapping/00_Images.adoc[Texture mapping] +** xref:03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] +** xref:03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] +* xref:04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:04_Vertex_buffers/03_Index_buffer.adoc[index buffers] +* xref:05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] +* xref:06_Texture_mapping/00_Images.adoc[Texture mapping] Let's begin by exploring how to implement a professional GUI system with Dear ImGui and Vulkan. -link:../Lighting_Materials/06_conclusion.adoc[Previous: Lighting & Materials Conclusion] | link:02_imgui_setup.adoc[Next: Setting Up Dear ImGui] +xref:Building_a_Simple_Engine/Lighting_Materials/06_conclusion.adoc[Previous: Lighting & Materials Conclusion] | xref:Building_a_Simple_Engine/GUI/02_imgui_setup.adoc[Next: Setting Up Dear ImGui] diff --git a/en/Building_a_Simple_Engine/GUI/02_imgui_setup.adoc b/en/Building_a_Simple_Engine/GUI/02_imgui_setup.adoc index 02587aba..ca969605 100644 --- a/en/Building_a_Simple_Engine/GUI/02_imgui_setup.adoc +++ b/en/Building_a_Simple_Engine/GUI/02_imgui_setup.adoc @@ -845,4 +845,4 @@ With this implementation, you have a Vulkan implementation for ImGui that allows In the next section, we'll explore how to handle input for both the GUI and the 3D scene. -link:01_introduction.adoc[Previous: Introduction] | link:03_input_handling.adoc[Next: Input Handling] +xref:Building_a_Simple_Engine/GUI/01_introduction.adoc[Previous: Introduction] | xref:Building_a_Simple_Engine/GUI/03_input_handling.adoc[Next: Input Handling] diff --git a/en/Building_a_Simple_Engine/GUI/03_input_handling.adoc b/en/Building_a_Simple_Engine/GUI/03_input_handling.adoc index b28760cc..80716122 100644 --- a/en/Building_a_Simple_Engine/GUI/03_input_handling.adoc +++ b/en/Building_a_Simple_Engine/GUI/03_input_handling.adoc @@ -498,4 +498,4 @@ private: With these advanced input handling techniques, your application can provide a consistent and intuitive user experience. In the next section, we'll explore how to create various UI elements to control your application. -link:02_imgui_setup.adoc[Previous: Setting Up Dear ImGui] | link:04_ui_elements.adoc[Next: UI Elements] +xref:Building_a_Simple_Engine/GUI/02_imgui_setup.adoc[Previous: Setting Up Dear ImGui] | xref:Building_a_Simple_Engine/GUI/04_ui_elements.adoc[Next: UI Elements] diff --git a/en/Building_a_Simple_Engine/GUI/04_ui_elements.adoc b/en/Building_a_Simple_Engine/GUI/04_ui_elements.adoc index ad4b9688..3a838e07 100644 --- a/en/Building_a_Simple_Engine/GUI/04_ui_elements.adoc +++ b/en/Building_a_Simple_Engine/GUI/04_ui_elements.adoc @@ -668,4 +668,4 @@ By thoughtfully integrating ImGui with your Vulkan application and implementing In the next section, we'll explore more details about integrating the GUI rendering with the Vulkan rendering pipeline. -link:03_input_handling.adoc[Previous: Input Handling] | link:05_vulkan_integration.adoc[Next: Vulkan Integration] +xref:Building_a_Simple_Engine/GUI/03_input_handling.adoc[Previous: Input Handling] | xref:Building_a_Simple_Engine/GUI/05_vulkan_integration.adoc[Next: Vulkan Integration] diff --git a/en/Building_a_Simple_Engine/GUI/05_vulkan_integration.adoc b/en/Building_a_Simple_Engine/GUI/05_vulkan_integration.adoc index 718b588b..e6f13d49 100644 --- a/en/Building_a_Simple_Engine/GUI/05_vulkan_integration.adoc +++ b/en/Building_a_Simple_Engine/GUI/05_vulkan_integration.adoc @@ -986,4 +986,4 @@ With this knowledge, you can create a robust GUI system for your Vulkan applicat In the next section, we'll wrap up with a conclusion and discuss potential improvements to our GUI system. -link:04_ui_elements.adoc[Previous: UI Elements] | link:06_conclusion.adoc[Next: Conclusion] +xref:Building_a_Simple_Engine/GUI/04_ui_elements.adoc[Previous: UI Elements] | xref:Building_a_Simple_Engine/GUI/06_conclusion.adoc[Next: Conclusion] diff --git a/en/Building_a_Simple_Engine/GUI/06_conclusion.adoc b/en/Building_a_Simple_Engine/GUI/06_conclusion.adoc index b1929d37..46d1eeb5 100644 --- a/en/Building_a_Simple_Engine/GUI/06_conclusion.adoc +++ b/en/Building_a_Simple_Engine/GUI/06_conclusion.adoc @@ -110,4 +110,4 @@ Remember that the code provided in this chapter is a starting point. Feel free t In the next chapter, we'll explore how to load and render 3D models, which will allow us to create more complex and visually interesting scenes. -link:05_vulkan_integration.adoc[Previous: Vulkan Integration] | link:../Loading_Models/01_introduction.adoc[Next: Loading Models] +xref:Building_a_Simple_Engine/GUI/05_vulkan_integration.adoc[Previous: Vulkan Integration] | xref:Building_a_Simple_Engine/Loading_Models/01_introduction.adoc[Next: Loading Models] diff --git a/en/Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc b/en/Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc index 2e1c89fa..ef8537b0 100644 --- a/en/Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc +++ b/en/Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc @@ -184,4 +184,4 @@ By the end of this chapter, you'll understand: Let's get started by exploring the principles of Physically Based Rendering in more detail. -link:../Camera_Transformations/06_conclusion.adoc[Previous: Camera Transformations - Conclusion] | link:02_lighting_models.adoc[Next: Lighting Models] +xref:Building_a_Simple_Engine/Camera_Transformations/06_conclusion.adoc[Previous: Camera Transformations - Conclusion] | xref:Building_a_Simple_Engine/Lighting_Materials/02_lighting_models.adoc[Next: Lighting Models] diff --git a/en/Building_a_Simple_Engine/Lighting_Materials/02_lighting_models.adoc b/en/Building_a_Simple_Engine/Lighting_Materials/02_lighting_models.adoc index e138ffa2..e9a5ded5 100644 --- a/en/Building_a_Simple_Engine/Lighting_Materials/02_lighting_models.adoc +++ b/en/Building_a_Simple_Engine/Lighting_Materials/02_lighting_models.adoc @@ -113,6 +113,8 @@ Considerations for using PBR: For comprehensive information on PBR, see the link:https://www.pbr-book.org/[Physically Based Rendering book]. +image::../attachments/simple_engine/Assets/PBR_ray_shadows.png[PBR materials with ray-traced shadows - demonstrating metallic surfaces, roughness variation, and realistic shadow rendering] + == Lighting Models in glTF The glTF format uses PBR with the metallic-roughness workflow, which defines materials using these primary parameters: @@ -186,4 +188,4 @@ To deepen your understanding of lighting models, here are some valuable resource In the next section, we'll explore how to use push constants to efficiently pass material properties to our shaders. -link:01_introduction.adoc[Previous: Introduction] | link:03_push_constants.adoc[Next: Push Constants] +xref:Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc[Previous: Introduction] | xref:Building_a_Simple_Engine/Lighting_Materials/03_push_constants.adoc[Next: Push Constants] diff --git a/en/Building_a_Simple_Engine/Lighting_Materials/03_push_constants.adoc b/en/Building_a_Simple_Engine/Lighting_Materials/03_push_constants.adoc index 46957165..fc740160 100644 --- a/en/Building_a_Simple_Engine/Lighting_Materials/03_push_constants.adoc +++ b/en/Building_a_Simple_Engine/Lighting_Materials/03_push_constants.adoc @@ -127,4 +127,4 @@ For our PBR implementation, we'll use push constants for material properties and In the next section, we'll implement a basic lighting shader that uses push constants for material properties. -link:02_lighting_models.adoc[Previous: Lighting Models] | link:04_lighting_implementation.adoc[Next: Lighting Implementation] +xref:Building_a_Simple_Engine/Lighting_Materials/02_lighting_models.adoc[Previous: Lighting Models] | xref:Building_a_Simple_Engine/Lighting_Materials/04_lighting_implementation.adoc[Next: Lighting Implementation] diff --git a/en/Building_a_Simple_Engine/Lighting_Materials/04_lighting_implementation.adoc b/en/Building_a_Simple_Engine/Lighting_Materials/04_lighting_implementation.adoc index 5e75b552..bddaa951 100644 --- a/en/Building_a_Simple_Engine/Lighting_Materials/04_lighting_implementation.adoc +++ b/en/Building_a_Simple_Engine/Lighting_Materials/04_lighting_implementation.adoc @@ -783,4 +783,4 @@ void Renderer::pushMaterialProperties(vk::CommandBuffer commandBuffer, const Mod In the next section, we'll integrate our lighting implementation with the rest of the Vulkan rendering pipeline. -link:03_push_constants.adoc[Previous: Push Constants] | link:05_vulkan_integration.adoc[Next: Vulkan Integration] +xref:Building_a_Simple_Engine/Lighting_Materials/03_push_constants.adoc[Previous: Push Constants] | xref:Building_a_Simple_Engine/Lighting_Materials/05_vulkan_integration.adoc[Next: Vulkan Integration] diff --git a/en/Building_a_Simple_Engine/Lighting_Materials/05_vulkan_integration.adoc b/en/Building_a_Simple_Engine/Lighting_Materials/05_vulkan_integration.adoc index 68913314..dcf7c1d2 100644 --- a/en/Building_a_Simple_Engine/Lighting_Materials/05_vulkan_integration.adoc +++ b/en/Building_a_Simple_Engine/Lighting_Materials/05_vulkan_integration.adoc @@ -11,7 +11,7 @@ To keep the flow concrete and avoid repeating earlier theory, use this quick roa [NOTE] ==== -We won’t re-explain PBR theory or push-constant fundamentals here. See Lighting_Materials/03_push_constants.adoc for push constants and Lighting_Materials/01_introduction.adoc (and 05_pbr_rendering.adoc) for PBR concepts. +We won’t re-explain PBR theory or push-constant fundamentals here. See xref:Building_a_Simple_Engine/Lighting_Materials/03_push_constants.adoc[push constants], and xref:Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc[Introduction] (and xref:Building_a_Simple_Engine/Loading_Models/05_pbr_rendering.adoc[PBR Rendering]) for PBR concepts. ==== The PBR pass slots into the graphics pipeline as shown below: @@ -146,7 +146,7 @@ void Renderer::recordCommandBuffer(vk::CommandBuffer commandBuffer, uint32_t ima == PBR Shader Reference -This chapter reuses the exact PBR shader defined in the previous section to avoid duplication and drift. Please refer to link:04_lighting_implementation.adoc[Implementing the PBR Shader] for the full pbr.slang source and detailed explanations. Here we focus strictly on Vulkan integration: pipeline layout, descriptor bindings, push constants, and draw submission. +This chapter reuses the exact PBR shader defined in the previous section to avoid duplication and drift. Please refer to xref:Building_a_Simple_Engine/Lighting_Materials/04_lighting_implementation.adoc[Implementing the PBR Shader] for the full pbr.slang source and detailed explanations. Here we focus strictly on Vulkan integration: pipeline layout, descriptor bindings, push constants, and draw submission. == Compiling the Shader @@ -218,4 +218,4 @@ This approach provides a solid foundation for rendering physically accurate mate In the next section, we'll explore how to add high-quality shadows using Vulkan Ray Query. -link:04_lighting_implementation.adoc[Previous: Lighting Implementation] | link:07_shadows.adoc[Next: Shadows] +xref:Building_a_Simple_Engine/Lighting_Materials/04_lighting_implementation.adoc[Previous: Lighting Implementation] | xref:Building_a_Simple_Engine/Lighting_Materials/07_shadows.adoc[Next: Shadows] diff --git a/en/Building_a_Simple_Engine/Lighting_Materials/06_conclusion.adoc b/en/Building_a_Simple_Engine/Lighting_Materials/06_conclusion.adoc index 3a98ddb1..9570e372 100644 --- a/en/Building_a_Simple_Engine/Lighting_Materials/06_conclusion.adoc +++ b/en/Building_a_Simple_Engine/Lighting_Materials/06_conclusion.adoc @@ -41,4 +41,4 @@ Remember that lighting is a complex topic with many approaches and techniques. T In the next chapter, we'll explore GUI implementation, which will allow us to create interactive user interfaces for our applications. -link:07_shadows.adoc[Previous: Shadows] | link:../GUI/01_introduction.adoc[Next: GUI - Introduction] +xref:Building_a_Simple_Engine/Lighting_Materials/07_shadows.adoc[Previous: Shadows] | xref:Building_a_Simple_Engine/GUI/01_introduction.adoc[Next: GUI] diff --git a/en/Building_a_Simple_Engine/Lighting_Materials/07_shadows.adoc b/en/Building_a_Simple_Engine/Lighting_Materials/07_shadows.adoc index b1a03df1..3d740b5f 100644 --- a/en/Building_a_Simple_Engine/Lighting_Materials/07_shadows.adoc +++ b/en/Building_a_Simple_Engine/Lighting_Materials/07_shadows.adoc @@ -203,4 +203,4 @@ Shadows are a deep topic. Now that you understand how to implement basic and sof In the next chapter, we'll look at how to add a Graphical User Interface (GUI) to control these lighting and shadow parameters in real-time. -link:06_conclusion.adoc[Previous: Conclusion] | link:../GUI/01_introduction.adoc[Next: GUI - Introduction] +xref:Building_a_Simple_Engine/Lighting_Materials/05_vulkan_integration.adoc[Previous: Vulkan Integration] | xref:Building_a_Simple_Engine/Lighting_Materials/06_conclusion.adoc[Next: Conclusion] diff --git a/en/Building_a_Simple_Engine/Lighting_Materials/index.adoc b/en/Building_a_Simple_Engine/Lighting_Materials/index.adoc index 9a8f152a..ef2f8fad 100644 --- a/en/Building_a_Simple_Engine/Lighting_Materials/index.adoc +++ b/en/Building_a_Simple_Engine/Lighting_Materials/index.adoc @@ -6,10 +6,10 @@ This chapter covers the implementation of basic lighting models and the use of p == Contents -* link:01_introduction.adoc[Introduction] -* link:02_lighting_models.adoc[Lighting Models] -* link:03_push_constants.adoc[Push Constants] -* link:04_lighting_implementation.adoc[Lighting Implementation] -* link:05_vulkan_integration.adoc[Vulkan Integration] -* link:07_shadows.adoc[Shadows] -* link:06_conclusion.adoc[Conclusion] +* xref:Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc[Introduction] +* xref:Building_a_Simple_Engine/Lighting_Materials/02_lighting_models.adoc[Lighting Models] +* xref:Building_a_Simple_Engine/Lighting_Materials/03_push_constants.adoc[Push Constants] +* xref:Building_a_Simple_Engine/Lighting_Materials/04_lighting_implementation.adoc[Lighting Implementation] +* xref:Building_a_Simple_Engine/Lighting_Materials/05_vulkan_integration.adoc[Vulkan Integration] +* xref:Building_a_Simple_Engine/Lighting_Materials/07_shadows.adoc[Shadows] +* xref:Building_a_Simple_Engine/Lighting_Materials/06_conclusion.adoc[Conclusion] diff --git a/en/Building_a_Simple_Engine/Loading_Models/01_introduction.adoc b/en/Building_a_Simple_Engine/Loading_Models/01_introduction.adoc index 373e36c8..00052a75 100644 --- a/en/Building_a_Simple_Engine/Loading_Models/01_introduction.adoc +++ b/en/Building_a_Simple_Engine/Loading_Models/01_introduction.adoc @@ -6,7 +6,7 @@ Welcome to the "Loading Models" chapter of our "Building a Simple Engine" series! After exploring engine architecture and camera systems in the previous chapters, we're now ready to focus on handling 3D assets within our engine framework. -In this chapter, we'll set up a robust model loading system that can handle modern 3D assets. Building upon the engine architecture we've established and the camera system we've implemented, we'll now add the ability to load and render complex 3D models. In the link:../../15_GLTF_KTX2_Migration.html[chapter on glTF and KTX2] from the main tutorial, we learned about migrating from OBJ to glTF format and the basics of loading glTF models. Now, we'll integrate that knowledge into our engine structure to create a more complete implementation. +In this chapter, we'll set up a robust model loading system that can handle modern 3D assets. Building upon the engine architecture we've established and the camera system we've implemented, we'll now add the ability to load and render complex 3D models. In the xref:15_GLTF_KTX2_Migration.adoc[chapter on glTF and KTX2] from the main tutorial, we learned about migrating from OBJ to glTF format and the basics of loading glTF models. Now, we'll integrate that knowledge into our engine structure to create a more complete implementation. This chapter will transform your understanding of 3D asset handling from simple model loading to sophisticated engine-level systems. We'll begin by building a scene graph, which provides the hierarchical organization that complex 3D scenes require. This foundation enables you to group objects logically, apply transformations at different levels, and efficiently manage scene complexity. @@ -22,12 +22,12 @@ Throughout this implementation, we'll structure our code with engine-level think This chapter builds on the foundation established in the main Vulkan tutorial, particularly Chapter 16 (Multiple Objects), as we'll extend those concepts to handle more complex scene organization and asset management. The multiple objects chapter introduced the basic concepts of rendering different geometry, which we'll now scale up to handle complete 3D models with materials and animations. -You'll need solid familiarity with core Vulkan concepts that form the backbone of our model loading system. xref:../../03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] become more complex when handling multiple models with different materials, as we'll need to manage descriptor sets and push constants efficiently. Understanding xref:../../03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[graphics pipelines] is crucial since different materials might require different pipeline configurations. +You'll need solid familiarity with core Vulkan concepts that form the backbone of our model loading system. xref:03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] become more complex when handling multiple models with different materials, as we'll need to manage descriptor sets and push constants efficiently. Understanding xref:03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[graphics pipelines] is crucial since different materials might require different pipeline configurations. -Experience with xref:../../04_Vertex_buffers/00_Vertex_input_description.adoc[vertex] and xref:../../04_Vertex_buffers/03_Index_buffer.adoc[index buffers] translates directly to model loading, where glTF files contain vertex data in specific formats that we'll need to parse and upload to GPU buffers. xref:../../05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] knowledge becomes essential as we'll use them for transformation matrices, lighting information, and material properties. +Experience with xref:04_Vertex_buffers/00_Vertex_input_description.adoc[vertex] and xref:04_Vertex_buffers/03_Index_buffer.adoc[index buffers] translates directly to model loading, where glTF files contain vertex data in specific formats that we'll need to parse and upload to GPU buffers. xref:05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] knowledge becomes essential as we'll use them for transformation matrices, lighting information, and material properties. -xref:../../06_Texture_mapping/00_Images.adoc[Texture mapping] skills are particularly important since glTF models often include multiple textures per material (diffuse, normal, metallic-roughness, etc.), and we'll need to load and bind these textures efficiently. +xref:06_Texture_mapping/00_Images.adoc[Texture mapping] skills are particularly important since glTF models often include multiple textures per material (diffuse, normal, metallic-roughness, etc.), and we'll need to load and bind these textures efficiently. -Finally, basic 3D math understanding (matrices, vectors, quaternions) is crucial for handling model transformations, animations, and scene hierarchies. If you need a refresher, see the xref:../../Building_a_Simple_Engine/Camera_Transformations/02_math_foundations.adoc[Camera Transformations chapter] for detailed coverage of these mathematical concepts. +Finally, basic 3D math understanding (matrices, vectors, quaternions) is crucial for handling model transformations, animations, and scene hierarchies. If you need a refresher, see the xref:Building_a_Simple_Engine/Camera_Transformations/02_math_foundations.adoc[Camera Transformations chapter] for detailed coverage of these mathematical concepts. -link:../GUI/06_conclusion.adoc[Previous: GUI] | link:02_project_setup.adoc[Next: Setting Up the Project] +xref:Building_a_Simple_Engine/GUI/06_conclusion.adoc[Previous: GUI] | xref:Building_a_Simple_Engine/Loading_Models/02_project_setup.adoc[Next: Setting Up the Project] diff --git a/en/Building_a_Simple_Engine/Loading_Models/02_project_setup.adoc b/en/Building_a_Simple_Engine/Loading_Models/02_project_setup.adoc index c6d136c6..80f94c53 100644 --- a/en/Building_a_Simple_Engine/Loading_Models/02_project_setup.adoc +++ b/en/Building_a_Simple_Engine/Loading_Models/02_project_setup.adoc @@ -373,4 +373,4 @@ At runtime, our engine will: By implementing these specific approaches, our engine will have a robust and efficient asset pipeline that aligns with the general concepts discussed earlier in this chapter. -link:03_model_system.adoc[Next: Implementing the Model Loading System] +xref:Building_a_Simple_Engine/Loading_Models/01_introduction.adoc[Previous: Introduction] | xref:Building_a_Simple_Engine/Loading_Models/03_model_system.adoc[Next: Implementing the Model Loading System] diff --git a/en/Building_a_Simple_Engine/Loading_Models/03_model_system.adoc b/en/Building_a_Simple_Engine/Loading_Models/03_model_system.adoc index b9d4bde3..61989dc3 100644 --- a/en/Building_a_Simple_Engine/Loading_Models/03_model_system.adoc +++ b/en/Building_a_Simple_Engine/Loading_Models/03_model_system.adoc @@ -13,7 +13,7 @@ === Building on glTF Knowledge -As we learned in the link:../../15_GLTF_KTX2_Migration.html[glTF and KTX2 Migration chapter], glTF is a modern 3D format that supports a wide range of features including PBR materials, animations, and scene hierarchies. In this chapter, we'll leverage these capabilities to build a more robust engine. +As we learned in the xref:15_GLTF_KTX2_Migration.adoc[glTF and KTX2 Migration chapter], glTF is a modern 3D format that supports a wide range of features including PBR materials, animations, and scene hierarchies. In this chapter, we'll leverage these capabilities to build a more robust engine. While the previous chapter covered the basics of loading glTF models, here we'll focus on organizing the loaded data into a proper scene graph and implementing animation support. This approach will allow us to create more complex and dynamic scenes. @@ -392,4 +392,4 @@ struct Model { Now that we've designed our model system's architecture and implemented the core data structures, the next step is to actually load 3D models from glTF files. In the next chapter, we'll explore how to parse glTF files using the tinygltf library and populate our scene graph with the loaded data. We'll learn how to extract meshes, materials, textures, and animations from glTF files and convert them into our engine's internal representation. -link:02_project_setup.adoc[Previous: Setting Up the Project] | link:04_loading_gltf.adoc[Next: Loading a glTF Model] +xref:Building_a_Simple_Engine/Loading_Models/02_project_setup.adoc[Previous: Setting Up the Project] | xref:Building_a_Simple_Engine/Loading_Models/04_loading_gltf.adoc[Next: Loading a glTF Model] diff --git a/en/Building_a_Simple_Engine/Loading_Models/04_loading_gltf.adoc b/en/Building_a_Simple_Engine/Loading_Models/04_loading_gltf.adoc index 96c49727..6f67f818 100644 --- a/en/Building_a_Simple_Engine/Loading_Models/04_loading_gltf.adoc +++ b/en/Building_a_Simple_Engine/Loading_Models/04_loading_gltf.adoc @@ -124,7 +124,7 @@ glTF comes in two formats, each with its own advantages: [NOTE] ==== -This section provides a brief overview of PBR materials as they relate to glTF loading. For a more comprehensive explanation of PBR concepts and lighting models, please refer to the link:../../Lighting_Materials/02_lighting_models.adoc#physically-based-rendering-pbr[Physically Based Rendering section] in the Lighting Materials chapter. +This section provides a brief overview of PBR materials as they relate to glTF loading. For a more comprehensive explanation of PBR concepts and lighting models, please refer to the xref:Building_a_Simple_Engine/Lighting_Materials/02_lighting_models.adoc#physically-based-rendering-pbr[Physically Based Rendering section] in the Lighting Materials chapter. ==== Materials define how surfaces look when rendered. Modern games and engines use Physically Based Rendering (PBR), which simulates how light interacts with real-world materials based on physical principles. @@ -165,6 +165,8 @@ These properties can be specified as constant values or as texture maps for spatial variation across the surface. We'll go into details about PBR in the next few chapters. +image::../attachments/simple_engine/Assets/bookstand.png[Bookstand with complex PBR materials - demonstrating wood, glass, metal, and paper textures with varied material properties] + ==== Texture Formats and Compression In our engine, we use KTX2 with Basis Universal compression for textures. This approach offers several advantages: @@ -807,4 +809,4 @@ In the next chapter, we'll explore how to render these models using physically-based rendering techniques, bringing our loaded assets to life with realistic lighting and materials. -link:03_model_system.adoc[Previous: Implementing the Model Loading System] | link:05_pbr_rendering.adoc[Next: Implementing PBR Rendering] +xref:Building_a_Simple_Engine/Loading_Models/03_model_system.adoc[Previous: Implementing the Model Loading System] | xref:Building_a_Simple_Engine/Loading_Models/05_pbr_rendering.adoc[Next: Implementing PBR Rendering] diff --git a/en/Building_a_Simple_Engine/Loading_Models/05_pbr_rendering.adoc b/en/Building_a_Simple_Engine/Loading_Models/05_pbr_rendering.adoc index 2c8ea1b9..b75586b8 100644 --- a/en/Building_a_Simple_Engine/Loading_Models/05_pbr_rendering.adoc +++ b/en/Building_a_Simple_Engine/Loading_Models/05_pbr_rendering.adoc @@ -6,9 +6,9 @@ === Building on PBR Knowledge -In the link:../Lighting_Materials/01_introduction.adoc[Lighting & Materials chapter], we explored the fundamentals of Physically Based Rendering (PBR), including its core principles, the BRDF, and material properties. Now, we'll apply that knowledge to implement a PBR pipeline for the glTF models we've loaded. +In the xref:Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc[Lighting & Materials chapter], we explored the fundamentals of Physically Based Rendering (PBR), including its core principles, the BRDF, and material properties. Now, we'll apply that knowledge to implement a PBR pipeline for the glTF models we've loaded. -As we learned in the link:../../15_GLTF_KTX2_Migration.html[glTF and KTX2 Migration chapter], glTF uses PBR with the metallic-roughness workflow for its material system. This aligns perfectly with the PBR concepts we've already covered, making it straightforward to render our glTF models with physically accurate lighting. +As we learned in the xref:15_GLTF_KTX2_Migration.adoc[glTF and KTX2 Migration chapter], glTF uses PBR with the metallic-roughness workflow for its material system. This aligns perfectly with the PBR concepts we've already covered, making it straightforward to render our glTF models with physically accurate lighting. === Leveraging glTF's PBR Materials @@ -61,7 +61,7 @@ This uniform buffer includes: [NOTE] ==== -We introduced push constants earlier in link:../Lighting_Materials/03_push_constants.adoc[push constants]; here we focus on how the same mechanism carries glTF metallic‑roughness material knobs efficiently per draw. +We introduced push constants earlier in xref:Building_a_Simple_Engine/Lighting_Materials/03_push_constants.adoc[push constants]; here we focus on how the same mechanism carries glTF metallic‑roughness material knobs efficiently per draw. ==== We'll use link:https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/vkspec.html#descriptorsets-pushconstant[push constants] to pass material properties to the shader: @@ -574,4 +574,4 @@ In the next chapter, we'll explore how to render multiple objects with different If you want to dive deeper into lighting and materials, refer back to the Lighting & Materials chapter, where we explored the theory behind PBR in detail. -link:04_loading_gltf.adoc[Previous: Loading a glTF Model] | link:06_multiple_objects.adoc[Next: Rendering Multiple Objects] +xref:Building_a_Simple_Engine/Loading_Models/04_loading_gltf.adoc[Previous: Loading a glTF Model] | xref:Building_a_Simple_Engine/Loading_Models/06_multiple_objects.adoc[Next: Rendering Multiple Objects] diff --git a/en/Building_a_Simple_Engine/Loading_Models/06_multiple_objects.adoc b/en/Building_a_Simple_Engine/Loading_Models/06_multiple_objects.adoc index a312af10..719ae212 100644 --- a/en/Building_a_Simple_Engine/Loading_Models/06_multiple_objects.adoc +++ b/en/Building_a_Simple_Engine/Loading_Models/06_multiple_objects.adoc @@ -784,4 +784,4 @@ In this chapter, we've explored how to manage and render multiple objects in a 3 These techniques form the foundation for creating complex, visually rich 3D scenes. In the next chapter, we'll build upon this foundation to implement a complete scene rendering system that integrates all the components we've developed so far. -link:05_pbr_rendering.adoc[Previous: Understanding Physically Based Rendering] | link:07_scene_rendering.adoc[Next: Rendering the Scene] +xref:Building_a_Simple_Engine/Loading_Models/05_pbr_rendering.adoc[Previous: Understanding Physically Based Rendering] | xref:Building_a_Simple_Engine/Loading_Models/07_scene_rendering.adoc[Next: Rendering the Scene] diff --git a/en/Building_a_Simple_Engine/Loading_Models/07_scene_rendering.adoc b/en/Building_a_Simple_Engine/Loading_Models/07_scene_rendering.adoc index 53ef3b65..37184d08 100644 --- a/en/Building_a_Simple_Engine/Loading_Models/07_scene_rendering.adoc +++ b/en/Building_a_Simple_Engine/Loading_Models/07_scene_rendering.adoc @@ -190,7 +190,7 @@ glm::mat4 getLocalMatrix() { [NOTE] ==== -We covered PBR material theory and shader details earlier in link:05_pbr_rendering.adoc[PBR Rendering], so we won't restate that here. This section focuses on the wiring: how material properties are packed into push constants and consumed by the draw call in this chapter's context. +We covered PBR material theory and shader details earlier in xref:Building_a_Simple_Engine/Loading_Models/05_pbr_rendering.adoc[PBR Rendering], so we won't restate that here. This section focuses on the wiring: how material properties are packed into push constants and consumed by the draw call in this chapter's context. ==== If the node has a mesh, we need to set up its material properties before rendering: @@ -702,4 +702,4 @@ In this chapter, we've explored the process of rendering a scene using a scene g The scene rendering system we've built is flexible and extensible, allowing for the rendering of complex scenes with multiple objects, materials, and lighting conditions. In the next chapter, we'll build on this foundation to implement animations, bringing our scenes to life. -link:06_multiple_objects.adoc[Previous: Rendering Multiple Objects] | link:08_animations.adoc[Next: Updating Animations] +xref:Building_a_Simple_Engine/Loading_Models/06_multiple_objects.adoc[Previous: Rendering Multiple Objects] | xref:Building_a_Simple_Engine/Loading_Models/08_animations.adoc[Next: Updating Animations] diff --git a/en/Building_a_Simple_Engine/Loading_Models/08_animations.adoc b/en/Building_a_Simple_Engine/Loading_Models/08_animations.adoc index a71400d0..e5667c92 100644 --- a/en/Building_a_Simple_Engine/Loading_Models/08_animations.adoc +++ b/en/Building_a_Simple_Engine/Loading_Models/08_animations.adoc @@ -19,7 +19,7 @@ glTF provides a standardized way to store and transfer animations, which our eng === Animation Data Structures -As we saw in the link:03_model_system.adoc[Model System chapter], our engine uses several structures to represent animations: +As we saw in the xref:Building_a_Simple_Engine/Loading_Models/03_model_system.adoc[Model System chapter], our engine uses several structures to represent animations: [source,cpp] ---- @@ -1064,4 +1064,4 @@ Our animation system provides a solid foundation for bringing 3D models to life. In the next chapter, we'll wrap up our exploration of the model loading system and discuss future enhancements. -link:07_scene_rendering.adoc[Previous: Rendering the Scene] | link:09_conclusion.adoc[Next: Conclusion] +xref:Building_a_Simple_Engine/Loading_Models/07_scene_rendering.adoc[Previous: Rendering the Scene] | xref:Building_a_Simple_Engine/Loading_Models/09_conclusion.adoc[Next: Conclusion] diff --git a/en/Building_a_Simple_Engine/Loading_Models/09_conclusion.adoc b/en/Building_a_Simple_Engine/Loading_Models/09_conclusion.adoc index 54e45925..469b5835 100644 --- a/en/Building_a_Simple_Engine/Loading_Models/09_conclusion.adoc +++ b/en/Building_a_Simple_Engine/Loading_Models/09_conclusion.adoc @@ -4,7 +4,7 @@ == Conclusion -In this chapter, we've completed our simple engine by integrating model loading capabilities with the architecture and camera systems developed in the previous chapters. Building upon our knowledge of glTF from the link:../../15_GLTF_KTX2_Migration.html[main tutorial], we've implemented: +In this chapter, we've completed our simple engine by integrating model loading capabilities with the architecture and camera systems developed in the previous chapters. Building upon our knowledge of glTF from the xref:15_GLTF_KTX2_Migration.adoc[main tutorial], we've implemented: 1. A hierarchical scene graph for organizing 3D objects 2. Support for glTF animations @@ -23,6 +23,6 @@ As you continue to develop your engine, consider exploring these advanced topics The code for this chapter can be found in the `simple_engine/20_loading_models.cpp` file. -link:../../attachments/simple_engine/20_loading_models.cpp[C{pp} code] +link:{attachmentsdir}/simple_engine/20_loading_models.cpp[C{pp} code] -link:08_animations.adoc[Previous: Updating Animations] | link:../Subsystems/01_introduction.adoc[Next: Subsystems] | link:../index.html[Back to Building a Simple Engine] +xref:Building_a_Simple_Engine/Loading_Models/08_animations.adoc[Previous: Updating Animations] | xref:Building_a_Simple_Engine/Subsystems/01_introduction.adoc[Next: Subsystems] | xref:../index.adoc[Back to Building a Simple Engine] diff --git a/en/Building_a_Simple_Engine/Loading_Models/index.adoc b/en/Building_a_Simple_Engine/Loading_Models/index.adoc index 7e8bf09e..4e7c1a9d 100644 --- a/en/Building_a_Simple_Engine/Loading_Models/index.adoc +++ b/en/Building_a_Simple_Engine/Loading_Models/index.adoc @@ -8,16 +8,16 @@ Welcome to the third chapter of the "Building a Simple Engine" series! After exp This chapter is divided into several sections to make it easier to follow: -1. link:01_introduction.adoc[Introduction] - An overview of what we'll be building and prerequisites -2. link:02_project_setup.adoc[Setting Up the Project] - How to structure our engine project -3. link:03_model_system.adoc[Implementing the Model Loading System] - Creating the core data structures -4. link:04_loading_gltf.adoc[Loading a glTF Model] - Parsing and processing glTF files -5. link:05_pbr_rendering.adoc[Implementing PBR Rendering] - Setting up physically-based rendering -6. link:06_multiple_objects.adoc[Rendering Multiple Objects] - Managing multiple model instances -7. link:07_scene_rendering.adoc[Rendering the Scene] - Drawing the scene graph -8. link:08_animations.adoc[Updating Animations] - Animating models -9. link:09_conclusion.adoc[Conclusion] - Summary and future directions +1. xref:Building_a_Simple_Engine/Loading_Models/01_introduction.adoc[Introduction] - An overview of what we'll be building and prerequisites +2. xref:Building_a_Simple_Engine/Loading_Models/02_project_setup.adoc[Setting Up the Project] - How to structure our engine project +3. xref:Building_a_Simple_Engine/Loading_Models/03_model_system.adoc[Implementing the Model Loading System] - Creating the core data structures +4. xref:Building_a_Simple_Engine/Loading_Models/04_loading_gltf.adoc[Loading a glTF Model] - Parsing and processing glTF files +5. xref:Building_a_Simple_Engine/Loading_Models/05_pbr_rendering.adoc[Implementing PBR Rendering] - Setting up physically-based rendering +6. xref:Building_a_Simple_Engine/Loading_Models/06_multiple_objects.adoc[Rendering Multiple Objects] - Managing multiple model instances +7. xref:Building_a_Simple_Engine/Loading_Models/07_scene_rendering.adoc[Rendering the Scene] - Drawing the scene graph +8. xref:Building_a_Simple_Engine/Loading_Models/08_animations.adoc[Updating Animations] - Animating models +9. xref:Building_a_Simple_Engine/Loading_Models/09_conclusion.adoc[Conclusion] - Summary and future directions Each section builds upon the previous ones, so it's recommended to follow them in order. This chapter also builds upon the concepts introduced in the Engine Architecture and Camera Transformations chapters. By completing this chapter, you'll have a comprehensive foundation for a Vulkan-based 3D engine with a well-structured architecture, camera system, and model loading capabilities. -link:../index.html[Back to Building a Simple Engine] +xref:../index.adoc[Back to Building a Simple Engine] diff --git a/en/Building_a_Simple_Engine/Mobile_Development/01_introduction.adoc b/en/Building_a_Simple_Engine/Mobile_Development/01_introduction.adoc index 1516aa64..15b0ff9d 100644 --- a/en/Building_a_Simple_Engine/Mobile_Development/01_introduction.adoc +++ b/en/Building_a_Simple_Engine/Mobile_Development/01_introduction.adoc @@ -29,12 +29,12 @@ Understanding basic mobile development concepts will provide crucial context for You should also be familiar with the following chapters from the main tutorial: * Basic Vulkan concepts: -** xref:../../03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] -** xref:../../03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] -* xref:../../04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:../../04_Vertex_buffers/03_Index_buffer.adoc[index buffers] -* xref:../../05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] -* xref:../../11_Compute_Shader.adoc[Compute shaders] +** xref:03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] +** xref:03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] +* xref:04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:04_Vertex_buffers/03_Index_buffer.adoc[index buffers] +* xref:05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] +* xref:11_Compute_Shader.adoc[Compute shaders] Let's begin by exploring the platform considerations for Android and iOS. -link:../Tooling/07_conclusion.adoc[Previous: Tooling Conclusion] | link:02_platform_considerations.adoc[Next: Platform Considerations for Android and iOS] +xref:Building_a_Simple_Engine/Tooling/07_conclusion.adoc[Previous: Tooling Conclusion] | xref:Building_a_Simple_Engine/Mobile_Development/02_platform_considerations.adoc[Next: Platform Considerations for Android and iOS] diff --git a/en/Building_a_Simple_Engine/Mobile_Development/02_platform_considerations.adoc b/en/Building_a_Simple_Engine/Mobile_Development/02_platform_considerations.adoc index 467eb51b..4d929c35 100644 --- a/en/Building_a_Simple_Engine/Mobile_Development/02_platform_considerations.adoc +++ b/en/Building_a_Simple_Engine/Mobile_Development/02_platform_considerations.adoc @@ -194,4 +194,4 @@ the capabilities of the device, rather than making assumptions based on the plat In the next section, we'll explore performance optimizations specifically tailored for mobile hardware, focusing on texture formats and memory usage. -link:01_introduction.adoc[Previous: Introduction] | link:03_performance_optimizations.adoc[Next: Performance Optimizations for Mobile] +xref:Building_a_Simple_Engine/Mobile_Development/01_introduction.adoc[Previous: Introduction] | xref:Building_a_Simple_Engine/Mobile_Development/03_performance_optimizations.adoc[Next: Performance Optimizations for Mobile] diff --git a/en/Building_a_Simple_Engine/Mobile_Development/03_performance_optimizations.adoc b/en/Building_a_Simple_Engine/Mobile_Development/03_performance_optimizations.adoc index ed9dcdc1..7d9ff048 100644 --- a/en/Building_a_Simple_Engine/Mobile_Development/03_performance_optimizations.adoc +++ b/en/Building_a_Simple_Engine/Mobile_Development/03_performance_optimizations.adoc @@ -8,14 +8,14 @@ Mobile devices have significantly different hardware constraints compared to des [NOTE] ==== -This chapter covers general mobile performance. For practices that arise specifically because the GPU is tile-based (TBR), see link:04_rendering_approaches.adoc[Rendering Approaches: Tile-Based Rendering]. +This chapter covers general mobile performance. For practices that arise specifically because the GPU is tile-based (TBR), see xref:Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc[Rendering Approaches: Tile-Based Rendering]. ==== === Texture Optimizations [NOTE] ==== -We focus on mobile‑specific decisions here. For general Vulkan image creation, staging uploads, and descriptor setup, refer back to earlier chapters in the engine series—link:../Engine_Architecture/04_resource_management.adoc[Resource Management], link:../Engine_Architecture/05_rendering_pipeline.adoc[Rendering Pipeline]—or the Vulkan Guide (https://docs.vulkan.org/guide/latest/). +We focus on mobile‑specific decisions here. For general Vulkan image creation, staging uploads, and descriptor setup, refer back to earlier chapters in the engine series—xref:Building_a_Simple_Engine/Engine_Architecture/04_resource_management.adoc[Resource Management], xref:Building_a_Simple_Engine/Engine_Architecture/05_rendering_pipeline.adoc[Rendering Pipeline]—or the Vulkan Guide (https://docs.vulkan.org/guide/latest/). ==== Textures are often the largest consumers of memory in a graphics application. Optimizing them is crucial for performance on both mobile and desktop. @@ -188,7 +188,7 @@ struct OptimizedVertex { [NOTE] ==== -If you are targeting tile-based GPUs (TBR), bandwidth can be heavily impacted by attachment load/store behavior and tile flushes. See link:04_rendering_approaches.adoc[Rendering Approaches] — sections “Attachment Load/Store Operations on Tilers” and “Pipelining on Tilers: Subpass Dependencies and BY_REGION” for concrete guidance. +If you are targeting tile-based GPUs (TBR), bandwidth can be heavily impacted by attachment load/store behavior and tile flushes. See xref:Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc[Rendering Approaches] — sections “Attachment Load/Store Operations on Tilers” and “Pipelining on Tilers: Subpass Dependencies and BY_REGION” for concrete guidance. ==== === Draw Call Optimizations @@ -203,7 +203,7 @@ Mobile GPUs are particularly sensitive to draw call overhead: [NOTE] ==== -On tile-based GPUs, reducing CPU overhead is important, but keeping work and data on-chip via proper pipelining and subpasses often yields larger gains. See link:04_rendering_approaches.adoc[Rendering Approaches] — “Pipelining on Tilers: Subpass Dependencies and BY_REGION” for barrier/subpass patterns, and “Attachment Load/Store Operations on Tilers” for loadOp/storeOp guidance that avoids external memory traffic. +On tile-based GPUs, reducing CPU overhead is important, but keeping work and data on-chip via proper pipelining and subpasses often yields larger gains. See xref:Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc[Rendering Approaches] — “Pipelining on Tilers: Subpass Dependencies and BY_REGION” for barrier/subpass patterns, and “Attachment Load/Store Operations on Tilers” for loadOp/storeOp guidance that avoids external memory traffic. ==== === Vendor-Specific Optimizations @@ -257,4 +257,4 @@ vk::Format get_optimal_texture_format(vk::PhysicalDevice physical_device) { In the next section, we'll explore different rendering approaches for mobile GPUs, focusing on the differences between Tile-Based Rendering (TBR) and Immediate Mode Rendering (IMR). -link:02_platform_considerations.adoc[Previous: Platform Considerations] | link:04_rendering_approaches.adoc[Next: Rendering Approaches] +xref:Building_a_Simple_Engine/Mobile_Development/02_platform_considerations.adoc[Previous: Platform Considerations] | xref:Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc[Next: Rendering Approaches] diff --git a/en/Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc b/en/Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc index e1a5db0c..0b9b86d9 100644 --- a/en/Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc +++ b/en/Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc @@ -378,4 +378,4 @@ Regardless of the rendering architecture, these practices will help optimize per In the next section, we'll explore Vulkan extensions that can help you optimize performance on mobile devices, particularly those that leverage the tile-based architecture. -link:03_performance_optimizations.adoc[Previous: Performance Optimizations] | link:05_vulkan_extensions.adoc[Next: Vulkan Extensions for Mobile] +xref:Building_a_Simple_Engine/Mobile_Development/03_performance_optimizations.adoc[Previous: Performance Optimizations] | xref:Building_a_Simple_Engine/Mobile_Development/05_vulkan_extensions.adoc[Next: Vulkan Extensions for Mobile] diff --git a/en/Building_a_Simple_Engine/Mobile_Development/05_vulkan_extensions.adoc b/en/Building_a_Simple_Engine/Mobile_Development/05_vulkan_extensions.adoc index 8db4ca5e..41433c60 100644 --- a/en/Building_a_Simple_Engine/Mobile_Development/05_vulkan_extensions.adoc +++ b/en/Building_a_Simple_Engine/Mobile_Development/05_vulkan_extensions.adoc @@ -391,4 +391,4 @@ consider these optimizations: In the next section, we'll conclude our exploration of mobile development with a summary of key takeaways and best practices. -link:04_rendering_approaches.adoc[Previous: Rendering Approaches] | link:06_conclusion.adoc[Next: Conclusion] +xref:Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc[Previous: Rendering Approaches] | xref:Building_a_Simple_Engine/Mobile_Development/06_conclusion.adoc[Next: Conclusion] diff --git a/en/Building_a_Simple_Engine/Mobile_Development/06_conclusion.adoc b/en/Building_a_Simple_Engine/Mobile_Development/06_conclusion.adoc index f07b1e45..1afb5aaa 100644 --- a/en/Building_a_Simple_Engine/Mobile_Development/06_conclusion.adoc +++ b/en/Building_a_Simple_Engine/Mobile_Development/06_conclusion.adoc @@ -193,17 +193,17 @@ private: The following short, focused tutorials build directly on the Simple Engine and are great next steps: -- link:../Advanced_Topics/01_introduction.adoc[Tutorials Index — browse all topics] -- link:../Advanced_Topics/Mipmaps_and_LOD.adoc[Mipmaps and LOD] — practical guidance on stable texture sampling and anisotropy. -- link:../Advanced_Topics/Dynamic_Rendering_Local_Read.adoc[Dynamic Rendering Local Read] — optimize same‑pass reads via tile/local memory when supported. +- xref:Building_a_Simple_Engine/Advanced_Topics/01_introduction.adoc[Tutorials Index — browse all topics] +- xref:Building_a_Simple_Engine/Advanced_Topics/Mipmaps_and_LOD.adoc[Mipmaps and LOD] — practical guidance on stable texture sampling and anisotropy. +- xref:Building_a_Simple_Engine/Advanced_Topics/Dynamic_Rendering_Local_Read.adoc[Dynamic Rendering Local Read] — optimize same‑pass reads via tile/local memory when supported. === Code Examples The complete code for this chapter can be found in the following files: -link:../../attachments/simple_engine/36_mobile_platform_integration.cpp[Mobile Platform Integration C{pp} code] -link:../../attachments/simple_engine/37_mobile_optimizations.cpp[Mobile Optimizations C{pp} code] -link:../../attachments/simple_engine/38_tbr_optimizations.cpp[TBR Optimizations C{pp} code] -link:../../attachments/simple_engine/39_mobile_extensions.cpp[Mobile Extensions C{pp} code] +link:{attachmentsdir}/simple_engine/36_mobile_platform_integration.cpp[Mobile Platform Integration C{pp} code] +link:{attachmentsdir}/simple_engine/37_mobile_optimizations.cpp[Mobile Optimizations C{pp} code] +link:{attachmentsdir}/simple_engine/38_tbr_optimizations.cpp[TBR Optimizations C{pp} code] +link:{attachmentsdir}/simple_engine/39_mobile_extensions.cpp[Mobile Extensions C{pp} code] -link:05_vulkan_extensions.adoc[Previous: Vulkan Extensions for Mobile] | link:../index.html[Back to Building a Simple Engine] +xref:Building_a_Simple_Engine/Mobile_Development/05_vulkan_extensions.adoc[Previous: Vulkan Extensions for Mobile] | xref:../index.adoc[Back to Building a Simple Engine] diff --git a/en/Building_a_Simple_Engine/Mobile_Development/index.adoc b/en/Building_a_Simple_Engine/Mobile_Development/index.adoc index d4975d67..faae4786 100644 --- a/en/Building_a_Simple_Engine/Mobile_Development/index.adoc +++ b/en/Building_a_Simple_Engine/Mobile_Development/index.adoc @@ -5,11 +5,11 @@ This chapter covers the essential aspects of adapting your Vulkan engine for mobile platforms, focusing on Android and iOS development, performance optimizations, rendering approaches, and mobile-specific Vulkan extensions. -* link:01_introduction.adoc[Introduction] -* link:02_platform_considerations.adoc[Platform Considerations for Android and iOS] -* link:03_performance_optimizations.adoc[Performance Optimizations for Mobile] -* link:04_rendering_approaches.adoc[Rendering Approaches: TBR vs IMR] -* link:05_vulkan_extensions.adoc[Vulkan Extensions for Mobile] -* link:06_conclusion.adoc[Conclusion] - -link:../Tooling/07_conclusion.adoc[Previous: Tooling Conclusion] | link:../index.html[Back to Building a Simple Engine] +* xref:Building_a_Simple_Engine/Mobile_Development/01_introduction.adoc[Introduction] +* xref:Building_a_Simple_Engine/Mobile_Development/02_platform_considerations.adoc[Platform Considerations for Android and iOS] +* xref:Building_a_Simple_Engine/Mobile_Development/03_performance_optimizations.adoc[Performance Optimizations for Mobile] +* xref:Building_a_Simple_Engine/Mobile_Development/04_rendering_approaches.adoc[Rendering Approaches: TBR vs IMR] +* xref:Building_a_Simple_Engine/Mobile_Development/05_vulkan_extensions.adoc[Vulkan Extensions for Mobile] +* xref:Building_a_Simple_Engine/Mobile_Development/06_conclusion.adoc[Conclusion] + +xref:Building_a_Simple_Engine/Tooling/07_conclusion.adoc[Previous: Tooling Conclusion] | xref:../index.adoc[Back to Building a Simple Engine] diff --git a/en/Building_a_Simple_Engine/Subsystems/01_introduction.adoc b/en/Building_a_Simple_Engine/Subsystems/01_introduction.adoc index 28a0fbff..03500a99 100644 --- a/en/Building_a_Simple_Engine/Subsystems/01_introduction.adoc +++ b/en/Building_a_Simple_Engine/Subsystems/01_introduction.adoc @@ -65,12 +65,12 @@ A basic understanding of audio and physics concepts in game development will hel You should also be familiar with the following chapters from the main tutorial: * Basic Vulkan concepts: -** xref:../../03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] -** xref:../../03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] -* xref:../../04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:../../04_Vertex_buffers/03_Index_buffer.adoc[index buffers] -* xref:../../05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] -* xref:../../11_Compute_Shader.adoc[Compute shaders] +** xref:03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] +** xref:03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] +* xref:04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:04_Vertex_buffers/03_Index_buffer.adoc[index buffers] +* xref:05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] +* xref:11_Compute_Shader.adoc[Compute shaders] Let's begin by exploring how to implement a basic audio subsystem and then enhance it with Vulkan's computational capabilities. -link:../Loading_Models/09_conclusion.adoc[Previous: Loading Models Conclusion] | link:02_audio_basics.adoc[Next: Audio Basics] +xref:Building_a_Simple_Engine/Loading_Models/09_conclusion.adoc[Previous: Loading Models Conclusion] | xref:Building_a_Simple_Engine/Subsystems/02_audio_basics.adoc[Next: Audio Basics] diff --git a/en/Building_a_Simple_Engine/Subsystems/02_audio_basics.adoc b/en/Building_a_Simple_Engine/Subsystems/02_audio_basics.adoc index b95f64ae..6d295c3a 100644 --- a/en/Building_a_Simple_Engine/Subsystems/02_audio_basics.adoc +++ b/en/Building_a_Simple_Engine/Subsystems/02_audio_basics.adoc @@ -240,4 +240,4 @@ While this basic audio system provides the essential functionality for playing s In the next section, we'll explore how Vulkan compute shaders can address these limitations by offloading audio processing to the GPU, particularly for implementing more realistic spatial audio through Head-Related Transfer Functions (HRTF). -link:01_introduction.adoc[Previous: Introduction] | link:03_vulkan_audio.adoc[Next: Vulkan for Audio Processing] +xref:Building_a_Simple_Engine/Subsystems/01_introduction.adoc[Previous: Introduction] | xref:Building_a_Simple_Engine/Subsystems/03_vulkan_audio.adoc[Next: Vulkan for Audio Processing] diff --git a/en/Building_a_Simple_Engine/Subsystems/03_vulkan_audio.adoc b/en/Building_a_Simple_Engine/Subsystems/03_vulkan_audio.adoc index 55b94585..ccd9ee01 100644 --- a/en/Building_a_Simple_Engine/Subsystems/03_vulkan_audio.adoc +++ b/en/Building_a_Simple_Engine/Subsystems/03_vulkan_audio.adoc @@ -431,4 +431,4 @@ By implementing Vulkan-based HRTF processing in our engine, we're following indu In the next section, we'll shift our focus to the physics subsystem and explore how Vulkan compute shaders can accelerate physics simulations. -link:02_audio_basics.adoc[Previous: Audio Basics] | link:04_physics_basics.adoc[Next: Physics Basics] +xref:Building_a_Simple_Engine/Subsystems/02_audio_basics.adoc[Previous: Audio Basics] | xref:Building_a_Simple_Engine/Subsystems/04_physics_basics.adoc[Next: Physics Basics] diff --git a/en/Building_a_Simple_Engine/Subsystems/04_physics_basics.adoc b/en/Building_a_Simple_Engine/Subsystems/04_physics_basics.adoc index 5ade0ea9..d892b184 100644 --- a/en/Building_a_Simple_Engine/Subsystems/04_physics_basics.adoc +++ b/en/Building_a_Simple_Engine/Subsystems/04_physics_basics.adoc @@ -563,4 +563,4 @@ While this basic physics system provides the essential functionality for simulat In the next section, we'll explore how Vulkan compute shaders can address these limitations by offloading physics calculations to the GPU, particularly for large-scale simulations with many objects. -link:03_vulkan_audio.adoc[Previous: Vulkan for Audio Processing] | link:05_vulkan_physics.adoc[Next: Vulkan for Physics Simulation] +xref:Building_a_Simple_Engine/Subsystems/03_vulkan_audio.adoc[Previous: Vulkan for Audio Processing] | xref:Building_a_Simple_Engine/Subsystems/05_vulkan_physics.adoc[Next: Vulkan for Physics Simulation] diff --git a/en/Building_a_Simple_Engine/Subsystems/05_vulkan_physics.adoc b/en/Building_a_Simple_Engine/Subsystems/05_vulkan_physics.adoc index 6157f080..73e149dd 100644 --- a/en/Building_a_Simple_Engine/Subsystems/05_vulkan_physics.adoc +++ b/en/Building_a_Simple_Engine/Subsystems/05_vulkan_physics.adoc @@ -45,7 +45,7 @@ Let's extend our physics system to include Vulkan-accelerated components. We’l [NOTE] ==== -We avoid repeating Vulkan compute fundamentals here; focus stays on physics‑specific wiring. Use earlier chapters (link:../Engine_Architecture/04_resource_management.adoc[Resource Management], link:../Engine_Architecture/05_rendering_pipeline.adoc[Rendering Pipeline]) or the Vulkan Guide (https://docs.vulkan.org/guide/latest/) if you need a refresher on descriptors, buffers, or pipeline creation. +We avoid repeating Vulkan compute fundamentals here; focus stays on physics‑specific wiring. Use earlier chapters (xref:Building_a_Simple_Engine/Engine_Architecture/04_resource_management.adoc[Resource Management], xref:Building_a_Simple_Engine/Engine_Architecture/05_rendering_pipeline.adoc[Rendering Pipeline]) or the Vulkan Guide (https://docs.vulkan.org/guide/latest/) if you need a refresher on descriptors, buffers, or pipeline creation. ==== [source,cpp] @@ -773,4 +773,4 @@ In this chapter, we've explored how Vulkan compute shaders can be used to accele The techniques we've covered demonstrate the versatility of Vulkan beyond traditional graphics rendering. As you continue to develop your engine, consider other areas where GPU acceleration might provide benefits, such as AI pathfinding, procedural generation, or particle systems. -link:04_physics_basics.adoc[Previous: Physics Basics] | link:06_conclusion.adoc[Next: Conclusion] +xref:Building_a_Simple_Engine/Subsystems/04_physics_basics.adoc[Previous: Physics Basics] | xref:Building_a_Simple_Engine/Subsystems/06_conclusion.adoc[Next: Conclusion] diff --git a/en/Building_a_Simple_Engine/Subsystems/06_conclusion.adoc b/en/Building_a_Simple_Engine/Subsystems/06_conclusion.adoc index 5f57078f..c3d87d0d 100644 --- a/en/Building_a_Simple_Engine/Subsystems/06_conclusion.adoc +++ b/en/Building_a_Simple_Engine/Subsystems/06_conclusion.adoc @@ -105,7 +105,7 @@ The complete code for this chapter can be found in the following files: * `simple_engine/30_audio_subsystem.cpp`: Implementation of the audio subsystem with Vulkan HRTF processing * `simple_engine/31_physics_subsystem.cpp`: Implementation of the physics subsystem with Vulkan acceleration -link:../../attachments/simple_engine/30_audio_subsystem.cpp[Audio Subsystem C{pp} code] -link:../../attachments/simple_engine/31_physics_subsystem.cpp[Physics Subsystem C{pp} code] +link:{attachmentsdir}/simple_engine/30_audio_subsystem.cpp[Audio Subsystem C{pp} code] +link:{attachmentsdir}/simple_engine/31_physics_subsystem.cpp[Physics Subsystem C{pp} code] -link:05_vulkan_physics.adoc[Previous: Vulkan for Physics Simulation] | link:../Tooling/01_introduction.adoc[Next: Tooling] | link:../index.html[Back to Building a Simple Engine] +xref:Building_a_Simple_Engine/Subsystems/05_vulkan_physics.adoc[Previous: Vulkan for Physics Simulation] | xref:Building_a_Simple_Engine/Tooling/01_introduction.adoc[Next: Tooling] | xref:../index.adoc[Back to Building a Simple Engine] diff --git a/en/Building_a_Simple_Engine/Subsystems/index.adoc b/en/Building_a_Simple_Engine/Subsystems/index.adoc index 2b9c41e1..7126ea24 100644 --- a/en/Building_a_Simple_Engine/Subsystems/index.adoc +++ b/en/Building_a_Simple_Engine/Subsystems/index.adoc @@ -4,11 +4,11 @@ This chapter covers the implementation of critical engine subsystems - Audio and Physics - with a focus on leveraging Vulkan's compute capabilities for enhanced performance. -* link:01_introduction.adoc[Introduction] -* link:02_audio_basics.adoc[Audio Basics] -* link:03_vulkan_audio.adoc[Vulkan for Audio Processing] -* link:04_physics_basics.adoc[Physics Basics] -* link:05_vulkan_physics.adoc[Vulkan for Physics Simulation] -* link:06_conclusion.adoc[Conclusion] - -link:../Loading_Models/09_conclusion.adoc[Previous: Loading Models Conclusion] | link:../index.html[Back to Building a Simple Engine] +* xref:Building_a_Simple_Engine/Subsystems/01_introduction.adoc[Introduction] +* xref:Building_a_Simple_Engine/Subsystems/02_audio_basics.adoc[Audio Basics] +* xref:Building_a_Simple_Engine/Subsystems/03_vulkan_audio.adoc[Vulkan for Audio Processing] +* xref:Building_a_Simple_Engine/Subsystems/04_physics_basics.adoc[Physics Basics] +* xref:Building_a_Simple_Engine/Subsystems/05_vulkan_physics.adoc[Vulkan for Physics Simulation] +* xref:Building_a_Simple_Engine/Subsystems/06_conclusion.adoc[Conclusion] + +xref:Building_a_Simple_Engine/Loading_Models/09_conclusion.adoc[Previous: Loading Models Conclusion] | xref:../index.adoc[Back to Building a Simple Engine] diff --git a/en/Building_a_Simple_Engine/Tooling/01_introduction.adoc b/en/Building_a_Simple_Engine/Tooling/01_introduction.adoc index 4576d626..a4dc9659 100644 --- a/en/Building_a_Simple_Engine/Tooling/01_introduction.adoc +++ b/en/Building_a_Simple_Engine/Tooling/01_introduction.adoc @@ -29,11 +29,11 @@ A basic familiarity with software development workflows and tools will provide c You should also be familiar with the following chapters from the main tutorial: * Basic Vulkan concepts: -** xref:../../03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] -** xref:../../03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] -* xref:../../04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:../../04_Vertex_buffers/03_Index_buffer.adoc[index buffers] -* xref:../../05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] +** xref:03_Drawing_a_triangle/03_Drawing/01_Command_buffers.adoc[Command buffers] +** xref:03_Drawing_a_triangle/02_Graphics_pipeline_basics/00_Introduction.adoc[Graphics pipelines] +* xref:04_Vertex_buffers/00_Vertex_input_description.adoc[Vertex] and xref:04_Vertex_buffers/03_Index_buffer.adoc[index buffers] +* xref:05_Uniform_buffers/00_Descriptor_set_layout_and_buffer.adoc[Uniform buffers] Let's begin by exploring how to set up a CI/CD pipeline for Vulkan projects. -link:../Subsystems/06_conclusion.adoc[Previous: Subsystems Conclusion] | link:02_cicd.adoc[Next: CI/CD for Vulkan Projects] +xref:Building_a_Simple_Engine/Subsystems/06_conclusion.adoc[Previous: Subsystems Conclusion] | xref:Building_a_Simple_Engine/Tooling/02_cicd.adoc[Next: CI/CD for Vulkan Projects] diff --git a/en/Building_a_Simple_Engine/Tooling/02_cicd.adoc b/en/Building_a_Simple_Engine/Tooling/02_cicd.adoc index aac3d0b5..52d14c0c 100644 --- a/en/Building_a_Simple_Engine/Tooling/02_cicd.adoc +++ b/en/Building_a_Simple_Engine/Tooling/02_cicd.adoc @@ -236,4 +236,4 @@ A well-designed CI/CD pipeline is essential for maintaining quality and producti In the next section, we'll explore debugging tools for Vulkan applications, including the powerful VK_KHR_debug_utils extension and external tools like RenderDoc. -link:01_introduction.adoc[Previous: Introduction] | link:03_debugging_and_renderdoc.adoc[Next: Debugging with VK_KHR_debug_utils and RenderDoc] +xref:Building_a_Simple_Engine/Tooling/01_introduction.adoc[Previous: Introduction] | xref:Building_a_Simple_Engine/Tooling/03_debugging_and_renderdoc.adoc[Next: Debugging with VK_KHR_debug_utils and RenderDoc] diff --git a/en/Building_a_Simple_Engine/Tooling/03_debugging_and_renderdoc.adoc b/en/Building_a_Simple_Engine/Tooling/03_debugging_and_renderdoc.adoc index 8b7820d9..a35bb022 100644 --- a/en/Building_a_Simple_Engine/Tooling/03_debugging_and_renderdoc.adoc +++ b/en/Building_a_Simple_Engine/Tooling/03_debugging_and_renderdoc.adoc @@ -360,4 +360,4 @@ Effective debugging is essential for developing complex Vulkan applications. By In the next section, we'll explore crash handling and minidumps, which are crucial for diagnosing issues that occur in production environments. -link:02_cicd.adoc[Previous: CI/CD for Vulkan Projects] | link:04_crash_minidump.adoc[Next: Crash Handling and Minidumps] +xref:Building_a_Simple_Engine/Tooling/02_cicd.adoc[Previous: CI/CD for Vulkan Projects] | xref:Building_a_Simple_Engine/Tooling/04_crash_minidump.adoc[Next: Crash Handling and Minidumps] diff --git a/en/Building_a_Simple_Engine/Tooling/04_crash_minidump.adoc b/en/Building_a_Simple_Engine/Tooling/04_crash_minidump.adoc index 84dde25b..ce5b0672 100644 --- a/en/Building_a_Simple_Engine/Tooling/04_crash_minidump.adoc +++ b/en/Building_a_Simple_Engine/Tooling/04_crash_minidump.adoc @@ -530,4 +530,4 @@ Robust crash handling is essential for maintaining a high-quality Vulkan applica In the next section, we'll explore Vulkan extensions for robustness, which can reduce undefined behavior and help prevent crashes in the first place. -link:03_debugging_and_renderdoc.adoc[Previous: Debugging with VK_KHR_debug_utils and RenderDoc] | link:05_extensions.adoc[Next: Vulkan Extensions for Robustness] +xref:Building_a_Simple_Engine/Tooling/03_debugging_and_renderdoc.adoc[Previous: Debugging with VK_KHR_debug_utils and RenderDoc] | xref:Building_a_Simple_Engine/Tooling/05_extensions.adoc[Next: Vulkan Extensions for Robustness] diff --git a/en/Building_a_Simple_Engine/Tooling/05_extensions.adoc b/en/Building_a_Simple_Engine/Tooling/05_extensions.adoc index 47db7e90..9e8515fe 100644 --- a/en/Building_a_Simple_Engine/Tooling/05_extensions.adoc +++ b/en/Building_a_Simple_Engine/Tooling/05_extensions.adoc @@ -374,4 +374,4 @@ Vulkan robustness extensions, particularly VK_EXT_robustness2, provide valuable In the next and final section, we'll summarize what we've learned about tooling for Vulkan applications and discuss how to apply these techniques in your own projects. -link:04_crash_minidump.adoc[Previous: Crash Handling and Minidumps] | link:06_packaging_and_distribution.adoc[Next: Packaging and Distribution] +xref:Building_a_Simple_Engine/Tooling/04_crash_minidump.adoc[Previous: Crash Handling and Minidumps] | xref:Building_a_Simple_Engine/Tooling/06_packaging_and_distribution.adoc[Next: Packaging and Distribution] diff --git a/en/Building_a_Simple_Engine/Tooling/06_packaging_and_distribution.adoc b/en/Building_a_Simple_Engine/Tooling/06_packaging_and_distribution.adoc index dbc8dff3..0f4cef29 100644 --- a/en/Building_a_Simple_Engine/Tooling/06_packaging_and_distribution.adoc +++ b/en/Building_a_Simple_Engine/Tooling/06_packaging_and_distribution.adoc @@ -538,4 +538,4 @@ Remember that the goal of packaging is to make installation and updates as seaml In the next and final section, we'll summarize what we've learned throughout this chapter on tooling for Vulkan applications. -link:05_extensions.adoc[Previous: Vulkan Extensions for Robustness] | link:07_conclusion.adoc[Next: Conclusion] +xref:Building_a_Simple_Engine/Tooling/05_extensions.adoc[Previous: Vulkan Extensions for Robustness] | xref:Building_a_Simple_Engine/Tooling/07_conclusion.adoc[Next: Conclusion] diff --git a/en/Building_a_Simple_Engine/Tooling/07_conclusion.adoc b/en/Building_a_Simple_Engine/Tooling/07_conclusion.adoc index f5c4451b..c364613a 100644 --- a/en/Building_a_Simple_Engine/Tooling/07_conclusion.adoc +++ b/en/Building_a_Simple_Engine/Tooling/07_conclusion.adoc @@ -224,9 +224,9 @@ The complete code for this chapter can be found in the following files: * `simple_engine/34_crash_handling.cpp`: Implementation of crash handling and minidumps * `simple_engine/35_robustness_extensions.cpp`: Implementation of Vulkan extensions for robustness -link:../../attachments/simple_engine/32_cicd_setup.cpp[CI/CD Setup C{pp} code] -link:../../attachments/simple_engine/33_debug_utils.cpp[Debug Utils C{pp} code] -link:../../attachments/simple_engine/34_crash_handling.cpp[Crash Handling C{pp} code] -link:../../attachments/simple_engine/35_robustness_extensions.cpp[Robustness Extensions C{pp} code] +link:{attachmentsdir}/simple_engine/32_cicd_setup.cpp[CI/CD Setup C{pp} code] +link:{attachmentsdir}/simple_engine/33_debug_utils.cpp[Debug Utils C{pp} code] +link:{attachmentsdir}/simple_engine/34_crash_handling.cpp[Crash Handling C{pp} code] +link:{attachmentsdir}/simple_engine/35_robustness_extensions.cpp[Robustness Extensions C{pp} code] -link:06_packaging_and_distribution.adoc[Previous: Packaging and Distribution] | link:../Mobile_Development/01_introduction.adoc[Next: Mobile Development] +xref:Building_a_Simple_Engine/Tooling/06_packaging_and_distribution.adoc[Previous: Packaging and Distribution] | xref:Building_a_Simple_Engine/Mobile_Development/01_introduction.adoc[Next: Mobile Development] diff --git a/en/Building_a_Simple_Engine/Tooling/index.adoc b/en/Building_a_Simple_Engine/Tooling/index.adoc index 25d26369..78375263 100644 --- a/en/Building_a_Simple_Engine/Tooling/index.adoc +++ b/en/Building_a_Simple_Engine/Tooling/index.adoc @@ -4,12 +4,12 @@ This chapter covers essential tooling and techniques for developing, debugging, and distributing Vulkan applications, with a focus on using modern C++20 modules and the vk::raii namespace. -* xref:01_introduction.adoc[Introduction] -* xref:02_cicd.adoc[CI/CD for Vulkan Projects] -* xref:03_debugging_and_renderdoc.adoc[Debugging with VK_KHR_debug_utils and RenderDoc] -* xref:04_crash_minidump.adoc[Crash Handling and Minidumps] -* xref:05_extensions.adoc[Vulkan Extensions for Robustness] -* xref:06_packaging_and_distribution.adoc[Packaging and Distribution] -* xref:07_conclusion.adoc[Conclusion] - -xref:../Subsystems/06_conclusion.adoc[Previous: Subsystems Conclusion] | link:../index.html[Back to Building a Simple Engine] +* xref:Building_a_Simple_Engine/Tooling/01_introduction.adoc[Introduction] +* xref:Building_a_Simple_Engine/Tooling/02_cicd.adoc[CI/CD for Vulkan Projects] +* xref:Building_a_Simple_Engine/Tooling/03_debugging_and_renderdoc.adoc[Debugging with VK_KHR_debug_utils and RenderDoc] +* xref:Building_a_Simple_Engine/Tooling/04_crash_minidump.adoc[Crash Handling and Minidumps] +* xref:Building_a_Simple_Engine/Tooling/05_extensions.adoc[Vulkan Extensions for Robustness] +* xref:Building_a_Simple_Engine/Tooling/06_packaging_and_distribution.adoc[Packaging and Distribution] +* xref:Building_a_Simple_Engine/Tooling/07_conclusion.adoc[Conclusion] + +xref:Subsystems/06_conclusion.adoc[Previous: Subsystems Conclusion] | xref:../index.adoc[Back to Building a Simple Engine] diff --git a/en/Building_a_Simple_Engine/introduction.adoc b/en/Building_a_Simple_Engine/introduction.adoc index 6c7fc51d..5eecd2c5 100644 --- a/en/Building_a_Simple_Engine/introduction.adoc +++ b/en/Building_a_Simple_Engine/introduction.adoc @@ -10,7 +10,7 @@ Welcome to the "Building a Simple Engine" tutorial series! This series marks a t While the previous tutorial series focused on introducing individual Vulkan concepts step by step, this series takes a different approach: -This series targets readers who have completed the xref:../00_Introduction.adoc[Vulkan Tutorial] and feel comfortable with the fundamentals. We’ll emphasize architectural concepts and design patterns over exhaustive API permutations, so you develop an engine mindset rather than a collection of snippets. Expect to do more independent work: fill in smaller gaps, experiment, and lean on the https://docs.vulkan.org/guide/latest/[Vulkan Guide], https://docs.vulkan.org/samples/latest/[Samples], and https://docs.vulkan.org/spec/latest/[Specification] as primary references. If a topic feels too advanced, revisit the original tutorial and return when ready. +This series targets readers who have completed the xref:00_Introduction.adoc[Vulkan Tutorial] and feel comfortable with the fundamentals. We’ll emphasize architectural concepts and design patterns over exhaustive API permutations, so you develop an engine mindset rather than a collection of snippets. Expect to do more independent work: fill in smaller gaps, experiment, and lean on the https://docs.vulkan.org/guide/latest/[Vulkan Guide], https://docs.vulkan.org/samples/latest/[Samples], and https://docs.vulkan.org/spec/latest/[Specification] as primary references. If a topic feels too advanced, revisit the original tutorial and return when ready. === What to Expect @@ -36,24 +36,26 @@ Each chapter builds on the last to assemble a small but capable engine. Read a c Let's begin our journey into engine development with these chapters: -1. link:Engine_Architecture/01_introduction.adoc[Engine Architecture] - How to structure your code for flexibility, maintainability, and extensibility. -2. link:Camera_Transformations/01_introduction.adoc[Camera Transformations] - Implementation of camera systems and transformations. -3. link:Lighting_Materials/01_introduction.adoc[Lighting & Materials] - Basic lighting models and push constants. -4. link:GUI/01_introduction.adoc[GUI] - Implementation of a graphical user interface using Dear ImGui. -5. link:Loading_Models/01_introduction.adoc[Loading Models] - More sophisticated approaches to handling models, textures, and other assets. -6. link:Subsystems/01_introduction.adoc[Subsystems] - Implementation of Audio and Physics subsystems with Vulkan compute capabilities. -7. link:Tooling/01_introduction.adoc[Tooling] - CI/CD, Debugging, Crash minidump, Distribution, and Vulkan extensions for robustness. -8. link:Mobile_Development/01_introduction.adoc[Mobile Development] - Adapting the engine for Android/iOS, focusing on performance considerations and mobile-specific Vulkan extensions. +1. xref:Building_a_Simple_Engine/Engine_Architecture/01_introduction.adoc[Engine Architecture] - How to structure your code for flexibility, maintainability, and extensibility. +2. xref:Building_a_Simple_Engine/Camera_Transformations/01_introduction.adoc[Camera Transformations] - Implementation of camera systems and transformations. +3. xref:Building_a_Simple_Engine/Lighting_Materials/01_introduction.adoc[Lighting & Materials] - Basic lighting models and push constants. +4. xref:Building_a_Simple_Engine/GUI/01_introduction.adoc[GUI] - Implementation of a graphical user interface using Dear ImGui. +5. xref:Building_a_Simple_Engine/Loading_Models/01_introduction.adoc[Loading Models] - More sophisticated approaches to handling models, textures, and other assets. +6. xref:Building_a_Simple_Engine/Subsystems/01_introduction.adoc[Subsystems] - Implementation of Audio and Physics subsystems with Vulkan compute capabilities. +7. xref:Building_a_Simple_Engine/Tooling/01_introduction.adoc[Tooling] - CI/CD, Debugging, Crash minidump, Distribution, and Vulkan extensions for robustness. +8. xref:Building_a_Simple_Engine/Mobile_Development/01_introduction.adoc[Mobile Development] - Adapting the engine for Android/iOS, focusing on performance considerations and mobile-specific Vulkan extensions. -9. link:Advanced_Topics/01_introduction.adoc[Advanced Topics] - Short, focused tutorials that extend the Simple Engine with specific features and optimizations. +9. xref:Building_a_Simple_Engine/Advanced_Topics/01_introduction.adoc[Advanced Topics] - Short, focused tutorials that extend the Simple Engine with specific features and optimizations. -xref:../conclusion.adoc[Previous: Main Tutorial Conclusion] | link:Engine_Architecture/01_introduction.adoc[Next: Engine Architecture] +xref:conclusion.adoc[Previous: Main Tutorial Conclusion] | xref:Building_a_Simple_Engine/Engine_Architecture/01_introduction.adoc[Next: Engine Architecture] === Getting Started with Example Assets To follow along with the attachments-based Simple Engine examples and scenes, fetch the Bistro assets locally. +image::../attachments/simple_engine/Assets/MainEntry.png[The Bistro scene - a detailed outdoor café environment demonstrating the engine's rendering capabilities] + - Linux/macOS (default target: attachments/simple_engine/Assets/bistro at repository root): + $ cd attachments/simple_engine