¿Deberían los nuevos programadores gráficos aprender Vulkan en lugar de OpenGL?


53

De la wiki : "Khrono se refirió inicialmente a la API de Vulkan como la 'iniciativa de OpenGL de próxima generación', y que es " un esfuerzo de rediseño para unificar OpenGL y OpenGL ES en una API común que no será al revés compatible con las versiones existentes de OpenGL ".

Entonces, ¿deberían aquellos que están entrando en la programación de gráficos aprender mejor Vulkan en lugar de OpenGL? Parece que servirán para el mismo propósito.


1
Si puede hacer algo en una API, puede hacerlo en cualquier otra API, solo la forma de hacerlo dependerá de la API.
A --- B

Respuestas:


33

¡Apenas!

Esto se parece mucho a preguntar "¿Deberían los nuevos programadores aprender C ++ en vez de C" o "¿Deberían los nuevos artistas aprender pintura digital en lugar de pintura física?

Especialmente porque NO es compatible con versiones anteriores, los programadores de gráficos serían tontos si excluyeran la API de gráficos más común en la industria, simplemente porque hay una nueva. Además, OpenGL hace cosas diferentes de manera diferente. Es completamente posible que una compañía elija OpenGL en lugar de Vulkan, especialmente al principio del juego, y esa compañía no estaría interesada en alguien que no conozca OpenGL, independientemente de si conoce a Vulkan o no.

La especialización rara vez es una habilidad comercializable.

Para aquellos que no necesitan comercializar sus habilidades como tales, como los desarrolladores independientes, sería aún más tonto eliminar una herramienta de su caja de herramientas. Un desarrollador independiente depende aún más de la flexibilidad y de poder elegir lo que funciona, sobre lo que se financia. Especializarse en Vulkan solo limita sus opciones.

La especialización rara vez es un paradigma eficiente.



77
Esta analogía de C ++ es inapropiada. Vulkan es una nueva API de próxima generación desarrollada por los creadores de OpenGL. C ++ es un competidor establecido, en su mayoría compatible con versiones anteriores de C.
Moby Disk

Esos detalles son irrelevantes para el punto de la analogía.
mHurley

66
Afirmar que la especialización es ineficiente o no comercializable es increíblemente ingenuo. Un traductor que sepa las cinco palabras en cada idioma hablado es inútil, las personas contratarán traductores que dominen (también se especializan en) un pequeño número de idiomas. Ahora sobre -specializing es problemático. Un traductor que domina completamente un idioma y solo sabe que el idioma tampoco es un traductor útil. Y los desarrolladores (independientes o de otro tipo) deben tener cuidado de no perder todo su tiempo aprendiendo nuevas herramientas. Eventualmente, necesitan hacer algo para vender, para que no se encuentren en bancarrota
8bittree

Para ser claros, no estoy necesariamente en desacuerdo con ustedes en lo que respecta a OpenGL y Vulkan. Este es posiblemente un caso en el que aprender ambos en lugar de solo Vulkan es la mejor opción.
8bittree

40

Si está comenzando ahora, y desea hacer un trabajo de GPU (en lugar de usar siempre un motor de juego como Unity), definitivamente debe comenzar aprendiendo Vulkan. Tal vez deberías aprender GL más tarde también, pero hay un par de razones para pensar primero en Vulkan.

  1. GL y GLES se diseñaron hace muchos años, cuando las GPU funcionaban de manera bastante diferente. (La diferencia más obvia son las llamadas de sorteo en modo inmediato frente a la disposición en mosaico y las colas de comandos). GL lo alienta a pensar en un estilo de modo inmediato, y tiene mucho legado. Vulkan ofrece modelos de programación que están mucho más cerca de cómo funcionan las GPU contemporáneas, por lo que si aprende Vulkan, comprenderá mejor cómo funciona realmente la tecnología, y qué es eficiente y qué no. Veo a muchas personas que comenzaron con GL o GLES e inmediatamente adquieren malos hábitos, como emitir llamadas de extracción por objeto en lugar de usar VBO, o peor aún, usar listas de visualización. Es difícil para los programadores de GL descubrir lo que ya no se recomienda.

  2. Es mucho más fácil pasar de Vulkan a GL o GLES que viceversa. Vulkan hace explícitas muchas cosas que estaban ocultas o eran impredecibles en GL, como el control de concurrencia, el uso compartido y el estado de representación. Impulsa una gran complejidad desde el controlador a la aplicación: pero al hacerlo, le da control a la aplicación y hace que sea más simple obtener un rendimiento predecible y compatibilidad entre diferentes proveedores de GPU. Si tiene algún código que funcione en Vulkan, es bastante fácil portarlo a GL o GLES, y termina con algo que usa buenos hábitos GL / GLES. Si tiene un código que funciona en GL o GLES, casi tiene que comenzar de nuevo para que funcione de manera eficiente en Vulkan: especialmente si fue escrito en un estilo heredado (ver punto 1).

Al principio, me preocupaba que Vulkan fuera mucho más difícil de programar y que, aunque estaría bien para los desarrolladores experimentados en compañías más grandes, sería una gran barrera para los indies y los aficionados. Le hice esta pregunta a algunos miembros del Grupo de trabajo, y me dijeron que tenían algunos puntos de datos de personas con las que habían hablado y que ya se habían mudado a Vulkan. Estas personas van desde desarrolladores en Epic que trabajan en la integración UE4 hasta desarrolladores de juegos para aficionados. Su experiencia fue que comenzar (es decir, tener un triángulo en la pantalla) implicaba aprender más conceptos y tener un código repetitivo más largo, pero no era demasiado complejo, incluso para los indies. Pero después de llegar a esa etapa, les resultó mucho más fácil construir una aplicación real y enviable, porque (a) el comportamiento es mucho más predecible entre las implementaciones de diferentes proveedores, y (b) llegar a algo que funcionó bien con todos los efectos activados no implicó tanta prueba y error. Con estas experiencias de desarrolladores reales, me convencieron de que la programación contra Vulkan es viable incluso para un principiante en gráficos, y que la complejidad general es menor una vez que pasa el tutorial y comienza a construir demostraciones o aplicaciones que puede ofrecer a otras personas.

Como otros han dicho: GL está disponible en muchas plataformas, WebGL es un buen mecanismo de entrega, hay una gran cantidad de software existente que usa GL, y hay muchos empleadores que contratan para esa habilidad. Va a estar presente durante los próximos años mientras Vulkan aumenta y desarrolla un ecosistema. Por estas razones, sería una tontería descartar aprender GL por completo. Aun así, será mucho más fácil y se convertirá en un mejor programador de GL (y un mejor programador de GPU en general), si comienza con algo que lo ayude a comprender la GPU, en lugar de comprender cómo funcionaban hace 20 años.

Por supuesto, hay una opción más. No sé si esto es relevante para usted en particular, pero creo que debería decirlo a los demás visitantes de todos modos.

Para ser un desarrollador de juegos independiente, o un diseñador de juegos, o para hacer experiencias de realidad virtual, no necesitas aprender Vulkan o GL. Muchas personas comienzan con un motor de juegos (Unity o UE4 son populares en este momento). El uso de un motor como ese le permitirá concentrarse en la experiencia que desea crear, en lugar de la tecnología que lo respalda. Le ocultará las diferencias entre GL y Vulkan, y no necesita preocuparse por cuál es compatible con su plataforma. Te permitirá aprender sobre coordenadas 3D, transformaciones, iluminación y animación sin tener que lidiar con todos los detalles arenosos a la vez. Algunos estudios de juegos o realidad virtual solo funcionan en un motor, y no tienen un experto en GL a tiempo completo. Incluso en los estudios más grandes que escriben sus propios motores, las personas que realizan la programación de gráficos son una minoría,

Aprender sobre los detalles de cómo interactuar con una GPU es sin duda una habilidad útil, que muchos empleadores valorarán, pero no debería sentir que tiene que aprender eso para ingresar a la programación 3D; e incluso si lo sabes, no será necesariamente algo que uses todos los días.


2
Estoy un poco en desacuerdo. Vulkan (y DX12) ha demostrado ser muy difícil de implementar para desarrolladores experimentados . Con todo el poder que te da Vulkan, es muy fácil dispararte en el pie. Además, Vulkan requiere mucho más código repetitivo. Para alguien que solo está aprendiendo acerca de la programación de GPU, tiendo a pensar que Vulkan será muy abrumador.
RichieSams

2
@RichieSams No creo que quisieras decir "implementar". Solo el proveedor de GPU tiene que implementar Vulkan, y es mucho más fácil que implementar OpenGL. (¡Créame, lo he logrado!) Pero suponiendo que quisiera decir que es difícil integrarse o programar en contra, agregué un párrafo con información que aprendí del Vulkan WG.
Dan Hulme

Correcto. Implementar es quizás una mala elección de palabras. Quise decir 'usar' en su programa. Pero me gustan tus ediciones. Bien dicho
RichieSams

@DanHulme - Estoy sorprendido por tu comentario "GL te anima a pensar en un estilo de modo inmediato". ¿Pensé que eso solo era cierto en las primeras versiones de OpenGL?
ToolmakerSteve

1
@ToolmakerSteve El OpenGL WG ha trabajado mucho para agregar concurrencia y escrituras en lotes, para que pueda expresar su programa de una manera adecuada para las implementaciones en mosaico / diferidas. Pero sigue siendo una base que se estableció en la era del modo inmediato, por lo que esas personas decidieron que se necesitaba un nuevo comienzo en Vulkan. Y todavía veo muchos usuarios nuevos que comienzan con GL y forman un modelo mental de modo inmediato de cómo funcionan las implementaciones.
Dan Hulme

26

El aprendizaje de la programación de gráficos es más que solo aprender API. Se trata de aprender cómo funcionan los gráficos. Transformaciones de vértices, modelos de iluminación, técnicas de sombra, mapeo de texturas, renderizado diferido, etc. Estos no tienen absolutamente nada que ver con la API que utiliza para implementarlos.

Entonces la pregunta es esta: ¿quieres aprender a usar una API? ¿O quieres aprender gráficos ?

Para hacer cosas con gráficos acelerados por hardware, debe aprender a usar una API para acceder a ese hardware. Pero una vez que tiene la capacidad de interactuar con el sistema, su aprendizaje de gráficos deja de centrarse en lo que la API hace por usted y, en cambio, se centra en los conceptos gráficos. Iluminación, sombras, protuberancia, etc.

Si su objetivo es aprender conceptos gráficos, el tiempo que pasa con la API es el tiempo que no pasa aprendiendo conceptos gráficos . Cómo compilar sombreadores no tiene nada que ver con los gráficos. Tampoco cómo enviarles uniformes, cómo cargar datos de vértices en buffers, etc. Estas son herramientas y herramientas importantes para realizar trabajos gráficos.

Pero en realidad no son conceptos gráficos. Son un medio para un fin.

Se necesita mucho trabajo y aprendizaje con Vulkan antes de que pueda llegar al punto en el que esté listo para comenzar a aprender conceptos gráficos. Pasar datos a los sombreadores requiere una gestión explícita de la memoria y una sincronización explícita del acceso. Etcétera.

Por el contrario, llegar a ese punto con OpenGL requiere menos trabajo. Y sí, estoy hablando de OpenGL de perfil central moderno y basado en sombreador.

Simplemente compare lo que se necesita para hacer algo tan simple como limpiar la pantalla. En Vulkan, esto requiere al menos cierta comprensión de una gran cantidad de conceptos: buffers de comandos, colas de dispositivos, objetos de memoria, imágenes y las diversas construcciones de WSI.

En OpenGL ... es tres funciones: glClearColor, glCleary el intercambio de llamadas memorias intermedias específico de la plataforma. Si está utilizando OpenGL más moderno, puede reducirlo a dos: glClearBufferuive intercambiar buffers. No necesita saber qué es un framebuffer o de dónde proviene su imagen. Lo borras e intercambias buffers.

Debido a que OpenGL te oculta mucho, lleva mucho menos esfuerzo llegar al punto en el que realmente estás aprendiendo gráficos en lugar de aprender la interfaz del hardware de gráficos.

Además, OpenGL es una API (relativamente) segura. Emitirá errores cuando haga algo mal, por lo general. Vulkan no lo es. Si bien hay capas de depuración que puede usar para ayudar, la API principal de Vulkan no le dirá casi nada a menos que haya una falla de hardware. Si hace algo mal, puede obtener procesamiento de basura o bloquear la GPU.

Junto con la complejidad de Vulkan, se hace muy fácil hacer accidentalmente lo incorrecto. Olvidar establecer una textura en el diseño correcto puede funcionar en una implementación, pero no en otra. Olvidar un punto de sincronización puede funcionar a veces, pero luego falla repentinamente sin razón aparente. Etcétera.


Dicho todo esto, hay más en aprender gráficos que aprender técnicas gráficas. Hay un área en particular donde Vulkan gana.

Rendimiento gráfico .

Ser un programador de gráficos 3D generalmente requiere una idea de cómo optimizar su código. Y es aquí donde la ocultación de información de OpenGL y hacer cosas a sus espaldas se convierte en un problema.

El modelo de memoria OpenGL es sincrónico. La implementación puede emitir comandos de forma asincrónica siempre que el usuario no pueda notar la diferencia. Entonces, si renderiza a alguna imagen, luego intente leerla, la implementación debe emitir un evento de sincronización explícito entre estas dos tareas.

Pero para lograr el rendimiento en OpenGL, debe saber que las implementaciones hacen esto, para que pueda evitarlo . Debe darse cuenta de dónde la implementación emite eventos de sincronización en secreto y luego reescribir su código para evitarlos tanto como sea posible. Pero la API en sí misma no lo hace obvio; tienes que haber obtenido este conocimiento de alguna parte.

Con Vulkan ... usted es quien debe emitir esos eventos de sincronización. Por lo tanto, debe tener en cuenta el hecho de que el hardware no ejecuta comandos sincrónicamente. Debe saber cuándo necesita emitir esos eventos y, por lo tanto, debe tener en cuenta que probablemente retrasarán su programa. Entonces haces todo lo posible para evitarlos.

Una API explícita como Vulkan te obliga a tomar este tipo de decisiones de rendimiento. Y, por lo tanto, si aprende la API de Vulkan, ya tiene una buena idea sobre qué cosas van a ser lentas y qué cosas serán rápidas.

Si tiene que hacer un trabajo de framebuffer que lo obligue a crear un nuevo renderpass ... es muy probable que sea más lento que si pudiera encajarlo en un subpass separado de un renderpass. Eso no significa que no pueda hacer eso, pero la API le dice por adelantado que podría causar un problema de rendimiento.

En OpenGL, la API básicamente te invita a cambiar tus archivos adjuntos de framebuffer willy-nilly. No hay orientación sobre qué cambios serán rápidos o lentos.

Entonces, en ese caso, aprender Vulkan puede ayudarlo a aprender mejor sobre cómo hacer gráficos más rápido. Y ciertamente lo ayudará a reducir la sobrecarga de la CPU.

Todavía llevará mucho más tiempo antes de que pueda llegar al punto en el que pueda aprender técnicas de representación gráfica.


1
Me alegra que hayas publicado esto, porque deja muy claras algunas ideas que dudaba expresar en mi respuesta: que aprender los conceptos es lo más importante. Creo que en lo que diferimos es que fomentas GL porque es más fácil comenzar, mientras que creo que la facilidad de comenzar conlleva el riesgo de hacer las cosas de manera tradicional. Es bastante difícil saber en GL cuál es el "idioma GL moderno", en comparación con la programación en un estilo heredado. Si nadie le dice que use VAO en lugar de una llamada de sorteo por primitiva, es mucho más difícil desaprender ese error más adelante.
Dan Hulme

1
@DanHulme: Todo se trata de utilizar los materiales de aprendizaje adecuados. Hay muchos materiales en línea que usan modismos modernos. Nadie debería intentar aprender gráficos simplemente leyendo un manual de referencia o una especificación.
Nicol Bolas

¡Lo haces sonar muy fácil! Aun así, todavía veo a los programadores comenzando con los gráficos, algunos de ellos muy competentes en otros campos, y usando funciones heredadas y sin aprender nada sobre las características de rendimiento. Es realmente difícil equivocarse en Vulkan, porque hace que las cosas caras parezcan caras. De todos modos, no necesitamos discutir. Estoy de acuerdo con su punto principal: aprender los conceptos es lo más importante, y puede hacerlo sin Vulkan o GL.
Dan Hulme

@DanHulme: " Es realmente difícil equivocarse en Vulkan " porque estás demasiado ocupado haciendo todo lo demás mal;) Además, todavía es bastante fácil equivocarse en Vulkan. Sincronización innecesaria. Usando solo el diseño de imagen "general". No aprovechar las subpases. Cambios frecuentes en la tubería. Etcétera. Sin mencionar que diferentes proveedores ni siquiera están de acuerdo sobre la mejor manera de usar Vulkan.
Nicol Bolas

2
@DanHulme: En cuanto a lo fácil que es usar OpenGL moderno, hago todo lo posible para que sea fácil . Si las personas insisten en aprender de sitios de basura como NeHe, o leyendo documentación aleatoria, eso no es algo que nadie pueda ayudar. Puedes llevar caballos al agua, pero no puedes obligarlos a beber.
Nicol Bolas

7

El principal atractivo de OpenGL (al menos para mí) es que funciona en muchas plataformas. Actualmente, Vulkan no funciona en OSX, y Apple tiene una API competitiva llamada Metal. Es muy posible que pase algún tiempo antes de que Apple admita Vulkan, y cuando lo hagan, el soporte de Vulkan solo puede llegar a su último hardware. OpenGL ya es compatible con la mayoría del hardware, y continuará haciéndolo.


Apuesto a que si OSX alguna vez admitiría Vulkan, solo admitirá un pequeño subconjunto de él, y que también se convertiría en la API de gráficos de próxima generación para navegadores web, OpenGL sigue siendo mucho más fácil de usar (hasta cierto punto) Vulkan, lo que gana vulkan en simplicidad sobre el procesamiento de la tubería lo pierde en el manejo explícito de muchas otras cosas
GameDeveloper

1
El modo inmediato @DarioOO OpenGL es mucho más simple de usar que el modo que se llame lo que sea que no sea inmediato, pero no se recomienda.
user253751

1
@Gavin: Cabe señalar que las versiones de OpenGL 4.2 o superior tampoco son compatibles con OSX. Entonces, si desea usar algo reciente de OpenGL en OSX, no puede hacerlo. Y es muy poco probable que Apple adopte versiones posteriores de OpenGL. La plataforma Apple está integrada en Metal, por lo que la plataforma cruzada es un fracaso de cualquier manera.
Nicol Bolas

Apple nunca apoyará a Vulkan a menos que se vean obligados a hacerlo, y la economía es bastante simple. Al entrar en Metal, esperan encerrar a los desarrolladores de juegos móviles que necesitan más de lo que GLES2 puede ofrecer pero que no tienen los recursos para escribir sus juegos tanto para Vulkan como para Metal. Están preparados para sacrificar el pequeño ecosistema de juegos de Mac por esto, especialmente si los desarrolladores de iOS también se lanzan en la Mac App Store.
Jonathan Baldwin

Vulkan ahora funciona en macOS (anteriormente OS X): moltengl.com
Alexander

4

Depende de lo que quieras hacer. Si desea aprender programación gráfica solo para usted, realmente no importa lo que elija.

Si está pensando en un trabajo profesional, le recomiendo Vulkan. Está más cerca del hardware y creo que el conocimiento sobre lo que hace el hardware es importante para los programadores gráficos.

Vulkan está más cerca del hardware porque OpenGL hace muchas cosas bajo el capó que en Vulkan haces manualmente, como ejecutar la cola de comandos. Además, la gestión de la memoria depende de la aplicación, no del controlador. Debe preocuparse por asignar memoria uniforms(variable que pasa de la CPU a la GPU), por rastrearlos. Tiene más cosas de qué preocuparse, pero también le da más libertad en el uso de la memoria. Puede sonar aterrador y abrumador, pero realmente no lo es. Es solo la próxima API que necesita aprender.

Comprender estas cosas también ayudará a comprender cómo funciona la GPU. Lo que le permitirá hacer algunas optimizaciones tanto en Vulkan como en OpenGL.

Y una cosa más que me viene a la mente, si está comenzando a aprender programación gráfica, probablemente cuando busca un trabajo, ya que un Vulkan será más popular (tal vez más popular que OpenGL). Además, hasta donde yo sé, la mayoría de las empresas que están utilizando algunas API de gráficos escriben sus propias funciones, por lo que existe la posibilidad de que en el trabajo no escriba en OpenGL ni en Vulkan, pero el conocimiento sobre GPU siempre será útil.


2

He estado "entrando" en la programación de gráficos por algunos meses.

En este momento todavía estoy en la escuela secundaria, y puedo decirte que casi siempre busco desarrollar aplicaciones multiplataforma. De hecho, este es mi problema número uno con Vulkan: no está desarrollado para funcionar en todas las plataformas. Trabajo con OpenGL en Java y tengo más de 6 meses.

Otro problema que tengo es con las afirmaciones de Vulkan es cómo dice ser mejor. Si bien OpenGL ciertamente no actualiza su sitio web con mucha frecuencia. Continúan lanzando actualizaciones constantemente y siempre espero nuevas actualizaciones que se ejecuten más rápido o funcionen mejor con nuevo hardware.

Dicho esto, aunque trabajo principalmente con OpenGL, entiendo los principios básicos de DirectX y Vulkan. Si bien no trabajo mucho con ellos, especialmente con Vulkan, ya que es muy difícil de aprender y no está tan bien estructurado para la programación como OpenGl y DirectX.

Por último, me gustaría agregar que la especialización en un solo campo, como la mayoría de las veces uso Java y OpenGL, no es increíblemente comercializable. Si quisiera conseguir un trabajo en una empresa que fabricara juegos, en su mayor parte OpenGL solo se usaría para crear juegos para el desarrollo de Linux y Android y posiblemente para OSX. DirectX para Windows y Consolas <Que Vulkan puede reemplazar en algunos casos.

No puedo esperar para las actualizaciones de OpenGL para siempre, y no lo haré. Pero es mi preferencia por el desarrollo.


" Otro problema que tengo es con las afirmaciones de Vulkan es cómo dice ser mejor " . Vulkan no dice ser nada. Es solo una API; No puede hacer reclamos.
Nicol Bolas

¿Te das cuenta de que Vulkan y GL están hechos principalmente por las mismas personas?
Dan Hulme

Sí. Todavía prefiero GL
Winter Roberts

2

Me gustaría darles mi perspectiva gráfica para principiantes sobre el tema. Lo que me di cuenta (en muchos años trabajando como ingeniero en otro campo) es que los conceptos fundamentales son la parte más importante. Una vez que tenga una comprensión sólida de ellos, aprender la última API nueva y brillante es la parte menos difícil. No sé si eres un joven aficionado que intenta programar el nuevo Skyrim o si estás buscando un trabajo en el campo de CG.

Te digo lo que creo que es el mejor enfoque en mi opinión para aprender gráficos por computadora "como un profesional".

  1. Aprende álgebra lineal y geometría como un profesional. Sin esto, olvide cualquier API o gráficos elegantes
  2. Compre un buen libro sobre gráficos de computadora (por ejemplo, Fundamentos de gráficos de computadora )
  3. Mientras estudia el libro, configure un entorno de programación con algo que le permita dibujar en una imagen e implementar los algoritmos. Puede ser Java 2D o C ++ y SDL o incluso Python y Pygame para lo que importa. En esta etapa, debe poner en marcha sus engranajes con textura giratoria con múltiples vistas de cámara antes de intentar obtener 10000 FPS
  4. Ahora tome OpenGL, Vulkan o DirectX y repita su ejemplo elegante (ver arriba).

Comenzar a preocuparse por el rendimiento antes de comprender cómo trazar una línea es como preocuparse por la aerodinámica de su automóvil antes de obtener la licencia de conducir.


0

Soy autodidacta en C ++ sin ninguna educación formal y en los últimos 15 años he aprendido tanto OpenGL 1.0 a través de Modern OpenGL y DirectX 9c, 10 y 11. No he entrado en DirectX 12 y he estado deseando prueba mi mano en Vulkan. Solo he completado algunos tutoriales básicos para dibujar un triángulo simple o un cubo giratorio simple con Vulkan. Al igual que con DirectX 11 y OpenGL 3.3+, he escrito motores de juegos 3D completamente funcionales e incluso los he usado para construir juegos simples.

Debo decir que depende del entorno general de la persona que está aprendiendo. Si recién se está iniciando en la programación de gráficos 3D, diría que los principiantes saltan a OpenGL o DirectX 11 ya que hay muchos tutoriales, recursos, ejemplos y aplicaciones que ya funcionan. Aprender gráficos en 3D no es un tema fácil.

Si nos abstraemos del aspecto de programación y nos enfocamos en la noción de qué tipo de técnicas se utilizan que involucran los diferentes niveles de matemática que conducen a conjuntos de datos y estructuras de datos y algoritmos; Hay muchas cosas que debes saber y comprender antes de intentar construir un motor de juego 3D o utilizar uno existente de manera efectiva.

Ahora, si ya comprende todas las matemáticas y la teoría detrás de esto y tiene experiencia en programación, puede usar API, bibliotecas y aplicaciones ya existentes, como Unity o Unreal Engine, y simplemente escribir el código fuente y los scripts que necesita para que su aplicación funcione .

Entonces, desde mi propio entendimiento y según la forma en que lo veo, es esto si estás buscando construir un juego rápido solo por el hecho de construir un juego; vaya con marcos ya existentes que harían que su tiempo de producción sea mucho menor. Por otro lado, si desea comprender el funcionamiento interno de cómo se diseñan los Motores de juego / Motores de física / Motores y simuladores de animación y desea construir uno usted mismo, aquí es donde puede elegir entre elegir su API como DirectX, OpenGL o Vulkan. Uno de los factores determinantes aquí también sería su conocimiento de programación existente. Lo que quiero decir con esto es si no sabes nada sobre llamadas múltiples, síncronas vs asíncronas, cercas de memoria, carreras de datos, semáforos y paralelismo (programación paralela),

Menciono esto porque si no sabe cómo administrar adecuadamente su memoria junto con sus hilos y tiempo de acceso; ¡Vulkan te morderá en el culo! Donde OpenGL y DirectX mantendrán tu mano hasta el final consumiendo mucha más potencia de CPU.

Ahora, si su nivel de conocimiento de programación es decente, y tiene los siguientes antecedentes matemáticos que incluyen todos los niveles de álgebra, geometría, trigonometría, álgebra booleana, probabilidad, estadística, álgebra basada en matriz de vectores, cálculo I, II, ... Infinito (lol). Cálculo vectorial, álgebra lineal, sistemas de ecuaciones lineales, geometría analítica con cálculo vectorial de cálculos multivariables, teoría de números y conjuntos, conjuntos y estructuras de datos, análisis computacional, diseño computacional y algorítmico. Luego, puede entrar en los conceptos de lo que se necesita para hacer un motor de juego real y esto es sin ninguna matemática aplicada o ecuaciones de física que necesitará. Una vez que tenga esos antecedentes y suficiente experiencia en programación, especialmente la gestión de memoria y la aritmética de puntero, puede comenzar a construir su Game Engine.

Entonces, la cuestión aquí es que debes comprender todos los aspectos de lo que se necesita para hacer un Game Engine para hacer una programación de gráficos avanzada. Si solo está haciendo gráficos en 2D, ¡la vida no es demasiado difícil, ya que puede hacerlo en Python sin ninguna de las API mencionadas anteriormente! Pero si quieres ser serio y diseñar un motor de juego de potencia completo que sea robusto con muchos conjuntos de características, entonces la elección aquí sería C o C ++ y usar OpenGL, Direct X o Vulkan. Cualquiera de ellos estaría bien. Ahora, si está construyendo el motor desde cero y está buscando el motor en funcionamiento más "eficiente" con la menor cantidad de recursos de carga, entonces debería elegir Vulkan. Pero si sigues esta ruta, ¡al menos deberías saber todo lo que he mencionado anteriormente y algo más!

Como puede ver, Vulkan no está realmente orientado a programadores principiantes en este campo. Debe tener un amplio conocimiento de todas las matemáticas, paradigmas de programación, todos los diferentes tipos de conjuntos de datos y algoritmos, incluidos subprocesos, sincronización de memoria y programación paralela. E incluso entonces eso es solo para que la aplicación cargue un simple triángulo 2D en la pantalla. ¡Lo que se puede hacer en aproximadamente 100 líneas de código en OpenGL o 250 líneas de código en DirectX toma casi 1,000 líneas de código en Vulkan!

Vulkan le deja todo a usted, ya que usted es responsable de todos los aspectos de cómo está utilizando Vulkan en su aplicación. No se puede agarrar de la mano, no se interpone en su camino, ¡le permitirá dispararse en el pie o colgarse para comprar una soga recursiva!

Ahora, esto no quiere decir que los principiantes o los que son nuevos en este campo no deberían aprender Vulkan, pero lo que sugeriría para ellos es esto: Primero aprenda lo suficiente de OpenGL y / o DirectX para mojarse los pies y ver cómo La aplicación básica está estructurada solo para representar un triángulo simple o un cubo giratorio. Familiarícese con sus API y sus patrones recurrentes de sus estructuras. Mientras aprende que puede aprender Vulkan en paralelo en paralelo, de esta manera puede ver cómo cada uno de los tres está logrando la misma tarea, pero sabe cómo lo hacen de manera diferente, también puede comparar los resultados entre las diferentes API y allí puede elegir cuál es el preferido para usted. Este método también le daría otra herramienta en su caja de herramientas, e incluso podría escribir su aplicación para admitir los 3 y tener el "

Al final, depende de esa persona elegir la ruta que desea seguir, y a partir de ahí su éxito estará determinado por su dedicación, estudio constante, trabajo duro, prueba y error, y lo más importante, sus fracasos. Si no fallas, ¡entonces no tienes éxito! ¡Solo tiene éxito si ha fallado, ha encontrado su (s) error (es), lo ha corregido, ha seguido adelante y ha vuelto a subir y lo ha vuelto a hacer!


-1

Primero debe aprender OpenGL, ya que ese es el estándar para Gráficos, en muchas plataformas.

Incluso si hay una biblioteca más nueva, es muy importante comprender los conceptos básicos y trabajar con un lenguaje que se usa en toda la industria ... Especialmente porque Vulkan no se usará en Grandes Empresas por un tiempo, desde entonces.

  1. Nadie quiere adaptarse de inmediato y terminar jodiéndose con un Marco / Biblioteca no estable.

  2. Tendrían que contratar / volver a capacitar a sus programadores actuales de Open-GL, y no hay necesidad de hacerlo.


Además, he oído que OpenGL y Vulkan no son exactamente lo mismo. Escuché que Vulkan es una API de nivel inferior y más cercana al código de máquina que OpenGL.

Esta respuesta que acabo de encontrar parece tener mucha información excelente

https://gamedev.stackexchange.com/questions/96014/what-is-vulkan-and-how-does-it-differ-from-opengl


Otra cosa que es algo a considerar es el problema que sucedió con OpenGL 1.

OpenGL 1 a OpenGL 2 tuvo cambios MAYORES, y dado que muchas personas usaban OpenGL1 y el hardware lo admitía, es necesario implementar una gran compatibilidad con versiones anteriores en algunas aplicaciones / motores, y eso a veces es realmente doloroso para los desarrolladores seguir apoyándolo. .

Además del soporte, el idioma cambió tanto que tuvo que aprender cosas nuevas.

Esto ha sucedido con marcos como JavaFX (de 1.x a 2.x) y Play! Marco (también 1.xa 2.x). Completa los cambios en el marco, lo que significa que tenemos que volver a aprender ... todo ...


Así que esencialmente lo que debes hacer es esperar hasta que Vulkan sea ESTABLE. Eso significa esperar hasta Probablemente el parche 2.0. No significa que no pueda aprender sobre los conceptos básicos de Vulkan, pero sepa que esto podría cambiar. Supongo que un grupo como Kronos proporcionaría una API muy estable desde el principio, especialmente porque hay varios ingenieros de Nvidia y AMD trabajando en Vulkan, incluida una persona de Nvidia que supervisa el proyecto aparentemente, así como The base of Mantle; sin embargo, como cualquier software, los codificadores veremos qué tan bien funciona desde el principio, pero muchos desconfían y esperan ver qué sucede.


Vulkan es estable en este momento. Su analogía GL 1.0 vs 2.0 es apta. Comenzar con GL ahora sería como comenzar a aprender GL 1.0 seis meses después de que salga GL 2.0.
Dan Hulme

1
Vulkan podría ser "estable", no significa que las cosas no cambien, esta es la naturaleza de los idiomas, que presenté 2 cambios recientes en los idiomas en los últimos años, entonces, ¿cómo sabemos que esto no le sucedería a Vulkan? Básicamente estás diciendo que aprender OpenGL es un desperdicio, y eso es falso. Haciendo que parezca que OpenGL está muerto, y ya no se usará ... También es falso. Además, no soy el único que cree que Vulkan podría tener problemas de estabilidad. Puede que no, pero con cualquier lenguaje nuevo, eso es lo que buscas.
XaolingBao

1
Por supuesto, las cosas cambiarán, y el grupo de trabajo ya está trabajando hacia nuevas características para una próxima versión de especificaciones (ssh, no escuchaste eso de mí). Estable significa que esas cosas se sumarán a la especificación, y las cosas que aprendes hoy al respecto seguirán siendo válidas dentro de dos años. OTOH, las cosas que aprende sobre GL hoy ya no coinciden con la forma en que funcionan las GPU: al igual que aprender sobre tuberías de funciones fijas en un mundo de sombreador programable. Si lees mi respuesta, ves que no creo que aprender GL ahora sea un desperdicio. Pero "Vulkan es demasiado nuevo" no es una buena razón para descartarlo.
Dan Hulme

1
@Lasagna: " Es que está sujeto a cambios, no muchas empresas se adaptarán a usarlo de inmediato " Valve. Épico. Unidad. Todos ellos están fuertemente invertidos en hacer que sus motores funcionen en Vulkan. CryTech e Id tampoco lo están ignorando exactamente. Por lo tanto, su declaración no es acorde con los hechos.
Nicol Bolas

2
@Lasagna: "El hecho de que se esté adaptando a los motores 3D no significa que las empresas estén invirtiendo sus proyectos en él " ... ¿Entonces los motores 3D no califican como "proyectos"? ¿DOTA2 cuenta como un "proyecto"? Porque tiene soporte para Vulkan en este momento . ¿La línea de teléfonos inteligentes y tabletas de Samsung cuenta como un "proyecto"? Porque están buscando incorporarlo a la interfaz de usuario. La realidad es que mucha gente está dispuesta a "ser la que pruebe una nueva plataforma", si esa plataforma les proporciona lo que necesitan.
Nicol Bolas