Cubierta de bosque de procedimiento para iluminación de terreno

Me gustaría crear una escena de bosque donde la luz direccional se mueva a través del dosel de los treees y se proyecte sobre el terreno y los personajes debajo de esta manera:

iluminación del suelo del dosel del bosque

Estoy usando Unity 5.6. La línea de mi tree no está a la vista de mi camera, que está configurada en isométrica. Pensé que porque no hay necesidad de los models de tree, crearía un quad entre mi fuente de luz direccional y el terreno. El quad tendría un material con una textura de ruido perlin y un sombreador transparente recortado. La mayoría de mi escena está bajo el dosel con luz esporádica que se filtra a través de:

Mi pregunta, ¿es la forma más efectiva de reproducir el efecto o todo el assembly de sombras es costoso? ¿Hay una mejor manera de producir el efecto para que mis objects de juego dynamics reciban iluminación en time real? ¿Hay una function de textura o ruido que represente mejor un dosel forestal?

Esto suena como un trabajo para Light Cookies .

Estos tienen una serie de ventajas sobre el método de mapeo de sombras que describes:

  • Las cookies pueden representar niveles intermedios de brillo, lo que le ayuda a get esos bordes suaves de bokeh y una opacidad de la transparencia parcial que puede ser difícil de lograr con los maps de sombras.

  • La cookie se puede alicatar y escalar independientemente de los maps de sombra de la luz, lo que le ayuda a mantener los detalles finos en el borrado sin boost la carga de trabajo de sombreado.

Aquí hay una maqueta rápida que hice, convirtiendo un sistema de partículas en una Textura Render usando una camera / capa separada, y aplicando esa textura a mi luz direccional como una galleta.

Animación ligera con una galleta liviana.

Con una configuration más sofisticada, puedes asegurarte de que los mosaicos de las cookies se combinen sin problemas en áreas grandes, o de sprites de capas que representen grupos de hojas que se agitan para dar un aspecto más consistente / estructurado en lugar de los blobs aleatorios que he usado aquí.

Por supuesto, podría renderizar su cookie con un material basado en el ruido y ajustarla a la textura usando matemática pura para formar las forms, pero es posible que encuentre objects superpuestos frente a la camera, lo que facilita ajustar la apariencia que desea. o lograr cosas como el viento controlable.

is all the shadow casting expensive?

Todo depende de la cantidad de detalles que esté dispuesto a abandonar. ¿Qué tan preciso quieres que sea?

Totalmente preciso = vaciado a través de todas las twigs y ramitas individuales = cuadrícula de volumen 3D de grano fino o enfoque geométrico intensivo de CPU = costoso. Auto oclusión = potencialmente costoso. La resolución de derrumbe deseada también afectará el número de rayos a fundir por unidad de área, lo que afecta el costo.

Algunas posibles soluciones …

  1. Trate el dosel como si fuera plano , y almacénelo como un bitmap (matriz booleana 2D con cada input sombreada / ocluida o iluminada / no ocluida). Comience el raycast al nivel de este bitmap del dosel, y arroje los pocos metros / unidades al suelo. A less que estén ocluidos por troncos, los rayos siempre llegarán al suelo, y la distancia para lanzar cada rayo será bastante corta.
  2. Use un quadtree en lugar de una matriz 2D / bitmap de resolución fija. Esto le permitirá hacer solo muchos rayos en áreas alnetworkingedor del dosel de cada tree; en claros abiertos, el quadtree utilizará una resolución más gruesa, networkinguciendo la cantidad de rayos. Esto es conceptualmente similar al concepto de packages de rayos ortogonales, donde varios rayos se tratan como un solo rayo en ciertas circunstancias especiales.
  3. Haga cumplir una altura máxima de tree / dosel para garantizar que el número de pasos de rayos se mantenga razonable.
  4. Reduzca la cantidad de "dapples" por metro cuadrado, tanto como pueda, mientras permite un impacto visual justo. Puede adaptar esto a un enfoque LoD que depende de qué tan lejos esté la camera.

En última instancia, puede hacer esto utilizando enfoques geométricos puros, o puede dividir su espacio en una cuadrícula regular 3D (vóxeles), incluso si eso es solo para el propósito de calcular la iluminación. Ambos tienen sus pros y sus contras. Los vóxeles hacen que este process sea un poco más fácil para aquellos que no están muy inclinados matemáticamente.

Tus otras preguntas

No fomentamos las preguntas múltiples en una (y estos son, de hecho, problemas totalmente separados), pero brevemente, no mencionas qué tipo de iluminación estás usando: hacia adelante vs. diferido, espacio de pantalla frente a espacio mundial, por lo que es realmente imposible de responder eso. En cuanto a la producción de patrones más precisa: si yo fuera tú, analizaría los volúmenes de mis treees en un octtree, y luego simplemente aplanaría el aspecto z del octtree para get tu bitmap plano del dosel desde el cual podrás raymar el bosque piso.

PS Raycasting un espacio de dosel con precisión es una tarea lo suficientemente desafiante para los mejores progtwigdores de procedimientos que utilizan lenguajes nativos y tecnología GPGPU ; La unidad no es rival para este tipo de problemas.