@@ -27678,7 +27678,6 @@ class AScene extends AEntity {
2767827678 }
2767927679 renderer = this.renderer = new THREE.WebGLRenderer(rendererConfig);
2768027680 renderer.setPixelRatio(window.devicePixelRatio);
27681- renderer.sortObjects = false;
2768227681 if (this.camera) {
2768327682 renderer.xr.setPoseTarget(this.camera.el.object3D);
2768427683 }
@@ -30243,7 +30242,7 @@ __webpack_require__(/*! ./core/a-mixin */ "./src/core/a-mixin.js");
3024330242// Extras.
3024430243__webpack_require__(/*! ./extras/components/ */ "./src/extras/components/index.js");
3024530244__webpack_require__(/*! ./extras/primitives/ */ "./src/extras/primitives/index.js");
30246- console.log('A-Frame Version: 1.4.2 (Date 2023-08-01 , Commit #1defeb0c )');
30245+ console.log('A-Frame Version: 1.4.2 (Date 2023-08-11 , Commit #701d404d )');
3024730246console.log('THREE Version (https://github.com/supermedium/three.js):', pkg.dependencies['super-three']);
3024830247console.log('WebVR Polyfill Version:', pkg.dependencies['webvr-polyfill']);
3024930248module.exports = window.AFRAME = {
@@ -32337,7 +32336,7 @@ module.exports.System = registerSystem('renderer', {
3233732336 anisotropy: {
3233832337 default: 1
3233932338 },
32340- sortObjects : {
32339+ sortTransparentObjects : {
3234132340 default: false
3234232341 },
3234332342 colorManagement: {
@@ -32356,7 +32355,6 @@ module.exports.System = registerSystem('renderer', {
3235632355 var toneMappingName = this.data.toneMapping.charAt(0).toUpperCase() + this.data.toneMapping.slice(1);
3235732356 // This is the rendering engine, such as THREE.js so copy over any persistent properties from the rendering system.
3235832357 var renderer = sceneEl.renderer;
32359- renderer.sortObjects = data.sortObjects;
3236032358 renderer.useLegacyLights = !data.physicallyCorrectLights;
3236132359 renderer.toneMapping = THREE[toneMappingName + 'ToneMapping'];
3236232360 THREE.Texture.DEFAULT_ANISOTROPY = data.anisotropy;
@@ -32368,6 +32366,10 @@ module.exports.System = registerSystem('renderer', {
3236832366 if (sceneEl.hasAttribute('logarithmicDepthBuffer')) {
3236932367 warn('Component `logarithmicDepthBuffer` is deprecated. Use `renderer="logarithmicDepthBuffer: true"` instead.');
3237032368 }
32369+
32370+ // These properties are always the same, regardless of rendered oonfiguration
32371+ renderer.sortObjects = true;
32372+ renderer.setOpaqueSort(sortFrontToBack);
3237132373 },
3237232374 update: function () {
3237332375 var data = this.data;
@@ -32377,6 +32379,14 @@ module.exports.System = registerSystem('renderer', {
3237732379 renderer.toneMapping = THREE[toneMappingName + 'ToneMapping'];
3237832380 renderer.toneMappingExposure = data.exposure;
3237932381 renderer.xr.setFoveation(data.foveationLevel);
32382+ if (data.sortObjects) {
32383+ warn('`sortObjects` property is deprecated. Use `renderer="sortTransparentObjects: true"` instead.');
32384+ }
32385+ if (data.sortTransparentObjects) {
32386+ renderer.setTransparentSort(sortBackToFront);
32387+ } else {
32388+ renderer.setTransparentSort(sortRenderOrderOnly);
32389+ }
3238032390 },
3238132391 applyColorCorrection: function (texture) {
3238232392 if (!this.data.colorManagement || !texture) {
@@ -32402,6 +32412,55 @@ module.exports.System = registerSystem('renderer', {
3240232412 }
3240332413});
3240432414
32415+ // Custom A-Frame sort functions.
32416+ // Variations of Three.js default sort orders here:
32417+ // https://github.com/mrdoob/three.js/blob/ebbaecf9acacf259ea9abdcba7b6fb25cfcea2ab/src/renderers/webgl/WebGLRenderLists.js#L1
32418+ // See: https://github.com/aframevr/aframe/issues/5332
32419+
32420+ // Default sort for opaque objects:
32421+ // - respect groupOrder & renderOrder settings
32422+ // - sort front-to-back by z-depth from camera (this should minimize overdraw)
32423+ // - otherwise leave objects in default order (object tree order)
32424+
32425+ function sortFrontToBack(a, b) {
32426+ if (a.groupOrder !== b.groupOrder) {
32427+ return a.groupOrder - b.groupOrder;
32428+ }
32429+ if (a.renderOrder !== b.renderOrder) {
32430+ return a.renderOrder - b.renderOrder;
32431+ }
32432+ return a.z - b.z;
32433+ }
32434+
32435+ // Default sort for transparent objects:
32436+ // - respect groupOrder & renderOrder settings
32437+ // - otherwise leave objects in default order (object tree order)
32438+ function sortRenderOrderOnly(a, b) {
32439+ if (a.groupOrder !== b.groupOrder) {
32440+ return a.groupOrder - b.groupOrder;
32441+ }
32442+ return a.renderOrder - b.renderOrder;
32443+ }
32444+
32445+ // Spatial sort for transparent objects:
32446+ // - respect groupOrder & renderOrder settings
32447+ // - sort back-to-front by z-depth from camera
32448+ // - otherwise leave objects in default order (object tree order)
32449+ function sortBackToFront(a, b) {
32450+ if (a.groupOrder !== b.groupOrder) {
32451+ return a.groupOrder - b.groupOrder;
32452+ }
32453+ if (a.renderOrder !== b.renderOrder) {
32454+ return a.renderOrder - b.renderOrder;
32455+ }
32456+ return b.z - a.z;
32457+ }
32458+
32459+ // exports needed for Unit Tests
32460+ module.exports.sortFrontToBack = sortFrontToBack;
32461+ module.exports.sortRenderOrderOnly = sortRenderOrderOnly;
32462+ module.exports.sortBackToFront = sortBackToFront;
32463+
3240532464/***/ }),
3240632465
3240732466/***/ "./src/systems/shadow.js":
0 commit comments