Я не могу получить показ aoMap в три раза. js используя актив glb / gltf - PullRequest
0 голосов
/ 12 апреля 2020

Мне трудно заставить aoMap работать в three.js ...

У меня есть актив glb с aoMap на красном канале или что-то в этом роде. Когда я вношу его в вавилонскую программу просмотра, я могу видеть ao очень хорошо, но он не будет отображаться в программе просмотра. js или моем проекте. Я думаю, что это как-то связано со вторым набором uvs, но я не могу найти ресурс, который предполагает это поверх использования загрузчика gltf ... Я действительно не знаю, что здесь делать. Любой ответ будет принят с благодарностью!

Вот мой код (я использую html -канв в качестве текстуры)

И я получаю геометрию модели и диффузную текстуру (все белое ) по желанию, но aomap не показывает…

код

просмотрщик Вавилона

три. js viewer

рабочее приложение с тенями, включенными в диффузный

не работает, диффузный просто белый, и aoMap не показывает

1 Ответ

1 голос
/ 13 апреля 2020

Вы правы в том, что вам нужен второй набор ультрафиолетовых лучей. Причина этого заключается в том, что диффузные текстуры часто повторяются (например, кирпичная стена или клетчатая футболка). Затенение АО, однако, с большей вероятностью будет уникальным для каждой части геометрии, поэтому оно почти никогда не повторяется. Поскольку для этого часто требуется альтернативный метод UV-картирования, по умолчанию используется второй набор UV.

Вы можете сделать 2 вещи:

  1. Реэкспортировать свой актив GLTF с дубликат набора UV.
  2. Дублируйте существующие UV в Three. js, создав новый BufferAttribute в вашей геометрии:
// Get existing `uv` data array
const uv1Array = mesh.geometry.getAttribute("uv").array;

// Use this array to create new attribute named `uv2`
mesh.geometry.setAttribute( 'uv2', new THREE.BufferAttribute( uv1Array, 2 ) );

.getAttribute и .setAttribute - это методы BufferGeometry, если вы хотите узнать о них больше.

...