# [Implement ray tracing effects with Vulkan on Android](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/)

## In this learning path

- [Introduction](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/)
- [What is ray tracing?](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/rt01_introduction/)
- [Setup: enabling ray tracing](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/rt02_setup/)
- [Ray traversal: ray tracing pipeline versus ray query](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/rt03_ray_traversal/)
- [Acceleration structure](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/rt04_acceleration_structure/)
- [Bindless materials](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/rt05_bindless/)
- [Reflections](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/rt06_reflections/)
- [Shadows](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/rt07_shadows/)
- [Refractions](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/rt08_refractions/)
- [Optimizing](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/rt09_optimizing/)
- [Next Steps](https://learn.arm.com/learning-paths/mobile-graphics-and-gaming/ray_tracing/_next-steps/)

## About this Learning Path

| Skill level: | Advanced |
|--------------|----------|
| Reading time: | 2 hrs    |
| Last updated: | 24 Aug 2026 |

| Author: | Iago Calvo Lista, Arm |
|---------|----------------------|
| Arm IP: | [Mali](https://support.arm.com/?tab=compute-ip&Product%20Type=Graphics%20Processors), [Immortalis](https://support.arm.com/?tab=compute-ip&Product%20Type=Graphics%20Processors) |
| Tags: | [Graphics](https://learn.arm.com/tag/graphics), [Android](https://learn.arm.com/tag/android), [Vulkan](https://learn.arm.com/tag/vulkan) |

### 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
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

<details>
<summary>How do I know my Android device can run the ray tracing steps?</summary>
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.
</details>

<details>
<summary>Should I use ray tracing pipeline or ray query as the ray traversal option?</summary>
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.
</details>

<details>
<summary>What should exist after I build the acceleration structure?</summary>
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.
</details>

<details>
<summary>Do I need bindless materials to implement ray tracing effects?</summary>
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.
</details>

<details>
<summary>Which build preference should I use for acceleration structures?</summary>
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`.
</details>
