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

时间:2014-09-07 11:13:26

标签: ruby computational-geometry shadow light sketchup

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

example

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

(明显的)伪代码如下:

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. 包括建筑物的反射?目前还没有,但我计划将其作为基于天空视角因子的整体漫反射短波反射。我现在只考虑来自地面的短波反射。

  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 个答案:

答案 0 :(得分:1)

可见光

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

  1. 相机和视口

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

    shadow/light map rendering

  2. 渲染光照贴图第1遍

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

  3. 中没有反射和/或阴影
  4. 渲染光照贴图第二遍

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

    reflections

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

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

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

  6. 后期处理

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

  7. <强> IR

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

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

    PS。我忘记了红外线的反照率,可见光与许多材料特别是铝和一些壁画非常不同