|
|
@@ -61622,7 +61622,7 @@ const EXTRA_LOD_SIGMA = [ 0.125, 0.215, 0.35, 0.446, 0.526, 0.582 ];
|
|
|
const MAX_SAMPLES = 20;
|
|
|
|
|
|
// GGX VNDF importance sampling configuration
|
|
|
-const GGX_SAMPLES = 2048;
|
|
|
+const GGX_SAMPLES = 512;
|
|
|
|
|
|
const _flatCamera = /*@__PURE__*/ new OrthographicCamera();
|
|
|
const _clearColor = /*@__PURE__*/ new Color();
|
|
|
@@ -61663,16 +61663,17 @@ class PMREMGenerator {
|
|
|
|
|
|
this._lodMax = 0;
|
|
|
this._cubeSize = 0;
|
|
|
- this._lodPlanes = [];
|
|
|
this._sizeLods = [];
|
|
|
this._sigmas = [];
|
|
|
+ this._lodMeshes = [];
|
|
|
+
|
|
|
+ this._backgroundBox = null;
|
|
|
|
|
|
- this._blurMaterial = null;
|
|
|
- this._ggxMaterial = null;
|
|
|
this._cubemapMaterial = null;
|
|
|
this._equirectMaterial = null;
|
|
|
|
|
|
- this._compileMaterial( this._blurMaterial );
|
|
|
+ this._blurMaterial = null;
|
|
|
+ this._ggxMaterial = null;
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -61797,6 +61798,13 @@ class PMREMGenerator {
|
|
|
if ( this._cubemapMaterial !== null ) this._cubemapMaterial.dispose();
|
|
|
if ( this._equirectMaterial !== null ) this._equirectMaterial.dispose();
|
|
|
|
|
|
+ if ( this._backgroundBox !== null ) {
|
|
|
+
|
|
|
+ this._backgroundBox.geometry.dispose();
|
|
|
+ this._backgroundBox.material.dispose();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// private interface
|
|
|
@@ -61815,9 +61823,9 @@ class PMREMGenerator {
|
|
|
|
|
|
if ( this._pingPongRenderTarget !== null ) this._pingPongRenderTarget.dispose();
|
|
|
|
|
|
- for ( let i = 0; i < this._lodPlanes.length; i ++ ) {
|
|
|
+ for ( let i = 0; i < this._lodMeshes.length; i ++ ) {
|
|
|
|
|
|
- this._lodPlanes[ i ].dispose();
|
|
|
+ this._lodMeshes[ i ].geometry.dispose();
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -61889,7 +61897,7 @@ class PMREMGenerator {
|
|
|
this._pingPongRenderTarget = _createRenderTarget( width, height, params );
|
|
|
|
|
|
const { _lodMax } = this;
|
|
|
- ( { sizeLods: this._sizeLods, lodPlanes: this._lodPlanes, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
|
+ ( { lodMeshes: this._lodMeshes, sizeLods: this._sizeLods, sigmas: this._sigmas } = _createPlanes( _lodMax ) );
|
|
|
|
|
|
this._blurMaterial = _getBlurShader( _lodMax, width, height );
|
|
|
|
|
|
@@ -61901,8 +61909,8 @@ class PMREMGenerator {
|
|
|
|
|
|
_compileMaterial( material ) {
|
|
|
|
|
|
- const tmpMesh = new Mesh( this._lodPlanes[ 0 ], material );
|
|
|
- this._renderer.compile( tmpMesh, _flatCamera );
|
|
|
+ const mesh = new Mesh( new BufferGeometry(), material );
|
|
|
+ this._renderer.compile( mesh, _flatCamera );
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -61933,16 +61941,25 @@ class PMREMGenerator {
|
|
|
|
|
|
}
|
|
|
|
|
|
- const backgroundMaterial = new MeshBasicMaterial( {
|
|
|
- name: 'PMREM.Background',
|
|
|
- side: BackSide,
|
|
|
- depthWrite: false,
|
|
|
- depthTest: false,
|
|
|
- } );
|
|
|
+ if ( this._backgroundBox === null ) {
|
|
|
|
|
|
- const backgroundBox = new Mesh( new BoxGeometry(), backgroundMaterial );
|
|
|
+ this._backgroundBox = new Mesh(
|
|
|
+ new BoxGeometry(),
|
|
|
+ new MeshBasicMaterial( {
|
|
|
+ name: 'PMREM.Background',
|
|
|
+ side: BackSide,
|
|
|
+ depthWrite: false,
|
|
|
+ depthTest: false,
|
|
|
+ } )
|
|
|
+ );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ const backgroundBox = this._backgroundBox;
|
|
|
+ const backgroundMaterial = backgroundBox.material;
|
|
|
|
|
|
let useSolidColor = false;
|
|
|
+
|
|
|
const background = scene.background;
|
|
|
|
|
|
if ( background ) {
|
|
|
@@ -62003,9 +62020,6 @@ class PMREMGenerator {
|
|
|
|
|
|
}
|
|
|
|
|
|
- backgroundBox.geometry.dispose();
|
|
|
- backgroundBox.material.dispose();
|
|
|
-
|
|
|
renderer.toneMapping = toneMapping;
|
|
|
renderer.autoClear = originalAutoClear;
|
|
|
scene.background = background;
|
|
|
@@ -62039,7 +62053,9 @@ class PMREMGenerator {
|
|
|
}
|
|
|
|
|
|
const material = isCubeTexture ? this._cubemapMaterial : this._equirectMaterial;
|
|
|
- const mesh = new Mesh( this._lodPlanes[ 0 ], material );
|
|
|
+
|
|
|
+ const mesh = this._lodMeshes[ 0 ];
|
|
|
+ mesh.material = material;
|
|
|
|
|
|
const uniforms = material.uniforms;
|
|
|
|
|
|
@@ -62059,7 +62075,8 @@ class PMREMGenerator {
|
|
|
const renderer = this._renderer;
|
|
|
const autoClear = renderer.autoClear;
|
|
|
renderer.autoClear = false;
|
|
|
- const n = this._lodPlanes.length;
|
|
|
+
|
|
|
+ const n = this._lodMeshes.length;
|
|
|
|
|
|
// Use GGX VNDF importance sampling
|
|
|
for ( let i = 1; i < n; i ++ ) {
|
|
|
@@ -62097,12 +62114,14 @@ class PMREMGenerator {
|
|
|
}
|
|
|
|
|
|
const ggxMaterial = this._ggxMaterial;
|
|
|
- const ggxMesh = new Mesh( this._lodPlanes[ lodOut ], ggxMaterial );
|
|
|
+ const ggxMesh = this._lodMeshes[ lodOut ];
|
|
|
+ ggxMesh.material = ggxMaterial;
|
|
|
+
|
|
|
const ggxUniforms = ggxMaterial.uniforms;
|
|
|
|
|
|
// Calculate incremental roughness between LOD levels
|
|
|
- const targetRoughness = lodOut / ( this._lodPlanes.length - 1 );
|
|
|
- const sourceRoughness = lodIn / ( this._lodPlanes.length - 1 );
|
|
|
+ const targetRoughness = lodOut / ( this._lodMeshes.length - 1 );
|
|
|
+ const sourceRoughness = lodIn / ( this._lodMeshes.length - 1 );
|
|
|
const incrementalRoughness = Math.sqrt( targetRoughness * targetRoughness - sourceRoughness * sourceRoughness );
|
|
|
|
|
|
// Apply blur strength mapping for better quality across the roughness range
|
|
|
@@ -62190,7 +62209,9 @@ class PMREMGenerator {
|
|
|
// Number of standard deviations at which to cut off the discrete approximation.
|
|
|
const STANDARD_DEVIATIONS = 3;
|
|
|
|
|
|
- const blurMesh = new Mesh( this._lodPlanes[ lodOut ], blurMaterial );
|
|
|
+ const blurMesh = this._lodMeshes[ lodOut ];
|
|
|
+ blurMesh.material = blurMaterial;
|
|
|
+
|
|
|
const blurUniforms = blurMaterial.uniforms;
|
|
|
|
|
|
const pixels = this._sizeLods[ lodIn ] - 1;
|
|
|
@@ -62264,9 +62285,9 @@ class PMREMGenerator {
|
|
|
|
|
|
function _createPlanes( lodMax ) {
|
|
|
|
|
|
- const lodPlanes = [];
|
|
|
const sizeLods = [];
|
|
|
const sigmas = [];
|
|
|
+ const lodMeshes = [];
|
|
|
|
|
|
let lod = lodMax;
|
|
|
|
|
|
@@ -62328,7 +62349,7 @@ function _createPlanes( lodMax ) {
|
|
|
planes.setAttribute( 'position', new BufferAttribute( position, positionSize ) );
|
|
|
planes.setAttribute( 'uv', new BufferAttribute( uv, uvSize ) );
|
|
|
planes.setAttribute( 'faceIndex', new BufferAttribute( faceIndex, faceIndexSize ) );
|
|
|
- lodPlanes.push( planes );
|
|
|
+ lodMeshes.push( new Mesh( planes, null ) );
|
|
|
|
|
|
if ( lod > LOD_MIN ) {
|
|
|
|
|
|
@@ -62338,7 +62359,7 @@ function _createPlanes( lodMax ) {
|
|
|
|
|
|
}
|
|
|
|
|
|
- return { lodPlanes, sizeLods, sigmas };
|
|
|
+ return { lodMeshes, sizeLods, sigmas };
|
|
|
|
|
|
}
|
|
|
|