Estoy jugando con el modelado 3D de procedimiento simple para hacer pequeños edificios para la impresión 3D. Un ejemplo:
Para hacer que los modelos sean más legibles en pantalla, he implementado el mapeo básico de sombras para una sola luz direccional. Como mi escena no está cambiando, solo renderizo el mapa de sombras una vez usando un cuadro alineado de eje de la escena para descubrir cuáles deberían ser los límites del mapa de sombras. Las sombras y los límites parecen tener todas las matrices correctas, pero acercarse un poco se ve terrible:
Por la lectura que hice, entiendo el peter panning y lo que podría hacer al respecto, pero los bordes irregulares, que creo que son una forma de alias proyectivo, se ven tan mal que creo que algo está mal en mi implementación básica.
Pirateé el sombreador de píxeles para mostrar los límites del texel de sombra:
Tengo filtrado bilineal en la textura (sin él, tengo un acné sombra grave). Lamentablemente, mi intento de PCF también falló; parece igual de irregular:
Aquí está el caso de muestra única con filtrado bilineal deshabilitado:
¿Parece esto un alias proyectivo "típico"? ¿Podría la representación dinámica del mapa de sombras, usando el frustum de vista recortado a la escena, posiblemente en cascada, abordar el problema?
Editar: Agregar un primer plano de filtrado bilineal, comparación de sombra posterior, solo para mostrar lo que obtengo. El acné de sombra malo aparece debido a los bordes interiores; Estoy modelando con bloques virtuales apilados y no estoy haciendo una operación de unión adecuada. Según mi lectura, implementar operaciones booleanas en poliedros no es trivial, pero también me permitirá implementar volúmenes de sombra estáticos, así como limpiar algunos programas de impresión 3D.
fuente
Usted ha dicho que "... filtrado bilineal en la textura ...". Parece que estás interpolando los valores de profundidad del mapa de sombras. La forma correcta de usar la interpolación con el mapa de sombras es aplicarla sobre los resultados de las pruebas de sombra (hasta donde recuerdo, OpenGL lo admite). Incluso podría combinar la interpolación de los resultados de las pruebas paralelas con PCF, que ofrecerá resultados mucho mejores. Sin embargo, como habrás notado, el alias es una plaga que siempre persigue el mapeo de sombras :)
Aunque entiendo que está buscando soluciones con respecto al mapeo de sombras (incluso porque es bastante simple de implementar), ¿alguna vez ha considerado el uso de volúmenes de sombra? Es mucho más complejo de implementar, pero no sufre de alias en absoluto, y creo que encajaría muy bien con sus propósitos.
fuente