2017-05-22 13 views
0

사이트의 세 가지 다른 영역에서 실제로 3 가지 장면을로드하고 렌더링하는 프로젝트가 있습니다. 현재 장면을 바꿀 필요가있을 때마다 캔버스 (모든 Threejs 청취자와 반복자)를 제거하고 새로운 장면을 처음부터 렌더링합니다.Threejs 전환 장면

렌더러로 고유 한 장면을 생성하고 그 내부에 다른 세 장면의 다른 메쉬, 광원 및 카메라를로드하면 성능상의 이점이 있습니까?

누구나 이미 비슷한 시나리오를 테스트하고 있습니까?

+0

"세 가지 다른 영역의 3 가지 장면"이 의미하는 바에 대한 세부 정보를 제공해주십시오. 세 가지 다른 장면을 보여주는 세 가지 캔버스가있는 것처럼 들리지만 잘못 될 수 있습니다. – TheJim01

+0

장면이 함께 표시되지 않으며 한 번에 하나의 장면 만 표시됩니다. 3 개의 장면이있는 3 개의 사이트 페이지가 있다고 가정하지만 브라우저가 다시로드되지 않습니다. –

+0

그런 경우 "page1"데이터 장면을 비우고 "page2"데이터로 다시 채우는 것이 어떻습니까? (메모리가 허용되면 여러 장면을 유지하고 페이지가 변경 될 때 렌더러에 개별적으로 전달할 수 있습니까?) – TheJim01

답변

0

this과 같은 것을 찾고 계십니까?

시간대에 하나의 장면을 표시하려면 가장 좋은 방법은 장면을 만들고 선택한 장면 만 렌더링하는 것입니다. THREE.WebGLRenderer.render()을 참조하십시오.

+0

그래서 솔루션을 사용하면 렌더러 만 생성하고 일부를 통해 "최상위"클래스를 만들 수 있습니다. 메서드는 씬, 메쉬, 라이트, ecc를 포함하는 다른 세 클래스를로드합니다. 씬 전환 렌더러로 넘어 갔습니까 ?? 장면을 렌더링하지 않고 메모리에 유지해도 성능에는 영향을 미치지 않습니까? thnx –

+0

네, 가능한 한 가지 방법 일 수 있습니다. 장면을 메모리에 유지해도 성능에 영향을 미치지 않습니다 (예 : FPS). 이는 앱의 메모리 사용량에만 영향을 미칩니다. –

0

단일 렌더러 인스턴스와 다른 장면/카메라 객체를 사용하여 render() -call로 전달하고 필요한 경우 사이트에서 renderer.domElement을 재배치하는 것이 성능면에서 좋을 것입니다. 그렇게하면 여러 캔버스와 렌더링 컨텍스트를 둘 필요가 없으며 렌더러가 몇 가지 웹 관련 작업을 캐시 할 수 있습니다. 이 방법은 또한 여러 장면에서 자료를 재사용 할 수 있습니다.

그러나 성능 차이는 최소가되어야하며 최소 (또는 대부분 대부분) 초기화 비용이 최대 범위 내에 있어야합니다. 100ms (정확히 무엇을하고 있는지에 따라 달라 지지만 이것은 내 추측 일 것입니다.)

모든 것이 분리되어있는 것이 더 나을 것 같으면 (그리고 앱이 어떻게 만들어 졌는지에 따라 좋은 이유가있을 수도 있습니다.) 그냥 그대로두고 부정적 영향이 있는지 측정하십시오. (내 추측 : 아마 그렇지 않을 것이다).