gpt4 book ai didi

iOS GLSL 球谐着色器。如何使用 iOS GPU 进行 Raycast

转载 作者:行者123 更新时间:2023-11-28 22:58:57 24 4
gpt4 key购买 nike

我正在为我正在编写的 iOS 应用程序开始一个 Spherical Harmonics 着色器项目。我首先阅读了这篇关于该主题的优秀深入论文 (PDF) - http://bit.ly/aQmax3 .

该论文描述了涉及光线转换的场景预处理步骤。有人可以描述如何在 iOS 上使用 GLSL 执行光线转换吗?

最佳答案

如果您指的是该过程中使用的光线转换来确定哪些表面被环境光击中(对于环境光遮挡着色),我已经在我的 Molecules 中完成了这项工作。 iOS 应用程序。我在this blog post中稍微讲一下过程和 this paper我提交了纳米技术 session ,但我可以对此进行扩展。

在我的例子中,我使用深度测试来确定表面上在不同方向上被环境光照射的区域。我采用我的模型并在一系列方向上渲染它,这些方向对应于从物体周围球体上均匀分布的一组点看它的人。对于对象表面上的每个点,我通过测试其变换后的 Z 位置与为该点的可见表面计算的深度来确定该点是否从该方向可见。

我通过使用环境遮挡强度纹理来跟踪对象在多个方向上的这种可见性。我使用自定义着色器在此纹理上的位置和我的对象表面上的位置之间进行映射。如果该位置在该旋转中可见,我写出一个灰色值(值为 1/(方向数)),如果隐藏,我写出黑色。然后,我使用加法混合模式来累积这些值,以确定哪些表面被环境光照射的次数最多。

我的环境遮挡纹理看起来像下面这样:

Ambient occlusion texture

在这种情况下,我将一系列球体映射为分子模型的一部分,因此该纹理中的每个矩形都是球体的表面积,并使用映射函数展平。当环绕实际模型时,这些值如下所示:

Mapped ambient occlusion values

此外,为了确定我的对象在不同方向的深度值,我必须创建自己的深度写入函数来计算每个像素的深度值并将这些值存储到自定义深度纹理中。然后,在确定环境光是否击中某个方向的点时,我会从该纹理中读取。如果我没记错的话,您无法直接在 iOS 设备上读取深度缓冲区,因此您可能还需要为您的模型做一些类似的事情。

这不包括反射漫射照明的情况,但它至少描述了我进行环境遮挡着色的方法。此应用程序的源代码可在上面的链接中找到,如果您想深入研究它并了解所有这些在实践中是如何工作的。

关于iOS GLSL 球谐着色器。如何使用 iOS GPU 进行 Raycast,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10316815/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com