«Оптимальный» способ сделать это, будь то в Vulkan или OpenGL, состоит в том, чтобы разделить ваш буфер глубины на две области: по одной для каждой сцены.Вы используете преобразование области просмотра для разделения буфера глубины.Одна сцена получит диапазон [0,5, 1], а следующая - диапазон [0, 0,5].glDepthRange
- это то, что вы использовали бы для установки этого в OpenGL, а поля min/maxDepth
VkViewport
обрабатывают аналогичное преобразование в Vulkan.
Если по какой-то причине вы не можете разбить буфер глубины (возможно, из-за того, что обе сцены нуждаются в дополнительной точности небольших значений с плавающей запятой (близко), то какая альтернатива является более оптимальной, почти наверняка будет зависеть от базового оборудования.Для рендера на основе тайлов я бы предположил, что vkCmdClearAttachments
не является хорошей новостью для производительности.Но для традиционного рендерера такой простой вызов вряд ли является проблемой производительности, и стоимость запуска нового рендеринга была бы главной вещью, которую вы бы использовали.