Actualmente estoy intentando hacer un efecto de luciérnaga en un bosque oscuro. El nivel tiene muy poca luz y el jugador es una de las pocas fuentes de luz. Para permitir que el jugador vea mejor el nivel, estoy tratando de hacer que las luciérnagas brillantes aparezcan al azar en el mapa. Una forma es usar un sistema de partículas. Pero no puedo hacer que las partículas arrojen luz sobre los alrededores. ¿Hay alguna forma de hacer esto?
22
Respuestas:
Las partículas que emiten luz ahora son una característica incorporada de Unity en 5.5.
Simplemente habilite Luces en el inspector de partículas, agregue una referencia a un prefabricado de luz (funcionan tanto las luces puntuales como puntuales) y cambie la Relación a 1.
Y voilà, partículas que emiten luces:
Resulta que esta es una configuración bastante optimizada, que funciona a 1500 + fps en mi plataforma incluso con la máxima cantidad de luces en cientos.
Editar: después de algunas observaciones, me parece que las luces de partículas alternan entre la iluminación por fragmento y la iluminación de vértices (¿presumiblemente para la optimización?). Esto podría producir pequeñas cantidades de artefactos visuales si las luces máximas se configuran demasiado altas.
Edit2: como señaló DMGregory, los artefactos son un subproducto de las optimizaciones de renderizado directo. La iluminación diferida resuelve el problema. Añadido mejor gif
fuente
Aviso:
Esta respuesta está desactualizada. Unity ahora admite partículas de luz puntuales de forma nativa Por favor, vea esta respuesta para más detalles.
Dejaré esto aquí para cualquier persona curiosa, o que use versiones antiguas de Unity, o que necesite más control manual que el que ofrece el método nativo; solo tenga en cuenta que es probable que el soporte nativo sea mucho más eficiente y escalable que el enfoque presentado a continuación.
No estoy seguro de por qué tantas respuestas afirman que esto es difícil o imposible. Manejar unas pocas docenas de luces de puntos dinámicos es bastante convencional para una tubería de renderizado diferido moderna que se ejecuta en PC.
Aquí hay un ejemplo rápido que preparé:
Utilizo este script para generar dinámicamente suficientes luces para mis partículas máximas (asegúrese de ajustar la configuración del sistema de partículas para que el máximo sea razonable: el valor predeterminado de 1000 no hará que su tarjeta gráfica sea muy feliz), y luego las actualiza para seguir el activo partículas:
Editar: puede crear un prefabricado creando primero un objeto de juego (en este caso, Crear -> Luz -> Luz de punto), configurándolo con el nombre / parámetros / scripts / niños que desee, luego arrastrándolo desde su Jerarquía a su explorador de proyectos. Esto guarda el objeto como un activo que puede reutilizar en múltiples escenas y guiones, con un cierto grado de herencia. Puede eliminar la copia en su escena y el activo permanecerá en su carpeta de Activos para que se haga referencia cuando sea necesario.
Asegúrese de que lightPrefab tenga un rango relativamente pequeño y no esté proyectando sombras, para darle el mayor margen de rendimiento para todo lo que sucede en su escena. No necesita hacer que el lightPrefab sea verde (o el color de sus luciérnagas): lo recogerá del color de las partículas.
Sin embargo, es posible que tenga un mejor control sobre el vuelo de las luciérnagas si hace que cada uno tenga su propio GameObject, con un quad vallado y una luz adjunta con un script de movimiento / parpadeo personalizado, ya que obtener un recorrido convincente requiere más arte del sistema de partículas que Lo sé. ;)
fuente
Hace años, antes de que las luces dinámicas fueran asequibles, simplemente usábamos un efecto de partículas 2D-billboarded con mezcla aditiva. Iluminaría la escena hacia el blanco. Al dibujarlo con la profundidad correcta de la luciérnaga, obtienes una clasificación casi correcta. El alfa aditivo no necesita ser ordenado cuando se sobre dibuja en comparación con la mezcla alfa. No iluminará TODA la escena, pero iluminará el área que rodea a la luciérnaga. A continuación, puede tomar una luz dinámica y elegir una de las luciérnagas cada pocos segundos para iluminar la escena, si la necesita.
Ya hay una pregunta y respuesta sobre los efectos de brillo ¿Cómo lograr una iluminación como esta en Unity para juegos 2D?
fuente
Desafortunadamente, no he tenido mucha experiencia con Unity en su forma actual (jugué con él hace muchos años), por lo que no sé exactamente con qué conjuntos de características tiene que trabajar en el motor.
En cualquier caso, no importa con qué motor trabaje, las luces dinámicas son algo que debe evitar siempre que pueda. Son muy costosos computacionalmente y tienden a agregar complejidad de escena de una manera muy exponencial. Sin embargo, como es el orden del día para la mayoría de los renderizados en 3D, hay muchas maneras en que puede lograr efectos similares haciendo trampa;
Una posible forma de lograr un efecto similar es mapear una textura de brillo prefabricada en el terreno debajo de sus luciérnagas, (suponiendo un sistema de coordenadas Y = arriba / abajo) con las posiciones X y Z que controlan la ubicación del brillo en el terreno y el desplazamiento Y desde el terreno que controla el alfa de la textura (más brillante = más cerca del terreno)
Por supuesto, hay varios inconvenientes para este método. No proyectará sombras ya que no se utiliza luz, y no afectará ninguna otra geometría en el mundo (accesorios, follaje, etc.)
fuente
Úselo
Light
en el origen del fuego y juegue con su tamaño en el guión para que tenga el efecto de quemar. Y usa tu sistema de partículas :)fuente