2017-05-12 13 views
0

내 렌더러에서 Intel Embree를 사용하려고 생각 중이며 현재 Embree 자습서를 가지고 놀고 있습니다.API를 통해 또는 프로젝트 소스 코드 자체를 통해 Intel Embree를 사용해야합니까?

그래서, API를 통해 효율적으로 인텔 Embree를 사용할 수 있습니까?

내 말은, <embree2/rtcore.h>, <embree2/rtcore_ray.h>, e.t.c의 기능이 RTCRay과 같은 내부 데이터 구조를 사용한다는 것을 알 수 있습니다. 그리고 명백히, 모든 연산자를 오버로드 할 수 없으므로 항상 Embree 데이터 구조에 데이터 구조를 캐스팅해야하며 반대의 경우도 마찬가지입니다. 그리고 그것은 단지 타입 캐스트가 아닙니다. 그것은 새로운 객체의 구성입니다.

예를 들어 rtcIntersect(RTCScene scene, RTCRay ray);을 호출하기 전에 Ray 클래스 개체에서 RTCRay 레이를 구성한 다음 함수가 일부 데이터를 반환하면 일부 값을 다시 복사합니다.

Intel Embree를 사용하는 좋은 방법은 아닙니다.

+0

클래스에 RTCRay를 포함 시키거나 상속하지 않으시겠습니까? –

답변

1

RTCRay를 구성하고 rtcIntersect를 사용한 다음 데이터를 다시 복사하십시오. 광선 통과 및 원시 교 차와 비교할 때 오버 헤드는 무시할 수 있습니다 (< 0.5 %).

코로나 렌더링은 RTCRay를 내부적으로 사용하므로 0.5 %의 오버 헤드를 절약 할 수 있습니다.

V-Ray가 RTCRay를 정확히 구성하고 rtcIntersect를 사용한 다음 데이터를 다시 복사한다는 것을 알고 있습니다.

일반적인 조언 : 조기 최적화를 피하십시오. 작업 코드를 구현 한 다음 프로파일 러를 사용하여 최적화를 안내하십시오.

1

사전 빌드 된 바이너리에서 직접 API를 사용했습니다. 단점은 작업 할 벡터 또는 행렬 기능이 없지만 위쪽에는 원하는 다른 라이브러리를 사용할 수 있다는 것입니다. 이는 결정되지 않았습니다. 나는 오픈 소스 싱글 헤더 파일 linalg.h을 사용하여 간단하게 유지했다.

여기 내 EmbreeTest 프로젝트는 사용자가 시작하도록 하나의 Main.cpp 파일을 가지고 있습니다. Embree installer 만 사용하면됩니다.

효율면에서 보면,이 프로젝트로 시작한다면 Embree를 호출하는 것만 큼 성능 병목 현상이 있는지 확인할 수 있어야합니다. 레이 캐스팅 메서드는 방금 계산 한 레이 org와 dir을 스택의 RTCRay 구조에 복사합니다. 나는 이것이 많은 오버 헤드가 될 것이라고 생각하지 않는다. 여러 개의 광선을 한 번에 전송하는 구조 조정은 사본보다 성능면에서 더 많은 차이를 만듭니다.