Muestra las diferencias entre dos versiones de la página.
| Ambos lados, revisión anterior Revisión previa Próxima revisión | Revisión previa | ||
|
fw:ogl:graphics [2013/02/10 17:28] alfred [Graphics pipeline] |
fw:ogl:graphics [2020/05/09 09:25] (actual) |
||
|---|---|---|---|
| Línea 14: | Línea 14: | ||
| ==== Matrices de OpenGL ==== | ==== Matrices de OpenGL ==== | ||
| ==== Shaders ==== | ==== Shaders ==== | ||
| - | ===== GLSL ===== | + | Los shaders son programas que se ejecutan sobre el procesador gráfico y son utilizados para modificar los efectos de luz, sombras y producir efectos de postprocesado especiales. Proporcionan gran flexibilidad a la hora de programar la GPU. |
| + | === Tipos de shaders === | ||
| + | * **Vertex shaders**: Se ejecutan por cada vértice. Su propósito es transformar cada vértice 3d en una coordenada 2d. Dan muchas facilidades para manipular sus propiedades (posición, color y textura) aunque no crear nuevos vértices. | ||
| + | * **Geomtry shaders**: Pueden generar nuevas primitivas gráficas (puntos, líneas, triangulos...). Se ejecutan después de los vertex sahders. Toman como input una primitiva. Entre sus usos está el de la generación de puntos de sprite, tessellation, volumen y extrusión de sombras... Un ejemplo sería el de la modificación de una malla compleja, se pueden generar puntos de control para una curva y generar líneas extra para aproximarla. | ||
| + | * **Pixel shaders** (también conocidos como **fragment shaders**): Tratan atributos como el color de cada fragmento. Para simplificar el valor de luz, hacer bump mapping, sombras, objetos translucidos... Pueden alterar la profundidad de los fragmentos o sacar más de un color si han sido activados múltiples targets de render. Aunque no pueden aplicar grandes alteraciones, a su nivel se conoce las coordenadas de la pantalla donde donde serán dibujados y los pixels vecinos, cosa que permite ejecutar gran variedad de efectos de postprocesado 2d (como blur, detección y acentuación de bordes...). | ||
| + | === Algoritmos de shading === | ||
| + | * [[http://en.wikipedia.org/wiki/Illumination_model]] | ||
| + | Técnicas de interpolación: | ||
| + | * Flat shading | ||
| + | * Gouraud shading | ||
| + | * Phong shading | ||
| + | Modelos de iluminación (pueden ser combinados con técnicas de interpolación): | ||
| + | * Blinn–Phong | ||
| + | * Cook–Torrance (microfacets) | ||
| + | * Lambert | ||
| + | * Minnaert | ||
| + | * Oren–Nayar (Rough opaque diffuse surfaces) | ||
| + | * Phong | ||
| + | * Ward anisotropic | ||
| + | * Cel shading | ||
| + | |||
| + | === Lenguajes para programar shaders === | ||
| + | * **GLSL**: Oficial de OpenGL (OpenGL Shading Language). | ||
| + | * **HLSL**: Oficial de Direct3d (High Level Shading Language). | ||
| + | * **Cg**: Propio de nVidia. | ||
| + | |||
| + | |||
| + | ===== Notas ===== | ||
| + | * [[http://es.wikipedia.org/wiki/Coordenadas_homog%C3%A9neas]] | ||