【问题标题】:Ray-tracing a sphere with displacement mapping使用置换贴图对球体进行光线追踪
【发布时间】:2011-05-27 11:23:40
【问题描述】:

我有兴趣构建一个简单的“Google 地球”类型的应用程序(用于覆盖我自己的信息,而不是 Google 拥有的大量数据)。我希望它只是一个简单的 X11 应用程序,可以用位移(地形)信息对球体进行光线追踪。射线-球体相交非常简单,但是当将显示映射投入其中时,它开始在我的脑海中变得混乱。

我想知道是否有一种简单的技术可以扩展基本的光线-球体相交以包含位移数据...

【问题讨论】:

    标签: graphics geometry raytracing


    【解决方案1】:

    置换贴图非常简单——只需细分球体,根据从贴图中采样的高度为顶点位置添加偏移量,然后对所有部分进行光线追踪。

    相机离球体/地球有多远?如果您就在地表附近,则可能根本不值得制作一个完整的“球体”,只需制作一个“高度场”即可。如果您很远(一次查看整个星球),那么即使是最高的山脉也不应该明显取代地表,因此您应该使用简单的凹凸贴图。还可以考虑使用组合 - 真正移位的粗镶嵌,以及对剩余高度差的凹凸贴图。

    但无论如何,我无法想象您为什么要进行光线追踪,正如您所描述的问题。只需将其切成三角形并使用 OpenGL。您可能不需要任何光线追踪效果。

    【讨论】:

    • 查看我对 Vuk 的评论,我希望将地球表示为一个球体,以便交点计算尽可能简单。 OpenGL 退出了,因为很多时候我们希望能够从服务器通过网络运行东西,而 GLX 往往会阻塞套接字。
    【解决方案2】:

    我找到了这篇论文:http://www.cgl.uwaterloo.ca/~ecdfourq/GI2008/FourquetGI2008.pdf

    我想分享一下,因为它似乎涵盖了我想要做的事情,谢谢大家!

    【讨论】:

    • 你知道这个算法的实际实现吗?我有一个非常想尝试的应用程序。
    • 嘿嘿,我目前正在尝试实现这一点。这是我为自己设定的目标之一,作为我正在学习的课程的最后一个项目(其中一位作者是我的教授,但他没有写核心文章)。事实证明这是非常痛苦的,但我已经接近了。我正在记录项目over here 的进度日志。我还没有发布任何关于高度图的信息,因为它还没有完成,但是当我确定它时(如果我这样做了),我会发布一个胜利的条目。到目前为止,我的形状有点正确,阴影很重,法线完全关闭:|
    【解决方案3】:

    Ray-Tracing 过程是相同的,无论您有一个简单的 20 多边形球体还是一个复杂的位移 2k 多边形球体。无论场景包含什么,光线都会穿过场景。但它用于实现透明、反射、折射等视觉效果,从您在问题中所说的内容来看,我认为您可以在项目中不使用这些效果。您很可能可以在这里获得简单的低成本Ray-Casting

    因此,一旦您安装了渲染引擎,您就可以将所有想要的置换添加到场景中。两种最常见的修改几何图形的方法是:

    1. 凹凸贴图,以及
    2. 置换贴图

    置换贴图将真实的多边形添加到现有几何体中,而凹凸贴图仅通过弯曲表面法线来模拟视觉效果,从而影响对象的阴影。虽然弯曲法线比镶嵌几何体和添加新多边形更快且成本更低,但它不会产生精确的阴影结果,所以如果它对您的应用程序有任何影响,请注意这一点。

    另外,考虑使用自适应 Level of Detail 算法和数据结构,因为离几何越远,它需要的细节就越少。

    【讨论】:

    • 我实际上是希望,因为我在模拟地球,所以我可以将它保持为一个几何球体,这样就没有场景遍历或多多边形测试。
    • 是的,这取决于上下文,即您是否只会在代表地球的球体上放置诸如山脉之类的地形,或者您是否还需要其中有洞的洞穴、半透明的河流之类的东西需要双面的。当您说“无场景遍历”和“多多边形测试”时,您的确切意思是什么?我的一个重要问题是 - 你打算自己从头开始编写渲染引擎还是使用现有的?
    • 我会自己写。我真的只是想要一个地球,上面可能覆盖着蓝色大理石数据,并带有适当的高度信息。我不需要任何花哨的东西,比如洞穴或透明的河流。如果可以的话,我可能会让水变蓝。
    • 赞许您选择实现渲染器让您的双手有些枯燥,毫无疑问,您将从体验中受益。位移只不过是添加了一些数学方程,对你来说应该很简单。
    猜你喜欢
    • 1970-01-01
    • 2017-03-26
    • 1970-01-01
    • 2019-11-29
    • 2019-11-29
    • 2018-05-31
    • 2010-09-07
    • 2014-09-02
    • 2015-01-01
    相关资源
    最近更新 更多