@@ -29,7 +29,7 @@ import { GUI } from 'three/examples/jsm/libs/lil-gui.module.min.js';
2929import Stats from 'three/examples/jsm/libs/stats.module.js' ;
3030import { generateRadialFloorTexture } from './utils/generateRadialFloorTexture.js' ;
3131import { PathTracingSceneWorker } from '../src/workers/PathTracingSceneWorker.js' ;
32- import { PhysicalPathTracingMaterial , PathTracingRenderer , MaterialReducer , BlurredEnvMapGenerator } from '../src/index.js' ;
32+ import { PhysicalPathTracingMaterial , PathTracingRenderer , MaterialReducer , BlurredEnvMapGenerator , GradientEquirectTexture } from '../src/index.js' ;
3333import { FullScreenQuad } from 'three/examples/jsm/postprocessing/Pass.js' ;
3434import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js' ;
3535
@@ -106,7 +106,7 @@ let creditEl, loadingEl, samplesEl;
106106let floorPlane , gui , stats , sceneInfo ;
107107let renderer , orthoCamera , perspectiveCamera , activeCamera ;
108108let ptRenderer , fsQuad , controls , scene ;
109- let envMap , envMapGenerator ;
109+ let envMap , envMapGenerator , backgroundMap ;
110110let loadingModel = false ;
111111let delaySamples = 0 ;
112112
@@ -135,14 +135,17 @@ async function init() {
135135 orthoCamera = new OrthographicCamera ( orthoWidth / - 2 , orthoWidth / 2 , orthoHeight / 2 , orthoHeight / - 2 , 0 , 100 ) ;
136136 orthoCamera . position . set ( - 1 , 0.25 , 1 ) ;
137137
138+ backgroundMap = new GradientEquirectTexture ( ) ;
139+ backgroundMap . topColor . set ( params . bgGradientTop ) ;
140+ backgroundMap . bottomColor . set ( params . bgGradientBottom ) ;
141+ backgroundMap . update ( ) ;
142+
138143 ptRenderer = new PathTracingRenderer ( renderer ) ;
139144 ptRenderer . alpha = true ;
140145 ptRenderer . material = new PhysicalPathTracingMaterial ( ) ;
141146 ptRenderer . tiles . set ( params . tiles , params . tiles ) ;
142- ptRenderer . material . setDefine ( 'FEATURE_GRADIENT_BG' , 1 ) ;
143147 ptRenderer . material . setDefine ( 'FEATURE_MIS' , Number ( params . multipleImportanceSampling ) ) ;
144- ptRenderer . material . bgGradientTop . set ( params . bgGradientTop ) ;
145- ptRenderer . material . bgGradientBottom . set ( params . bgGradientBottom ) ;
148+ ptRenderer . material . backgroundMap = backgroundMap ;
146149
147150 fsQuad = new FullScreenQuad ( new MeshBasicMaterial ( {
148151 map : ptRenderer . target . texture ,
@@ -204,8 +207,6 @@ function animate() {
204207 floorPlane . material . roughness = params . floorRoughness ;
205208 floorPlane . material . metalness = params . floorMetalness ;
206209 floorPlane . material . opacity = params . floorOpacity ;
207- ptRenderer . material . bgGradientTop . set ( params . bgGradientTop ) ;
208- ptRenderer . material . bgGradientBottom . set ( params . bgGradientBottom ) ;
209210
210211 if ( ptRenderer . samples < 1.0 || ! params . enable ) {
211212
@@ -371,26 +372,33 @@ function buildGui() {
371372 const backgroundFolder = gui . addFolder ( 'background' ) ;
372373 backgroundFolder . add ( params , 'backgroundType' , [ 'Environment' , 'Gradient' ] ) . onChange ( v => {
373374
374- ptRenderer . material . setDefine ( 'FEATURE_GRADIENT_BG' , Number ( v === 'Gradient' ) ) ;
375375 if ( v === 'Gradient' ) {
376376
377377 scene . background = new Color ( 0x060606 ) ;
378+ ptRenderer . material . backgroundMap = backgroundMap ;
378379
379380 } else {
380381
381382 scene . background = scene . environment ;
383+ ptRenderer . material . backgroundMap = null ;
382384
383385 }
384386
385387 ptRenderer . reset ( ) ;
386388
387389 } ) ;
388- backgroundFolder . addColor ( params , 'bgGradientTop' ) . onChange ( ( ) => {
390+ backgroundFolder . addColor ( params , 'bgGradientTop' ) . onChange ( v => {
391+
392+ backgroundMap . topColor . set ( v ) ;
393+ backgroundMap . update ( ) ;
389394
390395 ptRenderer . reset ( ) ;
391396
392397 } ) ;
393- backgroundFolder . addColor ( params , 'bgGradientBottom' ) . onChange ( ( ) => {
398+ backgroundFolder . addColor ( params , 'bgGradientBottom' ) . onChange ( v => {
399+
400+ backgroundMap . bottomColor . set ( v ) ;
401+ backgroundMap . update ( ) ;
394402
395403 ptRenderer . reset ( ) ;
396404
@@ -706,6 +714,10 @@ async function updateModel() {
706714 params . bgGradientTop = modelInfo . gradientTop || '#111111' ;
707715 params . bgGradientBottom = modelInfo . gradientBot || '#000000' ;
708716
717+ backgroundMap . topColor . set ( params . bgGradientTop ) ;
718+ backgroundMap . bottomColor . set ( params . bgGradientBottom ) ;
719+ backgroundMap . update ( ) ;
720+
709721 buildGui ( ) ;
710722
711723 loadingModel = false ;
0 commit comments