2014-09-26 4 views
0

상황 :이동 객체 성능 - ThreeJs

나는 아주 간단 three.js를 프로젝트에서 일하고 있어요, 그것은 꽤 좋은 방법 최적화, 나는 생각합니다. 저는 WebGL 렌더러를 사용하여 오디오 신호에서 50ms마다 추출 된 많은 양의 보데 플롯을 표시합니다. 이것은 꽤 멋지지만 분명히 Bode를 더 많이 표시할수록 더 느려집니다. 또한 Bodes는 일정한 속도로 움직이며, 새로운 Bodes가 표시 될 공간을 허용합니다.

나는 인터넷에서 발견 된 모든 "기본"최적화를 구현 한 시점에 있으며, 나쁜 컴퓨터 (nVidia GT 210)로 표시되는 약 10.000.000 라인에서 30fps를 지속적으로 얻을 수있었습니다. Core i3 2100 ...). 이 작업 프로젝트로

참고도 내가 not using any lights, 반사 ... 기본적인 라인 =)

해요, 난 ... 스크린 샷/코드, 유감을 표시 허용되지 않아

현재 구현 :

나는 THREE.Line을 통해 각각 표시되는 모든 Bodes를 저장하기 위해 배열을 사용하고 있습니다.
FYI, 실제로 2000 THREE.Line이 사용됩니다.

보드가 표시되고 40 초 동안 이동하면 보드가 삭제되고 THREE.Line이 다른 보드와 재사용됩니다. 이동하려면 modifying THREE.Line.position property입니다.

나는 수동으로하고 있기 때문에 이미 내 장면과 개체 매트릭스 autoUpdate를 비활성화했음을 유의하십시오. (Thx가 Volune을 가리키고 있음).

내 질문 :

가 THREE.Line.position 수정이 렌더러가 이미 수행 한 몇 가지 무거운 계산을 유도 하는가? 또는 three.js는 내 개체가 변경되지 않았 음을 알고 은 이것을 피할 수 있습니까?

, 나는
는 ... 그의 매트릭스 등을 업데이트하지 않고, 혼자 떠나는 것보다 단지 번역 된 동일한 개체를 업데이트/렌더링하면 렌더링 과정에서 무거운 있는지 알고 싶습니다 ThreeJS에서 동일한 객체를 여러 번 렌더링하는 것과 관련된 낮은 수준의 최적화가 있습니까? 객체를 이동할 때이 최적화가 취소 되었습니까?

그렇다면 다른 방법을 생각해보십시오 : 두 개의 큰 메쉬를 사용하여 서로 접을 수는 있지만 각 프레임의 형상을 병합/삭제하는 것이 좋습니다 ... 더 좋을 수도 있습니다. ?

미리 감사드립니다.

답변

1

소스 (herehere)에서 변경된 위치에 관계없이 메쉬 행렬이 각 프레임마다 업데이트된다는 것을 알았습니다.

즉, 위치 수정으로 인해 과도한 계산이 발생하지 않습니다.. 이것은 또한 많은 행렬이 업데이트되고 많은 유니폼이 각 프레임에 GC로 전송된다는 것을 의미합니다.

하나 또는 두 개의 큰 메쉬로 아이디어를 시도해 보시기 바랍니다. 이렇게하면 THREE.js 내부의 JavaScript 계산이 줄어들며 GC와의 유일한 커다란 통신은 큰 버퍼에 상대적입니다.
는 또한 버퍼의 일부를 업데이트 할 수있는 WebGL이 기능 bufferSubData (MSDN documentation을)이 존재 함을 유의하지만이 대답을 not yet usable in THREE.js

+0

들으 보인다, 난, 사실) 꽤 흥미 bufferSubData을 = 몰랐다 자동 업데이트에 대한 당신 지적했다 며칠 전, 그것을 해제하고 수동으로 업데이 트하는 시도했다 20 % fps를 업그레이 드했다. 이것은 내 질문과 관련된 렌더링 프로세스의 깊이가 명확하지 않다는 것을 알고 있습니다. 나는 번역/번역 된 동일한 개체를 업데이 트하는 경우 그냥 혼자두고, 그의 매트릭스 등을 업데이 트하지 않고 훨씬 무거운 것을 알고 싶습니다 ... BTW 훌륭한 게시물,주고 rep 및 편집 내 게시물. – Hotted24

+0

현재 2 개의 큰 메쉬를 시도 중이라는 것을 잊어 버리고 결과를보고 할 것입니다 =) – Hotted24