Estoy en el proceso de escribir un juego isométrico desde cero, y me gustaría saber cómo / si puedo agregar luces y sombras.
El código que tengo hasta ahora se puede encontrar aquí , pero debería ser suficiente para saber que en este momento , los mapas son simples matrices 3D de valores verdadero / falso . Aquí hay una foto del medio ambiente:
Si se tratara de un mapa de mosaico de una sola capa, sería sencillo. Puedo entender el simple raycasting en 2d que se requiere.
Sin embargo, dado que mis mapas tienen múltiples niveles de altura, así como áreas similares a cuevas, realmente no sé cómo hacer sombras convincentes para ello. ¿Quizás una solución por bloque es la única forma realista?
Respuestas:
¿Puedo recomendar que las sombras 2D funcionen primero, incluso si es solo para el nivel en el que se encuentra actualmente tu avatar? Será más fácil comenzar a mirar el código de esa manera y hacerlo funcionar.
He implementado sombras en mapas de mosaicos 2D de varias maneras. Un método de proyección de sombras que encontré descrito por Eric Lippert en Microsoft funciona bastante bien.
Y la otra forma, lo que hice yo mismo la primera vez que miré este tipo de cosas fue barrer ortogonalmente las baldosas visibles y los bordes de las baldosas y generar bordes (y tal vez esquinas iirc) que describen la escena en el menor número de bordes. Luego, puede eliminar bordes ocultos y formar cualquier característica de sombreado personalizada, como sombras empotradas, si desea mostrar un poco de muro. Luego cree su geometría de sombra (¿proyección de sombra proyectiva?) Y renderícela sobre la parte superior.
Pero si trato de llevar esa idea a 3d, se vuelve más fácil hacerlo en 3d. Si bien el método descrito por Eric Lippert podría convertirse presumiblemente en 3d. Pero creo que encontrarás que hacerlo en 3D es costoso. Quizás también eche un vistazo al código fuente de Brogue . Puede tener una implementación más eficiente para la visibilidad 2d / proyección de sombras.
Buena suerte.
fuente