Окружающая окклюзия полушария с центром на произвольной нормали
Я выполняю окклюзию окружающей среды с использованием косинус-взвешенного полушария. До сих пор я предполагаю, что полусфера центрирована относительно нормали (0,0,1), которая указывает в положительном направлении z. Я направил лучи вокруг этого полушария, используя зенитные и азимутальные углы $$0<\ theta <\ pi / 2, 0 <\ phi <2 \ pi $$, где направление луча вычисляется как (sin theta cos phi, sin theta грех фи, соз тета).
Как я мог обобщить это, чтобы работать для произвольной нормы?
1 ответ
Найти локальную систему координат поверхности.
Т.е. пусть ось z будет нормальной. Затем найдите две ортогональные оси для x и y. Это может быть достигнуто, сначала предполагая (0, 1, 0)
как ось Y (или альтернативная ось, если это нормально). Затем вычислите ось X как x = cross(y, z)
и уточнить ось Y как y = cross(z, x)
,
Тогда вы можете использовать вашу точку расчета (p
) в качестве весов в этой системе координат:
dir = p.x * x + p.y * y + p.z * z