문제

먼저이 거친 질문에 대해 죄송하지만 너무 많은 세부 사항을 소개하고 싶지 않으므로 관련 리소스를 요청합니다. 조항, 도서관 또는 .

내 프로그램은 Ray-Triangle 교차로 (수백만 개의 광선과 삼각형이 있음)의 집중적 인 계산을 수행해야하며, 내 목표는 가능한 한 빨리 만드는 것입니다.

내가 한 일은 다음과 같습니다.

  1. 가장 빨리 사용하십시오 광선 삼각형 내가 아는 알고리즘.

  2. Octree 사용. (게임 프로그래밍 보석 1, 4.10. 4.11)

  3. 사용 효율적이고 강력한 광선 - 박스 교차로 알고리즘 Octree 알고리즘에 사용됩니다.

더 나은 알고리즘을 적용하기 전보다 빠르지 만 더 빨리있을 수 있다고 생각합니다. 더 빨리 만들 수있는 가능한 장소에서 조명을 흘리시겠습니까?

감사.

도움이 되었습니까?

해결책

이 질문을 할 곳은입니다 ompf2.com. 실시간에 관한 주제가있는 포럼 (리얼 타임이 아닌 경우도) Raytracing

다른 팁

OMPF 포럼은이 질문에 적합한 장소이지만 오늘 이후로 여기에 있습니다 ...

Octtree Traversal에 Ray/Box 교차로를 사용하지 마십시오. 트리의 루트 노드에 사용할 수 있지만 그게 다입니다. 루트 박스의 입구와 종료 거리를 알면 x, y 및 z 파티션 평면과의 거리를 계산할 수 있습니다 - 상자를 세분화하는 평면. 앞뒤로의 거리는 각각 F와 B 인 경우, F, B, X, Y, Z 거리를 분석하여 상자의 하위 노드가 발생하는 하위 노드를 결정할 수 있습니다. 또한 어린이 노드를 가로 지르는 순서를 결정하고 그 중 많은 부분을 완전히 거부 할 수 있습니다.

광선이 하나의 옥탄트에서 시작되기 때문에 최대 4 명의 어린이가 맞을 수 있으며 3 개의 파티션 비행기 중 하나를 가로 지르면 옥트 만 변경합니다.

또한 재귀가되기 때문에 어린이 노드의 출입 및 출구 거리가 필요합니다. 이 거리는 이미 계산 한 세트 (f, b, x, y, z)에서 선택됩니다.

나는 이것을 아주 오랫동안 최적화 해 왔으며, 많은 수준의 나무에 대한 테이블에 여전히 크기의 성능이 여전히 있다고 안전하게 말할 수 있습니다. 나는 당신이 지금있는 곳에서 바로 시작했습니다.

당신이 할 수있는 몇 가지 최적화가 있지만, 모두 문제의 정확한 영역에 따라 다릅니다. 일반적인 알고리즘이 진행되는 한, 당신은 올바른 길을 가고 있습니다. 도메인에 따라 다음을 수행 할 수 있습니다.

  1. 포털 시스템을 소개합니다
  2. 계산을 GPU로 이동하고 병렬 계산을 활용하십시오.
  3. 최근 Raytracing에서 매우 인기있는 트렌드는입니다 경계 볼륨 계층

빠른 교차로 알고리즘과 결합 된 공간 정렬을 사용하여 이미 좋은 출발을했습니다. 한 번에 단일 광선을 추적하기 위해서는 정적 장면 용 최고의 구조 중 하나는 표면적 휴리스틱을 사용하여 제작 된 KD 트리입니다.

그러나 진정으로 고속 광선 추적하려면 다음을 활용해야합니다.

  • 광선의 일관된 패킷
  • Frusta

나는 당신이 시작할 것을 제안합니다.코 히어 런트 그리드 트래버스를 사용하여 애니메이션 장면을 추적합니다". 현대적인 접근 방식의 팔로우하기 쉬운 예를 제공합니다. 또한 이러한 아이디어가 KD 나무 및 BVH에 어떻게 적용되는지 확인할 수도 있습니다.

같은 페이지에서 "광선 추적 애니메이션 장면에서의 최신 기술"도 확인하십시오.

또 다른 위대한 자원 세트는 수년에 걸친 모든 siggraph 간행물입니다. 이것은 매우 경쟁력있는 회의 이므로이 논문은 최고 수준 인 경향이 있습니다.

마지막으로 기존 코드를 기꺼이 사용하려면 프로젝트 페이지를 확인하십시오. Openrt.

내가 본 유용한 리소스는 그래픽 도구 저널. 장면에 따라 다른 BVH가 Octree보다 더 적합 할 수 있습니다.

또한 프로파일 러로 성능을 보지 못했다면해야합니다. 상어는 OSX에서 훌륭하고 창문에서 매우 졸린 결과를 얻었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top