Adding shadows is much simplier with Vulkan 1.4 (actually since 1.3). You still have to render the scene from the light’s point of view to a depth texture. Where modern Vulkan actually helps is ergonomics rather than the algorithm. Dynamic rendering means you skip the explicit VkRenderPass and VkFramebuffer objects entirely; the shadow pass becomes a vkCmdBeginRendering with just a depth attachment, which is a lot less boilerplate than the old approach for what is essentially a throwaway depth-only pass. Synchronization2 cleans up the barrier between passes.