Mastering graphics programming with Vulkan develop a modern rendering engine from first principles to state-of-the-art techniques

Vulkan is now an established and flexible multi-platform graphics API. It has been adopted in many industries, including game development, medical imaging, movie productions, and media playback. Learning Vulkan is a foundational step to understanding how a modern graphics API works, both on desktop...

Descripción completa

Detalles Bibliográficos
Otros Autores: Castorina, Marco, author (author), Sassone, Gabriel, author
Formato: Libro electrónico
Idioma:Inglés
Publicado: Birmingham : Packt Publishing 2023.
Edición:1st ed
Materias:
Ver en Biblioteca Universitat Ramon Llull:https://discovery.url.edu/permalink/34CSUC_URL/1im36ta/alma991009720313706719
Tabla de Contenidos:
  • Cover
  • Title Page
  • Copyright and Credits
  • Acknowledgments
  • Contributors
  • Table of Contents
  • Preface
  • Part 1: Foundations of a Modern Rendering Engine
  • Chapter 1: Introducing the Raptor Engine and Hydra
  • Technical requirements
  • Windows
  • Linux
  • macOS
  • How to read this book
  • Understanding the code structure
  • Layers of code
  • Understanding the glTF scene format
  • PBR in a nutshell
  • A word on GPU debugging
  • Summary
  • Further reading
  • Chapter 2: Improving Resources Management
  • Technical requirements
  • Unlocking and implementing bindless rendering
  • Checking for support
  • Creating the descriptor pool
  • Updating the descriptor set
  • Update to shader code
  • Automating pipeline layout generation
  • Compiling GLSL to SPIR-V
  • Understanding the SPIR-V output
  • From SPIR-V to pipeline layout
  • Improving load times with a pipeline cache
  • Summary
  • Further reading
  • Chapter 3: Unlocking Multi-Threading
  • Technical requirements
  • Task-based multi-threading using enkiTS
  • Why task-based parallelism?
  • Using the enkiTS (Task-Scheduler) library
  • Asynchronous loading
  • Creating the I/O thread and tasks
  • Vulkan queues and the first parallel command generation
  • The AsynchronousLoader class
  • Recording commands on multiple threads
  • The allocation strategy
  • Command buffer recycling
  • Primary versus secondary command buffers
  • Drawing using primary command buffers
  • Drawing using secondary command buffers
  • Spawning multiple tasks to record command buffers
  • Summary
  • Further reading
  • Chapter 4: Implementing a Frame Graph
  • Technical requirements
  • Understanding frame graphs
  • Building a graph
  • A data-driven approach
  • Implementing the frame graph
  • Implementing topological sort
  • Driving rendering with the frame graph
  • Summary
  • Further reading.
  • Chapter 5: Unlocking Async Compute
  • Technical requirements
  • Replacing multiple fences with a single timeline semaphore
  • Enabling the timeline semaphore extension
  • Creating a timeline semaphore
  • Waiting for a timeline semaphore on the CPU
  • Using a timeline semaphore on the GPU
  • Adding a separate queue for async compute
  • Submitting work on separate queues
  • Implementing cloth simulation using async compute
  • Benefits of using compute shaders
  • Compute shaders overview
  • Writing compute shaders
  • Summary
  • Further reading
  • Part 2: GPU-Driven Rendering
  • Chapter 6: GPU-Driven Rendering
  • Technical requirements
  • Breaking down large meshes into meshlets
  • Generating meshlets
  • Understanding task and mesh shaders
  • Implementing task shaders
  • Implementing mesh shaders
  • GPU culling using compute
  • Depth pyramid generation
  • Occlusion culling
  • Summary
  • Further reading
  • Chapter 7: Rendering Many Lights with Clustered Deferred Rendering
  • Technical requirements
  • A brief history of clustered lighting
  • Differences between forward and deferred techniques
  • Implementing a G-buffer
  • Implementing light clusters
  • CPU lights assignment
  • GPU light processing
  • Summary
  • Further reading
  • Chapter 8: Adding Shadows Using Mesh Shaders
  • Technical requirements
  • A brief history of shadow techniques
  • Shadow volumes
  • Shadow mapping
  • Raytraced shadows
  • Implementing shadow mapping using mesh shaders
  • Overview
  • Cubemap shadows
  • A note about multiview rendering
  • Per-light mesh instance culling
  • Indirect draw commands generation
  • Shadow cubemap face culling
  • Meshlet shadow rendering - task shader
  • Meshlet shadow rendering - mesh shader
  • Shadow map sampling
  • Improving shadow memory with Vulkan's sparse resources
  • Creating and allocating sparse textures.
  • Choosing per-light shadow memory usage
  • Rendering into a sparse shadow map
  • Summary
  • Further reading
  • Chapter 9: Implementing Variable Rate Shading
  • Technical requirements
  • Introducing variable rate shading
  • Determining the shading rate
  • Integrating variable rate shading using Vulkan
  • Taking advantage of specialization constants
  • Summary
  • Further reading
  • Chapter 10: Adding Volumetric Fog
  • Technical requirements
  • Introducing Volumetric Fog Rendering
  • Volumetric Rendering
  • Volumetric Fog
  • Implementing Volumetric Fog Rendering
  • Data injection
  • Calculating the lighting contribution
  • Integrating scattering and extinction
  • Applying Volumetric Fog to the scene
  • Adding filters
  • Volumetric noise generation
  • Blue noise
  • Summary
  • Further reading
  • Part 3: Advanced Rendering Techniques
  • Chapter 11: Temporal Anti-Aliasing
  • Technical requirements
  • Overview
  • The simplest TAA implementation
  • Jittering the camera
  • Choosing jittering sequences
  • Adding motion vectors
  • First implementation code
  • Improving TAA
  • Reprojection
  • History sampling
  • Scene sampling
  • The history constraint
  • Resolve
  • Sharpening the image
  • Sharpness post-processing
  • Negative mip bias
  • Unjitter texture UVs
  • Improving banding
  • Summary
  • Further reading
  • Chapter 12: Getting Started with Ray Tracing
  • Technical requirements
  • Introduction to ray tracing in Vulkan
  • Building the BLAS and TLAS
  • Defining and creating a ray tracing pipeline
  • Summary
  • Further reading
  • Chapter 13: Revisiting Shadows with Ray Tracing
  • Technical requirements
  • Implementing simple ray-traced shadows
  • Improving ray-traced shadows
  • Motion vectors
  • Computing visibility variance
  • Computing visibility
  • Computing filtered visibility
  • Using the filtered visibility
  • Summary
  • Further reading.
  • Chapter 14: Adding Dynamic Diffuse Global Illumination with Ray Tracing
  • Technical requirements
  • Introduction to indirect lighting
  • Introduction to Dynamic Diffuse Global Illumination (DDGI)
  • Ray tracing for each probe
  • Probes offsetting
  • Probes irradiance and visibility updates
  • Probes sampling
  • Implementing DDGI
  • Ray-generation shader
  • Ray-hit shader
  • Ray-miss shader
  • Updating probes irradiance and visibility shaders
  • Indirect lighting sampling
  • Modifications to the calculate_lighting method
  • Probe offsets shader
  • Summary
  • Further reading
  • Chapter 15: Adding Reflections with Ray Tracing
  • Technical requirements
  • How screen-space reflections work
  • Implementing ray-traced reflections
  • Implementing a denoiser
  • Summary
  • Further reading
  • Index
  • Other Books You May Enjoy.