【问题标题】:WebGL earth : how to make cloudsWebGL 地球:如何制作云
【发布时间】:2015-07-03 14:32:45
【问题描述】:

问题

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

实际上,我还能够将城市灯光、极光、闪电......除了云。我看过很多实时渲染爱好者和研究人员的演示,但没有一个有漂亮、逼真的云层。但是我确信我是第 100(...)00 个考虑这样做的人,所以请启发我。

暗示的问题很少:

  • 云使用什么输入?气象实时数据?
  • 什么渲染可能性?一个带有云图的透明层,用着色器修改?几个透明层来获得体积渲染的感觉?但是如何相互投射阴影:唯一的解决方案是使用网格?或者可以每 x 分钟通过程序计算并在服务器上映射一次阴影?

几个规格

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

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

  2. 云散射城市和闪电的灯光,晚上有瑞利散射。

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

据我所见,即使是昂贵的实时气象在线资源也无用:它们借助紫外线和红外线光波瞄准下雨或暴风雨云,因此它们不会 100% 捕捉到它们,也不会给出我们都知道的“正常”观点。此外,在可见光下拍摄的稀有良好的云层纹理几乎无法区分地面和云层:有时,5000 公里长的海岸就在茫茫人海中。服务器可能能够使用这些图像来创建更好的纹理。

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

您对此有何看法?

【问题讨论】:

  • 我认为一次解决一个问题会更好:如何提供一个(或多个)云层,如何计算/模拟这些层中的云,如何投射阴影从这些结果中,并通过城市提供的光(以及闪亮的海洋表面的反射)照亮云层,如何在着色器中包含像云银衬里或极光等光......你的问题有很多不同的部分不适合 SO 格式。
  • @BeyelerStudios 确实我对答案格式并没有很精确。我需要的是一个广泛的想法,所以我和未来的用户有一些关于如何制作它的线索。我编辑问题
  • 那么请参加基于物理的光传输课程,因为您在问题中要求讲座的内容。
  • 渲染云是一项开放的挑战,通常通过着色器中的程序生成来高效/欺骗地完成,这可能是您的问题/研究主题之一。如何让光线从表面通过云层反射到轨道上的相机/渲染极光或其他大气效果,这是一个全新的深度,每个效果本身。
  • 那么您的具体问题可能是:如何缩小/缩放程序云着色器?如何根据光线照亮程序云地图?如何使用程序云投射阴影?,...

标签: image-processing glsl webgl shader image-manipulation


【解决方案1】:

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

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

    由于您的位置是固定的,因此对内存要求不应该那么严格。您需要同时实现 MIE 和瑞利散射。散射可以简化很多并且看起来仍然很好看

    体素贴图处理光间隙、阴影和散射相对容易,但需要大量内存和计算能力。所有其他 2D 技术通常都很难解决 3D 体素贴图 在本机上所做的工作,而且几乎不需要付出任何努力。例如:

  2. 程序云图生成器

    对于每种类型的云,您都需要它,这样您就可以渲染一些东西。那里有库/演示/示例,请参阅:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-21
    • 1970-01-01
    相关资源
    最近更新 更多