2014-09-05 2 views
3

Hy! 커다란 vertice 오브젝트로 작업하고 있는데, 작은 파트 (65K 미만)로 분할했기 때문에 많은 모델을 보여줄 수 있습니다. 또한 3 대의 js 카메라를 사용하고 있습니다. 우선 순위 대기열을 사용하여 성능을 높이고 사용자가 카메라를 움직이면 상위 10 개만 표시 한 다음 나머지는 계속 표시합니다. 이 부분은 그다지 어렵지는 않지만 다른 객체 뒤에있을 때 렌더링 할 모델을 넣지 않으려 고합니다. 카메라의 뷰 (바운딩 박스가 맞았는지 확인)에서 일부 광선을 보내고 히트리스트에 따라 카메라를 만들 수 있습니다. 이전 대기열.3 개의 js 성능

당신은 어떻게 생각하십니까? 나는 다음 MODELL를로드하거나 할 수없는 경우

또한 내가 어떻게 감지 할 수 있습니다 (즉시)

+1

오 클루 전 컬링이 원하는 작업입니다. – gaitat

+0

Thx, 오래 전 어딘가에 읽었지만 내 마음에서 빠져 나왔습니다.) –

+0

내 폐색을해야하기 때문에 해결책을 찾지 못했습니다. https : // github .com/wivlaro/three.js/blob/master/examples/webgl_occlusion_culling.html –

답변

5

옵션 A을 :. 폐쇄, 당신은 이것에 대한 라이브러리를 찾을 필요가 컬링.

옵션 B : 카메라 Frustum 평면과 객체 경계 상자가있는 AABB 평면 테스트를 사용하면 객체가 카메라 필드에 있는지 여부를 알 수 있습니다.

구현 (예 : 작업이 불가능으로 객체 뒤에 반드시 표시되지,이 대부분은 가능성이 이미 WebGL을 가진 정도 완료) : 구글이 세 JS 아마이

옵션 C를 지원 : 최대 객체 렌더링 사용 제한 카메라와의 거리 및 객체 크기에 따라 우선 순위가 정해집니다. 예를 들어 어떤 객체가 보이는지 계산 (옵션 B) 한 다음 가장 가까운 객체와 가장 큰 객체의 우선 순위를 정하고 나머지는 비활성화합니다.

의사 코드 :

if(object is in frustum){ 
     var priority = (bounding.max - bounding.min)/distanceToCamera 
    } 

이 쉐이더는 하나 개의 패스을하고 있는지 확인합니다. 그들은 모두 객체를 렌더링하지 않을 경우 경계 상자의 팔 개 코너에 레이 캐스트 : 그 계산 시간 (대략 상황에 따라)

옵션 D을 두 배로한다. 이것은 꽤 정확하지만 절대로 완벽하지는 않습니다. 당신이 작은 물체가 멀리 떨어져 렌더링되지 않는 것을 걱정하지 않는 경우

옵션 A는이 큰 옵션 C를 사용하여, 확실히 가장 좋은 것입니다. 옵션 D은 verts가 많은 오브젝트와 잘 작동하므로 상황에 따라 오브젝트의 더 많은 포인트를 레이 캐스트해야 할 수 있습니다. 옵션 B은 시나리오에 유용하지 않지만, C의 일부이며 기타 최적화 방법입니다. 무엇보다도 뭔가가 뒤에 있는지 아닌지를 알려주는 매우 신뢰성 있고 최적의 방법은 결코 없었습니다.

관련 문제