MeshDepthMaterial в Three.js предназначен для рендеринга глубины объектов сцены относительно камеры. Основное применение — генерация карт глубины для постобработки, теней или эффекта глубины резкости (depth of field).
const depthMaterial = new THREE.MeshDepthMaterial({
depthPacking: THREE.RGBADepthPacking, // способ упаковки глубины
wireframe: false, // отображение каркаса вместо поверхности
alphaTest: 0.5 // порог для прозрачных объектов
});
Ключевые параметры:
depthPacking Определяет, как глубина кодируется в
цвете текстуры. Доступны варианты: THREE.BasicDepthPacking
и THREE.RGBADepthPacking. Второй используется для более
точного хранения дальности.
wireframe При значении true объект
отображается как каркас, что удобно для отладки геометрии.
alphaTest Позволяет игнорировать пиксели с
прозрачностью ниже указанного порога, что важно при работе с текстурами
с альфа-каналом.
Часто MeshDepthMaterial применяется вместе с
THREE.WebGLRenderTarget для получения карты глубины:
const renderTarget = new THREE.WebGLRenderTarget(width, height);
renderer.setRenderTarget(renderTarget);
scene.overrideMaterial = depthMaterial;
renderer.render(scene, camera);
scene.overrideMaterial = null;
renderer.setRenderTarget(null);
Здесь overrideMaterial временно заменяет все материалы
сцены на depthMaterial, чтобы получить единообразную карту
глубины.
THREE.ShaderMaterial для создания
кастомных эффектов глубины.MeshNormalMaterial используется для визуализации нормалей поверхности объекта. Он окрашивает каждый фрагмент в соответствии с направлением нормали, что упрощает анализ геометрии и отладку освещения.
const normalMaterial = new THREE.MeshNormalMaterial({
flatShading: false, // использование плоской затененности
wireframe: false, // отображение каркаса
opacity: 1.0, // прозрачность материала
transparent: false // включение прозрачности
});
Основные свойства:
flatShading При true нормали каждой
грани одинаковы для всех её вершин, создается эффект “плоской” модели
без плавного сглаживания.
wireframe Отображает только каркас, без
заливки.
opacity и transparent Позволяют
создавать прозрачные версии материала для комбинирования с другими
визуальными эффектами.
MeshNormalMaterial отлично подходит для проверки
нормалей при моделировании сложной геометрии:
const mesh = new THREE.Mesh(geometry, normalMaterial);
scene.add(mesh);
Цвета на поверхности будут меняться в зависимости от ориентации нормали относительно камеры:
| Свойство / Материал | MeshDepthMaterial | MeshNormalMaterial |
|---|---|---|
| Освещение | Игнорирует | Игнорирует |
| Основная цель | Глубина, постобработка | Визуализация нормалей |
| Применение | Карты глубины, тени, эффекты DOF | Отладка геометрии, нормали |
| Зависимость от текстур | Частично (alphaTest) | Нет |
| Возможность wireframe | Да | Да |
| Подходит для кастомных шейдеров | Да | Да |
Оба материала являются инструментами анализа сцены, не предназначенными для финального рендеринга с освещением и сложными материалами, но критически важными для визуализации данных о геометрии и глубине.
alphaTest, чтобы корректно обрабатывать текстуры с
прозрачными участками.flatShading: true
помогает выявлять проблемные полигоны и артефакты при
моделировании.WebGLRenderTarget и передать в шейдеры, работающие с
глубиной.scene.overrideMaterial, что упрощает отладку сложных
сцен.wireframe.Эти материалы являются базовыми инструментами Three.js для работы с геометрией, нормалями и глубиной, и их глубокое понимание позволяет создавать более сложные эффекты визуализации и постобработки.