diff --git a/editor/js/Sidebar.Project.js b/editor/js/Sidebar.Project.js index f3ca33c4e1cc971cd830156ab3693589a5b5be34..19952e980a45747a0de4a271a5047a354f0960b9 100644 --- a/editor/js/Sidebar.Project.js +++ b/editor/js/Sidebar.Project.js @@ -16,6 +16,7 @@ var SidebarProject = function ( editor ) { var strings = editor.strings; var currentRenderer = null; + var currentPmremGenerator = null; var container = new UISpan(); @@ -151,7 +152,17 @@ var SidebarProject = function ( editor ) { function createRenderer( antialias, shadows, toneMapping ) { var parameters = { antialias: antialias }; + + if ( currentRenderer !== null ) { + + currentRenderer.dispose(); + currentPmremGenerator.dispose(); + + } + currentRenderer = new THREE.WebGLRenderer( parameters ); + currentPmremGenerator = new THREE.PMREMGenerator( currentRenderer ); + currentPmremGenerator.compileCubemapShader(); if ( shadows ) { @@ -162,7 +173,7 @@ var SidebarProject = function ( editor ) { currentRenderer.toneMapping = parseFloat( toneMapping ); - signals.rendererChanged.dispatch( currentRenderer ); + signals.rendererChanged.dispatch( currentRenderer, currentPmremGenerator ); } diff --git a/editor/js/Viewport.js b/editor/js/Viewport.js index e02185b7aa74ffdd8419b3a4536e6549903c40b5..c250d0946df4a5f2982655aca9583ebea6c639c2 100644 --- a/editor/js/Viewport.js +++ b/editor/js/Viewport.js @@ -31,6 +31,7 @@ var Viewport = function ( editor ) { // var renderer = null; + var pmremGenerator = null; var camera = editor.camera; var scene = editor.scene; @@ -324,7 +325,7 @@ var Viewport = function ( editor ) { } ); - signals.rendererChanged.add( function ( newRenderer ) { + signals.rendererChanged.add( function ( newRenderer, newPmremGenerator ) { if ( renderer !== null ) { @@ -333,6 +334,7 @@ var Viewport = function ( editor ) { } renderer = newRenderer; + pmremGenerator = newPmremGenerator; renderer.autoClear = false; renderer.autoUpdateScene = false; @@ -493,14 +495,26 @@ var Viewport = function ( editor ) { if ( backgroundType === 'Color' ) { scene.background.set( backgroundColor ); + scene.environment = null; } else if ( backgroundType === 'Texture' ) { scene.background = backgroundTexture; + scene.environment = null; } else if ( backgroundType === 'CubeTexture' ) { - scene.background = backgroundCubeTexture; + if ( backgroundCubeTexture && backgroundCubeTexture.isHDRTexture ) { + + scene.background = pmremGenerator.fromCubemap( backgroundCubeTexture ).texture; + scene.environment = scene.background; + + } else { + + scene.background = backgroundCubeTexture; + scene.environment = null; + + } }