@babylonjs/viewer 7.36.0 → 7.37.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/managers/sceneManager.js
CHANGED
|
@@ -1258,10 +1258,10 @@ var SceneManager = /** @class */ (function () {
|
|
|
1258
1258
|
this._shadowGeneratorBias = 0.001;
|
|
1259
1259
|
}
|
|
1260
1260
|
else {
|
|
1261
|
-
this._defaultHighpTextureType = Constants.
|
|
1261
|
+
this._defaultHighpTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;
|
|
1262
1262
|
this._shadowGeneratorBias = 0.001;
|
|
1263
1263
|
}
|
|
1264
|
-
this._defaultPipelineTextureType = this._hdrSupport ? this._defaultHighpTextureType : Constants.
|
|
1264
|
+
this._defaultPipelineTextureType = this._hdrSupport ? this._defaultHighpTextureType : Constants.TEXTURETYPE_UNSIGNED_BYTE;
|
|
1265
1265
|
};
|
|
1266
1266
|
/**
|
|
1267
1267
|
* Dispose the entire viewer including the scene and the engine
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sceneManager.js","sourceRoot":"","sources":["../../../../tools/viewer/src/managers/sceneManager.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAErE,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,qBAAqB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AAIrE,OAAO,EAAE,UAAU,EAAE,2CAA6B;AAClD,OAAO,EAAE,cAAc,EAAE,qBAAqB,EAAE,+CAAiC;AACjF,OAAO,EAAE,eAAe,EAAE,mDAAqC;AAC/D,OAAO,EAAE,KAAK,EAAE,wCAA0B;AAE1C,OAAO,EAAE,iBAAiB,EAAE,qDAAuC;AAEnE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,sCAAwB;AAE5E,OAAO,EAAE,wBAAwB,EAAE,2FAA6E;AAEhH,OAAO,EAAE,SAAS,EAAE,4CAA8B;AAClD,OAAO,EAAE,2BAA2B,EAAE,kEAAoD;AAC1F,OAAO,EAAE,mBAAmB,EAAE,kEAAoD;AAClF,OAAO,EAAE,WAAW,EAAE,qDAAuC;AAE7D,OAAO,EAAE,WAAW,EAAE,8CAAgC;AACtD,OAAO,EAAE,WAAW,EAAE,0DAA4C;AAElE,OAAO,EAAE,gBAAgB,EAAE,mDAAqC;AAChE,OAAO,EAAE,MAAM,EAAE,6CAA+B;AAIhD,OAAO,EAAE,WAAW,EAAE,wDAA0C;AAChE,OAAO,EAAE,IAAI,EAAE,qCAAuB;AAGtC,OAAO,EAAE,KAAK,EAAE,iCAAmB;AACnC,OAAO,EAAE,eAAe,EAAE,0DAA4C;AACtE,OAAO,EAAE,SAAS,EAAE,6CAA+B;AACnD,sDAAwC;AACxC,iDAAmC;AACnC,uDAAyC;AAczC;IAiGI,sBACY,OAAe,EACf,uBAA+C,EAC/C,mBAAwC;QAHpD,iBAsFC;QArFW,YAAO,GAAP,OAAO,CAAQ;QACf,4BAAuB,GAAvB,uBAAuB,CAAwB;QAC/C,wBAAmB,GAAnB,mBAAmB,CAAqB;QA3BnC,WAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QAEjC,uBAAkB,GAAY,KAAK,CAAC;QA4IpC,oBAAe,GAAY,IAAI,CAAC;QAqChC,mBAAc,GAAY,IAAI,CAAC;QAkB/B,yBAAoB,GAAG,IAAI,CAAC;QAyB5B,qCAAgC,GAAY,KAAK,CAAC;QA+FlD,yBAAoB,GAAwB,EAAE,CAAC;QAqF/C,yCAAoC,GAAY,IAAI,CAAC;QAyC7D,kCAAkC;QAC1B,kBAAa,GAAY,KAAK,CAAC;QAoBvC,kCAAkC;QAC1B,iBAAY,GAAY,KAAK,CAAC;QA8X9B,kBAAa,GAAG,UAAC,KAAkB;YACvC,IAAM,YAAY,GAAG,KAAK,CAAC,QAAQ,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC;YACtE,IAAM,OAAO,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;YAC5D,IAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACvC,IAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;YACjD,KAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;YAC9B,KAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,KAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,KAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACtH,KAAI,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,KAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,KAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC;YACnH,KAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,KAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,KAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC;YAEzH,IAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAChC,KAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,mBAAmB,GAAG,CAAC,CAAC;YAC3D,CAAC;YAED,IAAI,KAAI,CAAC,uBAAuB,CAAC,aAAa,EAAE,CAAC;gBAC7C,KAAI,CAAC,qBAAqB,CAAC,KAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,MAAM,EAAE,KAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;YACrI,CAAC;YACD;;;iBAGK;QACT,CAAC,CAAC;QA2gBM,2BAAsB,GAA+B,EAAE,CAAC;QAn1C5D,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;QAEjB,IAAI,CAAC,4BAA4B,GAAG,IAAI,UAAU,EAAE,CAAC;QACrD,IAAI,CAAC,4BAA4B,GAAG,IAAI,UAAU,EAAE,CAAC;QACrD,IAAI,CAAC,4BAA4B,GAAG,IAAI,UAAU,EAAE,CAAC;QACrD,IAAI,CAAC,2BAA2B,GAAG,IAAI,UAAU,EAAE,CAAC;QACpD,IAAI,CAAC,qBAAqB,GAAG,IAAI,UAAU,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAC7D,IAAI,CAAC,oCAAoC,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7D,IAAI,CAAC,iCAAiC,GAAG,IAAI,UAAU,EAAE,CAAC;QAC1D,IAAI,CAAC,wBAAwB,GAAG,IAAI,UAAU,EAAE,CAAC;QAEjD,iDAAiD;QACjD,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAClC,KAAK;QAEL,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,UAAC,KAAK;YACjC,KAAI,CAAC,KAAK,CAAC,2BAA2B,GAAG,KAAI,CAAC,KAAK,CAAC,2BAA2B,IAAI,IAAI,2BAA2B,EAAE,CAAC;YAErH,KAAI,CAAC,IAAI,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC;YAElC,IAAM,aAAa,GAAG;gBAClB,KAAoB,UAAiB,EAAjB,KAAA,KAAI,CAAC,KAAK,CAAC,MAAM,EAAjB,cAAiB,EAAjB,IAAiB,EAAE,CAAC;oBAAnC,IAAM,KAAK,SAAA;oBACZ,IAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;oBAC/C,IAAI,UAAU,EAAE,CAAC;wBACb,iCAAiC;wBACjC,IAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;wBACrC,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;4BACvE,IAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;4BAC5B,IAAM,SAAS,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;4BAC3C,IAAI,SAAS,EAAE,CAAC;gCACZ,SAAS,CAAC,WAAW,GAAG,mBAAmB,CAAC,uBAAuB,CAAC;4BACxE,CAAC;wBACL,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC,CAAC;YACF,KAAK,CAAC,oBAAoB,CAAC;gBACvB,IAAI,KAAI,CAAC,kBAAkB,IAAI,CAAC,KAAK,CAAC,WAAW,IAAI,KAAK,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;oBACjF,kCAAkC;oBAClC,aAAa,EAAE,CAAC;oBAChB,KAAI,CAAC,kBAAkB,GAAG,KAAK,CAAC;gBACpC,CAAC;qBAAM,IACH,CAAC,KAAI,CAAC,MAAM,CAAC,KAAK,CAAC,UAAC,KAAK;oBACrB,IAAI,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC;wBAClC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC;wBACtC,OAAO,KAAK,CAAC;oBACjB,CAAC;oBACD,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC,QAAQ,IAAI,CAAC,KAAK,CAAC,gBAAgB,CAAC;gBAC1E,CAAC,CAAC,EACJ,CAAC;oBACC,aAAa,EAAE,CAAC;gBACpB,CAAC;YACL,CAAC,CAAC,CAAC;YACH,OAAO,KAAI,CAAC,mBAAmB,IAAI,KAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,KAAI,CAAC,KAAK,CAAC,CAAC;QAC7H,CAAC,CAAC,CAAC;QACH,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3B,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAC,KAAK;gBACvD,KAAoB,UAAiB,EAAjB,KAAA,KAAI,CAAC,KAAK,CAAC,MAAM,EAAjB,cAAiB,EAAjB,IAAiB,EAAE,CAAC;oBAAnC,IAAM,KAAK,SAAA;oBACZ,IAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;oBAC/C,IAAI,UAAU,EAAE,CAAC;wBACb,iCAAiC;wBACjC,IAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;wBACrC,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;4BACvE,IAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;4BAC5B,IAAM,SAAS,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;4BAC3C,IAAI,SAAS,EAAE,CAAC;gCACZ,SAAS,CAAC,WAAW,GAAG,mBAAmB,CAAC,uBAAuB,CAAC;4BACxE,CAAC;wBACL,CAAC;oBACL,CAAC;gBACL,CAAC;gBACD,KAAI,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,GAAG,CAAC,UAAC,KAAK;gBACtD,KAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5B,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,mBAAmB,CAAC,wBAAwB,CAAC,GAAG,CAAC,UAAC,KAAK;gBACxD,KAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAI,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAhGD,sBAAW,kDAAwB;aAAnC;YACI,OAAO,IAAI,CAAC,yBAAyB,CAAC;QAC1C,CAAC;;;OAAA;IAID,sBAAW,kCAAQ;aAAnB;YACI,OAAO,IAAI,CAAC,SAAS,CAAC;QAC1B,CAAC;;;OAAA;IA6FD,sBAAW,wCAAc;QAHzB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,WAAW,CAAC;QAC5B,CAAC;;;OAAA;IAKD,sBAAW,mCAAS;QAHpB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,uBAAuB,CAAC,SAAS,CAAC;QAClD,CAAC;;;OAAA;IAED,sBAAW,yCAAe;aAA1B;YACI,OAAO,IAAI,CAAC,uBAAuB,CAAC,eAAe,CAAC;QACxD,CAAC;;;OAAA;IAED,sBAAW,kDAAwB;aAAnC;YACI,OAAO,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,2BAA4B,CAAC,cAAc,CAAC;QAChF,CAAC;aAED,UAAoC,KAAc;YAC9C,IAAI,CAAC,KAAK,CAAC,2BAA4B,CAAC,cAAc,GAAG,KAAK,CAAC;QACnE,CAAC;;;OAJA;IAMD,sBAAW,4CAAkB;aAA7B;YACI,OAAO,IAAI,CAAC,mBAAmB,CAAC;QACpC,CAAC;;;OAAA;IAOD,sBAAW,wCAAc;QAHzB;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,eAAe,CAAC;QAChC,CAAC;QAED;;;;;;WAMG;aACH,UAA0B,OAAgB;YACtC,IAAM,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC,mBAAmB,CAAC,+BAA+B,CAAC,CAAC,CAAC,mBAAmB,CAAC,uBAAuB,CAAC;YAEhI,KAAoB,UAAiB,EAAjB,KAAA,IAAI,CAAC,KAAK,CAAC,MAAM,EAAjB,cAAiB,EAAjB,IAAiB,EAAE,CAAC;gBAAnC,IAAM,KAAK,SAAA;gBACZ,IAAM,UAAU,GAAG,KAAK,CAAC,mBAAmB,EAAE,CAAC;gBAE/C,IAAI,UAAU,EAAE,CAAC;oBACb,IAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC;oBACrC,KAAK,IAAI,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI,KAAK,IAAI,EAAE,GAAG,GAAG,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC;wBACvE,IAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC;wBAC5B,IAAM,SAAS,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;wBAC3C,IAAI,SAAS,EAAE,CAAC;4BACZ,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC;wBACxC,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,CAAC,eAAe,GAAG,OAAO,CAAC;QACnC,CAAC;;;OA5BA;IAgCD,sBAAW,uCAAa;aAAxB;YACI,OAAO,IAAI,CAAC,cAAc,CAAC;QAC/B,CAAC;aAED,UAAyB,QAAiB;YACtC,IAAI,QAAQ,KAAK,IAAI,CAAC,cAAc,EAAE,CAAC;gBACnC,OAAO;YACX,CAAC;YAED,IAAI,CAAC,cAAc,GAAG,QAAQ,CAAC;YAE/B,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;gBAC1D,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;YAClE,CAAC;QACL,CAAC;;;OAZA;IAkBD,sBAAW,6CAAmB;QAH9B;;WAEG;aACH;YACI,OAAO,IAAI,CAAC,oBAAoB,CAAC;QACrC,CAAC;QACD;;WAEG;aACH,UAA+B,KAAc;YACzC,IAAI,IAAI,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;gBACtC,OAAO;YACX,CAAC;YAED,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;YAClC,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;gBACzG,IAAI,CAAC,KAAK,EAAE,CAAC;oBACT,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,GAAG,IAAI,CAAC;gBACnE,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC;gBAClG,CAAC;YACL,CAAC;QACL,CAAC;;;OAjBA;IAqBD,sBAAW,yDAA+B;aAA1C;YACI,OAAO,IAAI,CAAC,gCAAgC,CAAC;QACjD,CAAC;aAED,UAA2C,KAAc;YACrD,IAAI,KAAK,KAAK,IAAI,CAAC,gCAAgC,EAAE,CAAC;gBAClD,OAAO;YACX,CAAC;YAED,IAAI,CAAC,gCAAgC,GAAG,KAAK,CAAC;YAC9C,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACjC,IAAI,CAAC,oCAAoC,GAAG,KAAK,CAAC;gBAClD,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACtE,CAAC;QACL,CAAC;;;OAdA;IAgBD;;;OAGG;IACI,4CAAqB,GAA5B;QACI,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC;QAChC,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC;QAClC,IAAI,CAAC,KAAK,CAAC,iBAAiB,GAAG,IAAI,CAAC;QACpC,IAAI,CAAC,KAAK,CAAC,yBAAyB,GAAG,IAAI,CAAC;QAC5C,IAAI,CAAC,KAAK,CAAC,oBAAoB,GAAG,IAAI,CAAC;QACvC,IAAI,CAAC,KAAK,CAAC,cAAc,GAAG,IAAI,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC;QACnC,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACI,gCAAS,GAAhB,UAAiB,kBAA4C;QAA5C,mCAAA,EAAA,uBAA4C;QACzD,mCAAmC;QACnC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;QAED,qBAAqB;QACrB,IAAI,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAErC,IAAI,CAAC,uBAAuB,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEhD,6BAA6B;QAC7B,IAAI,CAAC,kBAAkB,CAAC,eAAe,EAAE,CAAC;YACtC,IAAM,eAAe,GAAG,IAAI,WAAW,CAAC,iBAAiB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACvE,eAAe,CAAC,iBAAiB,GAAG,IAAI,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;YAC9D,eAAe,CAAC,YAAY,GAAG,GAAG,CAAC;YAEnC,IAAI,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;gBAC7B,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,EAAE,CAAC;YACzC,CAAC;YAED,IAAI,CAAC,KAAK,CAAC,eAAe,GAAG,eAAe,CAAC;QACjD,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,2BAA2B,GAAG,IAAI,2BAA2B,EAAE,CAAC;QAE3E,SAAS,CAAC,0BAA0B,GAAG,IAAI,CAAC;QAE5C;;;;;;;;WAQG;QAEH,OAAO,IAAI,CAAC,qBAAqB,CAAC,0BAA0B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7E,CAAC;IAEM,iCAAU,GAAjB,UAAkB,WAA2B,EAAE,WAA4B;QAAzD,4BAAA,EAAA,kBAA2B;QAAE,4BAAA,EAAA,mBAA4B;QACvE,IAAI,WAAW,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,EAAE,EAAX,CAAW,CAAC,CAAC;YACxC,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,WAAW,EAAE,CAAC;YACd,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,CAAC,IAAK,OAAA,CAAC,CAAC,OAAO,EAAE,EAAX,CAAW,CAAC,CAAC;QAClD,CAAC;IACL,CAAC;IAID;;;OAGG;IACI,0CAAmB,GAA1B,UAA2B,gBAA8C;QAAzE,iBA6EC;QA5EG,IAAI,IAAI,CAAC,uBAAuB,EAAE,CAAC;YAC/B,IAAI,CAAC,oBAAoB,GAAG,IAAI,CAAC,uBAAuB,CAAC,aAAa,CAAC;QAC3E,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,oBAAoB,GAAG,gBAAgB,CAAC;QACjD,CAAC;QAED,6BAA6B;QAC7B,IAAI,gBAAgB,CAAC,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,eAAe,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,YAAY;QACZ,IAAI,gBAAgB,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YAC3C,IAAI,CAAC,mBAAmB,CAAC,gBAAgB,CAAC,SAAS,CAAC,CAAC;QACzD,CAAC;QAED,kBAAkB;QAClB;;WAEG;QAEH,SAAS;QACT,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAE/C,cAAc;QACd,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS,IAAI,gBAAgB,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjF,IAAI,CAAC,qBAAqB,CAAC,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,CAAC,MAAM,CAAC,CAAC;QACjF,CAAC;QAED,SAAS;QACT,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC;QAE/C,IAAI,gBAAgB,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YAChD,IAAI,CAAC,wBAAwB,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC;QACnE,CAAC;QAED,IAAI,gBAAgB,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YACpC,IAAI,CAAC,YAAY,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,gBAAgB,CAAC,GAAG,EAAE,CAAC;YACvB,sBAAsB;YACtB,IAAI,gBAAgB,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC;gBACjD,IAAM,cAAc,GAAG,gBAAgB,CAAC,GAAG,CAAC,yBAAyB,CAAC;gBACtE,IAAI,OAAO,cAAc,KAAK,SAAS,EAAE,CAAC;oBACtC,IAAI,CAAC,+BAA+B,GAAG,cAAc,CAAC;gBAC1D,CAAC;qBAAM,CAAC;oBACJ,IAAI,CAAC,+BAA+B,GAAG,IAAI,CAAC;gBAChD,CAAC;YACL,CAAC;YAED,IAAI,IAAI,CAAC,iBAAiB,IAAI,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC;gBACtE,IAAM,SAAS,GAAG,IAAI,MAAM,CAAC,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,EAAE,gBAAgB,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;gBACpK,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;YACnD,CAAC;YAED,IAAI,gBAAgB,CAAC,GAAG,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;gBACzD,2CAA2C;gBAC3C,IAAI,CAAC,KAAK,CAAC,MAAM;qBACZ,MAAM,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,YAAY,WAAW,EAA5B,CAA4B,CAAC;qBAC/C,OAAO,CAAC,UAAC,KAAK;oBACX,iEAAiE;oBACjE,KAAI,CAAC,IAAI,CAAC,iBAAiB,CAAc,KAAK,EAAE,gBAAgB,CAAC,GAAI,CAAC,mBAAoB,CAAC,CAAC;gBAChG,CAAC,CAAC,CAAC;gBACP,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACnC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,yBAAyB,IAAI,IAAI,CAAC,yBAAyB,CAAC,eAAe,EAAE,CAAC;YACnF,IAAI,CAAC,yBAAyB,CAAC,eAAe,CAAC,eAAe,GAAG,IAAI,CAAC;QAC1E,CAAC;QAED,IAAI,IAAI,CAAC,oCAAoC,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YAC9E,IAAI,CAAC,oCAAoC,GAAG,KAAK,CAAC;YAClD,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,CAAC;QAC7C,CAAC;IACL,CAAC;IAIO,4CAAqB,GAA7B,UAA8B,aAAsD;QAChF,IAAI,CAAC,IAAI,CAAC,gCAAgC,IAAI,CAAC,mBAAmB,CAAC,8CAA8C,EAAE,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC;YAC5I,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACjC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,CAAC,yBAAyB,GAAG,IAAI,CAAC;gBACtC,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,IAAI,CAAC;gBAC3C,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,kBAAkB,GAAG,KAAK,CAAC;YACvE,CAAC;YAED,OAAO;QACX,CAAC;QAED,IAAM,cAAc,GAAG,aAAa,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,GAAG,IAAI,IAAI,CAAC,oBAAoB,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;QACnI,IAAI,cAAc,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBAClC,kFAAkF;gBAClF,IAAI,CAAC,yBAAyB,GAAG,IAAI,wBAAwB,CAAC,4BAA4B,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC;YACpJ,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,wBAAwB,GAAG,KAAK,CAAC;YAC5C,IAAI,CAAC,oCAAoC,GAAG,IAAI,CAAC;YAEjD,IAAI,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC;YAEtC,IAAI,OAAO,cAAc,KAAK,SAAS,EAAE,CAAC;gBACtC,qBAAqB,CAAC,IAAI,CAAC,yBAAyB,EAAE,cAAc,CAAC,CAAC;gBACtE,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC,cAAc,CAAC,YAAY,CAAC;gBACnD,IAAI,CAAC,YAAY,GAAG,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC;gBACjD,YAAY,GAAG,IAAI,CAAC,aAAa,IAAI,cAAc,CAAC,WAAW,KAAK,SAAS,IAAI,cAAc,CAAC,WAAW,GAAG,CAAC,CAAC;gBAEhH,IAAI,CAAC,yBAAyB,CAAC,WAAW,GAAG,CAAC,cAAc,CAAC,WAAW,KAAK,SAAS,IAAI,cAAc,CAAC,WAAW,CAAC,IAAI,IAAI,CAAC,yBAAyB,CAAC,WAAW,CAAC;YACxK,CAAC;YAED,IAAI,CAAC,yBAAyB,CAAC,YAAY,GAAG,YAAY,CAAC;YAC3D,IAAI,CAAC,yBAAyB,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QAClE,CAAC;IACL,CAAC;IAKD,sBAAW,sCAAY;aAAvB;YACI,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;aAED,UAAwB,KAAc;YAClC,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,EAAE,CAAC;gBAC/B,OAAO;YACX,CAAC;YAED,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC;YAC3B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACjC,IAAI,CAAC,oCAAoC,GAAG,KAAK,CAAC;gBAClD,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACtE,CAAC;QACL,CAAC;;;OAdA;IAmBD,sBAAW,qCAAW;aAAtB;YACI,OAAO,IAAI,CAAC,YAAY,CAAC;QAC7B,CAAC;aAED,UAAuB,KAAc;YACjC,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,EAAE,CAAC;gBAC9B,OAAO;YACX,CAAC;YAED,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;YAC1B,IAAI,CAAC,qBAAqB,EAAE,CAAC;YAC7B,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;gBACjC,IAAI,CAAC,oCAAoC,GAAG,KAAK,CAAC;gBAClD,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,CAAC;gBACzC,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACtE,CAAC;QACL,CAAC;;;OAdA;IAgBD,6DAA6D;IACtD,yCAAkB,GAAzB,UAA0B,WAAgC,IAAG,CAAC;IAE9D;;;;OAIG;IACO,sCAAe,GAAzB,UAA0B,WAAgC;QACtD,gBAAgB;QAChB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QAED,IAAM,EAAE,GAAG,WAAW,CAAC,UAAU,CAAC;QAClC,IAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC;QACpC,IAAI,EAAE,EAAE,CAAC;YACL,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrB,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrB,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrB,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACnB,CAAC;YACD,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrB,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACnB,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,aAAa,EAAE,CAAC;YAC5B,IAAI,CAAC,cAAc,GAAG,WAAW,CAAC,aAAa,CAAC;QACpD,CAAC;QAED,6CAA6C;QAC7C,IAAI,WAAW,CAAC,4BAA4B,EAAE,CAAC;YAC3C,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,4BAA4B,EAAE,WAAW,CAAC,4BAA4B,CAAC,CAAC;QAC7G,CAAC;QACD,+BAA+B;QAC/B,IAAI,WAAW,CAAC,2BAA2B,EAAE,CAAC;YAC1C,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,2BAA2B,EAAE,WAAW,CAAC,2BAA2B,CAAC,CAAC;QAC3G,CAAC;QACD,IAAI,WAAW,CAAC,kBAAkB,EAAE,CAAC;YACjC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAkB,IAAI,CAAC,KAAK,CAAC,kBAAmB,CAAC,GAAG,KAAK,WAAW,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAC1H,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;oBACzE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAC5C,CAAC;gBACD,IAAM,kBAAkB,GAAG,WAAW,CAAC,yBAAyB,CAAC,WAAW,CAAC,kBAAkB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC7G,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;YACvD,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;YAC7B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;QACjC,CAAC;aAAM,IAAI,WAAW,CAAC,KAAK,KAAK,KAAK,EAAE,CAAC;YACrC,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;gBACpC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;YACjC,CAAC;QACL,CAAC;QAED,IAAI,WAAW,CAAC,UAAU,EAAE,CAAC;YACzB,IAAI,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC;QAC1C,CAAC;QAED,IAAI,WAAW,CAAC,kBAAkB,KAAK,SAAS,EAAE,CAAC;YAC/C,IAAI,CAAC,OAAO,CAAC,sBAAsB,GAAG,CAAC,CAAC,WAAW,CAAC,kBAAkB,CAAC;QAC3E,CAAC;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC;QAE9C,IAAI,MAAM,EAAE,CAAC;YACT,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,oBAAoB,EAAE,CAAC;gBAClD,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAChC,CAAC;iBAAM,IAAI,IAAI,CAAC,MAAM,IAAI,WAAW,CAAC,oBAAoB,KAAK,KAAK,EAAE,CAAC;gBACnE,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YAChC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,CAAC;QAErC,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;YACpB,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,CAAC,2BAA2B,CAAC,eAAe,CAAC;YAC7C,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI,CAAC,KAAK;YAClB,gBAAgB,EAAE,WAAW;SAChC,CAAC,CAAC;IACP,CAAC;IAED;;;;OAIG;IACO,0CAAmB,GAA7B,UAA8B,eAAuD;QAArF,iBAqDC;QApDG,IAAI,OAAO,eAAe,KAAK,SAAS,EAAE,CAAC;YACvC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC3B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC9B,OAAO,IAAI,CAAC,cAAc,CAAC;YAC/B,CAAC;YACD,IAAI,eAAe,EAAE,CAAC;gBAClB,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACrD,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;YAChC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,gBAAgB,GAA0B,IAAI,qBAAqB,CAAC,eAAe,CAAC,eAAe,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;YAC1I,wBAAwB;YACxB,IAAI,eAAe,CAAC,WAAW,EAAE,CAAC;gBAC9B,QAAQ,eAAe,CAAC,WAAW,EAAE,CAAC;oBAClC,KAAK,KAAK;wBACN,gBAAgB,GAAG,qBAAqB,CAAC,qBAAqB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;wBAChG,MAAM;oBACV,KAAK,UAAU;wBACX,gBAAgB,GAAG,qBAAqB,CAAC,0BAA0B,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;wBACrG,MAAM;oBACV,KAAK,OAAO;wBACR,gBAAgB,GAAG,qBAAqB,CAAC,sBAAsB,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;wBACjG,MAAM;gBACd,CAAC;YACL,CAAC;YACD,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACtB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;gBAC3B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;YAClC,CAAC;YACD,IAAI,eAAe,CAAC,MAAM,EAAE,CAAC;gBACzB,IAAM,iBAAe,GAAG,wBAAwB,CAAC,eAAe,CAAC,MAAM,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;gBAC1G,IAAI,iBAAe,EAAE,CAAC;oBAClB,gBAAgB,CAAC,qBAAqB,CAClC;wBACI,OAAO,iBAAe,CAAC,KAAI,CAAC,CAAC;oBACjC,CAAC,EACD;wBACI,OAAO,yBAAkB,eAAe,CAAC,MAAM,yBAAsB,CAAC;oBAC1E,CAAC,CACJ,CAAC;gBACN,CAAC;YACL,CAAC;YACD,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,eAAe,CAAC,sBAAsB,EAAE,eAAe,CAAC,eAAe,CAAC,CAAC;YAChJ,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,CAAC;QAChC,CAAC;QAED,IAAI,CAAC,oCAAoC,CAAC,eAAe,CAAC;YACtD,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI,CAAC,cAAe;YAC5B,gBAAgB,EAAE,eAAe;SACpC,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACH;;;;;;;;;;OAUG;IAEO,mCAAY,GAAtB,UAAuB,QAA0B;QAAjD,iBA6CC;QA5CG,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YACpB,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;gBACjB,IAAI,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,CAAC;oBAC5B,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;gBAC5B,CAAC;gBACD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;YAC/B,CAAC;YACD,OAAO;QACX,CAAC;QACD,IAAM,SAAS,GAA8B,SAAS,CAClD;YACI,iBAAiB,EAAE,IAAI;YACvB,6BAA6B,EAAE,KAAK;YACpC,aAAa,EAAE,IAAI;SACtB,EACD,QAAQ,CAAC,SAAS,IAAI,EAAE,CAC3B,CAAC;QAEF,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,yBAAyB,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,QAAQ,CAAC,mBAAmB,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,kBAAkB,EAAE,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,oBAAoB,EAAE,CAAC;YACjC,IAAM,aAAa,GAAG,QAAQ,CAAC,qBAAqB,IAAI,iBAAiB,CAAC;YAC1E,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC;gBAC/B,aAAa,eAAA;aAChB,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,GAAG,CAAC;YACtC,IAAI,KAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,KAAI,CAAC,mBAAmB,CAAC,sBAAsB,CAAC,eAAe,CAAC,KAAI,CAAC,CAAC;YAC1E,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,qBAAqB,CAAC,GAAG,CAAC;YACrC,IAAI,KAAI,CAAC,mBAAmB,EAAE,CAAC;gBAC3B,KAAI,CAAC,mBAAmB,CAAC,qBAAqB,CAAC,eAAe,CAAC,KAAI,CAAC,CAAC;YACzE,CAAC;QACL,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,wBAAwB,CAAC,eAAe,CAAC;YAC1C,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI,CAAC,SAAS;YACtB,gBAAgB,EAAE,QAAQ;SAC7B,CAAC,CAAC;IACP,CAAC;IAES,+CAAwB,GAAlC,UAAmC,2BAAyD;QACxF,IAAI,2BAA2B,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,CAAC,KAAK,CAAC,kBAAkB,GAAG,IAAI,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,2BAA2B,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACxH,CAAC;QAED,cAAc;QACd,IAAI,IAAI,CAAC,KAAK,CAAC,kBAAkB,EAAE,CAAC;YAChC,IAAM,qBAAqB,GAAG,UAAU,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,2BAA2B,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;YAC1G,MAAM,CAAC,mBAAmB,CAAC,qBAAqB,EAAE,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,0BAA0B,EAAE,CAAC,CAAC;QAClH,CAAC;QAED,6BAA6B;QAC7B,IAAI,2BAA2B,CAAC,SAAS,EAAE,CAAC;YACxC,IAAI,CAAC,uBAAuB,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1E,IAAM,EAAE,GAAG,2BAA2B,CAAC,SAAS,CAAC;YACjD,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;YACD,IAAI,EAAE,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;gBACrB,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC5B,CAAC;YAED,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAE9C,IAAM,eAAe,GAAG,mBAAmB,CAAC,0BAA0B,EAAE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAC;YAExG,mBAAmB;YACnB,IAAI,CAAC,eAAe,CAAC,kBAAkB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YAC9D,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;YAC5G,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,eAAe,EAAE,eAAe,CAAC,CAAC;YAClF,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;YAEzC,mCAAmC;YACnC,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC;oBACxC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC5E,CAAC;gBAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,CAAC;oBACxC,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC5E,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;OAGG;IACO,uCAAgB,GAA1B,UAA2B,YAAuC;QAAlE,iBA2FC;QA3F0B,6BAAA,EAAA,iBAAuC;QAC9D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;YAC3B,uDAAuD;YACvD,2CAA2C;YAC3C,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,YAAgC,CAAC,OAAO,EAAE,CAAC;gBACvD,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;YACnC,CAAC;YACD,SAAS;YACT,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBAC3B,IAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,EAAE,CAAC;gBAClD,IAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;gBAC9D,IAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;gBAE/D,IAAI,MAAM,GAAG,SAAS,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;gBACtC,wBAAwB;gBACxB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACpB,MAAM,GAAG,CAAC,CAAC;oBACX,WAAW,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;gBACxC,CAAC;gBAED,IAAM,eAAe,GAAG,IAAI,eAAe,CAAC,gBAAgB,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBAC5H,eAAe,CAAC,gBAAgB,GAAG,MAAM,GAAG,IAAI,CAAC;gBACjD,eAAe,CAAC,cAAc,GAAG,GAAG,GAAG,MAAM,CAAC;gBAC9C,IAAM,MAAM,GAAG,eAAe,CAAC;gBAE/B,MAAM,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;gBAC5B,MAAM,CAAC,IAAI,GAAG,MAAM,GAAG,IAAI,CAAC;gBAC5B,MAAM,CAAC,KAAK,GAAG,MAAM,GAAG,GAAG,CAAC;gBAC5B,IAAI,CAAC,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;YACrC,CAAC;YACD,IAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,eAAe,EAAE,CAAC;YACxD,IAAI,MAAM,EAAE,CAAC;gBACT,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,aAAa,EAAE,CAAC;YAC5C,CAAC;YAED,IAAI,CAAC,MAAM,GAAoB,IAAI,CAAC,KAAK,CAAC,YAAa,CAAC;YACxD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,GAAoB,IAAI,CAAC,KAAK,CAAC,YAAa,CAAC;QAC5D,CAAC;QACD,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;YACjD,qBAAqB,CAAC,WAAW,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;YAC1D,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,YAAY,CAAC,MAAM,EAAE,CAAC;YACtB,IAAM,SAAS,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC7C,qBAAqB,CAAC,SAAS,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC,CAAC;;WAEC;QAEH,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,IAAI,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5K,CAAC;QAED,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;YACzB,KAAK,IAAM,MAAI,IAAI,YAAY,CAAC,SAAS,EAAE,CAAC;gBACxC,IAAI,YAAY,CAAC,SAAS,CAAC,MAAI,CAAC,KAAK,SAAS,EAAE,CAAC;oBAC7C,IAAI,CAAC,kBAAkB,CAAC,MAAI,EAAE,YAAY,CAAC,SAAS,CAAC,MAAI,CAAC,CAAC,CAAC;gBAChE,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAM,YAAY,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,UAAC,IAAI;YACjD,OAAO,CAAC,KAAI,CAAC,iBAAiB,IAAI,CAAC,IAAI,KAAK,KAAI,CAAC,iBAAiB,CAAC,MAAM,IAAI,IAAI,KAAK,KAAI,CAAC,iBAAiB,CAAC,QAAQ,IAAI,IAAI,KAAK,KAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACrK,CAAC,CAAC,CAAC;QACH,IAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC;QAClE,IAAM,mBAAmB,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC;QACnD,IAAI,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,mBAAmB,GAAG,CAAC,CAAC;QAC3D,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,KAAK,CAAC,4BAA4B,EAAE,CAAC;YAC1C,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,kBAAkB,GAAG,IAAI,CAAC;YAClE,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,eAAe,GAAG,IAAI,CAAC;YAC/D,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,kBAAkB,GAAG,CAAC,CAAC,mBAAmB,CAAC,2BAA2B,EAAE,IAAI,CAAC,oBAAoB,CAAC,CAAC;QAC/I,CAAC;QAED,qBAAqB,CAAC,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;QAEjD,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC;YAC9C,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,gBAAgB,EAAE,YAAY;SACjC,CAAC,CAAC;IACP,CAAC;IA0BS,4CAAqB,GAA/B,UAAgC,mBAAoD,EAAE,mBAAoD;QAA1I,iBAuLC;QAtLG,IAAI,CAAC,mBAAmB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC/C,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBACzB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,CAAC,iBAAiB,GAAG,SAAS,CAAC;YACvC,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAM,OAAO,GAAuC;gBAChD,YAAY,EAAE,CAAC,CAAC,mBAAmB,IAAI,IAAI,CAAC,cAAc;gBAC1D,YAAY,EAAE,CAAC,CAAC,mBAAmB;gBACnC,oBAAoB,EAAE,KAAK,EAAE,oCAAoC;aACpE,CAAC;YAEF,4DAA4D;YAC5D;;;;;;eAMG;YAEH,IAAI,mBAAmB,EAAE,CAAC;gBACtB,IAAM,cAAY,GAAG,OAAO,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;gBAEzF,IAAM,UAAU,GAAG,cAAY,CAAC,IAAI,IAAI,CAAC,OAAO,mBAAmB,KAAK,QAAQ,IAAI,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAC/G,IAAI,UAAU,EAAE,CAAC;oBACb,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;gBACpC,CAAC;gBAED,OAAO,CAAC,kBAAkB,GAAG,mBAAmB,KAAK,IAAI,IAAI,cAAY,CAAC,cAAc,CAAC;gBACzF,IAAI,cAAY,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;oBACzC,OAAO,CAAC,iBAAiB,GAAG,cAAY,CAAC,WAAW,CAAC;gBACzD,CAAC;gBACD,OAAO,CAAC,kBAAkB,GAAG,CAAC,CAAC,cAAY,CAAC,MAAM,IAAI,IAAI,CAAC,mBAAmB,CAAC;gBAC/E,IAAI,cAAY,CAAC,OAAO,EAAE,CAAC;oBACvB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,cAAY,CAAC,OAAO,CAAC,CAAC;gBACpE,CAAC;gBACD,IAAI,cAAY,CAAC,KAAK,EAAE,CAAC;oBACrB,OAAO,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,cAAY,CAAC,KAAK,CAAC,CAAC,EAAE,cAAY,CAAC,KAAK,CAAC,CAAC,EAAE,cAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBACvG,CAAC;gBAED,IAAI,cAAY,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;oBACrC,OAAO,CAAC,aAAa,GAAG,cAAY,CAAC,OAAO,CAAC;gBACjD,CAAC;gBAED,IAAI,cAAY,CAAC,MAAM,EAAE,CAAC;oBACtB,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC;oBAClC,uBAAuB;oBACvB,IAAI,OAAO,cAAY,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;wBAC1C,IAAI,cAAY,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;4BAC3C,OAAO,CAAC,kBAAkB,GAAG,cAAY,CAAC,MAAM,CAAC,MAAM,CAAC;wBAC5D,CAAC;wBACD,IAAI,cAAY,CAAC,MAAM,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;4BAC9C,OAAO,CAAC,qBAAqB,GAAG,cAAY,CAAC,MAAM,CAAC,SAAS,CAAC;wBAClE,CAAC;wBACD,IAAI,cAAY,CAAC,MAAM,CAAC,UAAU,KAAK,SAAS,EAAE,CAAC;4BAC/C,OAAO,CAAC,sBAAsB,GAAG,cAAY,CAAC,MAAM,CAAC,UAAU,CAAC;wBACpE,CAAC;wBACD,IAAI,cAAY,CAAC,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;4BAClD,OAAO,CAAC,yBAAyB,GAAG,cAAY,CAAC,MAAM,CAAC,aAAa,CAAC;wBAC1E,CAAC;wBACD,IAAI,cAAY,CAAC,MAAM,CAAC,eAAe,KAAK,SAAS,EAAE,CAAC;4BACpD,OAAO,CAAC,2BAA2B,GAAG,cAAY,CAAC,MAAM,CAAC,eAAe,CAAC;wBAC9E,CAAC;wBACD,IAAI,IAAI,CAAC,2BAA2B,KAAK,SAAS,EAAE,CAAC;4BACjD,OAAO,CAAC,uBAAuB,GAAG,IAAI,CAAC,2BAA2B,CAAC;wBACvE,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAI,sBAAsB,GAAG,KAAK,CAAC;YACnC,IAAI,mBAAmB,EAAE,CAAC;gBACtB,IAAM,IAAI,GAAG,mBAAmB,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;gBACrE,IAAI,IAAI,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC,4BAA4B,EAAE,CAAC;oBAC9D,OAAO,CAAC,oBAAoB,GAAG,KAAK,CAAC,CAAC,qCAAqC;gBAC/E,CAAC;gBACD,IAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;gBAC9B,IAAI,UAAU,EAAE,CAAC;oBACb,OAAO,CAAC,UAAU,GAAG,UAAU,CAAC;gBACpC,CAAC;gBACD,OAAO,CAAC,QAAQ,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC;gBACvC,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;oBACb,OAAO,CAAC,WAAW,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gBAC/E,CAAC;gBACD,IAAI,IAAI,CAAC,WAAW,IAAI,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;oBAC3C,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;wBAC3C,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;oBACpE,CAAC;yBAAM,CAAC;wBACJ,cAAc;wBACd,sBAAsB,GAAG,IAAI,CAAC;oBAClC,CAAC;gBACL,CAAC;gBAED,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAChB,sBAAsB,GAAG,IAAI,CAAC;gBAClC,CAAC;YACL,CAAC;YAED,OAAO,CAAC,oBAAoB,GAAG,KAAK,CAAC,CAAC,MAAM;YAE5C,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC;gBAC1B,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACJ,gEAAgE;gBAEhE,sCAAsC;gBACtC,IAAM,KAAK,GAAU,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;gBAChE,kCAAkC;gBAClC,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;oBACvB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;oBACjC,IAAI,CAAC,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxE,CAAC;qBAAM,CAAC;oBACJ,sBAAsB;oBACtB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;wBAChC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC5C,CAAC;oBACD,sBAAsB;oBACtB,IAAI,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,CAAC;wBAChC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBAC5C,CAAC;oBAED,IAAI,CAAC,iBAAiB,CAAC,aAAa,CAAC,OAAO,CAAE,CAAC;oBAC/C,mFAAmF;oBACnF,mCAAmC;oBACnC,sEAAsE;gBAC1E,CAAC;YACL,CAAC;YAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,QAAQ,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,IAAI,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;gBAC3I,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,oBAAoB,CAAC;YACtG,CAAC;YAED,IAAM,YAAY,GAAG,OAAO,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC;YACzF,IAAI,IAAI,CAAC,iBAAiB,CAAC,cAAc,IAAI,YAAY,EAAE,CAAC;gBACxD,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;gBACxE,IAAI,YAAY,CAAC,QAAQ,EAAE,CAAC;oBACxB,qBAAqB,CAAC,IAAI,CAAC,iBAAiB,CAAC,cAAc,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC;gBACxF,CAAC;gBAED,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,EAAE,CAAC;oBACtC,IAAM,gBAAgB,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,gBAAgB,CAAC,aAAa,EAAE,CAAC;oBAChG,gEAAgE;oBAChE,IAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;oBAC5F,gBAAgB,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,EAAE,gBAAgB,CAAC,CAAC;oBAE5D,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBACpF,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBACpF,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;oBACpF,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC;oBAErD,IAAI,CAAC,IAAI,CAAC,mBAAmB,EAAE,CAAC;wBAC5B,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,iBAAiB,GAAG,IAAI,CAAC;oBACnE,CAAC;gBACL,CAAC;YACL,CAAC;YAED,IAAM,cAAc,GAAG,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC;YAC7D,IAAI,cAAc,EAAE,CAAC;gBACjB,cAAc,CAAC,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC;gBAEjD,IAAI,sBAAsB,EAAE,CAAC;oBACzB,IAAI,OAAO,mBAAmB,KAAK,QAAQ,IAAI,mBAAmB,CAAC,QAAQ,EAAE,CAAC;wBAC1E,qBAAqB,CAAC,cAAc,EAAE,mBAAmB,CAAC,QAAQ,CAAC,CAAC;oBACxE,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAED,IAAI,CAAC,mBAAmB;YACpB,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAC,KAAK;gBACvD,KAAI,CAAC,6BAA6B,CAAC,KAAK,CAAC,CAAC;YAC9C,CAAC,CAAC,CAAC;QAEP,IAAI,CAAC,iCAAiC,CAAC,eAAe,CAAC;YACnD,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI,CAAC,iBAAkB;YAC/B,gBAAgB,EAAE;gBACd,MAAM,EAAE,mBAAmB;gBAC3B,MAAM,EAAE,mBAAmB;aAC9B;SACJ,CAAC,CAAC;IACP,CAAC;IAED;;;OAGG;IACO,uCAAgB,GAA1B,UAA2B,mBAAoF;QAA/G,iBA0JC;QA1J0B,oCAAA,EAAA,wBAAoF;QAC3G,gBAAgB;QAChB,IAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,UAAC,IAAI,IAAK,OAAA,IAAI,KAAK,gBAAgB,EAAzB,CAAyB,CAAC,CAAC;QAE/F,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACpB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;gBAC5B,IAAI,gBAAgB,CAAC,eAAe,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YACpE,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,iBAAe,GAAkB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,UAAC,KAAK,IAAK,OAAA,KAAK,CAAC,IAAI,EAAV,CAAU,CAAC,CAAC;YAClF,uEAAuE;YACvE,IAAM,mBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YAC9E,IAAI,MAAM,CAAC,IAAI,CAAC,mBAAiB,CAAC,CAAC,MAAM,KAAK,iBAAe,CAAC,MAAM,EAAE,CAAC;gBACnE,iBAAe,CAAC,OAAO,CAAC,UAAC,KAAK;oBAC1B,IAAI,mBAAiB,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;wBAC1C,KAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAE,CAAC,OAAO,EAAE,CAAC;oBAChD,CAAC;gBACL,CAAC,CAAC,CAAC;YACP,CAAC;YAED,SAAS,CAAC,OAAO,CAAC,UAAC,IAAI;gBACnB,IAAI,WAAW,GAAwB,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;gBACnD,IAAI,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChD,WAAW,GAAwB,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;oBAChD,WAAW,CAAC,IAAI,GAAW,mBAAmB,CAAC,IAAI,CAAC,CAAC;gBACzD,CAAC;gBAED,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC;gBAExB,IAAI,KAAY,CAAC;gBACjB,iCAAiC;gBACjC,IAAI,iBAAe,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACvC,IAAM,WAAW,GAAG,KAAK,CAAC,sBAAsB,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;oBACjG,IAAI,CAAC,WAAW,EAAE,CAAC;wBACf,OAAO;oBACX,CAAC;oBACD,KAAK,GAAG,WAAW,EAAE,CAAC;gBAC1B,CAAC;qBAAM,CAAC;oBACJ,mCAAmC;oBACnC,KAAK,GAAU,KAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;oBAC/C,IAAI,OAAO,mBAAmB,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;wBACjD,WAAW,CAAC,IAAI,GAAG,KAAK,CAAC,SAAS,EAAE,CAAC;oBACzC,CAAC;oBACD,iBAAe,GAAG,iBAAe,CAAC,MAAM,CAAC,UAAC,EAAE,IAAK,OAAA,EAAE,KAAK,IAAI,EAAX,CAAW,CAAC,CAAC;oBAC9D,IAAI,WAAW,CAAC,IAAI,KAAK,SAAS,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,WAAW,CAAC,IAAI,EAAE,CAAC;wBAC3E,KAAK,CAAC,OAAO,EAAE,CAAC;wBAChB,IAAM,WAAW,GAAG,KAAK,CAAC,sBAAsB,CAAC,WAAW,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE,KAAI,CAAC,KAAK,CAAC,CAAC;wBACjG,IAAI,CAAC,WAAW,EAAE,CAAC;4BACf,OAAO;wBACX,CAAC;wBACD,KAAK,GAAG,WAAW,EAAE,CAAC;oBAC1B,CAAC;gBACL,CAAC;gBAED,gDAAgD;gBAChD,IAAI,mBAAmB,CAAC,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;oBACtC,KAAK,CAAC,OAAO,EAAE,CAAC;oBAChB,OAAO;gBACX,CAAC;gBAED,SAAS;gBACT,IAAM,OAAO,GAAG,WAAW,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAChG,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAE1B,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBAE1C,6CAA6C;gBAC7C,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;oBAC/B,qBAAqB;oBACrB,KAAK,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,GAAG,CAAC;oBAC3C,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,CAAC,+CAA+C;oBAExG,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;wBACrB,IAAI,KAAK,CAAC,oBAAoB,EAAE,CAAC;4BAC7B,IAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;4BAC/G,KAAK,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;wBACvC,CAAC;oBACL,CAAC;yBAAM,IAAI,WAAW,CAAC,SAAS,EAAE,CAAC;wBAC/B,IAAM,SAAS,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;wBAC3H,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC;oBAChC,CAAC;oBAED,IAAI,eAAe,GAAG,KAAK,CAAC;oBAC5B,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,4BAA4B,EAAE,CAAC;wBACxC,KAAM,CAAC,iBAAiB,GAAG,WAAW,CAAC,iBAAiB,IAAI,CAAC,CAAC;wBACjF,eAAe,GAAG,IAAI,CAAC;oBAC3B,CAAC;yBAAM,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,qBAAqB,EAAE,CAAC;wBAC3D,IAAM,SAAS,GAAyB,KAAK,CAAC;wBAC9C,IAAI,WAAW,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;4BACtC,SAAS,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,SAAS,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;wBAC9D,CAAC;wBACD,IAAI,SAAS,CAAC,KAAK,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;4BACnD,SAAS,CAAC,gBAAgB,GAAG,WAAW,CAAC,iBAAiB,GAAG,SAAS,CAAC,KAAK,CAAC;wBACjF,CAAC;wBACD,eAAe,GAAG,IAAI,CAAC;oBAC3B,CAAC;yBAAM,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,sBAAsB,EAAE,CAAC;wBAC5D,IAAI,WAAW,CAAC,iBAAiB,EAAE,CAAC;4BACnB,KAAM,CAAC,WAAW,GAAG,CAAC,WAAW,CAAC,iBAAiB,GAAG,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC;wBACtF,CAAC;wBACD,eAAe,GAAG,IAAI,CAAC;oBAC3B,CAAC;oBAED,IAAI,iBAAe,GAAoB,KAAK,CAAC,kBAAkB,EAAE,CAAC;oBAClE,IAAI,eAAe,IAAI,WAAW,CAAC,aAAa,IAAI,KAAI,CAAC,WAAW,EAAE,CAAC;wBACnE,IAAM,UAAU,GAAG,WAAW,CAAC,gBAAgB,IAAI,GAAG,CAAC;wBAEvD,IAAI,CAAC,iBAAe,EAAE,CAAC;4BACnB,iBAAe,GAAG,IAAI,eAAe,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;wBAC7D,CAAC;wBAED,IAAM,UAAU,GAAG,KAAI,CAAC,aAAa,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;wBACzD,iBAAe,CAAC,IAAI,GAAG,KAAI,CAAC,oBAAoB,CAAC;wBACjD,iBAAe,CAAC,UAAU,GAAG,UAAU,CAAC;wBACxC,mBAAmB;wBACnB,qBAAqB,CAAC,iBAAe,EAAE,WAAW,CAAC,YAAY,IAAI,EAAE,CAAC,CAAC;wBAEvE,0CAA0C;wBAC1C,KAAI,CAAC,mBAAmB;4BACpB,KAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAC,KAAK;gCACvD,KAAI,CAAC,uBAAuB,CAAC,iBAAe,EAAE,KAAK,CAAC,CAAC;4BACzD,CAAC,CAAC,CAAC;wBAEP,cAAc;wBACd,KAAI,CAAC,uBAAuB,CAAC,iBAAe,CAAC,CAAC;wBAC9C,GAAG;oBACP,CAAC;yBAAM,IAAI,iBAAe,EAAE,CAAC;wBACzB,iBAAe,CAAC,OAAO,EAAE,CAAC;oBAC9B,CAAC;gBACL,CAAC;YACL,CAAC,CAAC,CAAC;YAEH,kBAAkB;YAClB,IAAM,yBAAyB,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,IAAI,EAAE,CAAC;YACzE,MAAM,CAAC,IAAI,CAAC,yBAAyB,CAAC;iBACjC,IAAI,EAAE;iBACN,OAAO,CAAC,UAAC,IAAI,EAAE,GAAG;gBACf,6DAA6D;gBAC7D,yDAAyD;gBACzD,IAAM,KAAK,GAAG,KAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAC9C,eAAe;gBACf,IAAI,CAAC,KAAK,EAAE,CAAC;oBACT,OAAO;gBACX,CAAC;gBACD,KAAK,CAAC,cAAc,GAAG,CAAC,GAAG,CAAC;YAChC,CAAC,CAAC,CAAC;QACX,CAAC;QAED,IAAI,CAAC,4BAA4B,CAAC,eAAe,CAAC;YAC9C,YAAY,EAAE,IAAI;YAClB,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM;YACzB,gBAAgB,EAAE,mBAAmB;SACxC,CAAC,CAAC;IACP,CAAC;IAIO,8CAAuB,GAA/B,UAAgC,eAAgC,EAAE,KAAmB,EAAE,SAAmB;QACtG,IAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAC7D,0CAA0C;QAC1C,IAAM,UAAU,GAAG,eAAe,CAAC,YAAY,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,EAAE,CAAC;YACd,OAAO;QACX,CAAC;QACD,IAAI,SAAS,IAAI,UAAU,CAAC,UAAU,EAAE,CAAC;YACrC,UAAU,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;QACrC,CAAC;aAAM,CAAC;YACJ,UAAU,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,IAAI,EAAE,CAAC;QACxD,CAAC;QACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACtD,IAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;YAChC,IAAI,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACtF,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC3B,IAAI,eAAe,CAAC,gCAAgC,EAAE,CAAC;gBACnD,IAAM,iBAAiB,GAAG,WAAW,CAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtF,iBAAiB,CAAC,eAAe,GAAG,KAAK,CAAC;gBAC1C,2EAA2E;gBAC3E,iBAAiB,CAAC,QAAQ,GAAG,IAAI,WAAW,CAAC,2BAA2B,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACtF,iBAAiB,CAAC,QAAQ,CAAC,eAAe,GAAG,KAAK,CAAC;gBACnD,iBAAiB,CAAC,QAAQ,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,GAAG,CAAC;gBAC7C,iBAAiB,CAAC,iBAAiB,EAAE,CAAC;gBACtC,IAAI,CAAC,kBAAkB,GAAG,iBAAiB,CAAC;gBAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC;YAC7C,CAAC;QACL,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,eAAe,CAAC,gCAAgC,EAAE,CAAC;gBACpD,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC;gBAClC,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC;YACnC,CAAC;QACL,CAAC;QAED,IAAI,IAAI,CAAC,kBAAkB,IAAI,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAC3F,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QACxD,CAAC;IACL,CAAC;IAEO,oDAA6B,GAArC,UAAsC,KAAmB,EAAE,SAAmB;QAC1E,IAAI,IAAI,CAAC,iBAAiB,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,IAAI,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC;YAClH,IAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;YAC7D,IAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,UAAU,CAAC;YAClE,IAAI,SAAS,EAAE,CAAC;gBACZ,UAAU,CAAC,MAAM,GAAG,CAAC,CAAC;YAC1B,CAAC;YACD,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBACtD,IAAM,IAAI,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;gBAChC,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBAClC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAED;;;;;OAKG;IACI,oCAAa,GAApB,UAAqB,KAAmB,EAAE,UAAkB;QACxD,IAAI,oBAAoB,GAAG,IAAI,CAAC,CAAC,oCAAoC;QACrE,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,4BAA4B,EAAE,CAAC;YAC3D,oBAAoB,GAAG,oBAAoB,GAAsB,KAAM,CAAC,iBAAiB,CAAC;QAC9F,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,sBAAsB,EAAE,CAAC;YAC5D,oBAAoB,GAAG,oBAAoB,GAAgB,KAAM,CAAC,WAAW,CAAC;QAClF,CAAC;aAAM,IAAI,KAAK,CAAC,SAAS,EAAE,KAAK,KAAK,CAAC,qBAAqB,EAAE,CAAC;YAC3D,oBAAoB,GAAG,oBAAoB,GAAG,CAAa,KAAM,CAAC,KAAK,GAAe,KAAM,CAAC,gBAAgB,CAAC,CAAC;QACnH,CAAC;QAED,IAAM,iBAAiB,GAAG,CAAC,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,CAAC,CAAC,sDAAsD;QAExG,IAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,GAAG,oBAAoB,EAAE,iBAAiB,CAAC,CAAC;QAClF,OAAO,UAAU,CAAC;IACtB,CAAC;IAED;;;OAGG;IACO,iDAA0B,GAApC,UAAqC,SAAgB;QAAhB,0BAAA,EAAA,gBAAgB;QACjD,4DAA4D;QAC5D,IAAM,cAAc,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,iBAAiB,CAAC;QAChE,IAAM,mBAAmB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,qBAAqB,CAAC;QAEzE,yEAAyE;QACzE,IAAI,cAAc,GAAG,CAAC,IAAI,mBAAmB,GAAG,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACzB,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC;QACzB,CAAC;QAED,2DAA2D;QAC3D,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;QACpC,IAAM,sBAAsB,GAAG,IAAI,CAAC,sBAAsB,IAAI,IAAI,CAAC,+BAA+B,CAAC;QACnG,IAAM,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,2BAA2B,CAAC;QAEvF,IAAI,CAAC,WAAW,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC,kBAAkB,IAAI,sBAAsB,CAAC,CAAC;QAEjF,IAAI,sBAAsB,EAAE,CAAC;YACzB,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC,sBAAsB,CAAC;YACjE,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACtC,CAAC;aAAM,IAAI,kBAAkB,EAAE,CAAC;YAC5B,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC,iBAAiB,CAAC;YAC5D,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACtC,CAAC;aAAM,CAAC;YACJ,IAAI,CAAC,wBAAwB,GAAG,SAAS,CAAC,wBAAwB,CAAC;YACnE,IAAI,CAAC,oBAAoB,GAAG,KAAK,CAAC;QACtC,CAAC;QAED,IAAI,CAAC,2BAA2B,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC;IAC7H,CAAC;IAED;;OAEG;IACI,8BAAO,GAAd;QACI,6CAA6C;QAC7C,IAAI,CAAC,iCAAiC,CAAC,KAAK,EAAE,CAAC;QAC/C,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC,4BAA4B,CAAC,KAAK,EAAE,CAAC;QAC1C,IAAI,CAAC,2BAA2B,CAAC,KAAK,EAAE,CAAC;QACzC,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACnC,IAAI,CAAC,oCAAoC,CAAC,KAAK,EAAE,CAAC;QAClD,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;QAEtC,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,CAAC;QAClC,CAAC;QAED,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAC,KAAK;YACtB,KAAK,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC,CAAC,CAAC;QAEH,IAAI,IAAI,CAAC,yBAAyB,EAAE,CAAC;YACjC,IAAI,CAAC,yBAAyB,CAAC,OAAO,EAAE,CAAC;QAC7C,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;QAEvB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACb,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACzB,CAAC;IACL,CAAC;IAED;;;;OAIG;IACK,mCAAY,GAApB,UAAqB,GAAW;QAC5B,IAAI,SAAS,GAAG,GAAG,CAAC;QACpB,IAAI,GAAG,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC;gBACvB,oLAAoL;gBACpL,OAAO,GAAG,CAAC;YACf,CAAC;YAED,SAAS,GAAG,IAAI,CAAC,cAAc,GAAG,SAAS,CAAC;QAChD,CAAC;QAED,OAAO,SAAS,CAAC;IACrB,CAAC;IAIO,yCAAkB,GAA1B,UACI,IAAY,EACZ,cAMO;QAEP,IAAI,QAA0C,CAAC;QAC/C,IAAI,IAAY,CAAC;QACjB,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YACrC,IAAI,GAAG,cAAc,CAAC,IAAI,CAAC;QAC/B,CAAC;aAAM,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;YAC5C,IAAI,GAAG,cAAc,CAAC;QAC1B,CAAC;aAAM,CAAC;YACJ,IAAI,GAAG,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC7C,CAAC;QAED,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACrB,OAAO;QACX,CAAC;QAED,IAAM,MAAM,GAAgC,OAAO,cAAc,KAAK,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;QAErG,IAAI,OAAO,GAAG,IAAI,CAAC;QACnB,IAAI,OAAO,cAAc,KAAK,SAAS,EAAE,CAAC;YACtC,OAAO,GAAG,cAAc,CAAC;QAC7B,CAAC;QAED,wBAAwB;QACxB,QAAQ,IAAI,EAAE,CAAC;YACX;gBACI,IAAI,CAAC,MAAM,CAAC,uBAAuB,GAAG,OAAO,CAAC;gBAC9C,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC;gBAC5C,MAAM;YACV;gBACI,IAAI,CAAC,MAAM,CAAC,mBAAmB,GAAG,OAAO,CAAC;gBAC1C,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;gBACxC,MAAM;YACV;gBACI,IAAI,CAAC,MAAM,CAAC,kBAAkB,GAAG,OAAO,CAAC;gBACzC,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC;gBACvC,MAAM;YACV;gBACI,QAAQ,GAAG,IAAI,CAAC;gBAChB,MAAM;QACd,CAAC;QAED,IAAI,QAAQ,EAAE,CAAC;YACX,IAAI,CAAC,sBAAsB,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YAEzC,IAAI,OAAO,cAAc,KAAK,QAAQ,EAAE,CAAC;gBACrC,qBAAqB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACpD,CAAC;QACL,CAAC;QAED,+EAA+E;QAC/E,QAAQ,IAAI,EAAE,CAAC;YACX;gBACI,MAAM;YACV;gBACI,MAAM;YACV;gBACI,IAAI,CAAC,mBAAmB;oBACpB,IAAI,CAAC,mBAAmB,CAAC,uBAAuB,CAAC,GAAG,CAAC,UAAC,KAAK;wBACvD,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;4BACV,QAAS,CAAC,mBAAmB,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;wBACpE,CAAC;oBACL,CAAC,CAAC,CAAC;gBACP,MAAM;QACd,CAAC;IACL,CAAC;IACL,mBAAC;AAAD,CAAC,AArgDD,IAqgDC","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type {\r\n ILightConfiguration,\r\n ISceneConfiguration,\r\n ISceneOptimizerConfiguration,\r\n ICameraConfiguration,\r\n ISkyboxConfiguration,\r\n IGroundConfiguration,\r\n IModelConfiguration,\r\n IDefaultRenderingPipelineConfiguration,\r\n IVRConfiguration,\r\n} from \"../configuration/interfaces/index\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport { getConfigurationKey } from \"../configuration/configuration\";\r\nimport type { ViewerModel } from \"../model/viewerModel\";\r\nimport { ModelState } from \"../model/viewerModel\";\r\nimport { extendClassWithConfig, deepmerge } from \"../helper/index\";\r\nimport { CameraBehavior } from \"../interfaces\";\r\nimport { ViewerLabs } from \"../labs/viewerLabs\";\r\nimport { getCustomOptimizerByName } from \"../optimizer/custom/index\";\r\nimport type { ObservablesManager } from \"../managers/observablesManager\";\r\nimport type { ConfigurationContainer } from \"../configuration/configurationContainer\";\r\nimport type { IEnvironmentMapConfiguration } from \"../configuration/interfaces/environmentMapConfiguration\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { SceneOptimizer, SceneOptimizerOptions } from \"core/Misc/sceneOptimizer\";\r\nimport { ArcRotateCamera } from \"core/Cameras/arcRotateCamera\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport type { IEnvironmentHelperOptions } from \"core/Helpers/environmentHelper\";\r\nimport { EnvironmentHelper } from \"core/Helpers/environmentHelper\";\r\nimport type { VRExperienceHelper, VRExperienceHelperOptions } from \"core/Cameras/VR/vrExperienceHelper\";\r\nimport { Color3, Quaternion, Vector3, Axis, Matrix } from \"core/Maths/math\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { DefaultRenderingPipeline } from \"core/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\nimport { Animation } from \"core/Animations/index\";\r\nimport { AnimationPropertiesOverride } from \"core/Animations/animationPropertiesOverride\";\r\nimport { RenderTargetTexture } from \"core/Materials/Textures/renderTargetTexture\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport type { IShadowLight } from \"core/Lights/shadowLight\";\r\nimport { ShadowLight } from \"core/Lights/shadowLight\";\r\nimport { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport type { DirectionalLight } from \"core/Lights/directionalLight\";\r\nimport { HemisphericLight } from \"core/Lights/hemisphericLight\";\r\nimport { Scalar } from \"core/Maths/math.scalar\";\r\nimport type { SpotLight } from \"core/Lights/spotLight\";\r\nimport type { PointLight } from \"core/Lights/pointLight\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { CreatePlane } from \"core/Meshes/Builders/planeBuilder\";\r\nimport { Tags } from \"core/Misc/tags\";\r\nimport type { Behavior } from \"core/Behaviors/behavior\";\r\nimport type { FramingBehavior } from \"core/Behaviors/Cameras/framingBehavior\";\r\nimport { Scene } from \"core/scene\";\r\nimport { ShadowGenerator } from \"core/Lights/Shadows/shadowGenerator\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport \"core/Audio/audioSceneComponent\";\r\nimport \"core/Helpers/sceneHelpers\";\r\nimport \"core/Misc/observable.extensions\";\r\n\r\n/**\r\n * This interface describes the structure of the variable sent with the configuration observables of the scene manager.\r\n * O - the type of object we are dealing with (Light, ArcRotateCamera, Scene, etc')\r\n * T - the configuration type\r\n */\r\nexport interface IPostConfigurationCallback<OBJ, CONF> {\r\n newConfiguration: CONF;\r\n sceneManager: SceneManager;\r\n object: OBJ;\r\n model?: ViewerModel;\r\n}\r\n\r\nexport class SceneManager {\r\n //Observers\r\n /**\r\n * Will notify when the scene was initialized\r\n */\r\n onSceneInitObservable: Observable<Scene>;\r\n /**\r\n * Will notify after the scene was configured. Can be used to further configure the scene\r\n */\r\n onSceneConfiguredObservable: Observable<IPostConfigurationCallback<Scene, ISceneConfiguration>>;\r\n /**\r\n * Will notify after the scene optimized was configured. Can be used to further configure the scene optimizer\r\n */\r\n onSceneOptimizerConfiguredObservable: Observable<IPostConfigurationCallback<SceneOptimizer, ISceneOptimizerConfiguration | boolean>>;\r\n /**\r\n * Will notify after the camera was configured. Can be used to further configure the camera\r\n */\r\n onCameraConfiguredObservable: Observable<IPostConfigurationCallback<ArcRotateCamera, ICameraConfiguration>>;\r\n /**\r\n * Will notify after the lights were configured. Can be used to further configure lights\r\n */\r\n onLightsConfiguredObservable: Observable<IPostConfigurationCallback<Array<Light>, { [name: string]: ILightConfiguration | boolean | number }>>;\r\n /**\r\n * Will notify after the model(s) were configured. Can be used to further configure models\r\n */\r\n onModelsConfiguredObservable: Observable<IPostConfigurationCallback<Array<ViewerModel>, IModelConfiguration>>;\r\n /**\r\n * Will notify after the environment was configured. Can be used to further configure the environment\r\n */\r\n onEnvironmentConfiguredObservable: Observable<\r\n IPostConfigurationCallback<EnvironmentHelper, { skybox?: ISkyboxConfiguration | boolean; ground?: IGroundConfiguration | boolean }>\r\n >;\r\n\r\n /**\r\n * Will notify after the model(s) were configured. Can be used to further configure models\r\n */\r\n onVRConfiguredObservable: Observable<IPostConfigurationCallback<VRExperienceHelper, IVRConfiguration>>;\r\n\r\n /**\r\n * The Babylon Scene of this viewer\r\n */\r\n public scene: Scene;\r\n /**\r\n * The camera used in this viewer\r\n */\r\n public camera: ArcRotateCamera;\r\n /**\r\n * Babylon's scene optimizer\r\n */\r\n public sceneOptimizer?: SceneOptimizer;\r\n /**\r\n * Models displayed in this viewer.\r\n */\r\n public models: Array<ViewerModel>;\r\n /**\r\n * Babylon's environment helper of this viewer\r\n */\r\n public environmentHelper?: EnvironmentHelper;\r\n\r\n //The following are configuration objects, default values.\r\n protected _defaultHighpTextureType: number;\r\n protected _shadowGeneratorBias: number;\r\n protected _defaultPipelineTextureType: number;\r\n\r\n /**\r\n * The maximum number of shadows supported by the current viewer\r\n */\r\n protected _maxShadows: number;\r\n /**\r\n * is HDR supported?\r\n */\r\n private _hdrSupport: boolean;\r\n\r\n private readonly _white = Color3.White();\r\n\r\n private _forceShadowUpdate: boolean = false;\r\n\r\n /**\r\n * The labs variable consists of objects that will have their API change.\r\n * Please be careful when using labs in production.\r\n */\r\n public labs: ViewerLabs;\r\n\r\n private _defaultRenderingPipeline: Nullable<DefaultRenderingPipeline>;\r\n\r\n private _assetsRootURL: string;\r\n\r\n public get defaultRenderingPipeline() {\r\n return this._defaultRenderingPipeline;\r\n }\r\n\r\n protected _vrHelper?: VRExperienceHelper;\r\n\r\n public get vrHelper() {\r\n return this._vrHelper;\r\n }\r\n\r\n constructor(\r\n private _engine: Engine,\r\n private _configurationContainer: ConfigurationContainer,\r\n private _observablesManager?: ObservablesManager\r\n ) {\r\n this.models = [];\r\n\r\n this.onCameraConfiguredObservable = new Observable();\r\n this.onLightsConfiguredObservable = new Observable();\r\n this.onModelsConfiguredObservable = new Observable();\r\n this.onSceneConfiguredObservable = new Observable();\r\n this.onSceneInitObservable = new Observable(undefined, true);\r\n this.onSceneOptimizerConfiguredObservable = new Observable();\r\n this.onEnvironmentConfiguredObservable = new Observable();\r\n this.onVRConfiguredObservable = new Observable();\r\n\r\n //this._viewer.onEngineInitObservable.add(() => {\r\n this._handleHardwareLimitations();\r\n //});\r\n\r\n this.onSceneInitObservable.add((scene) => {\r\n this.scene.animationPropertiesOverride = this.scene.animationPropertiesOverride || new AnimationPropertiesOverride();\r\n\r\n this.labs = new ViewerLabs(scene);\r\n\r\n const updateShadows = () => {\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n if (generators) {\r\n // Processing shadows if animates\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n scene.registerBeforeRender(() => {\r\n if (this._forceShadowUpdate || (scene.animatables && scene.animatables.length > 0)) {\r\n // make sure all models are loaded\r\n updateShadows();\r\n this._forceShadowUpdate = false;\r\n } else if (\r\n !this.models.every((model) => {\r\n if (!model.shadowsRenderedAfterLoad) {\r\n model.shadowsRenderedAfterLoad = true;\r\n return false;\r\n }\r\n return model.state === ModelState.COMPLETE && !model.currentAnimation;\r\n })\r\n ) {\r\n updateShadows();\r\n }\r\n });\r\n return this._observablesManager && this._observablesManager.onSceneInitObservable.notifyObserversWithPromise(this.scene);\r\n });\r\n if (this._observablesManager) {\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n if (generators) {\r\n // Processing shadows if animates\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n }\r\n }\r\n }\r\n }\r\n this._focusOnModel(model);\r\n });\r\n\r\n this._observablesManager.onModelAddedObservable.add((model) => {\r\n this.models.push(model);\r\n });\r\n this._observablesManager.onModelRemovedObservable.add((model) => {\r\n this.models.splice(this.models.indexOf(model), 1);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Returns a boolean representing HDR support\r\n */\r\n public get isHdrSupported() {\r\n return this._hdrSupport;\r\n }\r\n\r\n /**\r\n * Return the main color defined in the configuration.\r\n */\r\n public get mainColor(): Color3 {\r\n return this._configurationContainer.mainColor;\r\n }\r\n\r\n public get reflectionColor(): Color3 {\r\n return this._configurationContainer.reflectionColor;\r\n }\r\n\r\n public get animationBlendingEnabled() {\r\n return this.scene && this.scene.animationPropertiesOverride!.enableBlending;\r\n }\r\n\r\n public set animationBlendingEnabled(value: boolean) {\r\n this.scene.animationPropertiesOverride!.enableBlending = value;\r\n }\r\n\r\n public get observablesManager() {\r\n return this._observablesManager;\r\n }\r\n\r\n private _processShadows: boolean = true;\r\n\r\n /**\r\n * The flag defining whether shadows are rendered constantly or once.\r\n */\r\n public get processShadows() {\r\n return this._processShadows;\r\n }\r\n\r\n /**\r\n * Should shadows be rendered every frame, or only once and stop.\r\n * This can be used to optimize a scene.\r\n *\r\n * Not that the shadows will NOT disapear but will remain in place.\r\n * @param process if true shadows will be updated once every frame. if false they will stop being updated.\r\n */\r\n public set processShadows(process: boolean) {\r\n const refreshType = process ? RenderTargetTexture.REFRESHRATE_RENDER_ONEVERYFRAME : RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n\r\n if (generators) {\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = refreshType;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._processShadows = process;\r\n }\r\n\r\n private _groundEnabled: boolean = true;\r\n\r\n public get groundEnabled() {\r\n return this._groundEnabled;\r\n }\r\n\r\n public set groundEnabled(newValue: boolean) {\r\n if (newValue === this._groundEnabled) {\r\n return;\r\n }\r\n\r\n this._groundEnabled = newValue;\r\n\r\n if (this.environmentHelper && this.environmentHelper.ground) {\r\n this.environmentHelper.ground.setEnabled(this._groundEnabled);\r\n }\r\n }\r\n\r\n private _groundMirrorEnabled = true;\r\n /**\r\n * gets whether the reflection is disabled.\r\n */\r\n public get groundMirrorEnabled(): boolean {\r\n return this._groundMirrorEnabled;\r\n }\r\n /**\r\n * sets whether the reflection is disabled.\r\n */\r\n public set groundMirrorEnabled(value: boolean) {\r\n if (this._groundMirrorEnabled === value) {\r\n return;\r\n }\r\n\r\n this._groundMirrorEnabled = value;\r\n if (this.environmentHelper && this.environmentHelper.groundMaterial && this.environmentHelper.groundMirror) {\r\n if (!value) {\r\n this.environmentHelper.groundMaterial.reflectionTexture = null;\r\n } else {\r\n this.environmentHelper.groundMaterial.reflectionTexture = this.environmentHelper.groundMirror;\r\n }\r\n }\r\n }\r\n\r\n private _defaultRenderingPipelineEnabled: boolean = false;\r\n\r\n public get defaultRenderingPipelineEnabled() {\r\n return this._defaultRenderingPipelineEnabled;\r\n }\r\n\r\n public set defaultRenderingPipelineEnabled(value: boolean) {\r\n if (value === this._defaultRenderingPipelineEnabled) {\r\n return;\r\n }\r\n\r\n this._defaultRenderingPipelineEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the engine flags to unlock all babylon features.\r\n * Can also be configured using the scene.flags configuration object\r\n */\r\n public unlockBabylonFeatures() {\r\n this.scene.shadowsEnabled = true;\r\n this.scene.particlesEnabled = true;\r\n this.scene.postProcessesEnabled = true;\r\n this.scene.collisionsEnabled = true;\r\n this.scene.lightsEnabled = true;\r\n this.scene.texturesEnabled = true;\r\n this.scene.lensFlaresEnabled = true;\r\n this.scene.proceduralTexturesEnabled = true;\r\n this.scene.renderTargetsEnabled = true;\r\n this.scene.spritesEnabled = true;\r\n this.scene.skeletonsEnabled = true;\r\n this.scene.audioEnabled = true;\r\n }\r\n\r\n /**\r\n * initialize the scene. Calling this function again will dispose the old scene, if exists.\r\n * @param sceneConfiguration the configuration of the scene\r\n * @returns a promise that resolves when the scene is ready\r\n */\r\n public initScene(sceneConfiguration: ISceneConfiguration = {}): Promise<Scene> {\r\n // if the scene exists, dispose it.\r\n if (this.scene) {\r\n this.scene.dispose();\r\n }\r\n\r\n // create a new scene\r\n this.scene = new Scene(this._engine);\r\n\r\n this._configurationContainer.scene = this.scene;\r\n\r\n // set a default PBR material\r\n if (!sceneConfiguration.defaultMaterial) {\r\n const defaultMaterial = new PBRMaterial(\"defaultMaterial\", this.scene);\r\n defaultMaterial.reflectivityColor = new Color3(0.1, 0.1, 0.1);\r\n defaultMaterial.microSurface = 0.6;\r\n\r\n if (this.scene.defaultMaterial) {\r\n this.scene.defaultMaterial.dispose();\r\n }\r\n\r\n this.scene.defaultMaterial = defaultMaterial;\r\n }\r\n\r\n this.scene.animationPropertiesOverride = new AnimationPropertiesOverride();\r\n\r\n Animation.AllowMatricesInterpolation = true;\r\n\r\n /*if (sceneConfiguration.glow) {\r\n let options: Partial<IGlowLayerOptions> = {\r\n mainTextureFixedSize: 512\r\n };\r\n if (typeof sceneConfiguration.glow === 'object') {\r\n options = sceneConfiguration.glow\r\n }\r\n var gl = new GlowLayer(\"glow\", this.scene, options);\r\n }*/\r\n\r\n return this.onSceneInitObservable.notifyObserversWithPromise(this.scene);\r\n }\r\n\r\n public clearScene(clearModels: boolean = true, clearLights: boolean = false) {\r\n if (clearModels) {\r\n this.models.forEach((m) => m.dispose());\r\n this.models.length = 0;\r\n }\r\n if (clearLights) {\r\n this.scene.lights.forEach((l) => l.dispose());\r\n }\r\n }\r\n\r\n private _globalConfiguration: ViewerConfiguration = {};\r\n\r\n /**\r\n * This will update the scene's configuration, including camera, lights, environment.\r\n * @param newConfiguration the delta that should be configured. This includes only the changes\r\n */\r\n public updateConfiguration(newConfiguration: Partial<ViewerConfiguration>) {\r\n if (this._configurationContainer) {\r\n this._globalConfiguration = this._configurationContainer.configuration;\r\n } else {\r\n this._globalConfiguration = newConfiguration;\r\n }\r\n\r\n // update scene configuration\r\n if (newConfiguration.scene) {\r\n this._configureScene(newConfiguration.scene);\r\n }\r\n\r\n // optimizer\r\n if (newConfiguration.optimizer !== undefined) {\r\n this._configureOptimizer(newConfiguration.optimizer);\r\n }\r\n\r\n // configure model\r\n /*if (newConfiguration.model && typeof newConfiguration.model === 'object') {\r\n this._configureModel(newConfiguration.model);\r\n }*/\r\n\r\n // lights\r\n this._configureLights(newConfiguration.lights);\r\n\r\n // environment\r\n if (newConfiguration.skybox !== undefined || newConfiguration.ground !== undefined) {\r\n this._configureEnvironment(newConfiguration.skybox, newConfiguration.ground);\r\n }\r\n\r\n // camera\r\n this._configureCamera(newConfiguration.camera);\r\n\r\n if (newConfiguration.environmentMap !== undefined) {\r\n this._configureEnvironmentMap(newConfiguration.environmentMap);\r\n }\r\n\r\n if (newConfiguration.vr !== undefined) {\r\n this._configureVR(newConfiguration.vr);\r\n }\r\n\r\n if (newConfiguration.lab) {\r\n // rendering pipelines\r\n if (newConfiguration.lab.defaultRenderingPipelines) {\r\n const pipelineConfig = newConfiguration.lab.defaultRenderingPipelines;\r\n if (typeof pipelineConfig === \"boolean\") {\r\n this.defaultRenderingPipelineEnabled = pipelineConfig;\r\n } else {\r\n this.defaultRenderingPipelineEnabled = true;\r\n }\r\n }\r\n\r\n if (this.environmentHelper && newConfiguration.lab.environmentMainColor) {\r\n const mainColor = new Color3(newConfiguration.lab.environmentMainColor.r, newConfiguration.lab.environmentMainColor.g, newConfiguration.lab.environmentMainColor.b);\r\n this.environmentHelper.setMainColor(mainColor);\r\n }\r\n\r\n if (newConfiguration.lab.globalLightRotation !== undefined) {\r\n // rotate all lights that are shadow lights\r\n this.scene.lights\r\n .filter((light) => light instanceof ShadowLight)\r\n .forEach((light) => {\r\n // casting and '!' are safe, due to the constraints tested before\r\n this.labs.rotateShadowLight(<ShadowLight>light, newConfiguration.lab!.globalLightRotation!);\r\n });\r\n this._forceShadowUpdate = true;\r\n }\r\n }\r\n\r\n if (this._defaultRenderingPipeline && this._defaultRenderingPipeline.imageProcessing) {\r\n this._defaultRenderingPipeline.imageProcessing.fromLinearSpace = true;\r\n }\r\n\r\n if (this._defaultRenderingPipelineShouldBuild && this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n }\r\n }\r\n\r\n private _defaultRenderingPipelineShouldBuild: boolean = true;\r\n\r\n private _rebuildPostprocesses(configuration?: IDefaultRenderingPipelineConfiguration): void {\r\n if (!this._defaultRenderingPipelineEnabled || !getConfigurationKey(\"scene.imageProcessingConfiguration.isEnabled\", this._globalConfiguration)) {\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipeline.dispose();\r\n this._defaultRenderingPipeline = null;\r\n this.scene.autoClearDepthAndStencil = true;\r\n this.scene.autoClear = true;\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n return;\r\n }\r\n\r\n const pipelineConfig = configuration || (this._globalConfiguration.lab && this._globalConfiguration.lab.defaultRenderingPipelines);\r\n if (pipelineConfig) {\r\n if (!this._defaultRenderingPipeline) {\r\n // Create pipeline in manual mode to avoid triggering multiple shader compilations\r\n this._defaultRenderingPipeline = new DefaultRenderingPipeline(\"default rendering pipeline\", this._hdrSupport, this.scene, [this.camera], false);\r\n }\r\n this.scene.autoClear = false;\r\n this.scene.autoClearDepthAndStencil = false;\r\n this._defaultRenderingPipelineShouldBuild = true;\r\n\r\n let bloomEnabled = this._bloomEnabled;\r\n\r\n if (typeof pipelineConfig !== \"boolean\") {\r\n extendClassWithConfig(this._defaultRenderingPipeline, pipelineConfig);\r\n this._bloomEnabled = !!pipelineConfig.bloomEnabled;\r\n this._fxaaEnabled = !!pipelineConfig.fxaaEnabled;\r\n bloomEnabled = this._bloomEnabled && pipelineConfig.bloomWeight !== undefined && pipelineConfig.bloomWeight > 0;\r\n\r\n this._defaultRenderingPipeline.bloomWeight = (pipelineConfig.bloomWeight !== undefined && pipelineConfig.bloomWeight) || this._defaultRenderingPipeline.bloomWeight;\r\n }\r\n\r\n this._defaultRenderingPipeline.bloomEnabled = bloomEnabled;\r\n this._defaultRenderingPipeline.fxaaEnabled = this.fxaaEnabled;\r\n }\r\n }\r\n\r\n // default from rendering pipeline\r\n private _bloomEnabled: boolean = false;\r\n\r\n public get bloomEnabled() {\r\n return this._bloomEnabled;\r\n }\r\n\r\n public set bloomEnabled(value: boolean) {\r\n if (this._bloomEnabled === value) {\r\n return;\r\n }\r\n\r\n this._bloomEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n // default from rendering pipeline\r\n private _fxaaEnabled: boolean = false;\r\n\r\n public get fxaaEnabled() {\r\n return this._fxaaEnabled;\r\n }\r\n\r\n public set fxaaEnabled(value: boolean) {\r\n if (this._fxaaEnabled === value) {\r\n return;\r\n }\r\n\r\n this._fxaaEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public setDefaultMaterial(sceneConfig: ISceneConfiguration) {}\r\n\r\n /**\r\n * internally configure the scene using the provided configuration.\r\n * The scene will not be recreated, but just updated.\r\n * @param sceneConfig the (new) scene configuration\r\n */\r\n protected _configureScene(sceneConfig: ISceneConfiguration) {\r\n // sanity check!\r\n if (!this.scene) {\r\n return;\r\n }\r\n\r\n const cc = sceneConfig.clearColor;\r\n const oldcc = this.scene.clearColor;\r\n if (cc) {\r\n if (cc.r !== undefined) {\r\n oldcc.r = cc.r;\r\n }\r\n if (cc.g !== undefined) {\r\n oldcc.g = cc.g;\r\n }\r\n if (cc.b !== undefined) {\r\n oldcc.b = cc.b;\r\n }\r\n if (cc.a !== undefined) {\r\n oldcc.a = cc.a;\r\n }\r\n }\r\n\r\n if (sceneConfig.assetsRootURL) {\r\n this._assetsRootURL = sceneConfig.assetsRootURL;\r\n }\r\n\r\n // image processing configuration - optional.\r\n if (sceneConfig.imageProcessingConfiguration) {\r\n extendClassWithConfig(this.scene.imageProcessingConfiguration, sceneConfig.imageProcessingConfiguration);\r\n }\r\n //animation properties override\r\n if (sceneConfig.animationPropertiesOverride) {\r\n extendClassWithConfig(this.scene.animationPropertiesOverride, sceneConfig.animationPropertiesOverride);\r\n }\r\n if (sceneConfig.environmentTexture) {\r\n if (!(this.scene.environmentTexture && (<CubeTexture>this.scene.environmentTexture).url === sceneConfig.environmentTexture)) {\r\n if (this.scene.environmentTexture && this.scene.environmentTexture.dispose) {\r\n this.scene.environmentTexture.dispose();\r\n }\r\n const environmentTexture = CubeTexture.CreateFromPrefilteredData(sceneConfig.environmentTexture, this.scene);\r\n this.scene.environmentTexture = environmentTexture;\r\n }\r\n }\r\n\r\n if (sceneConfig.debug === true) {\r\n this.scene.debugLayer.show();\r\n } else if (sceneConfig.debug === false) {\r\n if (this.scene.debugLayer.isVisible()) {\r\n this.scene.debugLayer.hide();\r\n }\r\n }\r\n\r\n if (sceneConfig.disableHdr) {\r\n this._handleHardwareLimitations(false);\r\n } else {\r\n this._handleHardwareLimitations(true);\r\n }\r\n\r\n if (sceneConfig.renderInBackground !== undefined) {\r\n this._engine.renderEvenInBackground = !!sceneConfig.renderInBackground;\r\n }\r\n\r\n const canvas = this._engine.getInputElement();\r\n\r\n if (canvas) {\r\n if (this.camera && sceneConfig.disableCameraControl) {\r\n this.camera.detachControl();\r\n } else if (this.camera && sceneConfig.disableCameraControl === false) {\r\n this.camera.attachControl();\r\n }\r\n }\r\n\r\n this.setDefaultMaterial(sceneConfig);\r\n\r\n if (sceneConfig.flags) {\r\n extendClassWithConfig(this.scene, sceneConfig.flags);\r\n }\r\n\r\n this.onSceneConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.scene,\r\n newConfiguration: sceneConfig,\r\n });\r\n }\r\n\r\n /**\r\n * Configure the scene optimizer.\r\n * The existing scene optimizer will be disposed and a new one will be created.\r\n * @param optimizerConfig the (new) optimizer configuration\r\n */\r\n protected _configureOptimizer(optimizerConfig: ISceneOptimizerConfiguration | boolean) {\r\n if (typeof optimizerConfig === \"boolean\") {\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n delete this.sceneOptimizer;\r\n }\r\n if (optimizerConfig) {\r\n this.sceneOptimizer = new SceneOptimizer(this.scene);\r\n this.sceneOptimizer.start();\r\n }\r\n } else {\r\n let optimizerOptions: SceneOptimizerOptions = new SceneOptimizerOptions(optimizerConfig.targetFrameRate, optimizerConfig.trackerDuration);\r\n // check for degradation\r\n if (optimizerConfig.degradation) {\r\n switch (optimizerConfig.degradation) {\r\n case \"low\":\r\n optimizerOptions = SceneOptimizerOptions.LowDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n case \"moderate\":\r\n optimizerOptions = SceneOptimizerOptions.ModerateDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n case \"hight\":\r\n optimizerOptions = SceneOptimizerOptions.HighDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n }\r\n }\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n }\r\n if (optimizerConfig.custom) {\r\n const customOptimizer = getCustomOptimizerByName(optimizerConfig.custom, optimizerConfig.improvementMode);\r\n if (customOptimizer) {\r\n optimizerOptions.addCustomOptimization(\r\n () => {\r\n return customOptimizer(this);\r\n },\r\n () => {\r\n return `Babylon Viewer ${optimizerConfig.custom} custom optimization`;\r\n }\r\n );\r\n }\r\n }\r\n this.sceneOptimizer = new SceneOptimizer(this.scene, optimizerOptions, optimizerConfig.autoGeneratePriorities, optimizerConfig.improvementMode);\r\n this.sceneOptimizer.start();\r\n }\r\n\r\n this.onSceneOptimizerConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.sceneOptimizer!,\r\n newConfiguration: optimizerConfig,\r\n });\r\n }\r\n\r\n /**\r\n * configure all models using the configuration.\r\n * @param modelConfiguration the configuration to use to reconfigure the models\r\n */\r\n /*protected _configureModel(modelConfiguration: Partial<IModelConfiguration>) {\r\n this.models.forEach(model => {\r\n model.updateConfiguration(modelConfiguration);\r\n });\r\n\r\n this.onModelsConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.models,\r\n newConfiguration: modelConfiguration\r\n });\r\n }*/\r\n\r\n protected _configureVR(vrConfig: IVRConfiguration) {\r\n if (vrConfig.disabled) {\r\n if (this._vrHelper) {\r\n if (this._vrHelper.isInVRMode) {\r\n this._vrHelper.exitVR();\r\n }\r\n this._vrHelper.dispose();\r\n this._vrHelper = undefined;\r\n }\r\n return;\r\n }\r\n const vrOptions: VRExperienceHelperOptions = deepmerge(\r\n {\r\n useCustomVRButton: true,\r\n createDeviceOrientationCamera: false,\r\n trackPosition: true,\r\n },\r\n vrConfig.vrOptions || {}\r\n );\r\n\r\n this._vrHelper = this.scene.createDefaultVRExperience(vrOptions);\r\n if (!vrConfig.disableInteractions) {\r\n this._vrHelper.enableInteractions();\r\n }\r\n if (!vrConfig.disableTeleportation) {\r\n const floorMeshName = vrConfig.overrideFloorMeshName || \"BackgroundPlane\";\r\n this._vrHelper.enableTeleportation({\r\n floorMeshName,\r\n });\r\n }\r\n this._vrHelper.onEnteringVRObservable.add(() => {\r\n if (this._observablesManager) {\r\n this._observablesManager.onEnteringVRObservable.notifyObservers(this);\r\n }\r\n });\r\n this._vrHelper.onExitingVRObservable.add(() => {\r\n if (this._observablesManager) {\r\n this._observablesManager.onExitingVRObservable.notifyObservers(this);\r\n }\r\n });\r\n this.onVRConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this._vrHelper,\r\n newConfiguration: vrConfig,\r\n });\r\n }\r\n\r\n protected _configureEnvironmentMap(environmentMapConfiguration: IEnvironmentMapConfiguration): any {\r\n if (environmentMapConfiguration.texture) {\r\n this.scene.environmentTexture = new CubeTexture(this._getAssetUrl(environmentMapConfiguration.texture), this.scene);\r\n }\r\n\r\n //sanity check\r\n if (this.scene.environmentTexture) {\r\n const rotatquatRotationionY = Quaternion.RotationAxis(Axis.Y, environmentMapConfiguration.rotationY || 0);\r\n Matrix.FromQuaternionToRef(rotatquatRotationionY, this.scene.environmentTexture.getReflectionTextureMatrix());\r\n }\r\n\r\n // process mainColor changes:\r\n if (environmentMapConfiguration.mainColor) {\r\n this._configurationContainer.mainColor = this.mainColor || Color3.White();\r\n const mc = environmentMapConfiguration.mainColor;\r\n if (mc.r !== undefined) {\r\n this.mainColor.r = mc.r;\r\n }\r\n if (mc.g !== undefined) {\r\n this.mainColor.g = mc.g;\r\n }\r\n if (mc.b !== undefined) {\r\n this.mainColor.b = mc.b;\r\n }\r\n\r\n this.reflectionColor.copyFrom(this.mainColor);\r\n\r\n const environmentTint = getConfigurationKey(\"environmentMap.tintLevel\", this._globalConfiguration) || 0;\r\n\r\n // reflection color\r\n this.reflectionColor.toLinearSpaceToRef(this.reflectionColor);\r\n this.reflectionColor.scaleToRef(1 / this.scene.imageProcessingConfiguration.exposure, this.reflectionColor);\r\n const tmpColor3 = Color3.Lerp(this._white, this.reflectionColor, environmentTint);\r\n this.reflectionColor.copyFrom(tmpColor3);\r\n\r\n //update the environment, if exists\r\n if (this.environmentHelper) {\r\n if (this.environmentHelper.groundMaterial) {\r\n this.environmentHelper.groundMaterial._perceptualColor = this.mainColor;\r\n }\r\n\r\n if (this.environmentHelper.skyboxMaterial) {\r\n this.environmentHelper.skyboxMaterial._perceptualColor = this.mainColor;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * (Re) configure the camera. The camera will only be created once and from this point will only be reconfigured.\r\n * @param cameraConfig the new camera configuration\r\n */\r\n protected _configureCamera(cameraConfig: ICameraConfiguration = {}) {\r\n if (!this.scene.activeCamera) {\r\n // Inline scene.createDefaultCamera to reduce file size\r\n // Dispose existing camera in replace mode.\r\n if (this.scene.activeCamera) {\r\n (this.scene.activeCamera as ArcRotateCamera).dispose();\r\n this.scene.activeCamera = null;\r\n }\r\n // Camera\r\n if (!this.scene.activeCamera) {\r\n const worldExtends = this.scene.getWorldExtends();\r\n const worldSize = worldExtends.max.subtract(worldExtends.min);\r\n const worldCenter = worldExtends.min.add(worldSize.scale(0.5));\r\n\r\n let radius = worldSize.length() * 1.5;\r\n // empty scene scenario!\r\n if (!isFinite(radius)) {\r\n radius = 1;\r\n worldCenter.copyFromFloats(0, 0, 0);\r\n }\r\n\r\n const arcRotateCamera = new ArcRotateCamera(\"default camera\", -(Math.PI / 2), Math.PI / 2, radius, worldCenter, this.scene);\r\n arcRotateCamera.lowerRadiusLimit = radius * 0.01;\r\n arcRotateCamera.wheelPrecision = 100 / radius;\r\n const camera = arcRotateCamera;\r\n\r\n camera.minZ = radius * 0.01;\r\n camera.maxZ = radius * 1000;\r\n camera.speed = radius * 0.2;\r\n this.scene.activeCamera = camera;\r\n }\r\n const canvas = this.scene.getEngine().getInputElement();\r\n if (canvas) {\r\n this.scene.activeCamera.attachControl();\r\n }\r\n\r\n this.camera = <ArcRotateCamera>this.scene.activeCamera!;\r\n this.camera.setTarget(Vector3.Zero());\r\n }\r\n if (!this.camera) {\r\n this.camera = <ArcRotateCamera>this.scene.activeCamera!;\r\n }\r\n if (cameraConfig.position) {\r\n const newPosition = this.camera.position.clone();\r\n extendClassWithConfig(newPosition, cameraConfig.position);\r\n this.camera.setPosition(newPosition);\r\n }\r\n\r\n if (cameraConfig.target) {\r\n const newTarget = this.camera.target.clone();\r\n extendClassWithConfig(newTarget, cameraConfig.target);\r\n this.camera.setTarget(newTarget);\r\n } /*else if (this.models.length && !cameraConfig.disableAutoFocus) {\r\n this._focusOnModel(this.models[0]);\r\n }*/\r\n\r\n if (cameraConfig.rotation) {\r\n this.camera.rotationQuaternion = new Quaternion(cameraConfig.rotation.x || 0, cameraConfig.rotation.y || 0, cameraConfig.rotation.z || 0, cameraConfig.rotation.w || 0);\r\n }\r\n\r\n if (cameraConfig.behaviors) {\r\n for (const name in cameraConfig.behaviors) {\r\n if (cameraConfig.behaviors[name] !== undefined) {\r\n this._setCameraBehavior(name, cameraConfig.behaviors[name]);\r\n }\r\n }\r\n }\r\n\r\n const sceneExtends = this.scene.getWorldExtends((mesh) => {\r\n return !this.environmentHelper || (mesh !== this.environmentHelper.ground && mesh !== this.environmentHelper.rootMesh && mesh !== this.environmentHelper.skybox);\r\n });\r\n const sceneDiagonal = sceneExtends.max.subtract(sceneExtends.min);\r\n const sceneDiagonalLength = sceneDiagonal.length();\r\n if (isFinite(sceneDiagonalLength)) {\r\n this.camera.upperRadiusLimit = sceneDiagonalLength * 4;\r\n }\r\n\r\n // sanity check!\r\n if (this.scene.imageProcessingConfiguration) {\r\n this.scene.imageProcessingConfiguration.colorCurvesEnabled = true;\r\n this.scene.imageProcessingConfiguration.vignetteEnabled = true;\r\n this.scene.imageProcessingConfiguration.toneMappingEnabled = !!getConfigurationKey(\"camera.toneMappingEnabled\", this._globalConfiguration);\r\n }\r\n\r\n extendClassWithConfig(this.camera, cameraConfig);\r\n\r\n this.onCameraConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.camera,\r\n newConfiguration: cameraConfig,\r\n });\r\n }\r\n\r\n private _focusOnModel = (model: ViewerModel) => {\r\n const boundingInfo = model.rootMesh.getHierarchyBoundingVectors(true);\r\n const sizeVec = boundingInfo.max.subtract(boundingInfo.min);\r\n const halfSizeVec = sizeVec.scale(0.5);\r\n const center = boundingInfo.min.add(halfSizeVec);\r\n this.camera.setTarget(center);\r\n this.camera.alpha = (this._globalConfiguration.camera && this._globalConfiguration.camera.alpha) || this.camera.alpha;\r\n this.camera.beta = (this._globalConfiguration.camera && this._globalConfiguration.camera.beta) || this.camera.beta;\r\n this.camera.radius = (this._globalConfiguration.camera && this._globalConfiguration.camera.radius) || this.camera.radius;\r\n\r\n const sceneDiagonalLenght = sizeVec.length();\r\n if (isFinite(sceneDiagonalLenght)) {\r\n this.camera.upperRadiusLimit = sceneDiagonalLenght * 4;\r\n }\r\n\r\n if (this._configurationContainer.configuration) {\r\n this._configureEnvironment(this._configurationContainer.configuration.skybox, this._configurationContainer.configuration.ground);\r\n }\r\n /*this.scene.lights.filter(light => light instanceof ShadowLight).forEach(light => {\r\n // casting ais safe, due to the constraints tested before\r\n (<ShadowLight>light).setDirectionToTarget(center);\r\n });*/\r\n };\r\n\r\n protected _configureEnvironment(skyboxConifguration?: ISkyboxConfiguration | boolean, groundConfiguration?: IGroundConfiguration | boolean) {\r\n if (!skyboxConifguration && !groundConfiguration) {\r\n if (this.environmentHelper) {\r\n this.environmentHelper.dispose();\r\n this.environmentHelper = undefined;\r\n }\r\n } else {\r\n const options: Partial<IEnvironmentHelperOptions> = {\r\n createGround: !!groundConfiguration && this._groundEnabled,\r\n createSkybox: !!skyboxConifguration,\r\n setupImageProcessing: false, // will be done at the scene level!,\r\n };\r\n\r\n // will that cause problems with model ground configuration?\r\n /*if (model) {\r\n const boundingInfo = model.rootMesh.getHierarchyBoundingVectors(true);\r\n const sizeVec = boundingInfo.max.subtract(boundingInfo.min);\r\n const halfSizeVec = sizeVec.scale(0.5);\r\n const center = boundingInfo.min.add(halfSizeVec);\r\n options.groundYBias = -center.y;\r\n }*/\r\n\r\n if (groundConfiguration) {\r\n const groundConfig = typeof groundConfiguration === \"boolean\" ? {} : groundConfiguration;\r\n\r\n const groundSize = groundConfig.size || (typeof skyboxConifguration === \"object\" && skyboxConifguration.scale);\r\n if (groundSize) {\r\n options.groundSize = groundSize;\r\n }\r\n\r\n options.enableGroundShadow = groundConfiguration === true || groundConfig.receiveShadows;\r\n if (groundConfig.shadowLevel !== undefined) {\r\n options.groundShadowLevel = groundConfig.shadowLevel;\r\n }\r\n options.enableGroundMirror = !!groundConfig.mirror && this.groundMirrorEnabled;\r\n if (groundConfig.texture) {\r\n options.groundTexture = this._getAssetUrl(groundConfig.texture);\r\n }\r\n if (groundConfig.color) {\r\n options.groundColor = new Color3(groundConfig.color.r, groundConfig.color.g, groundConfig.color.b);\r\n }\r\n\r\n if (groundConfig.opacity !== undefined) {\r\n options.groundOpacity = groundConfig.opacity;\r\n }\r\n\r\n if (groundConfig.mirror) {\r\n options.enableGroundMirror = true;\r\n // to prevent undefines\r\n if (typeof groundConfig.mirror === \"object\") {\r\n if (groundConfig.mirror.amount !== undefined) {\r\n options.groundMirrorAmount = groundConfig.mirror.amount;\r\n }\r\n if (groundConfig.mirror.sizeRatio !== undefined) {\r\n options.groundMirrorSizeRatio = groundConfig.mirror.sizeRatio;\r\n }\r\n if (groundConfig.mirror.blurKernel !== undefined) {\r\n options.groundMirrorBlurKernel = groundConfig.mirror.blurKernel;\r\n }\r\n if (groundConfig.mirror.fresnelWeight !== undefined) {\r\n options.groundMirrorFresnelWeight = groundConfig.mirror.fresnelWeight;\r\n }\r\n if (groundConfig.mirror.fallOffDistance !== undefined) {\r\n options.groundMirrorFallOffDistance = groundConfig.mirror.fallOffDistance;\r\n }\r\n if (this._defaultPipelineTextureType !== undefined) {\r\n options.groundMirrorTextureType = this._defaultPipelineTextureType;\r\n }\r\n }\r\n }\r\n }\r\n\r\n let postInitSkyboxMaterial = false;\r\n if (skyboxConifguration) {\r\n const conf = skyboxConifguration === true ? {} : skyboxConifguration;\r\n if (conf.material && conf.material.imageProcessingConfiguration) {\r\n options.setupImageProcessing = false; // will be configured later manually.\r\n }\r\n const skyboxSize = conf.scale;\r\n if (skyboxSize) {\r\n options.skyboxSize = skyboxSize;\r\n }\r\n options.sizeAuto = !options.skyboxSize;\r\n if (conf.color) {\r\n options.skyboxColor = new Color3(conf.color.r, conf.color.g, conf.color.b);\r\n }\r\n if (conf.cubeTexture && conf.cubeTexture.url) {\r\n if (typeof conf.cubeTexture.url === \"string\") {\r\n options.skyboxTexture = this._getAssetUrl(conf.cubeTexture.url);\r\n } else {\r\n // init later!\r\n postInitSkyboxMaterial = true;\r\n }\r\n }\r\n\r\n if (conf.material) {\r\n postInitSkyboxMaterial = true;\r\n }\r\n }\r\n\r\n options.setupImageProcessing = false; // TMP\r\n\r\n if (!this.environmentHelper) {\r\n this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n } else {\r\n // unlikely, but there might be a new scene! we need to dispose.\r\n\r\n // get the scene used by the envHelper\r\n const scene: Scene = this.environmentHelper.rootMesh.getScene();\r\n // is it a different scene? Oh no!\r\n if (scene !== this.scene) {\r\n this.environmentHelper.dispose();\r\n this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n } else {\r\n // recreate the ground\r\n if (this.environmentHelper.ground) {\r\n this.environmentHelper.ground.dispose();\r\n }\r\n // recreate the skybox\r\n if (this.environmentHelper.skybox) {\r\n this.environmentHelper.skybox.dispose();\r\n }\r\n\r\n this.environmentHelper.updateOptions(options)!;\r\n // update doesn't change the size of the skybox and ground, so we have to recreate!\r\n //this.environmentHelper.dispose();\r\n //this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n }\r\n }\r\n\r\n if (this.environmentHelper.rootMesh && this._globalConfiguration.scene && this._globalConfiguration.scene.environmentRotationY !== undefined) {\r\n this.environmentHelper.rootMesh.rotation.y = this._globalConfiguration.scene.environmentRotationY;\r\n }\r\n\r\n const groundConfig = typeof groundConfiguration === \"boolean\" ? {} : groundConfiguration;\r\n if (this.environmentHelper.groundMaterial && groundConfig) {\r\n this.environmentHelper.groundMaterial._perceptualColor = this.mainColor;\r\n if (groundConfig.material) {\r\n extendClassWithConfig(this.environmentHelper.groundMaterial, groundConfig.material);\r\n }\r\n\r\n if (this.environmentHelper.groundMirror) {\r\n const mirrorClearColor = this.environmentHelper.groundMaterial._perceptualColor.toLinearSpace();\r\n // TODO user camera exposure value to set the mirror clear color\r\n const exposure = Math.pow(2.0, -this.scene.imageProcessingConfiguration.exposure) * Math.PI;\r\n mirrorClearColor.scaleToRef(1 / exposure, mirrorClearColor);\r\n\r\n this.environmentHelper.groundMirror.clearColor.r = Scalar.Clamp(mirrorClearColor.r);\r\n this.environmentHelper.groundMirror.clearColor.g = Scalar.Clamp(mirrorClearColor.g);\r\n this.environmentHelper.groundMirror.clearColor.b = Scalar.Clamp(mirrorClearColor.b);\r\n this.environmentHelper.groundMirror.clearColor.a = 1;\r\n\r\n if (!this.groundMirrorEnabled) {\r\n this.environmentHelper.groundMaterial.reflectionTexture = null;\r\n }\r\n }\r\n }\r\n\r\n const skyboxMaterial = this.environmentHelper.skyboxMaterial;\r\n if (skyboxMaterial) {\r\n skyboxMaterial._perceptualColor = this.mainColor;\r\n\r\n if (postInitSkyboxMaterial) {\r\n if (typeof skyboxConifguration === \"object\" && skyboxConifguration.material) {\r\n extendClassWithConfig(skyboxMaterial, skyboxConifguration.material);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n this._updateGroundMirrorRenderList(model);\r\n });\r\n\r\n this.onEnvironmentConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.environmentHelper!,\r\n newConfiguration: {\r\n skybox: skyboxConifguration,\r\n ground: groundConfiguration,\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * configure the lights.\r\n * @param lightsConfiguration the (new) light(s) configuration\r\n */\r\n protected _configureLights(lightsConfiguration: { [name: string]: ILightConfiguration | boolean | number } = {}) {\r\n // sanity check!\r\n const lightKeys = Object.keys(lightsConfiguration).filter((name) => name !== \"globalRotation\");\r\n\r\n if (!lightKeys.length) {\r\n if (!this.scene.lights.length) {\r\n new HemisphericLight(\"default light\", Vector3.Up(), this.scene);\r\n }\r\n } else {\r\n let lightsAvailable: Array<string> = this.scene.lights.map((light) => light.name);\r\n // compare to the global (!) configuration object and dispose unneeded:\r\n const lightsToConfigure = Object.keys(this._globalConfiguration.lights || []);\r\n if (Object.keys(lightsToConfigure).length !== lightsAvailable.length) {\r\n lightsAvailable.forEach((lName) => {\r\n if (lightsToConfigure.indexOf(lName) === -1) {\r\n this.scene.getLightByName(lName)!.dispose();\r\n }\r\n });\r\n }\r\n\r\n lightKeys.forEach((name) => {\r\n let lightConfig: ILightConfiguration = { type: 0 };\r\n if (typeof lightsConfiguration[name] === \"object\") {\r\n lightConfig = <ILightConfiguration>lightsConfiguration[name];\r\n }\r\n if (typeof lightsConfiguration[name] === \"number\") {\r\n lightConfig.type = <number>lightsConfiguration[name];\r\n }\r\n\r\n lightConfig.name = name;\r\n\r\n let light: Light;\r\n // light is not already available\r\n if (lightsAvailable.indexOf(name) === -1) {\r\n const constructor = Light.GetConstructorFromName(lightConfig.type, lightConfig.name, this.scene);\r\n if (!constructor) {\r\n return;\r\n }\r\n light = constructor();\r\n } else {\r\n // available? get it from the scene\r\n light = <Light>this.scene.getLightByName(name);\r\n if (typeof lightsConfiguration[name] === \"boolean\") {\r\n lightConfig.type = light.getTypeID();\r\n }\r\n lightsAvailable = lightsAvailable.filter((ln) => ln !== name);\r\n if (lightConfig.type !== undefined && light.getTypeID() !== lightConfig.type) {\r\n light.dispose();\r\n const constructor = Light.GetConstructorFromName(lightConfig.type, lightConfig.name, this.scene);\r\n if (!constructor) {\r\n return;\r\n }\r\n light = constructor();\r\n }\r\n }\r\n\r\n // if config set the light to false, dispose it.\r\n if (lightsConfiguration[name] === false) {\r\n light.dispose();\r\n return;\r\n }\r\n\r\n //enabled\r\n const enabled = lightConfig.enabled !== undefined ? lightConfig.enabled : !lightConfig.disabled;\r\n light.setEnabled(enabled);\r\n\r\n extendClassWithConfig(light, lightConfig);\r\n\r\n //position. Some lights don't support shadows\r\n if (light instanceof ShadowLight) {\r\n // set default values\r\n light.shadowMinZ = light.shadowMinZ || 0.2;\r\n light.shadowMaxZ = Math.min(10, light.shadowMaxZ || 10); //large far clips reduce shadow depth precision\r\n\r\n if (lightConfig.target) {\r\n if (light.setDirectionToTarget) {\r\n const target = Vector3.Zero().copyFromFloats(lightConfig.target.x, lightConfig.target.y, lightConfig.target.z);\r\n light.setDirectionToTarget(target);\r\n }\r\n } else if (lightConfig.direction) {\r\n const direction = Vector3.Zero().copyFromFloats(lightConfig.direction.x, lightConfig.direction.y, lightConfig.direction.z);\r\n light.direction = direction;\r\n }\r\n\r\n let isShadowEnabled = false;\r\n if (light.getTypeID() === Light.LIGHTTYPEID_DIRECTIONALLIGHT) {\r\n (<DirectionalLight>light).shadowFrustumSize = lightConfig.shadowFrustumSize || 2;\r\n isShadowEnabled = true;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT) {\r\n const spotLight: SpotLight = <SpotLight>light;\r\n if (lightConfig.spotAngle !== undefined) {\r\n spotLight.angle = (lightConfig.spotAngle * Math.PI) / 180;\r\n }\r\n if (spotLight.angle && lightConfig.shadowFieldOfView) {\r\n spotLight.shadowAngleScale = lightConfig.shadowFieldOfView / spotLight.angle;\r\n }\r\n isShadowEnabled = true;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_POINTLIGHT) {\r\n if (lightConfig.shadowFieldOfView) {\r\n (<PointLight>light).shadowAngle = (lightConfig.shadowFieldOfView * Math.PI) / 180;\r\n }\r\n isShadowEnabled = true;\r\n }\r\n\r\n let shadowGenerator = <ShadowGenerator>light.getShadowGenerator();\r\n if (isShadowEnabled && lightConfig.shadowEnabled && this._maxShadows) {\r\n const bufferSize = lightConfig.shadowBufferSize || 256;\r\n\r\n if (!shadowGenerator) {\r\n shadowGenerator = new ShadowGenerator(bufferSize, light);\r\n }\r\n\r\n const blurKernel = this.getBlurKernel(light, bufferSize);\r\n shadowGenerator.bias = this._shadowGeneratorBias;\r\n shadowGenerator.blurKernel = blurKernel;\r\n //override defaults\r\n extendClassWithConfig(shadowGenerator, lightConfig.shadowConfig || {});\r\n\r\n // add the focus meshes to the shadow list\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n this._updateShadowRenderList(shadowGenerator, model);\r\n });\r\n\r\n //if (model) {\r\n this._updateShadowRenderList(shadowGenerator);\r\n //}\r\n } else if (shadowGenerator) {\r\n shadowGenerator.dispose();\r\n }\r\n }\r\n });\r\n\r\n // render priority\r\n const globalLightsConfiguration = this._globalConfiguration.lights || {};\r\n Object.keys(globalLightsConfiguration)\r\n .sort()\r\n .forEach((name, idx) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n // const configuration = globalLightsConfiguration[name];\r\n const light = this.scene.getLightByName(name);\r\n // sanity check\r\n if (!light) {\r\n return;\r\n }\r\n light.renderPriority = -idx;\r\n });\r\n }\r\n\r\n this.onLightsConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.scene.lights,\r\n newConfiguration: lightsConfiguration,\r\n });\r\n }\r\n\r\n private _shadowGroundPlane: Nullable<AbstractMesh>;\r\n\r\n private _updateShadowRenderList(shadowGenerator: ShadowGenerator, model?: ViewerModel, resetList?: boolean) {\r\n const focusMeshes = model ? model.meshes : this.scene.meshes;\r\n // add the focus meshes to the shadow list\r\n const shadownMap = shadowGenerator.getShadowMap();\r\n if (!shadownMap) {\r\n return;\r\n }\r\n if (resetList && shadownMap.renderList) {\r\n shadownMap.renderList.length = 0;\r\n } else {\r\n shadownMap.renderList = shadownMap.renderList || [];\r\n }\r\n for (let index = 0; index < focusMeshes.length; index++) {\r\n const mesh = focusMeshes[index];\r\n if (Tags.MatchesQuery(mesh, \"castShadow\") && shadownMap.renderList.indexOf(mesh) === -1) {\r\n shadownMap.renderList.push(mesh);\r\n }\r\n }\r\n\r\n if (!this._shadowGroundPlane) {\r\n if (shadowGenerator.useBlurCloseExponentialShadowMap) {\r\n const shadowGroundPlane = CreatePlane(\"shadowGroundPlane\", { size: 100 }, this.scene);\r\n shadowGroundPlane.useVertexColors = false;\r\n //material isn't ever used in rendering, just used to set back face culling\r\n shadowGroundPlane.material = new PBRMaterial(\"shadowGroundPlaneMaterial\", this.scene);\r\n shadowGroundPlane.material.backFaceCulling = false;\r\n shadowGroundPlane.rotation.x = Math.PI * 0.5;\r\n shadowGroundPlane.freezeWorldMatrix();\r\n this._shadowGroundPlane = shadowGroundPlane;\r\n this.scene.removeMesh(shadowGroundPlane);\r\n }\r\n } else {\r\n if (!shadowGenerator.useBlurCloseExponentialShadowMap) {\r\n this._shadowGroundPlane.dispose();\r\n this._shadowGroundPlane = null;\r\n }\r\n }\r\n\r\n if (this._shadowGroundPlane && shadownMap.renderList.indexOf(this._shadowGroundPlane) === -1) {\r\n shadownMap.renderList.push(this._shadowGroundPlane);\r\n }\r\n }\r\n\r\n private _updateGroundMirrorRenderList(model?: ViewerModel, resetList?: boolean) {\r\n if (this.environmentHelper && this.environmentHelper.groundMirror && this.environmentHelper.groundMirror.renderList) {\r\n const focusMeshes = model ? model.meshes : this.scene.meshes;\r\n const renderList = this.environmentHelper.groundMirror.renderList;\r\n if (resetList) {\r\n renderList.length = 0;\r\n }\r\n for (let index = 0; index < focusMeshes.length; index++) {\r\n const mesh = focusMeshes[index];\r\n if (renderList.indexOf(mesh) === -1) {\r\n renderList.push(mesh);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the shadow map blur kernel according to the light configuration.\r\n * @param light The light used to generate the shadows\r\n * @param bufferSize The size of the shadow map\r\n * @returns the kernel blur size\r\n */\r\n public getBlurKernel(light: IShadowLight, bufferSize: number): number {\r\n let normalizedBlurKernel = 0.05; // TODO Should come from the config.\r\n if (light.getTypeID() === Light.LIGHTTYPEID_DIRECTIONALLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / (<DirectionalLight>light).shadowFrustumSize;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_POINTLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / (<PointLight>light).shadowAngle;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / ((<SpotLight>light).angle * (<SpotLight>light).shadowAngleScale);\r\n }\r\n\r\n const minimumBlurKernel = 5 / (bufferSize / 256); //magic number that aims to keep away sawtooth shadows\r\n\r\n const blurKernel = Math.max(bufferSize * normalizedBlurKernel, minimumBlurKernel);\r\n return blurKernel;\r\n }\r\n\r\n /**\r\n * Alters render settings to reduce features based on hardware feature limitations\r\n * @param enableHDR Allows the viewer to run in HDR mode.\r\n */\r\n protected _handleHardwareLimitations(enableHDR = true) {\r\n //flip rendering settings switches based on hardware support\r\n const maxVaryingRows = this._engine.getCaps().maxVaryingVectors;\r\n const maxFragmentSamplers = this._engine.getCaps().maxTexturesImageUnits;\r\n\r\n //shadows are disabled if there's not enough varyings for a single shadow\r\n if (maxVaryingRows < 8 || maxFragmentSamplers < 8) {\r\n this._maxShadows = 0;\r\n } else {\r\n this._maxShadows = 3;\r\n }\r\n\r\n //can we render to any >= 16-bit targets (required for HDR)\r\n const caps = this._engine.getCaps();\r\n const linearHalfFloatTargets = caps.textureHalfFloatRender && caps.textureHalfFloatLinearFiltering;\r\n const linearFloatTargets = caps.textureFloatRender && caps.textureFloatLinearFiltering;\r\n\r\n this._hdrSupport = enableHDR && !!(linearFloatTargets || linearHalfFloatTargets);\r\n\r\n if (linearHalfFloatTargets) {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n this._shadowGeneratorBias = 0.002;\r\n } else if (linearFloatTargets) {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_FLOAT;\r\n this._shadowGeneratorBias = 0.001;\r\n } else {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_UNSIGNED_INT;\r\n this._shadowGeneratorBias = 0.001;\r\n }\r\n\r\n this._defaultPipelineTextureType = this._hdrSupport ? this._defaultHighpTextureType : Constants.TEXTURETYPE_UNSIGNED_INT;\r\n }\r\n\r\n /**\r\n * Dispose the entire viewer including the scene and the engine\r\n */\r\n public dispose() {\r\n // this.onCameraConfiguredObservable.clear();\r\n this.onEnvironmentConfiguredObservable.clear();\r\n this.onLightsConfiguredObservable.clear();\r\n this.onModelsConfiguredObservable.clear();\r\n this.onSceneConfiguredObservable.clear();\r\n this.onSceneInitObservable.clear();\r\n this.onSceneOptimizerConfiguredObservable.clear();\r\n this.onVRConfiguredObservable.clear();\r\n\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n }\r\n\r\n if (this.environmentHelper) {\r\n this.environmentHelper.dispose();\r\n }\r\n\r\n this.models.forEach((model) => {\r\n model.dispose();\r\n });\r\n\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipeline.dispose();\r\n }\r\n\r\n this.models.length = 0;\r\n\r\n if (this.scene) {\r\n this.scene.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Get an environment asset url by using the configuration if the path is not absolute.\r\n * @param url Asset url\r\n * @returns The Asset url using the `environmentAssetsRootURL` if the url is not an absolute path.\r\n */\r\n private _getAssetUrl(url: string): string {\r\n let returnUrl = url;\r\n if (url && url.toLowerCase().indexOf(\"//\") === -1) {\r\n if (!this._assetsRootURL) {\r\n // Tools.Warn(\"Please, specify the root url of your assets before loading the configuration (labs.environmentAssetsRootURL) or disable the background through the viewer options.\");\r\n return url;\r\n }\r\n\r\n returnUrl = this._assetsRootURL + returnUrl;\r\n }\r\n\r\n return returnUrl;\r\n }\r\n\r\n private _cameraBehaviorMapping: { [name: string]: number } = {};\r\n\r\n private _setCameraBehavior(\r\n name: string,\r\n behaviorConfig:\r\n | boolean\r\n | number\r\n | {\r\n type: number;\r\n [propName: string]: any;\r\n }\r\n ) {\r\n let behavior: Behavior<ArcRotateCamera> | null;\r\n let type: number;\r\n if (typeof behaviorConfig === \"object\") {\r\n type = behaviorConfig.type;\r\n } else if (typeof behaviorConfig === \"number\") {\r\n type = behaviorConfig;\r\n } else {\r\n type = this._cameraBehaviorMapping[name];\r\n }\r\n\r\n if (type === undefined) {\r\n return;\r\n }\r\n\r\n const config: { [propName: string]: any } = typeof behaviorConfig === \"object\" ? behaviorConfig : {};\r\n\r\n let enabled = true;\r\n if (typeof behaviorConfig === \"boolean\") {\r\n enabled = behaviorConfig;\r\n }\r\n\r\n // constructing behavior\r\n switch (type) {\r\n case CameraBehavior.AUTOROTATION:\r\n this.camera.useAutoRotationBehavior = enabled;\r\n behavior = this.camera.autoRotationBehavior;\r\n break;\r\n case CameraBehavior.BOUNCING:\r\n this.camera.useBouncingBehavior = enabled;\r\n behavior = this.camera.bouncingBehavior;\r\n break;\r\n case CameraBehavior.FRAMING:\r\n this.camera.useFramingBehavior = enabled;\r\n behavior = this.camera.framingBehavior;\r\n break;\r\n default:\r\n behavior = null;\r\n break;\r\n }\r\n\r\n if (behavior) {\r\n this._cameraBehaviorMapping[name] = type;\r\n\r\n if (typeof behaviorConfig === \"object\") {\r\n extendClassWithConfig(behavior, behaviorConfig);\r\n }\r\n }\r\n\r\n // post attach configuration. Some functionalities require the attached camera.\r\n switch (type) {\r\n case CameraBehavior.AUTOROTATION:\r\n break;\r\n case CameraBehavior.BOUNCING:\r\n break;\r\n case CameraBehavior.FRAMING:\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n if (config.zoomOnBoundingInfo) {\r\n (<FramingBehavior>behavior).zoomOnMeshHierarchy(model.rootMesh);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"sceneManager.js","sourceRoot":"","sources":["../../../../tools/viewer/src/managers/sceneManager.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable import/no-internal-modules */\r\nimport type {\r\n ILightConfiguration,\r\n ISceneConfiguration,\r\n ISceneOptimizerConfiguration,\r\n ICameraConfiguration,\r\n ISkyboxConfiguration,\r\n IGroundConfiguration,\r\n IModelConfiguration,\r\n IDefaultRenderingPipelineConfiguration,\r\n IVRConfiguration,\r\n} from \"../configuration/interfaces/index\";\r\nimport type { ViewerConfiguration } from \"../configuration/configuration\";\r\nimport { getConfigurationKey } from \"../configuration/configuration\";\r\nimport type { ViewerModel } from \"../model/viewerModel\";\r\nimport { ModelState } from \"../model/viewerModel\";\r\nimport { extendClassWithConfig, deepmerge } from \"../helper/index\";\r\nimport { CameraBehavior } from \"../interfaces\";\r\nimport { ViewerLabs } from \"../labs/viewerLabs\";\r\nimport { getCustomOptimizerByName } from \"../optimizer/custom/index\";\r\nimport type { ObservablesManager } from \"../managers/observablesManager\";\r\nimport type { ConfigurationContainer } from \"../configuration/configurationContainer\";\r\nimport type { IEnvironmentMapConfiguration } from \"../configuration/interfaces/environmentMapConfiguration\";\r\nimport { Observable } from \"core/Misc/observable\";\r\nimport { SceneOptimizer, SceneOptimizerOptions } from \"core/Misc/sceneOptimizer\";\r\nimport { ArcRotateCamera } from \"core/Cameras/arcRotateCamera\";\r\nimport { Light } from \"core/Lights/light\";\r\nimport type { IEnvironmentHelperOptions } from \"core/Helpers/environmentHelper\";\r\nimport { EnvironmentHelper } from \"core/Helpers/environmentHelper\";\r\nimport type { VRExperienceHelper, VRExperienceHelperOptions } from \"core/Cameras/VR/vrExperienceHelper\";\r\nimport { Color3, Quaternion, Vector3, Axis, Matrix } from \"core/Maths/math\";\r\nimport type { Nullable } from \"core/types\";\r\nimport { DefaultRenderingPipeline } from \"core/PostProcesses/RenderPipeline/Pipelines/defaultRenderingPipeline\";\r\nimport type { Engine } from \"core/Engines/engine\";\r\nimport { Animation } from \"core/Animations/index\";\r\nimport { AnimationPropertiesOverride } from \"core/Animations/animationPropertiesOverride\";\r\nimport { RenderTargetTexture } from \"core/Materials/Textures/renderTargetTexture\";\r\nimport { PBRMaterial } from \"core/Materials/PBR/pbrMaterial\";\r\nimport type { IShadowLight } from \"core/Lights/shadowLight\";\r\nimport { ShadowLight } from \"core/Lights/shadowLight\";\r\nimport { CubeTexture } from \"core/Materials/Textures/cubeTexture\";\r\nimport type { DirectionalLight } from \"core/Lights/directionalLight\";\r\nimport { HemisphericLight } from \"core/Lights/hemisphericLight\";\r\nimport { Scalar } from \"core/Maths/math.scalar\";\r\nimport type { SpotLight } from \"core/Lights/spotLight\";\r\nimport type { PointLight } from \"core/Lights/pointLight\";\r\nimport type { AbstractMesh } from \"core/Meshes/abstractMesh\";\r\nimport { CreatePlane } from \"core/Meshes/Builders/planeBuilder\";\r\nimport { Tags } from \"core/Misc/tags\";\r\nimport type { Behavior } from \"core/Behaviors/behavior\";\r\nimport type { FramingBehavior } from \"core/Behaviors/Cameras/framingBehavior\";\r\nimport { Scene } from \"core/scene\";\r\nimport { ShadowGenerator } from \"core/Lights/Shadows/shadowGenerator\";\r\nimport { Constants } from \"core/Engines/constants\";\r\nimport \"core/Audio/audioSceneComponent\";\r\nimport \"core/Helpers/sceneHelpers\";\r\nimport \"core/Misc/observable.extensions\";\r\n\r\n/**\r\n * This interface describes the structure of the variable sent with the configuration observables of the scene manager.\r\n * O - the type of object we are dealing with (Light, ArcRotateCamera, Scene, etc')\r\n * T - the configuration type\r\n */\r\nexport interface IPostConfigurationCallback<OBJ, CONF> {\r\n newConfiguration: CONF;\r\n sceneManager: SceneManager;\r\n object: OBJ;\r\n model?: ViewerModel;\r\n}\r\n\r\nexport class SceneManager {\r\n //Observers\r\n /**\r\n * Will notify when the scene was initialized\r\n */\r\n onSceneInitObservable: Observable<Scene>;\r\n /**\r\n * Will notify after the scene was configured. Can be used to further configure the scene\r\n */\r\n onSceneConfiguredObservable: Observable<IPostConfigurationCallback<Scene, ISceneConfiguration>>;\r\n /**\r\n * Will notify after the scene optimized was configured. Can be used to further configure the scene optimizer\r\n */\r\n onSceneOptimizerConfiguredObservable: Observable<IPostConfigurationCallback<SceneOptimizer, ISceneOptimizerConfiguration | boolean>>;\r\n /**\r\n * Will notify after the camera was configured. Can be used to further configure the camera\r\n */\r\n onCameraConfiguredObservable: Observable<IPostConfigurationCallback<ArcRotateCamera, ICameraConfiguration>>;\r\n /**\r\n * Will notify after the lights were configured. Can be used to further configure lights\r\n */\r\n onLightsConfiguredObservable: Observable<IPostConfigurationCallback<Array<Light>, { [name: string]: ILightConfiguration | boolean | number }>>;\r\n /**\r\n * Will notify after the model(s) were configured. Can be used to further configure models\r\n */\r\n onModelsConfiguredObservable: Observable<IPostConfigurationCallback<Array<ViewerModel>, IModelConfiguration>>;\r\n /**\r\n * Will notify after the environment was configured. Can be used to further configure the environment\r\n */\r\n onEnvironmentConfiguredObservable: Observable<\r\n IPostConfigurationCallback<EnvironmentHelper, { skybox?: ISkyboxConfiguration | boolean; ground?: IGroundConfiguration | boolean }>\r\n >;\r\n\r\n /**\r\n * Will notify after the model(s) were configured. Can be used to further configure models\r\n */\r\n onVRConfiguredObservable: Observable<IPostConfigurationCallback<VRExperienceHelper, IVRConfiguration>>;\r\n\r\n /**\r\n * The Babylon Scene of this viewer\r\n */\r\n public scene: Scene;\r\n /**\r\n * The camera used in this viewer\r\n */\r\n public camera: ArcRotateCamera;\r\n /**\r\n * Babylon's scene optimizer\r\n */\r\n public sceneOptimizer?: SceneOptimizer;\r\n /**\r\n * Models displayed in this viewer.\r\n */\r\n public models: Array<ViewerModel>;\r\n /**\r\n * Babylon's environment helper of this viewer\r\n */\r\n public environmentHelper?: EnvironmentHelper;\r\n\r\n //The following are configuration objects, default values.\r\n protected _defaultHighpTextureType: number;\r\n protected _shadowGeneratorBias: number;\r\n protected _defaultPipelineTextureType: number;\r\n\r\n /**\r\n * The maximum number of shadows supported by the current viewer\r\n */\r\n protected _maxShadows: number;\r\n /**\r\n * is HDR supported?\r\n */\r\n private _hdrSupport: boolean;\r\n\r\n private readonly _white = Color3.White();\r\n\r\n private _forceShadowUpdate: boolean = false;\r\n\r\n /**\r\n * The labs variable consists of objects that will have their API change.\r\n * Please be careful when using labs in production.\r\n */\r\n public labs: ViewerLabs;\r\n\r\n private _defaultRenderingPipeline: Nullable<DefaultRenderingPipeline>;\r\n\r\n private _assetsRootURL: string;\r\n\r\n public get defaultRenderingPipeline() {\r\n return this._defaultRenderingPipeline;\r\n }\r\n\r\n protected _vrHelper?: VRExperienceHelper;\r\n\r\n public get vrHelper() {\r\n return this._vrHelper;\r\n }\r\n\r\n constructor(\r\n private _engine: Engine,\r\n private _configurationContainer: ConfigurationContainer,\r\n private _observablesManager?: ObservablesManager\r\n ) {\r\n this.models = [];\r\n\r\n this.onCameraConfiguredObservable = new Observable();\r\n this.onLightsConfiguredObservable = new Observable();\r\n this.onModelsConfiguredObservable = new Observable();\r\n this.onSceneConfiguredObservable = new Observable();\r\n this.onSceneInitObservable = new Observable(undefined, true);\r\n this.onSceneOptimizerConfiguredObservable = new Observable();\r\n this.onEnvironmentConfiguredObservable = new Observable();\r\n this.onVRConfiguredObservable = new Observable();\r\n\r\n //this._viewer.onEngineInitObservable.add(() => {\r\n this._handleHardwareLimitations();\r\n //});\r\n\r\n this.onSceneInitObservable.add((scene) => {\r\n this.scene.animationPropertiesOverride = this.scene.animationPropertiesOverride || new AnimationPropertiesOverride();\r\n\r\n this.labs = new ViewerLabs(scene);\r\n\r\n const updateShadows = () => {\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n if (generators) {\r\n // Processing shadows if animates\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n }\r\n }\r\n }\r\n }\r\n };\r\n scene.registerBeforeRender(() => {\r\n if (this._forceShadowUpdate || (scene.animatables && scene.animatables.length > 0)) {\r\n // make sure all models are loaded\r\n updateShadows();\r\n this._forceShadowUpdate = false;\r\n } else if (\r\n !this.models.every((model) => {\r\n if (!model.shadowsRenderedAfterLoad) {\r\n model.shadowsRenderedAfterLoad = true;\r\n return false;\r\n }\r\n return model.state === ModelState.COMPLETE && !model.currentAnimation;\r\n })\r\n ) {\r\n updateShadows();\r\n }\r\n });\r\n return this._observablesManager && this._observablesManager.onSceneInitObservable.notifyObserversWithPromise(this.scene);\r\n });\r\n if (this._observablesManager) {\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n if (generators) {\r\n // Processing shadows if animates\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n }\r\n }\r\n }\r\n }\r\n this._focusOnModel(model);\r\n });\r\n\r\n this._observablesManager.onModelAddedObservable.add((model) => {\r\n this.models.push(model);\r\n });\r\n this._observablesManager.onModelRemovedObservable.add((model) => {\r\n this.models.splice(this.models.indexOf(model), 1);\r\n });\r\n }\r\n }\r\n\r\n /**\r\n * Returns a boolean representing HDR support\r\n */\r\n public get isHdrSupported() {\r\n return this._hdrSupport;\r\n }\r\n\r\n /**\r\n * Return the main color defined in the configuration.\r\n */\r\n public get mainColor(): Color3 {\r\n return this._configurationContainer.mainColor;\r\n }\r\n\r\n public get reflectionColor(): Color3 {\r\n return this._configurationContainer.reflectionColor;\r\n }\r\n\r\n public get animationBlendingEnabled() {\r\n return this.scene && this.scene.animationPropertiesOverride!.enableBlending;\r\n }\r\n\r\n public set animationBlendingEnabled(value: boolean) {\r\n this.scene.animationPropertiesOverride!.enableBlending = value;\r\n }\r\n\r\n public get observablesManager() {\r\n return this._observablesManager;\r\n }\r\n\r\n private _processShadows: boolean = true;\r\n\r\n /**\r\n * The flag defining whether shadows are rendered constantly or once.\r\n */\r\n public get processShadows() {\r\n return this._processShadows;\r\n }\r\n\r\n /**\r\n * Should shadows be rendered every frame, or only once and stop.\r\n * This can be used to optimize a scene.\r\n *\r\n * Not that the shadows will NOT disapear but will remain in place.\r\n * @param process if true shadows will be updated once every frame. if false they will stop being updated.\r\n */\r\n public set processShadows(process: boolean) {\r\n const refreshType = process ? RenderTargetTexture.REFRESHRATE_RENDER_ONEVERYFRAME : RenderTargetTexture.REFRESHRATE_RENDER_ONCE;\r\n\r\n for (const light of this.scene.lights) {\r\n const generators = light.getShadowGenerators();\r\n\r\n if (generators) {\r\n const iterator = generators.values();\r\n for (let key = iterator.next(); key.done !== true; key = iterator.next()) {\r\n const generator = key.value;\r\n const shadowMap = generator.getShadowMap();\r\n if (shadowMap) {\r\n shadowMap.refreshRate = refreshType;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._processShadows = process;\r\n }\r\n\r\n private _groundEnabled: boolean = true;\r\n\r\n public get groundEnabled() {\r\n return this._groundEnabled;\r\n }\r\n\r\n public set groundEnabled(newValue: boolean) {\r\n if (newValue === this._groundEnabled) {\r\n return;\r\n }\r\n\r\n this._groundEnabled = newValue;\r\n\r\n if (this.environmentHelper && this.environmentHelper.ground) {\r\n this.environmentHelper.ground.setEnabled(this._groundEnabled);\r\n }\r\n }\r\n\r\n private _groundMirrorEnabled = true;\r\n /**\r\n * gets whether the reflection is disabled.\r\n */\r\n public get groundMirrorEnabled(): boolean {\r\n return this._groundMirrorEnabled;\r\n }\r\n /**\r\n * sets whether the reflection is disabled.\r\n */\r\n public set groundMirrorEnabled(value: boolean) {\r\n if (this._groundMirrorEnabled === value) {\r\n return;\r\n }\r\n\r\n this._groundMirrorEnabled = value;\r\n if (this.environmentHelper && this.environmentHelper.groundMaterial && this.environmentHelper.groundMirror) {\r\n if (!value) {\r\n this.environmentHelper.groundMaterial.reflectionTexture = null;\r\n } else {\r\n this.environmentHelper.groundMaterial.reflectionTexture = this.environmentHelper.groundMirror;\r\n }\r\n }\r\n }\r\n\r\n private _defaultRenderingPipelineEnabled: boolean = false;\r\n\r\n public get defaultRenderingPipelineEnabled() {\r\n return this._defaultRenderingPipelineEnabled;\r\n }\r\n\r\n public set defaultRenderingPipelineEnabled(value: boolean) {\r\n if (value === this._defaultRenderingPipelineEnabled) {\r\n return;\r\n }\r\n\r\n this._defaultRenderingPipelineEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n /**\r\n * Sets the engine flags to unlock all babylon features.\r\n * Can also be configured using the scene.flags configuration object\r\n */\r\n public unlockBabylonFeatures() {\r\n this.scene.shadowsEnabled = true;\r\n this.scene.particlesEnabled = true;\r\n this.scene.postProcessesEnabled = true;\r\n this.scene.collisionsEnabled = true;\r\n this.scene.lightsEnabled = true;\r\n this.scene.texturesEnabled = true;\r\n this.scene.lensFlaresEnabled = true;\r\n this.scene.proceduralTexturesEnabled = true;\r\n this.scene.renderTargetsEnabled = true;\r\n this.scene.spritesEnabled = true;\r\n this.scene.skeletonsEnabled = true;\r\n this.scene.audioEnabled = true;\r\n }\r\n\r\n /**\r\n * initialize the scene. Calling this function again will dispose the old scene, if exists.\r\n * @param sceneConfiguration the configuration of the scene\r\n * @returns a promise that resolves when the scene is ready\r\n */\r\n public initScene(sceneConfiguration: ISceneConfiguration = {}): Promise<Scene> {\r\n // if the scene exists, dispose it.\r\n if (this.scene) {\r\n this.scene.dispose();\r\n }\r\n\r\n // create a new scene\r\n this.scene = new Scene(this._engine);\r\n\r\n this._configurationContainer.scene = this.scene;\r\n\r\n // set a default PBR material\r\n if (!sceneConfiguration.defaultMaterial) {\r\n const defaultMaterial = new PBRMaterial(\"defaultMaterial\", this.scene);\r\n defaultMaterial.reflectivityColor = new Color3(0.1, 0.1, 0.1);\r\n defaultMaterial.microSurface = 0.6;\r\n\r\n if (this.scene.defaultMaterial) {\r\n this.scene.defaultMaterial.dispose();\r\n }\r\n\r\n this.scene.defaultMaterial = defaultMaterial;\r\n }\r\n\r\n this.scene.animationPropertiesOverride = new AnimationPropertiesOverride();\r\n\r\n Animation.AllowMatricesInterpolation = true;\r\n\r\n /*if (sceneConfiguration.glow) {\r\n let options: Partial<IGlowLayerOptions> = {\r\n mainTextureFixedSize: 512\r\n };\r\n if (typeof sceneConfiguration.glow === 'object') {\r\n options = sceneConfiguration.glow\r\n }\r\n var gl = new GlowLayer(\"glow\", this.scene, options);\r\n }*/\r\n\r\n return this.onSceneInitObservable.notifyObserversWithPromise(this.scene);\r\n }\r\n\r\n public clearScene(clearModels: boolean = true, clearLights: boolean = false) {\r\n if (clearModels) {\r\n this.models.forEach((m) => m.dispose());\r\n this.models.length = 0;\r\n }\r\n if (clearLights) {\r\n this.scene.lights.forEach((l) => l.dispose());\r\n }\r\n }\r\n\r\n private _globalConfiguration: ViewerConfiguration = {};\r\n\r\n /**\r\n * This will update the scene's configuration, including camera, lights, environment.\r\n * @param newConfiguration the delta that should be configured. This includes only the changes\r\n */\r\n public updateConfiguration(newConfiguration: Partial<ViewerConfiguration>) {\r\n if (this._configurationContainer) {\r\n this._globalConfiguration = this._configurationContainer.configuration;\r\n } else {\r\n this._globalConfiguration = newConfiguration;\r\n }\r\n\r\n // update scene configuration\r\n if (newConfiguration.scene) {\r\n this._configureScene(newConfiguration.scene);\r\n }\r\n\r\n // optimizer\r\n if (newConfiguration.optimizer !== undefined) {\r\n this._configureOptimizer(newConfiguration.optimizer);\r\n }\r\n\r\n // configure model\r\n /*if (newConfiguration.model && typeof newConfiguration.model === 'object') {\r\n this._configureModel(newConfiguration.model);\r\n }*/\r\n\r\n // lights\r\n this._configureLights(newConfiguration.lights);\r\n\r\n // environment\r\n if (newConfiguration.skybox !== undefined || newConfiguration.ground !== undefined) {\r\n this._configureEnvironment(newConfiguration.skybox, newConfiguration.ground);\r\n }\r\n\r\n // camera\r\n this._configureCamera(newConfiguration.camera);\r\n\r\n if (newConfiguration.environmentMap !== undefined) {\r\n this._configureEnvironmentMap(newConfiguration.environmentMap);\r\n }\r\n\r\n if (newConfiguration.vr !== undefined) {\r\n this._configureVR(newConfiguration.vr);\r\n }\r\n\r\n if (newConfiguration.lab) {\r\n // rendering pipelines\r\n if (newConfiguration.lab.defaultRenderingPipelines) {\r\n const pipelineConfig = newConfiguration.lab.defaultRenderingPipelines;\r\n if (typeof pipelineConfig === \"boolean\") {\r\n this.defaultRenderingPipelineEnabled = pipelineConfig;\r\n } else {\r\n this.defaultRenderingPipelineEnabled = true;\r\n }\r\n }\r\n\r\n if (this.environmentHelper && newConfiguration.lab.environmentMainColor) {\r\n const mainColor = new Color3(newConfiguration.lab.environmentMainColor.r, newConfiguration.lab.environmentMainColor.g, newConfiguration.lab.environmentMainColor.b);\r\n this.environmentHelper.setMainColor(mainColor);\r\n }\r\n\r\n if (newConfiguration.lab.globalLightRotation !== undefined) {\r\n // rotate all lights that are shadow lights\r\n this.scene.lights\r\n .filter((light) => light instanceof ShadowLight)\r\n .forEach((light) => {\r\n // casting and '!' are safe, due to the constraints tested before\r\n this.labs.rotateShadowLight(<ShadowLight>light, newConfiguration.lab!.globalLightRotation!);\r\n });\r\n this._forceShadowUpdate = true;\r\n }\r\n }\r\n\r\n if (this._defaultRenderingPipeline && this._defaultRenderingPipeline.imageProcessing) {\r\n this._defaultRenderingPipeline.imageProcessing.fromLinearSpace = true;\r\n }\r\n\r\n if (this._defaultRenderingPipelineShouldBuild && this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n }\r\n }\r\n\r\n private _defaultRenderingPipelineShouldBuild: boolean = true;\r\n\r\n private _rebuildPostprocesses(configuration?: IDefaultRenderingPipelineConfiguration): void {\r\n if (!this._defaultRenderingPipelineEnabled || !getConfigurationKey(\"scene.imageProcessingConfiguration.isEnabled\", this._globalConfiguration)) {\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipeline.dispose();\r\n this._defaultRenderingPipeline = null;\r\n this.scene.autoClearDepthAndStencil = true;\r\n this.scene.autoClear = true;\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = false;\r\n }\r\n\r\n return;\r\n }\r\n\r\n const pipelineConfig = configuration || (this._globalConfiguration.lab && this._globalConfiguration.lab.defaultRenderingPipelines);\r\n if (pipelineConfig) {\r\n if (!this._defaultRenderingPipeline) {\r\n // Create pipeline in manual mode to avoid triggering multiple shader compilations\r\n this._defaultRenderingPipeline = new DefaultRenderingPipeline(\"default rendering pipeline\", this._hdrSupport, this.scene, [this.camera], false);\r\n }\r\n this.scene.autoClear = false;\r\n this.scene.autoClearDepthAndStencil = false;\r\n this._defaultRenderingPipelineShouldBuild = true;\r\n\r\n let bloomEnabled = this._bloomEnabled;\r\n\r\n if (typeof pipelineConfig !== \"boolean\") {\r\n extendClassWithConfig(this._defaultRenderingPipeline, pipelineConfig);\r\n this._bloomEnabled = !!pipelineConfig.bloomEnabled;\r\n this._fxaaEnabled = !!pipelineConfig.fxaaEnabled;\r\n bloomEnabled = this._bloomEnabled && pipelineConfig.bloomWeight !== undefined && pipelineConfig.bloomWeight > 0;\r\n\r\n this._defaultRenderingPipeline.bloomWeight = (pipelineConfig.bloomWeight !== undefined && pipelineConfig.bloomWeight) || this._defaultRenderingPipeline.bloomWeight;\r\n }\r\n\r\n this._defaultRenderingPipeline.bloomEnabled = bloomEnabled;\r\n this._defaultRenderingPipeline.fxaaEnabled = this.fxaaEnabled;\r\n }\r\n }\r\n\r\n // default from rendering pipeline\r\n private _bloomEnabled: boolean = false;\r\n\r\n public get bloomEnabled() {\r\n return this._bloomEnabled;\r\n }\r\n\r\n public set bloomEnabled(value: boolean) {\r\n if (this._bloomEnabled === value) {\r\n return;\r\n }\r\n\r\n this._bloomEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n // default from rendering pipeline\r\n private _fxaaEnabled: boolean = false;\r\n\r\n public get fxaaEnabled() {\r\n return this._fxaaEnabled;\r\n }\r\n\r\n public set fxaaEnabled(value: boolean) {\r\n if (this._fxaaEnabled === value) {\r\n return;\r\n }\r\n\r\n this._fxaaEnabled = value;\r\n this._rebuildPostprocesses();\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipelineShouldBuild = false;\r\n this._defaultRenderingPipeline.prepare();\r\n this.scene.imageProcessingConfiguration.applyByPostProcess = true;\r\n }\r\n }\r\n\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n public setDefaultMaterial(sceneConfig: ISceneConfiguration) {}\r\n\r\n /**\r\n * internally configure the scene using the provided configuration.\r\n * The scene will not be recreated, but just updated.\r\n * @param sceneConfig the (new) scene configuration\r\n */\r\n protected _configureScene(sceneConfig: ISceneConfiguration) {\r\n // sanity check!\r\n if (!this.scene) {\r\n return;\r\n }\r\n\r\n const cc = sceneConfig.clearColor;\r\n const oldcc = this.scene.clearColor;\r\n if (cc) {\r\n if (cc.r !== undefined) {\r\n oldcc.r = cc.r;\r\n }\r\n if (cc.g !== undefined) {\r\n oldcc.g = cc.g;\r\n }\r\n if (cc.b !== undefined) {\r\n oldcc.b = cc.b;\r\n }\r\n if (cc.a !== undefined) {\r\n oldcc.a = cc.a;\r\n }\r\n }\r\n\r\n if (sceneConfig.assetsRootURL) {\r\n this._assetsRootURL = sceneConfig.assetsRootURL;\r\n }\r\n\r\n // image processing configuration - optional.\r\n if (sceneConfig.imageProcessingConfiguration) {\r\n extendClassWithConfig(this.scene.imageProcessingConfiguration, sceneConfig.imageProcessingConfiguration);\r\n }\r\n //animation properties override\r\n if (sceneConfig.animationPropertiesOverride) {\r\n extendClassWithConfig(this.scene.animationPropertiesOverride, sceneConfig.animationPropertiesOverride);\r\n }\r\n if (sceneConfig.environmentTexture) {\r\n if (!(this.scene.environmentTexture && (<CubeTexture>this.scene.environmentTexture).url === sceneConfig.environmentTexture)) {\r\n if (this.scene.environmentTexture && this.scene.environmentTexture.dispose) {\r\n this.scene.environmentTexture.dispose();\r\n }\r\n const environmentTexture = CubeTexture.CreateFromPrefilteredData(sceneConfig.environmentTexture, this.scene);\r\n this.scene.environmentTexture = environmentTexture;\r\n }\r\n }\r\n\r\n if (sceneConfig.debug === true) {\r\n this.scene.debugLayer.show();\r\n } else if (sceneConfig.debug === false) {\r\n if (this.scene.debugLayer.isVisible()) {\r\n this.scene.debugLayer.hide();\r\n }\r\n }\r\n\r\n if (sceneConfig.disableHdr) {\r\n this._handleHardwareLimitations(false);\r\n } else {\r\n this._handleHardwareLimitations(true);\r\n }\r\n\r\n if (sceneConfig.renderInBackground !== undefined) {\r\n this._engine.renderEvenInBackground = !!sceneConfig.renderInBackground;\r\n }\r\n\r\n const canvas = this._engine.getInputElement();\r\n\r\n if (canvas) {\r\n if (this.camera && sceneConfig.disableCameraControl) {\r\n this.camera.detachControl();\r\n } else if (this.camera && sceneConfig.disableCameraControl === false) {\r\n this.camera.attachControl();\r\n }\r\n }\r\n\r\n this.setDefaultMaterial(sceneConfig);\r\n\r\n if (sceneConfig.flags) {\r\n extendClassWithConfig(this.scene, sceneConfig.flags);\r\n }\r\n\r\n this.onSceneConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.scene,\r\n newConfiguration: sceneConfig,\r\n });\r\n }\r\n\r\n /**\r\n * Configure the scene optimizer.\r\n * The existing scene optimizer will be disposed and a new one will be created.\r\n * @param optimizerConfig the (new) optimizer configuration\r\n */\r\n protected _configureOptimizer(optimizerConfig: ISceneOptimizerConfiguration | boolean) {\r\n if (typeof optimizerConfig === \"boolean\") {\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n delete this.sceneOptimizer;\r\n }\r\n if (optimizerConfig) {\r\n this.sceneOptimizer = new SceneOptimizer(this.scene);\r\n this.sceneOptimizer.start();\r\n }\r\n } else {\r\n let optimizerOptions: SceneOptimizerOptions = new SceneOptimizerOptions(optimizerConfig.targetFrameRate, optimizerConfig.trackerDuration);\r\n // check for degradation\r\n if (optimizerConfig.degradation) {\r\n switch (optimizerConfig.degradation) {\r\n case \"low\":\r\n optimizerOptions = SceneOptimizerOptions.LowDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n case \"moderate\":\r\n optimizerOptions = SceneOptimizerOptions.ModerateDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n case \"hight\":\r\n optimizerOptions = SceneOptimizerOptions.HighDegradationAllowed(optimizerConfig.targetFrameRate);\r\n break;\r\n }\r\n }\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n }\r\n if (optimizerConfig.custom) {\r\n const customOptimizer = getCustomOptimizerByName(optimizerConfig.custom, optimizerConfig.improvementMode);\r\n if (customOptimizer) {\r\n optimizerOptions.addCustomOptimization(\r\n () => {\r\n return customOptimizer(this);\r\n },\r\n () => {\r\n return `Babylon Viewer ${optimizerConfig.custom} custom optimization`;\r\n }\r\n );\r\n }\r\n }\r\n this.sceneOptimizer = new SceneOptimizer(this.scene, optimizerOptions, optimizerConfig.autoGeneratePriorities, optimizerConfig.improvementMode);\r\n this.sceneOptimizer.start();\r\n }\r\n\r\n this.onSceneOptimizerConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.sceneOptimizer!,\r\n newConfiguration: optimizerConfig,\r\n });\r\n }\r\n\r\n /**\r\n * configure all models using the configuration.\r\n * @param modelConfiguration the configuration to use to reconfigure the models\r\n */\r\n /*protected _configureModel(modelConfiguration: Partial<IModelConfiguration>) {\r\n this.models.forEach(model => {\r\n model.updateConfiguration(modelConfiguration);\r\n });\r\n\r\n this.onModelsConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.models,\r\n newConfiguration: modelConfiguration\r\n });\r\n }*/\r\n\r\n protected _configureVR(vrConfig: IVRConfiguration) {\r\n if (vrConfig.disabled) {\r\n if (this._vrHelper) {\r\n if (this._vrHelper.isInVRMode) {\r\n this._vrHelper.exitVR();\r\n }\r\n this._vrHelper.dispose();\r\n this._vrHelper = undefined;\r\n }\r\n return;\r\n }\r\n const vrOptions: VRExperienceHelperOptions = deepmerge(\r\n {\r\n useCustomVRButton: true,\r\n createDeviceOrientationCamera: false,\r\n trackPosition: true,\r\n },\r\n vrConfig.vrOptions || {}\r\n );\r\n\r\n this._vrHelper = this.scene.createDefaultVRExperience(vrOptions);\r\n if (!vrConfig.disableInteractions) {\r\n this._vrHelper.enableInteractions();\r\n }\r\n if (!vrConfig.disableTeleportation) {\r\n const floorMeshName = vrConfig.overrideFloorMeshName || \"BackgroundPlane\";\r\n this._vrHelper.enableTeleportation({\r\n floorMeshName,\r\n });\r\n }\r\n this._vrHelper.onEnteringVRObservable.add(() => {\r\n if (this._observablesManager) {\r\n this._observablesManager.onEnteringVRObservable.notifyObservers(this);\r\n }\r\n });\r\n this._vrHelper.onExitingVRObservable.add(() => {\r\n if (this._observablesManager) {\r\n this._observablesManager.onExitingVRObservable.notifyObservers(this);\r\n }\r\n });\r\n this.onVRConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this._vrHelper,\r\n newConfiguration: vrConfig,\r\n });\r\n }\r\n\r\n protected _configureEnvironmentMap(environmentMapConfiguration: IEnvironmentMapConfiguration): any {\r\n if (environmentMapConfiguration.texture) {\r\n this.scene.environmentTexture = new CubeTexture(this._getAssetUrl(environmentMapConfiguration.texture), this.scene);\r\n }\r\n\r\n //sanity check\r\n if (this.scene.environmentTexture) {\r\n const rotatquatRotationionY = Quaternion.RotationAxis(Axis.Y, environmentMapConfiguration.rotationY || 0);\r\n Matrix.FromQuaternionToRef(rotatquatRotationionY, this.scene.environmentTexture.getReflectionTextureMatrix());\r\n }\r\n\r\n // process mainColor changes:\r\n if (environmentMapConfiguration.mainColor) {\r\n this._configurationContainer.mainColor = this.mainColor || Color3.White();\r\n const mc = environmentMapConfiguration.mainColor;\r\n if (mc.r !== undefined) {\r\n this.mainColor.r = mc.r;\r\n }\r\n if (mc.g !== undefined) {\r\n this.mainColor.g = mc.g;\r\n }\r\n if (mc.b !== undefined) {\r\n this.mainColor.b = mc.b;\r\n }\r\n\r\n this.reflectionColor.copyFrom(this.mainColor);\r\n\r\n const environmentTint = getConfigurationKey(\"environmentMap.tintLevel\", this._globalConfiguration) || 0;\r\n\r\n // reflection color\r\n this.reflectionColor.toLinearSpaceToRef(this.reflectionColor);\r\n this.reflectionColor.scaleToRef(1 / this.scene.imageProcessingConfiguration.exposure, this.reflectionColor);\r\n const tmpColor3 = Color3.Lerp(this._white, this.reflectionColor, environmentTint);\r\n this.reflectionColor.copyFrom(tmpColor3);\r\n\r\n //update the environment, if exists\r\n if (this.environmentHelper) {\r\n if (this.environmentHelper.groundMaterial) {\r\n this.environmentHelper.groundMaterial._perceptualColor = this.mainColor;\r\n }\r\n\r\n if (this.environmentHelper.skyboxMaterial) {\r\n this.environmentHelper.skyboxMaterial._perceptualColor = this.mainColor;\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * (Re) configure the camera. The camera will only be created once and from this point will only be reconfigured.\r\n * @param cameraConfig the new camera configuration\r\n */\r\n protected _configureCamera(cameraConfig: ICameraConfiguration = {}) {\r\n if (!this.scene.activeCamera) {\r\n // Inline scene.createDefaultCamera to reduce file size\r\n // Dispose existing camera in replace mode.\r\n if (this.scene.activeCamera) {\r\n (this.scene.activeCamera as ArcRotateCamera).dispose();\r\n this.scene.activeCamera = null;\r\n }\r\n // Camera\r\n if (!this.scene.activeCamera) {\r\n const worldExtends = this.scene.getWorldExtends();\r\n const worldSize = worldExtends.max.subtract(worldExtends.min);\r\n const worldCenter = worldExtends.min.add(worldSize.scale(0.5));\r\n\r\n let radius = worldSize.length() * 1.5;\r\n // empty scene scenario!\r\n if (!isFinite(radius)) {\r\n radius = 1;\r\n worldCenter.copyFromFloats(0, 0, 0);\r\n }\r\n\r\n const arcRotateCamera = new ArcRotateCamera(\"default camera\", -(Math.PI / 2), Math.PI / 2, radius, worldCenter, this.scene);\r\n arcRotateCamera.lowerRadiusLimit = radius * 0.01;\r\n arcRotateCamera.wheelPrecision = 100 / radius;\r\n const camera = arcRotateCamera;\r\n\r\n camera.minZ = radius * 0.01;\r\n camera.maxZ = radius * 1000;\r\n camera.speed = radius * 0.2;\r\n this.scene.activeCamera = camera;\r\n }\r\n const canvas = this.scene.getEngine().getInputElement();\r\n if (canvas) {\r\n this.scene.activeCamera.attachControl();\r\n }\r\n\r\n this.camera = <ArcRotateCamera>this.scene.activeCamera!;\r\n this.camera.setTarget(Vector3.Zero());\r\n }\r\n if (!this.camera) {\r\n this.camera = <ArcRotateCamera>this.scene.activeCamera!;\r\n }\r\n if (cameraConfig.position) {\r\n const newPosition = this.camera.position.clone();\r\n extendClassWithConfig(newPosition, cameraConfig.position);\r\n this.camera.setPosition(newPosition);\r\n }\r\n\r\n if (cameraConfig.target) {\r\n const newTarget = this.camera.target.clone();\r\n extendClassWithConfig(newTarget, cameraConfig.target);\r\n this.camera.setTarget(newTarget);\r\n } /*else if (this.models.length && !cameraConfig.disableAutoFocus) {\r\n this._focusOnModel(this.models[0]);\r\n }*/\r\n\r\n if (cameraConfig.rotation) {\r\n this.camera.rotationQuaternion = new Quaternion(cameraConfig.rotation.x || 0, cameraConfig.rotation.y || 0, cameraConfig.rotation.z || 0, cameraConfig.rotation.w || 0);\r\n }\r\n\r\n if (cameraConfig.behaviors) {\r\n for (const name in cameraConfig.behaviors) {\r\n if (cameraConfig.behaviors[name] !== undefined) {\r\n this._setCameraBehavior(name, cameraConfig.behaviors[name]);\r\n }\r\n }\r\n }\r\n\r\n const sceneExtends = this.scene.getWorldExtends((mesh) => {\r\n return !this.environmentHelper || (mesh !== this.environmentHelper.ground && mesh !== this.environmentHelper.rootMesh && mesh !== this.environmentHelper.skybox);\r\n });\r\n const sceneDiagonal = sceneExtends.max.subtract(sceneExtends.min);\r\n const sceneDiagonalLength = sceneDiagonal.length();\r\n if (isFinite(sceneDiagonalLength)) {\r\n this.camera.upperRadiusLimit = sceneDiagonalLength * 4;\r\n }\r\n\r\n // sanity check!\r\n if (this.scene.imageProcessingConfiguration) {\r\n this.scene.imageProcessingConfiguration.colorCurvesEnabled = true;\r\n this.scene.imageProcessingConfiguration.vignetteEnabled = true;\r\n this.scene.imageProcessingConfiguration.toneMappingEnabled = !!getConfigurationKey(\"camera.toneMappingEnabled\", this._globalConfiguration);\r\n }\r\n\r\n extendClassWithConfig(this.camera, cameraConfig);\r\n\r\n this.onCameraConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.camera,\r\n newConfiguration: cameraConfig,\r\n });\r\n }\r\n\r\n private _focusOnModel = (model: ViewerModel) => {\r\n const boundingInfo = model.rootMesh.getHierarchyBoundingVectors(true);\r\n const sizeVec = boundingInfo.max.subtract(boundingInfo.min);\r\n const halfSizeVec = sizeVec.scale(0.5);\r\n const center = boundingInfo.min.add(halfSizeVec);\r\n this.camera.setTarget(center);\r\n this.camera.alpha = (this._globalConfiguration.camera && this._globalConfiguration.camera.alpha) || this.camera.alpha;\r\n this.camera.beta = (this._globalConfiguration.camera && this._globalConfiguration.camera.beta) || this.camera.beta;\r\n this.camera.radius = (this._globalConfiguration.camera && this._globalConfiguration.camera.radius) || this.camera.radius;\r\n\r\n const sceneDiagonalLenght = sizeVec.length();\r\n if (isFinite(sceneDiagonalLenght)) {\r\n this.camera.upperRadiusLimit = sceneDiagonalLenght * 4;\r\n }\r\n\r\n if (this._configurationContainer.configuration) {\r\n this._configureEnvironment(this._configurationContainer.configuration.skybox, this._configurationContainer.configuration.ground);\r\n }\r\n /*this.scene.lights.filter(light => light instanceof ShadowLight).forEach(light => {\r\n // casting ais safe, due to the constraints tested before\r\n (<ShadowLight>light).setDirectionToTarget(center);\r\n });*/\r\n };\r\n\r\n protected _configureEnvironment(skyboxConifguration?: ISkyboxConfiguration | boolean, groundConfiguration?: IGroundConfiguration | boolean) {\r\n if (!skyboxConifguration && !groundConfiguration) {\r\n if (this.environmentHelper) {\r\n this.environmentHelper.dispose();\r\n this.environmentHelper = undefined;\r\n }\r\n } else {\r\n const options: Partial<IEnvironmentHelperOptions> = {\r\n createGround: !!groundConfiguration && this._groundEnabled,\r\n createSkybox: !!skyboxConifguration,\r\n setupImageProcessing: false, // will be done at the scene level!,\r\n };\r\n\r\n // will that cause problems with model ground configuration?\r\n /*if (model) {\r\n const boundingInfo = model.rootMesh.getHierarchyBoundingVectors(true);\r\n const sizeVec = boundingInfo.max.subtract(boundingInfo.min);\r\n const halfSizeVec = sizeVec.scale(0.5);\r\n const center = boundingInfo.min.add(halfSizeVec);\r\n options.groundYBias = -center.y;\r\n }*/\r\n\r\n if (groundConfiguration) {\r\n const groundConfig = typeof groundConfiguration === \"boolean\" ? {} : groundConfiguration;\r\n\r\n const groundSize = groundConfig.size || (typeof skyboxConifguration === \"object\" && skyboxConifguration.scale);\r\n if (groundSize) {\r\n options.groundSize = groundSize;\r\n }\r\n\r\n options.enableGroundShadow = groundConfiguration === true || groundConfig.receiveShadows;\r\n if (groundConfig.shadowLevel !== undefined) {\r\n options.groundShadowLevel = groundConfig.shadowLevel;\r\n }\r\n options.enableGroundMirror = !!groundConfig.mirror && this.groundMirrorEnabled;\r\n if (groundConfig.texture) {\r\n options.groundTexture = this._getAssetUrl(groundConfig.texture);\r\n }\r\n if (groundConfig.color) {\r\n options.groundColor = new Color3(groundConfig.color.r, groundConfig.color.g, groundConfig.color.b);\r\n }\r\n\r\n if (groundConfig.opacity !== undefined) {\r\n options.groundOpacity = groundConfig.opacity;\r\n }\r\n\r\n if (groundConfig.mirror) {\r\n options.enableGroundMirror = true;\r\n // to prevent undefines\r\n if (typeof groundConfig.mirror === \"object\") {\r\n if (groundConfig.mirror.amount !== undefined) {\r\n options.groundMirrorAmount = groundConfig.mirror.amount;\r\n }\r\n if (groundConfig.mirror.sizeRatio !== undefined) {\r\n options.groundMirrorSizeRatio = groundConfig.mirror.sizeRatio;\r\n }\r\n if (groundConfig.mirror.blurKernel !== undefined) {\r\n options.groundMirrorBlurKernel = groundConfig.mirror.blurKernel;\r\n }\r\n if (groundConfig.mirror.fresnelWeight !== undefined) {\r\n options.groundMirrorFresnelWeight = groundConfig.mirror.fresnelWeight;\r\n }\r\n if (groundConfig.mirror.fallOffDistance !== undefined) {\r\n options.groundMirrorFallOffDistance = groundConfig.mirror.fallOffDistance;\r\n }\r\n if (this._defaultPipelineTextureType !== undefined) {\r\n options.groundMirrorTextureType = this._defaultPipelineTextureType;\r\n }\r\n }\r\n }\r\n }\r\n\r\n let postInitSkyboxMaterial = false;\r\n if (skyboxConifguration) {\r\n const conf = skyboxConifguration === true ? {} : skyboxConifguration;\r\n if (conf.material && conf.material.imageProcessingConfiguration) {\r\n options.setupImageProcessing = false; // will be configured later manually.\r\n }\r\n const skyboxSize = conf.scale;\r\n if (skyboxSize) {\r\n options.skyboxSize = skyboxSize;\r\n }\r\n options.sizeAuto = !options.skyboxSize;\r\n if (conf.color) {\r\n options.skyboxColor = new Color3(conf.color.r, conf.color.g, conf.color.b);\r\n }\r\n if (conf.cubeTexture && conf.cubeTexture.url) {\r\n if (typeof conf.cubeTexture.url === \"string\") {\r\n options.skyboxTexture = this._getAssetUrl(conf.cubeTexture.url);\r\n } else {\r\n // init later!\r\n postInitSkyboxMaterial = true;\r\n }\r\n }\r\n\r\n if (conf.material) {\r\n postInitSkyboxMaterial = true;\r\n }\r\n }\r\n\r\n options.setupImageProcessing = false; // TMP\r\n\r\n if (!this.environmentHelper) {\r\n this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n } else {\r\n // unlikely, but there might be a new scene! we need to dispose.\r\n\r\n // get the scene used by the envHelper\r\n const scene: Scene = this.environmentHelper.rootMesh.getScene();\r\n // is it a different scene? Oh no!\r\n if (scene !== this.scene) {\r\n this.environmentHelper.dispose();\r\n this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n } else {\r\n // recreate the ground\r\n if (this.environmentHelper.ground) {\r\n this.environmentHelper.ground.dispose();\r\n }\r\n // recreate the skybox\r\n if (this.environmentHelper.skybox) {\r\n this.environmentHelper.skybox.dispose();\r\n }\r\n\r\n this.environmentHelper.updateOptions(options)!;\r\n // update doesn't change the size of the skybox and ground, so we have to recreate!\r\n //this.environmentHelper.dispose();\r\n //this.environmentHelper = new EnvironmentHelper(options, this.scene);\r\n }\r\n }\r\n\r\n if (this.environmentHelper.rootMesh && this._globalConfiguration.scene && this._globalConfiguration.scene.environmentRotationY !== undefined) {\r\n this.environmentHelper.rootMesh.rotation.y = this._globalConfiguration.scene.environmentRotationY;\r\n }\r\n\r\n const groundConfig = typeof groundConfiguration === \"boolean\" ? {} : groundConfiguration;\r\n if (this.environmentHelper.groundMaterial && groundConfig) {\r\n this.environmentHelper.groundMaterial._perceptualColor = this.mainColor;\r\n if (groundConfig.material) {\r\n extendClassWithConfig(this.environmentHelper.groundMaterial, groundConfig.material);\r\n }\r\n\r\n if (this.environmentHelper.groundMirror) {\r\n const mirrorClearColor = this.environmentHelper.groundMaterial._perceptualColor.toLinearSpace();\r\n // TODO user camera exposure value to set the mirror clear color\r\n const exposure = Math.pow(2.0, -this.scene.imageProcessingConfiguration.exposure) * Math.PI;\r\n mirrorClearColor.scaleToRef(1 / exposure, mirrorClearColor);\r\n\r\n this.environmentHelper.groundMirror.clearColor.r = Scalar.Clamp(mirrorClearColor.r);\r\n this.environmentHelper.groundMirror.clearColor.g = Scalar.Clamp(mirrorClearColor.g);\r\n this.environmentHelper.groundMirror.clearColor.b = Scalar.Clamp(mirrorClearColor.b);\r\n this.environmentHelper.groundMirror.clearColor.a = 1;\r\n\r\n if (!this.groundMirrorEnabled) {\r\n this.environmentHelper.groundMaterial.reflectionTexture = null;\r\n }\r\n }\r\n }\r\n\r\n const skyboxMaterial = this.environmentHelper.skyboxMaterial;\r\n if (skyboxMaterial) {\r\n skyboxMaterial._perceptualColor = this.mainColor;\r\n\r\n if (postInitSkyboxMaterial) {\r\n if (typeof skyboxConifguration === \"object\" && skyboxConifguration.material) {\r\n extendClassWithConfig(skyboxMaterial, skyboxConifguration.material);\r\n }\r\n }\r\n }\r\n }\r\n\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n this._updateGroundMirrorRenderList(model);\r\n });\r\n\r\n this.onEnvironmentConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.environmentHelper!,\r\n newConfiguration: {\r\n skybox: skyboxConifguration,\r\n ground: groundConfiguration,\r\n },\r\n });\r\n }\r\n\r\n /**\r\n * configure the lights.\r\n * @param lightsConfiguration the (new) light(s) configuration\r\n */\r\n protected _configureLights(lightsConfiguration: { [name: string]: ILightConfiguration | boolean | number } = {}) {\r\n // sanity check!\r\n const lightKeys = Object.keys(lightsConfiguration).filter((name) => name !== \"globalRotation\");\r\n\r\n if (!lightKeys.length) {\r\n if (!this.scene.lights.length) {\r\n new HemisphericLight(\"default light\", Vector3.Up(), this.scene);\r\n }\r\n } else {\r\n let lightsAvailable: Array<string> = this.scene.lights.map((light) => light.name);\r\n // compare to the global (!) configuration object and dispose unneeded:\r\n const lightsToConfigure = Object.keys(this._globalConfiguration.lights || []);\r\n if (Object.keys(lightsToConfigure).length !== lightsAvailable.length) {\r\n lightsAvailable.forEach((lName) => {\r\n if (lightsToConfigure.indexOf(lName) === -1) {\r\n this.scene.getLightByName(lName)!.dispose();\r\n }\r\n });\r\n }\r\n\r\n lightKeys.forEach((name) => {\r\n let lightConfig: ILightConfiguration = { type: 0 };\r\n if (typeof lightsConfiguration[name] === \"object\") {\r\n lightConfig = <ILightConfiguration>lightsConfiguration[name];\r\n }\r\n if (typeof lightsConfiguration[name] === \"number\") {\r\n lightConfig.type = <number>lightsConfiguration[name];\r\n }\r\n\r\n lightConfig.name = name;\r\n\r\n let light: Light;\r\n // light is not already available\r\n if (lightsAvailable.indexOf(name) === -1) {\r\n const constructor = Light.GetConstructorFromName(lightConfig.type, lightConfig.name, this.scene);\r\n if (!constructor) {\r\n return;\r\n }\r\n light = constructor();\r\n } else {\r\n // available? get it from the scene\r\n light = <Light>this.scene.getLightByName(name);\r\n if (typeof lightsConfiguration[name] === \"boolean\") {\r\n lightConfig.type = light.getTypeID();\r\n }\r\n lightsAvailable = lightsAvailable.filter((ln) => ln !== name);\r\n if (lightConfig.type !== undefined && light.getTypeID() !== lightConfig.type) {\r\n light.dispose();\r\n const constructor = Light.GetConstructorFromName(lightConfig.type, lightConfig.name, this.scene);\r\n if (!constructor) {\r\n return;\r\n }\r\n light = constructor();\r\n }\r\n }\r\n\r\n // if config set the light to false, dispose it.\r\n if (lightsConfiguration[name] === false) {\r\n light.dispose();\r\n return;\r\n }\r\n\r\n //enabled\r\n const enabled = lightConfig.enabled !== undefined ? lightConfig.enabled : !lightConfig.disabled;\r\n light.setEnabled(enabled);\r\n\r\n extendClassWithConfig(light, lightConfig);\r\n\r\n //position. Some lights don't support shadows\r\n if (light instanceof ShadowLight) {\r\n // set default values\r\n light.shadowMinZ = light.shadowMinZ || 0.2;\r\n light.shadowMaxZ = Math.min(10, light.shadowMaxZ || 10); //large far clips reduce shadow depth precision\r\n\r\n if (lightConfig.target) {\r\n if (light.setDirectionToTarget) {\r\n const target = Vector3.Zero().copyFromFloats(lightConfig.target.x, lightConfig.target.y, lightConfig.target.z);\r\n light.setDirectionToTarget(target);\r\n }\r\n } else if (lightConfig.direction) {\r\n const direction = Vector3.Zero().copyFromFloats(lightConfig.direction.x, lightConfig.direction.y, lightConfig.direction.z);\r\n light.direction = direction;\r\n }\r\n\r\n let isShadowEnabled = false;\r\n if (light.getTypeID() === Light.LIGHTTYPEID_DIRECTIONALLIGHT) {\r\n (<DirectionalLight>light).shadowFrustumSize = lightConfig.shadowFrustumSize || 2;\r\n isShadowEnabled = true;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT) {\r\n const spotLight: SpotLight = <SpotLight>light;\r\n if (lightConfig.spotAngle !== undefined) {\r\n spotLight.angle = (lightConfig.spotAngle * Math.PI) / 180;\r\n }\r\n if (spotLight.angle && lightConfig.shadowFieldOfView) {\r\n spotLight.shadowAngleScale = lightConfig.shadowFieldOfView / spotLight.angle;\r\n }\r\n isShadowEnabled = true;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_POINTLIGHT) {\r\n if (lightConfig.shadowFieldOfView) {\r\n (<PointLight>light).shadowAngle = (lightConfig.shadowFieldOfView * Math.PI) / 180;\r\n }\r\n isShadowEnabled = true;\r\n }\r\n\r\n let shadowGenerator = <ShadowGenerator>light.getShadowGenerator();\r\n if (isShadowEnabled && lightConfig.shadowEnabled && this._maxShadows) {\r\n const bufferSize = lightConfig.shadowBufferSize || 256;\r\n\r\n if (!shadowGenerator) {\r\n shadowGenerator = new ShadowGenerator(bufferSize, light);\r\n }\r\n\r\n const blurKernel = this.getBlurKernel(light, bufferSize);\r\n shadowGenerator.bias = this._shadowGeneratorBias;\r\n shadowGenerator.blurKernel = blurKernel;\r\n //override defaults\r\n extendClassWithConfig(shadowGenerator, lightConfig.shadowConfig || {});\r\n\r\n // add the focus meshes to the shadow list\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n this._updateShadowRenderList(shadowGenerator, model);\r\n });\r\n\r\n //if (model) {\r\n this._updateShadowRenderList(shadowGenerator);\r\n //}\r\n } else if (shadowGenerator) {\r\n shadowGenerator.dispose();\r\n }\r\n }\r\n });\r\n\r\n // render priority\r\n const globalLightsConfiguration = this._globalConfiguration.lights || {};\r\n Object.keys(globalLightsConfiguration)\r\n .sort()\r\n .forEach((name, idx) => {\r\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\r\n // const configuration = globalLightsConfiguration[name];\r\n const light = this.scene.getLightByName(name);\r\n // sanity check\r\n if (!light) {\r\n return;\r\n }\r\n light.renderPriority = -idx;\r\n });\r\n }\r\n\r\n this.onLightsConfiguredObservable.notifyObservers({\r\n sceneManager: this,\r\n object: this.scene.lights,\r\n newConfiguration: lightsConfiguration,\r\n });\r\n }\r\n\r\n private _shadowGroundPlane: Nullable<AbstractMesh>;\r\n\r\n private _updateShadowRenderList(shadowGenerator: ShadowGenerator, model?: ViewerModel, resetList?: boolean) {\r\n const focusMeshes = model ? model.meshes : this.scene.meshes;\r\n // add the focus meshes to the shadow list\r\n const shadownMap = shadowGenerator.getShadowMap();\r\n if (!shadownMap) {\r\n return;\r\n }\r\n if (resetList && shadownMap.renderList) {\r\n shadownMap.renderList.length = 0;\r\n } else {\r\n shadownMap.renderList = shadownMap.renderList || [];\r\n }\r\n for (let index = 0; index < focusMeshes.length; index++) {\r\n const mesh = focusMeshes[index];\r\n if (Tags.MatchesQuery(mesh, \"castShadow\") && shadownMap.renderList.indexOf(mesh) === -1) {\r\n shadownMap.renderList.push(mesh);\r\n }\r\n }\r\n\r\n if (!this._shadowGroundPlane) {\r\n if (shadowGenerator.useBlurCloseExponentialShadowMap) {\r\n const shadowGroundPlane = CreatePlane(\"shadowGroundPlane\", { size: 100 }, this.scene);\r\n shadowGroundPlane.useVertexColors = false;\r\n //material isn't ever used in rendering, just used to set back face culling\r\n shadowGroundPlane.material = new PBRMaterial(\"shadowGroundPlaneMaterial\", this.scene);\r\n shadowGroundPlane.material.backFaceCulling = false;\r\n shadowGroundPlane.rotation.x = Math.PI * 0.5;\r\n shadowGroundPlane.freezeWorldMatrix();\r\n this._shadowGroundPlane = shadowGroundPlane;\r\n this.scene.removeMesh(shadowGroundPlane);\r\n }\r\n } else {\r\n if (!shadowGenerator.useBlurCloseExponentialShadowMap) {\r\n this._shadowGroundPlane.dispose();\r\n this._shadowGroundPlane = null;\r\n }\r\n }\r\n\r\n if (this._shadowGroundPlane && shadownMap.renderList.indexOf(this._shadowGroundPlane) === -1) {\r\n shadownMap.renderList.push(this._shadowGroundPlane);\r\n }\r\n }\r\n\r\n private _updateGroundMirrorRenderList(model?: ViewerModel, resetList?: boolean) {\r\n if (this.environmentHelper && this.environmentHelper.groundMirror && this.environmentHelper.groundMirror.renderList) {\r\n const focusMeshes = model ? model.meshes : this.scene.meshes;\r\n const renderList = this.environmentHelper.groundMirror.renderList;\r\n if (resetList) {\r\n renderList.length = 0;\r\n }\r\n for (let index = 0; index < focusMeshes.length; index++) {\r\n const mesh = focusMeshes[index];\r\n if (renderList.indexOf(mesh) === -1) {\r\n renderList.push(mesh);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Gets the shadow map blur kernel according to the light configuration.\r\n * @param light The light used to generate the shadows\r\n * @param bufferSize The size of the shadow map\r\n * @returns the kernel blur size\r\n */\r\n public getBlurKernel(light: IShadowLight, bufferSize: number): number {\r\n let normalizedBlurKernel = 0.05; // TODO Should come from the config.\r\n if (light.getTypeID() === Light.LIGHTTYPEID_DIRECTIONALLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / (<DirectionalLight>light).shadowFrustumSize;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_POINTLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / (<PointLight>light).shadowAngle;\r\n } else if (light.getTypeID() === Light.LIGHTTYPEID_SPOTLIGHT) {\r\n normalizedBlurKernel = normalizedBlurKernel / ((<SpotLight>light).angle * (<SpotLight>light).shadowAngleScale);\r\n }\r\n\r\n const minimumBlurKernel = 5 / (bufferSize / 256); //magic number that aims to keep away sawtooth shadows\r\n\r\n const blurKernel = Math.max(bufferSize * normalizedBlurKernel, minimumBlurKernel);\r\n return blurKernel;\r\n }\r\n\r\n /**\r\n * Alters render settings to reduce features based on hardware feature limitations\r\n * @param enableHDR Allows the viewer to run in HDR mode.\r\n */\r\n protected _handleHardwareLimitations(enableHDR = true) {\r\n //flip rendering settings switches based on hardware support\r\n const maxVaryingRows = this._engine.getCaps().maxVaryingVectors;\r\n const maxFragmentSamplers = this._engine.getCaps().maxTexturesImageUnits;\r\n\r\n //shadows are disabled if there's not enough varyings for a single shadow\r\n if (maxVaryingRows < 8 || maxFragmentSamplers < 8) {\r\n this._maxShadows = 0;\r\n } else {\r\n this._maxShadows = 3;\r\n }\r\n\r\n //can we render to any >= 16-bit targets (required for HDR)\r\n const caps = this._engine.getCaps();\r\n const linearHalfFloatTargets = caps.textureHalfFloatRender && caps.textureHalfFloatLinearFiltering;\r\n const linearFloatTargets = caps.textureFloatRender && caps.textureFloatLinearFiltering;\r\n\r\n this._hdrSupport = enableHDR && !!(linearFloatTargets || linearHalfFloatTargets);\r\n\r\n if (linearHalfFloatTargets) {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_HALF_FLOAT;\r\n this._shadowGeneratorBias = 0.002;\r\n } else if (linearFloatTargets) {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_FLOAT;\r\n this._shadowGeneratorBias = 0.001;\r\n } else {\r\n this._defaultHighpTextureType = Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n this._shadowGeneratorBias = 0.001;\r\n }\r\n\r\n this._defaultPipelineTextureType = this._hdrSupport ? this._defaultHighpTextureType : Constants.TEXTURETYPE_UNSIGNED_BYTE;\r\n }\r\n\r\n /**\r\n * Dispose the entire viewer including the scene and the engine\r\n */\r\n public dispose() {\r\n // this.onCameraConfiguredObservable.clear();\r\n this.onEnvironmentConfiguredObservable.clear();\r\n this.onLightsConfiguredObservable.clear();\r\n this.onModelsConfiguredObservable.clear();\r\n this.onSceneConfiguredObservable.clear();\r\n this.onSceneInitObservable.clear();\r\n this.onSceneOptimizerConfiguredObservable.clear();\r\n this.onVRConfiguredObservable.clear();\r\n\r\n if (this.sceneOptimizer) {\r\n this.sceneOptimizer.stop();\r\n this.sceneOptimizer.dispose();\r\n }\r\n\r\n if (this.environmentHelper) {\r\n this.environmentHelper.dispose();\r\n }\r\n\r\n this.models.forEach((model) => {\r\n model.dispose();\r\n });\r\n\r\n if (this._defaultRenderingPipeline) {\r\n this._defaultRenderingPipeline.dispose();\r\n }\r\n\r\n this.models.length = 0;\r\n\r\n if (this.scene) {\r\n this.scene.dispose();\r\n }\r\n }\r\n\r\n /**\r\n * Get an environment asset url by using the configuration if the path is not absolute.\r\n * @param url Asset url\r\n * @returns The Asset url using the `environmentAssetsRootURL` if the url is not an absolute path.\r\n */\r\n private _getAssetUrl(url: string): string {\r\n let returnUrl = url;\r\n if (url && url.toLowerCase().indexOf(\"//\") === -1) {\r\n if (!this._assetsRootURL) {\r\n // Tools.Warn(\"Please, specify the root url of your assets before loading the configuration (labs.environmentAssetsRootURL) or disable the background through the viewer options.\");\r\n return url;\r\n }\r\n\r\n returnUrl = this._assetsRootURL + returnUrl;\r\n }\r\n\r\n return returnUrl;\r\n }\r\n\r\n private _cameraBehaviorMapping: { [name: string]: number } = {};\r\n\r\n private _setCameraBehavior(\r\n name: string,\r\n behaviorConfig:\r\n | boolean\r\n | number\r\n | {\r\n type: number;\r\n [propName: string]: any;\r\n }\r\n ) {\r\n let behavior: Behavior<ArcRotateCamera> | null;\r\n let type: number;\r\n if (typeof behaviorConfig === \"object\") {\r\n type = behaviorConfig.type;\r\n } else if (typeof behaviorConfig === \"number\") {\r\n type = behaviorConfig;\r\n } else {\r\n type = this._cameraBehaviorMapping[name];\r\n }\r\n\r\n if (type === undefined) {\r\n return;\r\n }\r\n\r\n const config: { [propName: string]: any } = typeof behaviorConfig === \"object\" ? behaviorConfig : {};\r\n\r\n let enabled = true;\r\n if (typeof behaviorConfig === \"boolean\") {\r\n enabled = behaviorConfig;\r\n }\r\n\r\n // constructing behavior\r\n switch (type) {\r\n case CameraBehavior.AUTOROTATION:\r\n this.camera.useAutoRotationBehavior = enabled;\r\n behavior = this.camera.autoRotationBehavior;\r\n break;\r\n case CameraBehavior.BOUNCING:\r\n this.camera.useBouncingBehavior = enabled;\r\n behavior = this.camera.bouncingBehavior;\r\n break;\r\n case CameraBehavior.FRAMING:\r\n this.camera.useFramingBehavior = enabled;\r\n behavior = this.camera.framingBehavior;\r\n break;\r\n default:\r\n behavior = null;\r\n break;\r\n }\r\n\r\n if (behavior) {\r\n this._cameraBehaviorMapping[name] = type;\r\n\r\n if (typeof behaviorConfig === \"object\") {\r\n extendClassWithConfig(behavior, behaviorConfig);\r\n }\r\n }\r\n\r\n // post attach configuration. Some functionalities require the attached camera.\r\n switch (type) {\r\n case CameraBehavior.AUTOROTATION:\r\n break;\r\n case CameraBehavior.BOUNCING:\r\n break;\r\n case CameraBehavior.FRAMING:\r\n this._observablesManager &&\r\n this._observablesManager.onModelLoadedObservable.add((model) => {\r\n if (config.zoomOnBoundingInfo) {\r\n (<FramingBehavior>behavior).zoomOnMeshHierarchy(model.rootMesh);\r\n }\r\n });\r\n break;\r\n }\r\n }\r\n}\r\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@babylonjs/viewer",
|
|
3
|
-
"version": "7.
|
|
3
|
+
"version": "7.37.0",
|
|
4
4
|
"main": "index.js",
|
|
5
5
|
"module": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -18,10 +18,10 @@
|
|
|
18
18
|
"postcompile": "build-tools -c add-js-to-es6"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@babylonjs/core": "^7.
|
|
22
|
-
"@babylonjs/loaders": "^7.
|
|
23
|
-
"babylonjs-gltf2interface": "^7.
|
|
24
|
-
"babylonjs-viewer-assets": "^7.
|
|
21
|
+
"@babylonjs/core": "^7.37.0",
|
|
22
|
+
"@babylonjs/loaders": "^7.37.0",
|
|
23
|
+
"babylonjs-gltf2interface": "^7.37.0",
|
|
24
|
+
"babylonjs-viewer-assets": "^7.37.0",
|
|
25
25
|
"deepmerge": "~4.2.2",
|
|
26
26
|
"handlebars": "~4.7.7",
|
|
27
27
|
"pepjs": "~0.5.3",
|