Скрученные нормали с шейдером нормалей Three.js — р.58

Я пытаюсь использовать шейдер нормалей Three.js r.58 для создания карты смещения. У меня он смещается правильно, но освещение, похоже, не соответствует нормалям после смещения, даже когда я использую calculateTangents().

Когда я отключаю смещение, я вижу, что нормали по умолчанию определенно забавны. Вот вид сверху на сферу, освещенную сбоку (белая точка отмечает pointLight):

Вид сверху на сферу с обычным шейдером, освещенным сбоку

А вот и демонстрационная страница: http://meetar.github.io/three.js-normal-map-0/index0.html

Что вызывает это? И есть ли где-нибудь документация для нормального шейдера Three.js?


person meetar    schedule 03.07.2013    source источник


Ответы (2)


  1. Вы не передаете normalMap, что требуется. Попробуйте пройти в плоском.

  2. ComputeTangents() может делать странные вещи с вершинами, имеющими прерывистые UV-развертки, например, на северном полюсе.

  3. Код является документацией. :-)

person WestLangley    schedule 03.07.2013
comment
Ответом на Код является документация: commonsense4commonpeople.net /2008/11/ - person meetar; 13.12.2013

«Искривленные» нормали являются результатом оценки каждой нормали вершины как значения RGB (255, 255, 255), которое соответствует координатам XYZ касательного пространства (1.0, 1.0, 1.0). Кажется, это поведение по умолчанию, когда материал карты нормалей three.js используется без передачи карты нормалей. Если вы пройдете полностью белую карту нормалей, вы увидите такое же поведение.

Чтобы передать карту нормалей шейдеру карты нормалей, добавьте эту строку в объявления юниформ:

uniforms[ "tNormal" ].value = new THREE.ImageUtils.loadTexture( 'normalmap.png' );

Чтобы передать «плоскую» карту нормалей, сделайте ваш «normalmap.png» сплошным (128, 128, 255) лавандовым, который нормализует координаты в касательном пространстве (0.0, 0.0, 1.0).

Подробную информацию о картах нормалей, включая множество примеров, можно найти по этой ссылке: http://wiki.polycount.com/NormalMap/

person meetar    schedule 09.07.2013