Algoritmo de máscara de sombreamento para cálculos de radiação

Estou trabalhando em um software (Ruby - Sketchup) para calcular a radiação (sol, céu e edifícios vizinhos) no desenvolvimento urbano no nível de pedestres. O objetivo final é poder criar um mapa de contorno que mostre o nível de radiação total. Com radiação total, quero dizer ondas curtas (luz) e ondas longas (calor). (Para ter uma ideia:http://www.iaacblog.com/maa2011-2012-digitaltools/files/2012/01/Insolation-Analysis-All-Year.jpg)

Sei que existem vários softwares existentes que fazem isso, mas preciso escrever por conta própria, pois esse cálculo é apenas parte de um fluxo de trabalho mais complexo.

O pseudo-código (óbvio) é o seguinte:

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   

A abordagem acima é força bruta, mas é a única que consigo pensar. O tempo de cálculo aumenta com o quarto poder da precisão (Dx, Dy, Dazimth, Dtilt). Eu sei que softwares como o brilho usam uma abordagem Montecarlo para reduzir o número de raios.

Como você pode imaginar, a precisão do cálculo para um ponto específico da malha depende fortemente da precisão da subdivisão do skydome. Da mesma forma, a precisão na superfície depende da aspereza da malha.

Eu estava pensando em uma abordagem diferente usando refinamento adaptativo com base nos resultados dos cálculos. O refinamento pode funcionar para a superfície analisada e o skydome. Se os resultados entre dois pontos adjacentes diferirem mais do que um valor limite, será realizado um refinamento. Isso geralmente é feito na simulação de fluidos, mas não consegui encontrar nada sobre a simulação de luz.

Também me pergunto se existem algoritmos, de gráficos de computador, por exemplo, que permitiriam minimizar o número de cálculos. Por exemplo: verifique a altura máxima do ambiente para excluir determinadas partes do skydome para determinados pontos.

Não preciso de extrema precisão, pois não estou processando. Minha prioridade é a velocidade neste momento.

Alguma sugestão sobre a abordagem?

obrigado

n raios No momento, subdivido o céu por constantes passos de azimute e inclinação; isso causa ângulos sólidos irregulares. Existem outras subdivisões (por exemplo, Tregenza) que mantêm um ângulo sólido constante.

EDIT: Resposta às grandes perguntas de Spektre

Prazo. Eu executo uma simulação para cada hora do ano. Os dados meteorológicos são extraídos de um arquivo meteorológico epw. Contém, a cada hora, altitude solar e azimute, radiação direta, radiação difusa, nebulosidade (para ondas difusas na atmosfera). Meu algoritmo calcula a máscara de sombra separadamente e depois usa essa máscara para calcular a radiação na superfície (e em um pedestre típico) para cada hora do ano. É neste segundo passo que eu adiciono a radiação real. No primeiro passo, apenas coleto informações sobre a geometria e propriedades das várias superfícies.

Caminhos do sol. Não eu não. Ver ponto 1

Incluir reflexão dos edifícios? Não no momento, mas pretendo incluí-lo como uma reflexão difusa geral de ondas curtas com base no fator de visualização do céu. Eu considero apenas a reflexão de ondas curtas do chão agora.

Incluir dissipação de calor dos edifícios? Absolutamente sim. Essa é a razão pela qual eu mesmo escrevi esse código. Aqui em Dubai, isso é fundamental, pois as superfícies dos edifícios ficam muito, muito quentes.

Superfícies albedo? Sim eu quero. No Skethcup, associei um dicionário a todas as superfícies e, neste dicionário, incluí todas as propriedades da superfície: temperatura, emissividade, etc. No momento, as temperaturas são fixas (temperatura ambiente, se não forem atribuídas), mas planejo no futuro , para combinar isso com os resultados de uma simulação térmica dinâmica de construção que já calcula todas as temperaturas da superfície.

Resolução do mapa. A resolução é escolhida pelo usuário e a malha gerada pelo algoritmo. Em termos de escala, eu uso isso para masterplans. A escala vai de 100mx100m a 2000mx2000m. Geralmente costumo usar uma resolução mínima de 2m. O limite é a memória e o tempo de simulação. Também tenho a opção de refinar áreas específicas com uma malha muito mais fina: por exemplo, áreas onde existem restaurantes ou outras comodidades.

Taxa de quadros. Não preciso fazer uma animação. Os resultados são exportados em um arquivo VTK e visualizados no Paraview e animados apenas para serem exibidos durante as apresentações :-)

Calor e luz. Sim. Ondas curtas e longas são tratadas separadamente. Veja o ponto 4. A geolocalização é usada apenas para selecionar o arquivo climático correto. Não calculo todos os componentes da radiação. Os arquivos climáticos de que preciso precisam mediram dados. Eles não são ótimos, mas bons o suficiente por enquanto.https://www.lucidchart.com/documents/view/5ca88b92-9a21-40a8-aa3a-0ff7a5968142/0

questionAnswers(1)

yourAnswerToTheQuestion