Skip to content

Commit 1ca71ca

Browse files
authored
[3d] performance improvement by using threejs setViewport (#4079)
1 parent 65289b1 commit 1ca71ca

File tree

4 files changed

+145
-126
lines changed

4 files changed

+145
-126
lines changed

src/extensions/core/load3d/Load3d.ts

Lines changed: 44 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -160,22 +160,48 @@ class Load3d {
160160
this.viewHelperManager.update(delta)
161161
this.controlsManager.update()
162162

163+
this.renderMainScene()
164+
165+
if (this.previewManager.showPreview) {
166+
this.renderPreviewScene()
167+
}
168+
169+
this.resetViewport()
170+
171+
if (this.viewHelperManager.viewHelper.render) {
172+
this.viewHelperManager.viewHelper.render(this.renderer)
173+
}
174+
175+
this.INITIAL_RENDER_DONE = true
176+
}
177+
178+
renderMainScene(): void {
179+
const width = this.renderer.domElement.clientWidth
180+
const height = this.renderer.domElement.clientHeight
181+
182+
this.renderer.setViewport(0, 0, width, height)
183+
this.renderer.setScissor(0, 0, width, height)
184+
this.renderer.setScissorTest(true)
185+
163186
this.renderer.clear()
164187
this.sceneManager.renderBackground()
165188
this.renderer.render(
166189
this.sceneManager.scene,
167190
this.cameraManager.activeCamera
168191
)
192+
}
169193

170-
if (this.viewHelperManager.viewHelper.render) {
171-
this.viewHelperManager.viewHelper.render(this.renderer)
172-
}
194+
renderPreviewScene(): void {
195+
this.previewManager.renderPreview()
196+
}
173197

174-
if (this.previewManager.showPreview) {
175-
this.previewManager.updatePreviewRender()
176-
}
198+
resetViewport(): void {
199+
const width = this.renderer.domElement.clientWidth
200+
const height = this.renderer.domElement.clientHeight
177201

178-
this.INITIAL_RENDER_DONE = true
202+
this.renderer.setViewport(0, 0, width, height)
203+
this.renderer.setScissor(0, 0, width, height)
204+
this.renderer.setScissorTest(false)
179205
}
180206

181207
private getActiveCamera(): THREE.Camera {
@@ -198,20 +224,17 @@ class Load3d {
198224
return
199225
}
200226

201-
if (this.previewManager.showPreview) {
202-
this.previewManager.updatePreviewRender()
203-
}
204-
205227
const delta = this.clock.getDelta()
206228
this.viewHelperManager.update(delta)
207229
this.controlsManager.update()
208230

209-
this.renderer.clear()
210-
this.sceneManager.renderBackground()
211-
this.renderer.render(
212-
this.sceneManager.scene,
213-
this.cameraManager.activeCamera
214-
)
231+
this.renderMainScene()
232+
233+
if (this.previewManager.showPreview) {
234+
this.renderPreviewScene()
235+
}
236+
237+
this.resetViewport()
215238

216239
if (this.viewHelperManager.viewHelper.render) {
217240
this.viewHelperManager.viewHelper.render(this.renderer)
@@ -304,22 +327,17 @@ class Load3d {
304327
async setBackgroundImage(uploadPath: string): Promise<void> {
305328
await this.sceneManager.setBackgroundImage(uploadPath)
306329

307-
if (this.previewManager.previewRenderer) {
308-
this.previewManager.updateBackgroundTexture(
309-
this.sceneManager.backgroundTexture
310-
)
311-
}
330+
this.previewManager.updateBackgroundTexture(
331+
this.sceneManager.backgroundTexture
332+
)
312333

313334
this.forceRender()
314335
}
315336

316337
removeBackgroundImage(): void {
317338
this.sceneManager.removeBackgroundImage()
318339

319-
if (
320-
this.previewManager.previewRenderer &&
321-
this.previewManager.previewCamera
322-
) {
340+
if (this.previewManager.previewCamera) {
323341
this.previewManager.updateBackgroundTexture(null)
324342
}
325343

src/extensions/core/load3d/Load3dAnimation.ts

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,6 @@ class Load3dAnimation extends Load3d {
4242
return
4343
}
4444

45-
if (this.previewManager.showPreview) {
46-
this.previewManager.updatePreviewRender()
47-
}
48-
4945
const delta = this.clock.getDelta()
5046

5147
this.animationManager.update(delta)
@@ -54,12 +50,13 @@ class Load3dAnimation extends Load3d {
5450

5551
this.controlsManager.update()
5652

57-
this.renderer.clear()
58-
this.sceneManager.renderBackground()
59-
this.renderer.render(
60-
this.sceneManager.scene,
61-
this.cameraManager.activeCamera
62-
)
53+
this.renderMainScene()
54+
55+
if (this.previewManager.showPreview) {
56+
this.renderPreviewScene()
57+
}
58+
59+
this.resetViewport()
6360

6461
if (this.viewHelperManager.viewHelper.render) {
6562
this.viewHelperManager.viewHelper.render(this.renderer)

0 commit comments

Comments
 (0)