Skip to content

Commit 1b35d64

Browse files
committed
Editor: Improved pathtracer performance and robustness.
1 parent 85cd3cb commit 1b35d64

File tree

2 files changed

+31
-5
lines changed

2 files changed

+31
-5
lines changed

editor/js/Viewport.Pathtracer.js

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,13 +18,17 @@ function buildColorTexture( color ) {
1818

1919
function ViewportPathtracer( renderer ) {
2020

21+
let generator = null;
2122
let pathtracer = null;
2223
let quad = null;
24+
let hdr = null;
2325

2426
function init( scene, camera ) {
2527

2628
if ( pathtracer === null ) {
2729

30+
generator = new PathTracingSceneGenerator();
31+
2832
pathtracer = new PathTracingRenderer( renderer );
2933
pathtracer.setSize( renderer.domElement.offsetWidth, renderer.domElement.offsetHeight );
3034
pathtracer.alpha = true;
@@ -42,7 +46,14 @@ function ViewportPathtracer( renderer ) {
4246
pathtracer.material.backgroundBlur = scene.backgroundBlurriness;
4347
pathtracer.reset();
4448

45-
const generator = new PathTracingSceneGenerator();
49+
// TOFIX: If the scene is empty the generator crashes so we render a tiny cube (:
50+
51+
if ( scene.children.length === 0 ) {
52+
53+
scene = new THREE.Mesh( new THREE.BoxGeometry( 0.0001, 0.0001, 0.0001 ) );
54+
55+
}
56+
4657
const { bvh, textures, materials, lights } = generator.generate( scene );
4758

4859
const ptGeometry = bvh.geometry;
@@ -88,7 +99,14 @@ function ViewportPathtracer( renderer ) {
8899

89100
if ( environment && environment.isTexture === true ) {
90101

91-
ptMaterial.envMapInfo.updateFrom( scene.environment );
102+
// Avoid calling envMapInfo() with the same hdr
103+
104+
if ( scene.environment !== hdr ) {
105+
106+
ptMaterial.envMapInfo.updateFrom( scene.environment );
107+
hdr = scene.environment;
108+
109+
}
92110

93111
} else {
94112

editor/js/Viewport.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ function Viewport( editor ) {
9292

9393
}
9494

95-
render();
95+
render( true );
9696

9797
} );
9898
transformControls.addEventListener( 'mouseDown', function () {
@@ -302,6 +302,8 @@ function Viewport( editor ) {
302302
signals.editorCleared.add( function () {
303303

304304
controls.center.set( 0, 0, 0 );
305+
pathtracer.reset();
306+
305307
render();
306308

307309
} );
@@ -697,7 +699,7 @@ function Viewport( editor ) {
697699
sceneHelpers.visible = value;
698700
transformControls.enabled = value;
699701

700-
render();
702+
render( true );
701703

702704
} );
703705

@@ -766,7 +768,13 @@ function Viewport( editor ) {
766768
let startTime = 0;
767769
let endTime = 0;
768770

769-
function render() {
771+
function render( isHelper = false ) {
772+
773+
if ( editor.viewportShading === 'realistic' && isHelper === false ) {
774+
775+
pathtracer.init( scene, camera );
776+
777+
}
770778

771779
startTime = performance.now();
772780

0 commit comments

Comments
 (0)