Soy relativamente nuevo en la programación de gráficos, y acabo de leer algunos libros y he estado escaneando a través de tutoriales, así que, por favor, perdónenme si esto parece una pregunta tonta.¿Qué hace un sombreador de píxeles en realidad?
Tengo los conceptos básicos de directx11 en funcionamiento, y ahora estoy buscando divertirme. así que, naturalmente, he estado leyendo mucho sobre la tubería sombreadora, y ya estoy fascinado. La idea de escribir un código simple y minúsculo que tenga que ser lo suficientemente eficiente para ejecutarse quizás decenas de miles de veces cada 60 de segundo sin desperdiciar recursos me tiene apurado para captar el concepto antes de continuar y posiblemente hacer un desastre. de cosas. Lo que estoy teniendo problemas es captar lo que el sombreador de píxeles está haciendo en realidad.
Los sombreadores de vértices son fáciles de entender, organizas los vértices de un objeto en estructuras de datos uniformes que relacionan información sobre él, como coordenadas de posición y textura, y luego pasan cada vértice al sombreador para convertirlo de 3d a 2d forma de matrices de transformación. Mientras lo entiendo, puedo averiguar cómo codificarlo.
Pero no tengo pixel shaders. Lo que obtengo es que la salida del sombreador de vértices es la entrada del sombreador de píxeles. Entonces, ¿no sería eso simplemente dar al sombreador de píxeles las coordenadas 2d de los vértices del polígono? Lo que he llegado a entender es que el sombreador de píxeles recibe píxeles individuales y realiza cálculos sobre ellos para determinar cosas como el color y la iluminación. Pero si eso es cierto, ¿qué píxeles? ¿Toda la pantalla o solo los píxeles que se encuentran dentro del polígono 2d transformado?
o he entendido mal algo por completo?
bien, creo que ahora entiendo. Sin embargo, como soy un aprendiz visual, hice un diagrama de lo que creo que has descrito, así que dime si me falta algo. http://postimage.org/image/9oy2nroqr/ – FatalCatharsis
Un error: las coordenadas post-vertexshader son ** no ** coordenadas de píxeles, pero _normalized_. Para Direct3D esto significa que están entre 0.0 y 1.0 (-1.0 y 1.0 en OpenGL). Esto no es muy intuitivo al principio, porque la pantalla generalmente no es cuadrada, pero "simplemente funciona" (sin preocupaciones, ¡nada especial para usted!) Y es más eficiente para el hardware hacer cálculos (por ejemplo, recorte) en este espacio. El resto se ve bien (geom shader, tesselation y clipping se conocen como "cosas que ocurren en el medio"). – Damon
ah gotcha, prefiero las coordenadas normalizadas en realidad, ya que todo estaría en la misma escala sin importar la resolución de pantalla elegida, (opengl parece un poco extraño, -1 a 1). ¿Entonces el sombreador de geometría y las etapas de tesselación ocurren en el medio? Me hubiera imaginado que son lo primero, ya que los nuevos vértices podrían alimentarse en el sombreador de vértices y convertirse en coords de pantalla. son los nuevos vértices que se crean automáticamente convertidos en 2d? – FatalCatharsis