1 Archivos adjunto(s)
Ray Tracer Sandbox en Vulkan
Si te gusta probar nuevos motores de render, aquí tienes otro, Ray Tracer Sandbox en Vulkan, un proyecto que permite a los usuarios crear y probar nuevos sombreadores. El proyecto está siendo desarrollado por Wojciech Zielonka y Firtina Ozbalikci.
El equipo está trabajando en un motor que le permite crear o probar nuevos sombreadores en tiempo real utilizando un sistema de RayTrace basado en la física. La idea principal es que los usuarios puedan probar sus propios integradores en un entorno predefinido con activos como mallas, materiales, luces y texturas, la canalización de Vulkan se abstrae en forma de sombreador y la única preocupación para un usuario es proporcionar su propia descripción de escena o usar una ya existente.
Vulkan es una nueva API del grupo Khronos (conocida por OpenGL) que proporciona una abstracción mucho mejor de las tarjetas gráficas modernas. Esta nueva interfaz te permite describir mejor lo que su aplicación pretende hacer, lo que puede conducir a un mejor rendimiento y un comportamiento menos sorprendente del controlador en comparación con las API existentes como OpenGL y Direct3D. Las ideas detrás de Vulkan son similares a las de Direct3D 12 y Metal, pero Vulkan tiene la ventaja de ser totalmente multiplataforma y le permite desarrollar para Windows, Linux y Android al mismo tiempo.
Sin embargo, el precio que paga por estos beneficios es que tiene que trabajar con una API significativamente más detallada. La aplicación debe configurar todos los detalles relacionados con la API de gráficos desde cero, incluida la creación inicial del búfer de fotogramas y la administración de memoria para objetos como búferes e imágenes de textura. El controlador de gráficos hará mucho menos sujeción de la mano, lo que significa que tendrá que hacer más trabajo en su aplicación para garantizar el comportamiento correcto.
Lo que tienes que tener claro es que Vulkan no es para todos. Está dirigido a programadores que están entusiasmados con los gráficos informáticos de alto rendimiento, y están dispuestos a poner un poco de trabajo por su parte. Si estás más interesado en el desarrollo de juegos, en lugar de gráficos por ordenador, entonces es posible que desees adherirte a OpenGL o Direct3D. Otra alternativa es utilizar un motor como Unreal Engine o Unity, que permite utilizar Vulkan mientras te expone una API de nivel mucho más alto.
Con las dudas despejadas, vamos a cubrir algunos requisitos previos para seguir este tutorial:
Una tarjeta gráfica y un controlador compatible con Vulkan (NVIDIA, AMD, Intel).
Experiencia con C++ (familiaridad con RAII, listas de inicializadores).
Un compilador con compatibilidad decente con características de C++17 (Visual Studio 2017+, GCC 7+o Clang 5+).
Si te interesa el tema de los motores de render puros e investigar por tu cuenta, aquí tienes más información sobre el tema.
En la imagen adjunta puedes ver cómo se muestran las sombras en el render prácticamente en tiempo real.
1 Archivos adjunto(s)
Abordar la fragmentación de características en Vulkan
La API de Vulkan está en constante desarrollo, con un grupo cada vez mayor de extensiones para resolver problemas y agregar nuevas características. Sin embargo, las extensiones generalmente no vienen con una línea de tiempo de implementación o una garantía de qué dispositivos las admitirán.
Como resultado, puede ser difícil para los desarrolladores tener una idea clara de cuándo y dónde se admitirán las extensiones, y en qué funcionalidad se puede confiar para los proyectos actuales y futuros. Esta situación es aún más compleja para los desarrolladores que publican aplicaciones a través de plataformas móviles y de escritorio.
Con Vulkan 1.3 y la nueva hoja de ruta pública, estamos dando un paso significativo para reducir la fragmentación de características.
Vulkan 1.3
Como era de esperar, Vulkan 1.3 agrega una gama de características que son ampliamente implementables en todo el hardware con soporte activo. De hecho, cualquier hardware que tenga una implementación 1.2 y sea compatible debería ser capaz de admitir Vulkan 1.3.
Por ejemplo, VK_KHR_dynamic_rendering agrega una ruta optimizada para comenzar a renderizar: las aplicaciones que no pueden o no quieren usar subpasos no necesitan crear ningún pase de renderizado u objetos framebuffer. Lo que reduce significativamente la complejidad de la aplicación! El blog Streamlining Render Passes entra en más detalles, y llevar esta opción a Vulkan 1.3 ayuda a garantizar que sea compatible con los dispositivos futuros.
También hemos agregado o requerido una serie de características en Vulkan 1.3 que facilitan la administración de la compilación de canalizaciones:
El estado dinámico adicional introducido originalmente por VK_EXT_extended_dynamic_state y VK_EXT_extended_dynamic_state2 ayuda a reducir el número de permutaciones de canalizaciones necesarias. VK_EXT_pipeline_creation_cache_control ofrece a los desarrolladores más control sobre cómo y cuándo se compilan las canalizaciones VK_EXT_pipeline_creation_feedback proporciona información sobre las canalizaciones compiladas, lo que facilita el perfil y la depuración de problemas de canalización.
Algunas opciones pasan a ser por defecto
Ahora se requieren algunas características que antes eran opcionales en versiones anteriores de Vulkan. En particular, el soporte de direcciones de dispositivos de búfer, lo que permite a los desarrolladores comenzar a usar punteros en todo el ecosistema.
Todavía hay trabajo por hacer para dar soporte en HLSL, pero los usuarios de herramientas y GLSL ya pueden aprovechar esto. Arm lanzó una publicación de blog que explica los entresijos de esta característica única si está interesado en obtener más información.
Vulkan 1.3 también requiere el modelo de memoria Vulkan, que mejora las garantías hechas por la especificación sobre primitivas atómicas y de sincronización.
VK_EXT_subgroup_size_control agregado soporte para un control más fino sobre los subgrupos. En particular, permite a los proveedores anunciar varios tamaños de subgrupo, permite a los desarrolladores seleccionar un tamaño de subgrupo particular (donde se admita) y requiere una asignación definida entre subgrupos y grupos de trabajo para tamaños de grupo de trabajo alineados.
Sombreador de cómputo SPIR-V 1.6
En Vulkan 1.3, cualquier sombreador de cómputo SPIR-V 1.6 obtendrá automáticamente la asignación definida y el tamaño de subgrupo variable.
Los marcos de aprendizaje automático de nivel superior están ejecutando modelos cada vez más a través de Vulkan, y como un paso para mejorar esta ruta de aceleración, hemos agregado VK_KHR_shader_integer_dot_product a Vulkan 1.3.
Los algoritmos de aprendizaje automático deberían poder usar esto en lugar de las funciones de producto de puntos implementadas manualmente y beneficiarse de la aceleración de hardware de estas instrucciones cuando estén disponibles.
La API expone si una instrucción determinada se acelera para permitir un mejor ajuste por dispositivo.
Vulkan 1.3 también agrega una serie de mejoras menores que hacen que el soporte del ecosistema sea más consistente y permiten características futuras como VK_KHR_synchronization2, VK_KHR_maintenance4, VK_KHR_copy_commands2, VK_KHR_format_feature_flags2 y VK_EXT_texel_buffer_alignment.
Tienes más información en el sitio web de Vulkan.