用于辐射计算的着色掩模算法

我正在研究一种软件(Ruby-Sketchup)来计算行人层面城市发展中的辐射(太阳,天空和周围建筑物)。 最终目标是能够创建一个显示总辐射水平的等高线图。 总辐射是指短波(光)和长波(热)。 (为了给你一个想法: http : //www.iaacblog.com/maa2011-2012-digitaltools/files/2012/01/Insolation-Analysis-All-Year.jpg )

例

我知道有几个现有的软件可以做到这一点,但我需要自己编写,因为这个计算只是更复杂的工作流程的一部分。

(明显的)伪代码如下:

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 

上面的方法是蛮力,但它是我唯一能想到的。 计算时间随着精度的四次方(Dx,Dy,Dazimth,Dtilt)而增加。 我知道像辐射这样的软件使用蒙特卡罗方法来减少光线数量。

可以想象,网格特定点的计算精度很大程度上取决于天幕细分的准确性。 类似地,表面上的精度取决于网格的粗糙度。

我正在考虑使用基于计算结果的自适应细化的不同方法。 改进可以用于分析的表面和天幕。 如果两个相邻点之间的结果差异大于阈值,则将执行细化。 这通常在流体模拟中完成,但我找不到任何关于光模拟的信息。

另外我想知道是否有来自计算机图形的算法可以最大限度地减少计算次数。 例如:检查周围环境的最大高度,以便在某些点上排除天幕的某些部分。

我不需要极高的准确性,因为我没有做渲染。 我的首要任务是此刻的速度。

关于这种方法的任何建议?

谢谢

n射线目前我通过恒定的方位角和倾斜步骤细分天空; 这导致不规则的立体角。 还有其他细分(例如Tregenza)保持恒定的立体角。

编辑:回应Spektre的重大问题

  1. 大体时间。 我为一年中的每个小时运行一次模拟。 从epw天气文件中提取天气数据。 它包含每小时太阳高度和方位角,直接辐射,漫射辐射,云量(大气长波漫射)。 我的算法分别计算阴影遮罩,然后使用这个阴影遮罩计算一年中每个小时表面(和典型行人)的辐射。 在第二步中,我添加了实际的辐射。 在第一步中,我只收集有关各种曲面的几何和属性的信息。

  2. 太阳路径。 不,我没有。 见第1点

  3. 包括建筑物的reflection? 目前还不是,但我计划将其作为基于天空视角因子的整体漫reflection短波reflection。 我认为现在只有来自地面的短波reflection。

  4. 包括建筑物的散热? 绝对没错。 这就是我自己编写这段代码的原因。 在迪拜,这是关键,因为建筑表面非常非常热。

  5. 表面反照率? 是的,我愿意。 在Skethcup中,我将字典与每个表面相关联,在本词典中我包括所有表面属性:温度,发射率等。目前温度是固定的(环境温度,如果没有指定),但我计划,将来,将其与已经计算出所有表面温度的建筑动态热模拟的结果相结合。

  6. 地图分辨率。 分辨率由用户和算法生成的网格选择。 在规模方面,我将其用于总体规划。 规模从100mx100m到2000mx2000m。 我通常倾向于使用最小分辨率2米。 限制是内存和模拟时间。 我还可以选择使用更精细的网格细化特定区域:例如,有餐厅或其他设施的区域。

  7. 帧率。 我不需要制作动画。 结果以VTK文件导出,并在Paraview中显示,并在那里进行动画展示,以便在演示期间展示:-)

  8. 热和光。 是。 短波和长波分开处理。 请参见第4点。地理定位仅用于选择正确的天气文件。 我没有计算所有的辐射成分。 我需要的天气文件测量数据。 他们不是很好,但现在还不错。 https://www.lucidchart.com/documents/view/5ca88b92-9a21-40a8-aa3a-0ff7a5968142/0

可见光

对于相对平坦的全球基础地面光图,我将使用投影阴影纹理技术而不是光线跟踪角度积分。 几乎相同的结果更快。 这不适用于非平坦的地面(许多较大的凸起,其投射更大的阴影并且还将活动光吸收区域改变为各向异性)。 市区通常足够平坦(倾斜无关紧要),所以技术如下:

  1. 相机和视口

    地面地图是目标屏幕,因此将视点设置为地下朝向太阳方向向上。 分辨率至少是您的地图分辨率,并且没有透视投影。

    阴影/光照贴图渲染

  2. 渲染光照贴图第一遍

    首先使用完全辐射(直接+漫射)(浅蓝色)清晰地图然后渲染建筑物/物体,但仅使用漫射辐射(阴影)。 这将使基本地图在洋红色渲染目标中没有reflection和/或柔和阴影

  3. 渲染光照贴图第2遍

    现在你需要添加建筑物面(墙壁)reflection,我会将建筑物的每个室外面朝向太阳或足够加热,并计算reflection点到光照地图并直接渲染reflection到地图

    思考

    在这些部分中,您可以为顶点添加光线跟踪,以使其更精确,并且还包括多个reflection(在这种情况下,不要忘记添加散射)

  4. 将目标屏幕投影到目标辐射图

    只需将Magenta渲染目标图像投影到地平面(绿色)。 它只是简单的线性仿射变换……

  5. 后期处理

    您可以通过模糊/平滑光照贴图来添加柔和阴影。 为了使其更精确,您可以为每个像素添加信息(如果它是阴影或墙壁)。 实际墙只是高于地面0米高的像素,因此您可以直接使用Z缓冲区值。 模糊程度取决于空气的散射特性,0米地面高度的粗糙像素根本不模糊

IR

这可以用类似的方式完成,但温度的行为有点不同,所以我会在地面以上的几个高度制作几层场景,形成一个体积渲染,然后后处理像素和层之间的能量转移。 另外不要忘记添加绿色植物和水蒸发的冷却效果。

我在这个领域没有足够的经验来提出更多的建议我更习惯于温度图在特定条件和材料而非室外条件下的高温差异。

PS。 我忘记了IR的反照率,可见光对于许多材料尤其是铝和一些壁画非常不同