Skip to content

Commit ce82e74

Browse files
committed
client: improve map performance with texture atlases and ktx compression
kinda fix #41
1 parent a13a10a commit ce82e74

9 files changed

Lines changed: 1066 additions & 7 deletions

File tree

β€Žwww/assets/js/ModelRepository.jsβ€Ž

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import * as THREE from 'three'
22
import {GLTFLoader} from 'three/addons/loaders/GLTFLoader.js';
3+
import {KTX2Loader} from 'three/addons/loaders/KTX2Loader.js';
34
import * as SkeletonUtils from 'three/addons/utils/SkeletonUtils.js';
45
import {ItemId} from "./Enums.js";
56
import {Utils} from "./Utils.js";
@@ -32,13 +33,19 @@ export class ModelRepository {
3233
return this.#textureLoader.loadAsync(url)
3334
}
3435

35-
loadMap(mapName) {
36+
#loadMap(mapName) {
3637
return this.#loadModel(`./resources/map/${mapName}.glb`).then((model) => {
38+
model.scene.matrixAutoUpdate = false
39+
model.scene.matrixWorldAutoUpdate = false
3740
model.scene.traverse(function (object) {
3841
if (object.isMesh) {
42+
if (object.material) {
43+
object.material.shadowSide = THREE.DoubleSide
44+
}
3945
object.castShadow = true
4046
object.receiveShadow = true
4147
object.matrixAutoUpdate = false
48+
object.matrixWorldAutoUpdate = false
4249
object.layers.enable(Utils.LAYER_WORLD)
4350
}
4451
})
@@ -114,9 +121,15 @@ export class ModelRepository {
114121
return model.clone()
115122
}
116123

117-
loadAll() {
124+
init(mapName, renderer, scene) {
125+
const ktx2Loader = new KTX2Loader()
126+
ktx2Loader.setTranscoderPath('assets/threejs/libs/basis/')
127+
ktx2Loader.detectSupport(renderer)
128+
this.#gltfLoader.setKTX2Loader(ktx2Loader)
129+
118130
const self = this
119131
const promises = []
132+
promises.push(this.#loadMap(mapName).then((model) => scene.add(model)))
120133

121134
promises.push(this.#loadModel('./resources/model/player.glb').then((model) => {
122135
model.scene.traverse(function (object) {

β€Žwww/assets/js/World.jsβ€Ž

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,6 @@ export class World {
2929
scene.name = 'MainScene'
3030
scene.background = new THREE.Color(0xdadada)
3131

32-
const promises = []
33-
promises.push(this.#modelRepository.loadAll())
34-
promises.push(this.#modelRepository.loadMap(mapName).then((model) => scene.add(model)))
35-
3632
const camera = new THREE.PerspectiveCamera(setting.getFieldOfView(), window.innerWidth / window.innerHeight, 1, 19999)
3733
camera.rotation.reorder("YXZ")
3834
const listener = new THREE.AudioListener()
@@ -84,7 +80,7 @@ export class World {
8480
this.volume = setting.getMasterVolume()
8581

8682
const anisotropy = Math.min(setting.getAnisotropicFiltering(), renderer.capabilities.getMaxAnisotropy())
87-
return Promise.all(promises).then(() => {
83+
return this.#modelRepository.init(mapName, renderer, scene).then(() => {
8884
scene.traverse(function (object) {
8985
if (object.isMesh && object.material.map) {
9086
object.material.map.anisotropy = anisotropy

β€Žwww/assets/threejs/libs/basis/basis_transcoder.jsβ€Ž

Lines changed: 21 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
488 KB
Binary file not shown.

β€Žwww/assets/threejs/libs/ktx-parse.module.jsβ€Ž

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

β€Žwww/assets/threejs/libs/zstddec.module.jsβ€Ž

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
Β (0)