Questions tagged «raytracing»

2
为什么有些游戏显示灯光穿过墙壁发光?
在某些游戏中,即使将视频质量设置为高水平,我也会看到灯光穿过墙壁。 我最近玩过的一些游戏示例包括《无主之地2》(导弹爆炸)和《克苏鲁的呼唤》(灯笼;该游戏甚至使用了虚幻引擎4)。 这是错误还是出于性能原因? 示例无主之地2:https://youtu.be/9bV83qA6_mU? t = 419(几次,但很快) 额外的问题:在后一种情况下,有什么方法可以廉价地使用光线跟踪解决问题?我想昂贵的RT肯定可以解决问题,但是我想知道它是否也可以“便宜”的形式用于解决此特定问题。

3
射线追踪中的BRDF和球坐标
我开发了使用标准Phong / Blinn Phong照明模型的光线跟踪器。现在,我正在对其进行修改以支持基于物理的渲染,因此我正在实现各种BRDF模型。目前,我专注于Oren-Nayar和Torrance-Sparrow模型。这些中的每一个均基于用于表示入射光和出射光方向的球坐标。 我的问题是:正确的方法是将wi和wo从笛卡尔坐标转换为球坐标? 我正在应用此处报告的标准公式https://en.wikipedia.org/wiki/Spherical_coordinate_system#Coordinate_system_conversions,但是我不确定自己做对了,因为我的向量的起点不是尾巴直角坐标系,但以射线与对象的交点为中心。 在这里您可以找到我当前的实现: https://github.com/chicio/Multispectral-Ray-tracing/tree/brdf/RayTracing/RayTracer/Objects/BRDF https://github.com/chicio/Multispectral-Ray-tracing/blob/brdf/RayTracing/RayTracer/Math/Vector3D.cpp 谁能帮我解释将wi和wo矢量从笛卡尔坐标转换为球坐标的正确方法吗? 更新 我在这里复制代码的相关部分: 球坐标计算 float Vector3D::sphericalTheta() const { float sphericalTheta = acosf(Utils::clamp(y, -1.f, 1.f)); return sphericalTheta; } float Vector3D::sphericalPhi() const { float phi = atan2f(z, x); return (phi < 0.f) ? phi + 2.f * M_PI : phi; } 奥伦·纳亚(Oren Nayar) …

4
可变长度循环对GPU着色器的影响
它很流行在GPU内渲染程序内容,例如在演示场景中(绘制单个四边形以填充屏幕并让GPU计算像素)。 雷行军很受欢迎: 这意味着GPU正在每个像素执行一些未知数量的循环迭代(尽管您可以将上限设为maxIterations)。 具有可变长度的循环如何影响着色器性能? 想象一下简单的光线行进伪代码: t = 0.f; while(t < maxDist) { p = rayStart + rayDir * t; d = DistanceFunc(p); t += d; if(d < epsilon) { ... emit p return; } } 各种主流GPU系列(Nvidia,ATI,PowerVR,Mali,Intel等)如何受到影响?顶点着色器,尤其是片段着色器? 如何进行优化?
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.