Я создаю виджет, который будет динамически генерировать здание в Three.js
из меньших «модулей», основываясь на вводе пользователя.Мне были предоставлены сборочные «модули» - они были сделаны в Blender и экспортированы с включенным экспортером версии 2.8 GLTF.Я должен сказать, что я скорее новичок в Three.js
и физическом рендеринге.
При Blender
рендеринге соседние модули выглядят так, как будто это всего лишь одна сетка с бесшовной текстурой (вот как онибыли разработаны для моделиста):
Визуализация из Blender
Хотя в Three.js я вижу эти темные линии на каждом модуле (который сам по себе является Mesh
или Group
из Mesh
es) границы и бесшовность теряется (пожалуйста, не обращайте внимания на освещение, я действительно не сосредотачиваюсь на этом моменте):
Three.js
Это настройки экспортера GLTF в Blender:
Настройка экспортера GLTF в Blender
Модели с текстурами импортируются в three
через GLTFLoader
без проблем.Для вывода MeshStandardMaterial
каждого Mesh
используются map
, normalMap
и roughnessmap
.
Я пробовал:
- другой формат текстуры (PNG / JPG) и размеры (2048 ², 1024 ², 512 ²) в каждой комбинации
- различных источников света (из тех, что я перечислил в фрагменте кода ниже),
- все фильтры увеличения и уменьшения для каждой из перечисленных текстур материала здесь - они, кажется, имеют некоторый эффект , но темные границы никогда не исчезают
- включение / выключение
normalMap
и roughnessmap
материала в каждой комбинации
Единственное, что работает, - это отключение всех типов 3 map
и использование простого цвета, , что говорит о том, что проблема как-то связана с рендерингом текстур, а не с геометрией или расстоянием между ячейками. но также означает отказ от текстурирования модели в целом:
Обычная раскраска
Настройка сцены:
this.scene = new Three.Scene();
this.camera = new Three.PerspectiveCamera(75, this._aspectRatio, 0.1, 50);
this.ambientLight = new Three.AmbientLight('white', 0.5);
this.directionalLight = new Three.DirectionalLight('white', 1.5);
this.directionalLight.position.set(-20, 20, 20);
this.directionalLight.target.position.set(0, 0, 0);
Версия Three.js 0.101.1
(из NPM).
Я удивлен, что эти границы такотчетливо виденЯ ожидал увидеть какие-то слабые границы, но не так.
У вас есть идеи, что вызывает этот эффект?Может быть, мне нужно использовать какой-нибудь шейдер для материалов / текстур?
Любая помощь будет принята с благодарностью.