问题标签 [raymarching]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
game-physics - 非均匀有符号距离场之间的碰撞检测?
大家好:)这是我的第一个问题,我希望这不是一个太不具体/太宽泛的问题,无法回答。
我对 Ray Marching(特别是球体跟踪)以及基于点和对象之间的“距离”而不是线和对象的交叉点进行渲染的能力感到非常兴奋。光线行进算法正在接近表面,但无法计算交点。形状是未知的,但可以通过将点传递给相应的函数来近似。
由非均匀距离场表示的立方体
我所说的非均匀是指函数的结果不是到对象的距离,而是在大多数情况下更小或等于。通过这种方式,您可以使用公式对奇异的结构和动画进行建模(例如将对象合并/混合在一起)。
现在,为了赋予这项技术更多价值,需要进行物理模拟。理想情况下在任意距离场之间,但我认为必须进行限制以使其足够快以用于实时应用(例如球体与任意距离场)
现在我的问题是,如果有人喜欢思考这个问题,获得任何现有材料或知道可以做出哪些限制,以简化问题。
非常感谢您的阅读和您的想法:)
glsl - 为什么我的 Ray March 片段着色器反射纹理查找会减慢我的帧速率?
我使用着色器玩具在 GLSL 中编写了片段着色器。链接:https ://www.shadertoy.com/view/wtGSzy
大部分都可以,但是当我在反射功能中启用纹理查找时,性能从 60FPS 下降到 5~FPS。
有问题的代码在第 173 - 176 行
在我的 rayMarch 函数(第 274-277 行)中可以看到相同的代码,并且可以很好地为我的对象着色。它只会导致反射功能出现问题。
我的问题是,为什么在反射代码中我的纹理查找会降低我的性能这么多,我能做些什么来改进它?
graphics - 使用深度缓冲区进行光线行进
我正在尝试创建一些屏幕空间效果,例如 SSR 和全局照明。我已经注意到它是使用 rayMarching 和深度缓冲区完成的。我在 unity 和 shadertoy 的上下文中熟悉 rayMarching 算法。但是我并没有低估它在深度缓冲区中的工作原理,深度缓冲区中的 rayMarching 是如何完成的?谁能告诉我一些关于如何做到这一点的最小代码?
opengl - OpenGL:在计算着色器中旋转lookAt相机轴
我正在制作光线行进演示,但在旋转相机轴时遇到问题。我正在使用四元数来旋转鼠标并将光线投射到那个方向就好了。问题的一个例子:如果我在 yaw 上转动 180° 并按W它会向后而不是forward。我尝试了很多东西,比如翻译,但对我来说没有成功。
我想知道这是否是为光线投射算法创建移动相机的错误方法。
查看函数:
eye变量保存统一的WASD键值。它们的初始化值分别vec3(0, 0, -1)
用于 xyz。中心是uv变量是我正在绘制的当前像素
。vec3(0,0,0)
c# - 为什么我在 Unity RayMarching 着色器中出现 for-loop 错误?
这是我的第一个着色器,所以它可能是一些愚蠢的小错误。我正在关注 YouTube 上的教程: https ://www.youtube.com/watch?v=S8AWd66hoCo&t=83s&pbjreload=10
我被距离函数(对于球体)困住了,如果我的 for 循环出现一些奇怪的错误,我根本无法让它工作。在那之前的一切都很完美。我重写了 for 循环,但一遍又一遍地得到这个错误。
先感谢您!
(统一2019.2.19f1)
错误:
代码:
opengl-es - 光栅化形状上的光线行进
我一直想知道如何将两种渲染方法结合起来,使光栅化的屏幕形状用作片段着色器中基于光线行进的渲染的画布。
拿这些漂亮的例子来说:https ://www.shadertoy.com/view/XsjXRm或https://www.shadertoy.com/view/MtXSzS 它们的可见部分可以粗略地表示为球体。现在我想做的是将 两个球体放到世界上的某个地方并运行常规的光栅化过程。光栅化将产生模型占用的像素,对于那些像素,我想实际运行 shadertoy 光线行进算法以获得所需的外观(我的两个球体看起来像上面示例中的 shadertoy“球体”)。
这是可行的吗?
PS我非常了解光栅化和矩阵/空间转换,但我对光线行进的工作原理有非常模糊的理解。原谅我的无知。
opengl - GLSL黑屏,着色器不做任何事情
我正在片段着色器中编写一个基本的 Sphere-Tracer,如果我只是根据它们的表面法线为点着色,一切都很好,但是一旦我尝试实现反射算法,编译需要更长的时间,而且只是黑屏。fps 从 1 开始,但很快上升到 1000,这是我设置的代码限制,告诉我着色器实际上没有做任何事情,只是忽略了我的代码,这应该比这慢得多。我最初以为我达到了 GPU 的指令限制,但我不认为这是问题所在,因为使用正常着色代码,我可以设置MAX_MARCH
为高值,如 1000,但使用反射,即使使用MAX_REFLECTIONS
和MAX_AA
到一个,这应该类似于正常着色的指令量(可能更多〜50,我认为不重要)。但是我需要将其设置MAX_MARCH
为 1 才能渲染,即使将其设置为 2 也会导致该错误。
顶点着色器:
片段着色器:
我加载和编译着色器的 Java 代码(使用 LWJGL):
我的代码中的函数 loadShader 不会像语法错误那样给我任何错误,并且不会退出程序,因此GL_COMPILE_STATUS
不是错误的。
我完全意识到嵌套的 for 循环,并且我对条件的使用远非高效的性能,但我希望它会很慢,而不是完全破坏。我在英特尔 UHD 630 上运行它,根据https://www.intel.ca/content/www/ca/en/support/products/98909/graphics/graphics-for-7th-generation-intel-processors /intel-hd-graphics-630.html支持 openGL 4.4。因此,根据GLSL 最大指令数,我应该可以在我的片段着色器和完全动态分支中访问 65536 条指令。由于这些原因,我不认为指令限制是问题,任何帮助将不胜感激。如果您需要更多信息,我会尽快添加。如果需要 CPU 代码,我也可以添加它,但我认为这不是问题,因为仅更改着色器会触发此错误。
编辑 1:在程序经过验证和链接后调用时,两者都没有返回任何内容glGetShaderInfoLog
。glGetProgramInfoLog
opengl - 菱形十二面体的精确符号距离函数
我正在玩一个带有菱形十二面体体素的光线行军引擎,因为它们可以像六边形对 2D 空间一样完美地镶嵌 3D 空间。问题是我只设法想出了那个实体的有符号距离函数的近似值。可以渲染体素,但它会提供非常清晰的边缘。我想使用精确的 SDF 使它们看起来更好一些圆形边缘。
有人知道菱形十二面体的确切 SDF 吗?
这是我的(不准确的)SDF:
这就是它的样子:
编辑 :
所以我对如何解决这个问题有了一些新的想法。在这项新技术中,我尝试找到具有不同距离公式的不同区域(取决于离实体最近的点是在面、边还是顶点上)并分别计算它们的距离。到目前为止,对于最近点在面或边缘上的区域,我只有正确的间距和距离。代码如下所示:
这是一个快速草图,展示我的方法
其余的案件变得更加疯狂。如果有任何突破,我会更新帖子。
unreal-engine4 - 光线行进体积材料上的阴影
我正在尝试在 UE4 DMX 插件的光束材质中实现阴影,所以我可以将它与手电筒一起使用,而不必担心体积雾导致的光迹,问题是我真的不知道如何,实际上,我对HLSL一无所知。
所以,如果任何技术艺术家向导可以帮助我并像我五岁一样解释或给我一些学习材料,那就太棒了。
光束代码:
graphics - x87 - raymarcher 中的问题
下面是我的 raymarcher,主要改编自https://www.shadertoy.com/view/llt3R4#
预期的行为是球体在屏幕上的投影,但它投影的是空白空间(由黄色像素表示,而不是一个紫色的)。
这是我使用 x87 协处理器编写的第一个程序,所以我不确定是否缺少任何东西。我认识的一些程序员已经检查过了,没有发现问题,所以我不确定该怎么做。
(这是 C 代码的工作版本)