WebGL 地球:如何制作云

WebGL earth : how to make clouds

问题

我想使用 WebGL 从低轨道(此处为 ~300 公里)构建一个逼真的地球视图。也就是说,在网络上,以及它所暗示的一切,而且在移动设备上。不要在这里停止阅读:为了降低难度,用户可以到处看但不能平移,所以视图只涉及 3000 公里宽的小区域。但是视图跟随卫星几分钟后,用户回到之前的位置,随着地球自转的轻微偏移等。所以云不可能一直在同一个地方。

我实际上已经能够包括城市的灯光、极光、闪电……除了云。我看过很多实时渲染爱好者和研究人员的演示,但其中 none 有一个漂亮、逼真的云层。但是我确定我是第 100(...)00 个考虑这样做的人,所以请赐教。

隐含的问题很少:

规格不多

这里有一些想法总结了我还没有看到的东西,按重要性排序:

  1. 云遮住了地球的 60%。

  2. 云层散射城市和闪电,夜间有瑞利散射。

  3. 在这个距离上,视差效果是可见的,即使是最小的云也非常棒。

据我所知,即使是昂贵的实时气象在线资源也没有用:它们在 UV 和 IR 光波的帮助下瞄准雨云或暴风雨云,因此它们不会 100% 捕捉到它们并且不会不要给出我们都知道的 'normal' 视图。此外,在可见光下拍摄的罕见的良好云纹理几乎无法区分地面和云:有时 5000 公里长的海岸无处不在。服务器可以使用这些图像来创建更好的纹理。

当我查看这些图片时,我认为成本最低的方法是从包含不同模型的数据库中合并几个漂亮的云网格,然后在用户经过时在着色器中稍微转换这些网格。如果90分钟后他回来的时候还在,不管这个型号是不是又不一样了。然而飓风是不会消失的

你怎么看这个?

对于这样的效果,可能只有一种方法可以正确地做到这一点,那就是:

  1. 体素贴图 + 体积渲染 可能带有 Back-Ray-tracer 渲染

    因为你的位置是固定的,所以对内存的要求应该不会那么难。您需要实现 MIE 和瑞利散射。散射可以简化很多并且看起来仍然不错见

    • simplified atmosphere scattering

    体素贴图 处理光间隙、阴影和散射相对容易,但需要大量内存和计算能力。所有其他 2D 技术通常都很难解决 3D 体素贴图 本机所做的事情,而且不费吹灰之力。例如:

    • Voxel map shadows
  2. 程序云图生成器

    每种类型的云都需要这个,这样您就可以渲染一些东西。那里有 libs/demos/examples 看到: