웹 작업자의 큐브 지오메트리 집합을 병합하고 주 스레드로 다시 전달할 수 있는지 아는 사람은 누구입니까? 다량의 큐브를 병합 할 때 이것이 지연을 줄일 수 있다고 생각 했었습니다.WebWorker를 사용하여 형상을 병합 하시겠습니까?
웹 작업자는 Three.JS가 정상적으로 작동하나요, 그렇다면 그렇게 할 수 있습니까? 지오 메 트리를 다시 전달하는 것이 정상적으로 병합하는 것처럼 오래 걸릴지 확신하지 못합니다. 순간
나는 지연을 줄이기 위해 초과 에 대한 루프를 사용하고 있습니다 :// This array is populated by the server and contains the chunk position and data (which I do nothing with yet).
var sectionData = data.secData;
var section = 0;
var tick = function() {
var start = new Date().getTime();
for (; section < sectionData.length && (new Date().getTime()) - start < 1; section++) {
var sectionXPos = sectionData[section][0] * 10;
var sectionZPos = sectionData[section][1] * 10;
var combinedGeometry = new THREE.Geometry();
for (var layer = 0; layer < 1; layer++) { // Only 1 layer because of the lag...
for (var x = 0; x < 10; x++) {
for (var z = 0; z < 10; z++) {
blockMesh.position.set(x-4.5, layer-.5, z-4.5);
blockMesh.updateMatrix();
THREE.GeometryUtils.merge(combinedGeometry, blockMesh);
}
}
}
var sectionMesh = new THREE.Mesh(combinedGeometry, grassBlockMat);
sectionMesh.position.set(sectionXPos, 0, sectionZPos);
sectionMesh.matrixAutoUpdate = false;
sectionMesh.updateMatrix();
scene.add(sectionMesh);
}
if (section < sectionData.length) {
setTimeout(tick, 25);
}
};
setTimeout(tick, 25);
three.js를에게 rev59-dev에 사용.
합병 된 큐브는 지형을 구성하며, (지연으로 인해) 각 청크에는 1 개의 레이어 만 있습니다.
팁을 보내 주시면 감사하겠습니다. 감사.
좋아, 그래서 기하학 병합이 내 프로그램에서 33 %의 CPU 사용량을 차지하면서 인생을 빠져 나가는 것을 알게되었습니다. 정말 필요한 것은 행렬이 적용된 버텍스를 업데이트하고 병합 메서드를 내 코드에 복사하고 필요하지 않은 모든 부분을 잘라내어 4-7 %로 줄였습니다. 웹 작업자를 사용하는 것보다 훨씬 덜 고통 스럽습니다. – mattdlockyer
감사합니다. Matt! 나는 아래에 당신의 대답을 시도하기 전에 그것을 줄 것이다. 병합이 다른 불필요한 일을하는 것일 수도 있다는 생각이 들지 않았습니다. –
가장 필요한 것은 기본 법선, uvs 및 기타 넌센스가있는 vertribute를 추가하는 것입니다. 제 경우에는 기하학을 다시 작성하여 기하학 배열을 재현하는 것이 과잉이었습니다. 나만의 업데이트 방법으로 필요한 부분을 인라인으로 처리하기 위해 노력했으며 지금은 비행 중입니다 ... – mattdlockyer