Algoritmo de máscara de sombreado para cálculos de radiación

Estoy trabajando en un software (Ruby - Sketchup) para calcular la radiación (sol, cielo y edificios circundantes) dentro del desarrollo urbano a nivel peatonal. El objetivo final es poder crear un mapa de contorno que muestre el nivel de radiación total. Con radiación total me refiero a onda corta (luz) y onda larga (calor). (Para darte una idea:http://www.iaacblog.com/maa2011-2012-digitaltools/files/2012/01/Insolation-Analysis-All-Year.jpg)

Sé que hay varios software existentes que hacen esto, pero necesito escribir el mío ya que este cálculo es solo una parte de un flujo de trabajo más complejo.

El pseudocódigo (obvio) es el siguiente:

Select and mesh surface for analysis
From each point of the mesh
  Cast n (see below) rays in the upper hemisphere (precalculated)
    For each ray check whether it is in shade
      If in shade => Extract properties from intersected surface
      If not in shade => Flag it
    loop
  loop
loop   

El enfoque anterior es la fuerza bruta, pero es lo único en lo que puedo pensar. El tiempo de cálculo aumenta con la cuarta potencia de la precisión (Dx, Dy, Dazimth, Dtilt). Sé que el software como radiance utiliza un enfoque de Montecarlo para reducir la cantidad de rayos.

Como puede imaginar, la precisión del cálculo para un punto específico de la malla depende en gran medida de la precisión de la subdivisión skydome. Del mismo modo, la precisión en la superficie depende de la aspereza de la malla.

Estaba pensando en un enfoque diferente usando el refinamiento adaptativo basado en los resultados de los cálculos. El refinamiento podría funcionar para la superficie analizada y el paracaidismo. Si los resultados entre dos puntos adyacentes difieren más que un valor umbral, se realizará un refinamiento. Esto generalmente se hace en la simulación de fluidos, pero no pude encontrar nada sobre la simulación de luz.

También me pregunto si existen algoritmos, desde gráficos de computadora, por ejemplo, que permitan minimizar la cantidad de cálculos. Por ejemplo: verifique la altura máxima de los alrededores para excluir cierta parte del skydome para ciertos puntos.

No necesito una precisión extrema ya que no estoy haciendo renderizado. Mi prioridad es la velocidad en este momento.

¿Alguna sugerencia sobre el enfoque?

Gracias

n rayos Por el momento, subdivido el cielo por azimut constante y pasos de inclinación; Esto causa ángulos sólidos irregulares. Hay otras subdivisiones (por ejemplo, Tregenza) que mantienen un ángulo sólido constante.

EDITAR: respuesta a las grandes preguntas de Spektre

Periodo de tiempo. Ejecuto una simulación por cada hora del año. Los datos meteorológicos se extraen de un archivo meteorológico epw. Contiene, para cada hora, altitud solar y acimut, radiación directa, radiación difusa, nubosidad (para onda atmosférica difusa). Mi algoritmo calcula la máscara de sombra por separado y luego usa esta máscara de sombra para calcular la radiación en la superficie (y en un peatón típico) para cada hora del año. Es en este segundo paso que agrego la radiación real. En el primer paso, solo recopilo información sobre la geometría y las propiedades de las diversas superficies.

Caminos del sol. No, no lo hago Ver punto 1

¿Incluir reflejos de edificios? No por el momento, pero planeo incluirlo como una reflexión general de onda corta difusa basada en el factor de vista del cielo. Ahora considero solo el reflejo de onda corta desde el suelo.

¿Incluye disipación de calor de los edificios? Absolutamente sí. Esa es la razón por la que escribí este código yo mismo. Aquí en Dubai esto es clave ya que las superficies de los edificios se calientan mucho.

Albedo de superficies? Sí. En Skethcup he asociado un diccionario a cada superficie y en este diccionario incluyo todas las propiedades de la superficie: temperatura, emisividad, etc. Por el momento las temperaturas son fijas (temperatura ambiente si no se asigna), pero planeo, en el futuro , para combinar esto con los resultados de una simulación térmica dinámica del edificio que ya calcula todas las temperaturas de las superficies.

Resolución del mapa La resolución es elegida por el usuario y la malla generada por el algoritmo. En términos de escala, uso esto para planes maestros. La escala va desde 100mx100m hasta 2000mx2000m. Por lo general, tiendo a usar una resolución mínima de 2 m. El límite es la memoria y el tiempo de simulación. También tengo la opción de refinar áreas específicas con una malla mucho más fina: por ejemplo, áreas donde hay restaurantes u otras comodidades.

Cuadros por segundo. No necesito hacer una animación. Los resultados se exportan en un archivo VTK y se visualizan en Paraview y se animan allí para mostrarlos durante las presentaciones :-)

Calor y luz. Si. La onda corta y la onda larga se manejan por separado. Ver punto 4. La geolocalización solo se utiliza para seleccionar el archivo meteorológico correcto. No calculo todos los componentes de la radiación. Los archivos meteorológicos que necesito tienen datos medidos. No son geniales, pero lo suficientemente buenos por ahora.https://www.lucidchart.com/documents/view/5ca88b92-9a21-40a8-aa3a-0ff7a5968142/0

Respuestas a la pregunta(1)

Su respuesta a la pregunta