Implement ray tracing effects with Vulkan on Android
Who is this for?
This Learning Path is for Vulkan developers who are familiar with rendering and are interested in deploying ray tracing in their applications.
What will you learn?
Upon completion of this Learning Path, you will be able to:
- Describe how the Vulkan ray tracing API works.
- Describe how to use ray tracing to implement realistic shadows, reflections, and refractions.
- Implement basic ray tracing effects in a Vulkan renderer.
Prerequisites
Before starting, you will need the following:
- An appropriate Android device that supports the required Vulkan extensions (for example, Vivo X100).
- Knowledge of the Vulkan API.
- A Vulkan renderer. Most code is generic and should be easy to incorporate into any deferred PBR renderer.
Summary
This summary was drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.
You’ll add Vulkan ray tracing effects to an Android renderer. First, you’ll query and enable the required extensions, then use a ray tracing pipeline or ray queries to traverse the scene. After that, you’ll build acceleration structures and use bindless resources for material data. Finally, you’ll implement reflections, shadows, and refractions, and use Arm tools to debug and optimize ray traversal.
Frequently asked questions
These FAQs were drafted with an approved AI-assisted workflow and reviewed by Arm contributors before publication. Human technical review remains part of the process so the final page reflects engineering rigor, accuracy, and Arm editorial standards.
Confirm that the device exposes the required Vulkan ray tracing extensions. Immortalis GPUs such as Immortalis‑G715, Immortalis‑G720, and Immortalis‑G925 support ray tracing, while some Mali G7‑series GPUs after Mali‑G715 might or might not depending on the phone model.
Use
VK_KHR_ray_query for most simple effects because it lets you add traversal to existing shaders. Use VK_KHR_ray_tracing_pipeline when you need its dedicated ray-tracing shader stages and driver-managed traversal.After you build an acceleration structure, use it to represent scene geometry for fast ray-intersection tests. Vulkan exposes it through
VK_KHR_acceleration_structure; the implementation is opaque but typically tree-like.No.
VK_EXT_descriptor_indexing is independent of ray tracing. Use it when you need shaders to dynamically index arrays of buffers and textures, such as when accessing material data for ray hits.For static Bottom-Level Acceleration Structures (BLASes), use
VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_TRACE_BIT_KHR. For Top-Level Accelerations Structures (TLASes) and dynamic BLASes, use VK_BUILD_ACCELERATION_STRUCTURE_PREFER_FAST_BUILD_BIT_KHR, usually with VK_BUILD_ACCELERATION_STRUCTURE_ALLOW_UPDATE_BIT_KHR.