threejs — свойство customDepthMaterial для сетки, не включенное в вывод scene.toJSON

#javascript #three.js

#javascript #three.js

Вопрос:

У меня есть объект, который я создаю следующим образом:

 const geometry = new THREE.SphereBufferGeometry(2,100,100);
const material = new THREE.MeshPhongMaterial({
    map: myImage
    transparent: true,
    side: THREE.DoubleSide,
    opacity: 0.8
});

const mesh = new THREE.Mesh(geometry, material);
 

Этот материал обладает некоторой прозрачностью, и я хочу, чтобы только непрозрачные части отбрасывали тень, поэтому я добавляю:

 mesh.customDepthMaterial = new THREE.MeshDepthMaterial({
   depthPacking: THREE.RGBADepthPacking,
   alphaTest: 0.4,
   map: image
});
 

Это отлично отображается в сцене. Если я проверю сцену, это свойство customDepthMaterial существует в сетке.

Но когда я это делаю scene.toJSON() , это свойство не включается в эту сетку (и если я загружаю этот JSON в сцену, прозрачность теряется, потому что нет customDepthMaterial).

Предназначено ли это? Или ошибка? Или я просто делаю что-то не так?

Ответ №1:

Предназначено ли это? Или ошибка? Или я просто делаю что-то не так?

Вы все делаете правильно! Проблема в том, что three.js пока не поддерживает сериализацию / десериализацию для Object3D.customDepthMaterial and Object3D.customDistanceMaterial .

Я предлагаю вам подать запрос на создание функции на GitHub.

three.js r122