有谁知道如何对 2 阶 NURBS 进行光线追踪?

Do anyone know how to raytrace NURBS of degree 2?

我编写 GLSL 光线追踪已有一段时间了,我做了一些改进,但自从查看日以来,我认为光线追踪曲面而不是许多三角形会快得多,所以我遇到了 NURBS。如果我写下方程式(扩展 --> 仅 +、-、*、/、sqrt 和平方),我看不到任何方法来获得与射线的交点。

你们中有人知道如何对 2 阶 NURBS 进行光线追踪吗?

This is my equation (no real NURBS equation):

given :
(A to I are 3d vectors)
A
B
C
D
E
F
G
H
I

a = 2(B-A)
b = 2B-A-C
c = 2(E-D)
d = 2E-D-F
e = 2(H-G)
f =  2H-G-I

(a to f are defined to have the equation a bit shorter later)

o
r
(o and r are 3d vectors again)

searched :
u, v (, t)

to solve :

(A+au-bu²) + ((D+cu-du²)-(A+au+bu²))2v - (2(D+cu-bu²)-(A+au-bu²)-(G+eu-fu²))v² = o+rt
(NURB) = (LINE)

有很多关于这个主题的文献,例如 https://www.researchgate.net/publication/232644373_Direct_and_fast_ray_tracing_of_NURBS_surfaces。这适用于一般 NURBS。不确定是否可以简化二次 NURBS。

基本思想是将您的光线视为两个平面的交点 Nr = a, Mr = b.使用NM 个平面的法向量,a、b 为常量。如果 r = R(u,v) 是你的 NURB 函数。这为您提供了两个包含两个变量的方程式供您求解。

这是我有点不确定的地方。我认为对于二次 NURBS,您可以将函数表示为两个二次多项式的商 R(u,v) = P(u,v) / Q(u,v),其中 P 是向量值,Q 只是一维多项式。如果是这样,您要求解的方程式是

NP(u,v) = a Q(u,v) MP(u,v) = b Q(u,v)

这是两个变量的两个二次方程。您可以使用各种数值方法,例如牛顿法或梯度下降法,并且由于方程是二次方程,因此收敛速度应该相对较快。

您需要分别考虑每个补丁(0 < u < 1/3、0 < v < 1/3 等)以应对函数的分段性质。