Link:INB Home|INB English| INB русский язык|INB العربية|INB Türkiye|INB فارسی|INB Español|INB Français|INB Português|INB Deutsch|INB 國語|INB 中文|INB 日本语|INB 한국어|INB ภาษาไทย|INB tiếng Việt||Уроки Lightwaves 3D Создание низкополигонального персонажа 3/4
INB русский язык Форум
Добро пожаловать! inbforum.COM Интернет без границ Форум Здесь вы можете обсудить с друзьями по всему миру прений, приходите и присоединяйтесь к нам! Постоянный имя: Ruinbforum.forumotion.com
INB русский язык Форум

Добро пожаловать! inbforum.COM Интернет без границ Форум Здесь вы можете обсудить с друзьями по всему миру прений, приходите и присоединяйтесь к нам! Постоянный имя: Ruinbforum.forumotion.com


Вы не подключены. Войдите или зарегистрируйтесь

《《《《《《《上一页INBforum   Перейти вниз

上一页INBforum》》》》》》》Предыдущая тема Следующая тема Перейти вниз  Сообщение [Страница 1 из 1]

1Уроки Lightwaves 3D Создание низкополигонального персонажа 3/4 Empty Уроки Lightwaves 3D Создание низкополигонального персонажа 3/4 в Пн Окт 04, 2010 9:41 pm

Admin

Admin
Admin

4.4. Дальнейшие корректировки карт нормалей в Photoshop
Этот параграф для тех, кто хочет понять теорию карт нормалей. Он довольно сложен и потребует наличия некоторых базовых знаний математики, векторов и т.п.
4.4.1. Общая информация о системе угловых координат (tangent space)
Сначала следует рассказать немного о том, как рассчитываются и как отображаются карты нормалей. Нас должна интересовать система угловых координат (глобальная и локальная системы координат описывают несколько другие вещи), поэтому, когда мы говорим «карта нормалей», вы должны понимать, что речь идет о системе угловых координат (если это не оговорено отдельно).
Небольшое отступление о том, зачем понадобилась эта теоретическая часть. Автор на каком-то этапе столкнулся с крайне неприятной проблемой «шовности»: карта нормалей, рассчитанная одной программой, не отображалась корректно в другом софте. Имеется в виду тот шов, который виден там, где происходит граница на текстурных координатах. Автор пытался найти решение проблемы, искал информацию в справочных системах, в сети и после некоторых исследований смог понять суть проблемы, понять то, как получается шов… но не то, как от этой проблемы избавиться.
Основная проблема в том, что каждая программа по-своему рассчитывает и отображает карты нормалей.
Система угловых координат описывается тремя векторами: нормалями (которые всегда перпендикулярны к поверхности) и двумя другими векторами, перпендикулярными нормалям: касательной (tangent) и бинормалью (bi-normal или bi-tangent, второй касательной, что более правильно, потому что речь идет о поверхности для кривой в трехмерном пространстве). Эти три вектора могут быть определены для каждой точки поверхности, и вместе определяют общий вектор.
Информация о системе угловых координат для каждого треугольника будет сохранена следующим образом:

  • Вектор нормали всегда перпендикулярен поверхности (треугольнику), по традиции он будет отображаться синим цветом в треугольнике векторов, и эта информация будет сохранена в синем канале карты нормалей.
  • Касательная — красный вектор в системе координат, информация сохраняется в красном канале.
  • Бинормаль — зеленый вектор, информация сохраняется в зеленом канале.

Векторы ориентируются в соответствии с UV-координатами: касательная идет слева направо (или справа налево) на мэппинге, то есть это U-координата в пространстве мэппинга текстуры. Бинормали — снизу вверх (или сверху вниз), они будут образовывать V-координату на текстурной карте. Вероятно вы видели диалоговые окна с галочкой flip (изменить направление) для красного или зеленого канала, эта опция меняет ориентацию касательных (слева направо/справа налево) и бинормалей (снизу вверх/сверху вниз). Это необходимо, так как некоторые программы используют собственную ориентацию направлений для нормалей.
Вы можете самостоятельно поменять направление каналов в Photoshop. Например, чтобы изменить направление вектора для красного канала нажмите Ctrl+1 (переходим в красный канал), затем жмем Ctrl+I (инвертирование цветов), дальше Ctrl+~ (тильда, находится слева от клавиши с цифрой «1»), чтобы вернуться в полный режим отображения всех каналов RGB. Тоже для зеленого канала: Ctrl+2, Ctrl+I, Ctrl+~.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Теперь давайте попробуем разрезать текстурную карту по диагонали и повернуть один UV-треугольник на 90 градусов против часовой стрелки, как показано на рисунке внизу. Из-за поворота в UV-пространстве, система угловых координат первого треугольника будет отличным от верхнего случая (система векторов RGB первого треугольника тоже повернется на 90 градусов вдоль синей оси).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Направление текстурных координат будет влиять на цвет карты нормалей. Если вы поворачиваете UV-координаты на модели (или UV-координаты для части модели), скажем, на 90 градусов по часовой стрелке и пересчитаете карту нормалей, цвета новой карты будут другими. И вовсе не потому, что изображение повернуто — вы можете повернуть изображение в Photoshop и сравнивать карты нормалей, они будут отличаться.
При отображении карты нормалей сначала вычисляются угловые координаты для каждого вертекса. Только после этого можно посчитать угловые координаты для промежуточных точек на поверхности, интерполируя векторы угловых координат для вершин. Обычно сложные вычисления сделаны так, чтобы не зависеть от детальности (так называемая проблема L-контура). Например, в старых версиях Maya просчитанная карта нормалей зависела от подразбиения (тесселяции): то есть, если вы имели разбитую на треугольники модель, выбрали одно ребро треугольника и переключили сглаживание, то карта нормалей больше не отображалась бы должным образом. Был бы необходим повторный расчет после изменения свойств ребра. В новых версиях Maya это скорректировано (обычно используются специальные инструменты для подготовки геометрии к попиксельному освещению, они создают правильный угловой базис для каждой вершины, один из них — NVMesh Mender).
При вычислении карты нормалей происходит следующее: алгоритм трассировки лучей отбрасывает луч от текущей точки лоурезной геометрии в направлении хайрезной. В точке пересечения будет вычислена координата этой точки для хайрезной геометрии, в мировой системе координат (WS). Затем эта координата будет трансформирована в систему угловых координат (TS) лоурезной версии и сохранится в карту нормалей. Таким образом, расчет нормалей зависит от системы угловых координат лоурезной геометрии: карта нормалей должна быть создана с теми же направлениями для нормалей/касательных/бинормалей, что используются в игре (или в программе, которая будет использоваться для отображения), иначе нормали будут неправильно интерпретироваться. Будут видны разрывы и неоднородности на границах текстурных координат. Отсюда ошибки, которые вы получаете, вычислив карту нормалей в одной программе и пытаясь отобразить в другой.
Не критично, что различные программы используют различные методы для вычисления угловых координат векторов. Проблема в том, что информация об этом недоступна, и нет возможности написать плагин/тулзу, которая исправит проблему. Единственное известное автору приложение, которое опубликовало расчетные формулы — Mudbox (в онлайновом справочнике). Теперь вы знаете, что в некоторых случаях не вы делаете что-то не так, это может быть виной программы.
Ниже будет показан пример с объяснением того, как вычисляется карта нормалей, как интерпретировать эту информацию канал за каналом. Это будет полезным, если понадобится изменить карты нормалей. Вы сможете сделать это даже в графическом редакторе: накладывая друг на друга разные карты нормалей или раскрашивая их прямо в Photoshop.
В примере будут рассчитаны проекции карт нормалей от плоскости и цилиндра на простой квадрат (подсвечен зеленым на рисунке). Направления угловых координат будут: для нормалей — направление «от плоскости» (синий, от нуля до единицы), для касательной — слева направо (в направлении от 3 к 4, красный, от нуля до единицы) и для бинормали — снизу вверх (направление от 3 к 1, зеленый, от нуля до единицы). Условимся, что у цилиндра все ребра жесткие, нормали будут меняться ступенчато, так их будет легче проанализировать. В примере полигоны на цилиндре пронумерованы от 1 до 7.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Давайте предположим, что мы смотрим на объект, находясь непосредственно над ними. Это будет выглядеть так, как показано на рисунке ниже.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
На этом рисунке вы видите цветовую схему: хайрезная модель выделена белым, нормали для хайрезной модели голубого цвета (назовем их, чтобы не было путаницы, перпендикулярами). Лоурезная модель выделена фиолетовым, перпендикуляры для лоурезной модели показаны желтой стрелкой (так как мы имеем простой квадратный полигон в качестве лоурезной модели, нормали для нее будут иметь одинаковую ориентацию по всей поверхности).
Ниже цветовой схемы вы можете видеть систему векторов TS (tangent space, углового пространства): касательную (красный вектор, слева направо), нормаль (синий вектор, направлен снизу вверх) и бинормаль (зеленый вектор, перпендикулярен экрану, указывает в направлении от вас к монитору). Обратите внимание: все полигоны хайрезной версии параллельны зеленым стрелкам (бинормалям в угловом пространстве), исключение составляют полигоны на торцах цилиндра, но они невидимы для карты нормалей.
Для каждого полигона в хайрезной геометрии можно разложить перпендикуляры (голубой цвет) на составные части: касательную (красный цвет) и нормаль (синий цвет). Бинормали будут нулевыми для всех полигонов, так как полигоны параллельны вектору бинормали (зеленой стрелке), следовательно, в зеленом канале карты нормалей будет однородный цвет.
Зеленые прерывистые пунктиры были нарисованы, чтобы лучше видеть ребра между каналами и понимать, как они соответствуют фактической геометрии.
Серые стрелки, идущие от лоурезной геометрии к хайрезной, показывают направление лучей, используемое во время вычислений карты нормалей. Ниже мы рассмотрим некоторые точки на лоурезной геометрии.
Обратите внимание, что векторы при расчетах нормализуются (приводятся к единице). То есть, если вы будете анализировать вектор в TS (или в другой системе координат), то каждая компонента будет иметь значение от -1 до +1, однако эти цифры будут преобразованы в положительное число. Эти цифры сохраняются в каналы RGB следующим образом:

  • Для касательной (красного канала) отрицательные значения (-1,0) будут линейно размещены в диапазоне 0-127, 0 переносится к 128, а положительные значения (0,1) будут линейно размещены в диапазоне 129-255.
  • То же самое для бинормали, в зеленом канале.
  • Для вектора нормали значения могут быть только положительными (0,1), таким образом, они будут линейно размещены в диапазоне 128-255. В большинстве случаев значение вектора нормали хайрезной модели не будут сильно отличаться от значения нормалей лоурезной геометрии, отсюда получается «синеватость» карт нормалей.

Такой способ хранения информации в картах нормалей дает возможность для хорошего сжатия, так как используется меньший диапазон цветов, чем в картах, базирующихся на локальных или глобальных координатах. Кроме того, лучшей компрессии способствует и то, что вектор нормали не может указывать назад (он принимает только положительные значения), и после нормализации становится от 0 до 1. Таким образом, информация может кодироваться на базе только двух каналов: касательной и бинормали (значение нормали может быть вычислено по значениям этих двух векторов).
Для точки D мы выстраиваем луч до пересечения с хайрезной версией геометрии. Нормаль в этой точке будет такой же, как и нормаль для полигона 4, этот полигон параллелен вектору углового пространства. Следуя за пунктирной линией ниже, вы увидите, что красный канал равен 128, так как значение касательной равно 0, а компонент нормали будет равен 1, что преобразовано к 255 (полностью белый цвет) в белом канале.
Для точки F луч трассировки пересечет полигон под номером 6. Мы видим, что перпендикуляр к этому полигону (голубой цвет на схеме) будет состоять из двух компонент: касательной (красного цвета), со значением приблизительно +0,78, что будет линейно перенесено к значению 228 для красного канала, и нормали (синего цвета), имеющей значение +0,625, которое будет линейно перенесено к значению 208 в синем канале.
Для точки B луч трассировки пересечет полигон 2. Перпендикуляр к этому полигону будет состоять из касательной (красного цвета) с отрицательным значением приблизительно -0,78, что будет линейно перенесено к значению 22 для красного канала и нормали (синего цвета), имеющей значение +0,625, которое будет линейно перенесено к значению 208 в синем канале.
Вы можете рассмотреть каналы в Photoshop по отдельности, используя комбинации Ctrl+1, Ctrl+2, Ctrl+3 для просмотра красного, зеленого и синего каналов, и использовать Ctrl+~ для просмотра полной картинки.
Для копирования отдельного (красного) канала можно использовать следующую последовательность комбинаций: Ctrl+1 (переходим в красный канал), Ctrl+a (выделяем все), Ctrl+Shift+c (копируем все видимое), Ctrl+~ (переходим в полный просмотр) и Ctrl+v (вставка). После этой комбинации горячих клавиш мы перенесем содержимое красного канала для текущего выделенного слоя в новый верхний слой.
Если мы повернем цилиндр на 90 градусов, как показано ниже,
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
то карта нормалей будет выглядеть подобно этому:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
А отдельные каналы буду выглядеть так:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
На этот раз красный канал является одноцветным, со значением 128 (таким же как был прежде зеленый канал), так как все полигоны хайрезной модели теперь параллельны красной стрелке. Если разложить на составные части перпендикуляры, то компоненты касательной будут равны нулю, что линейно переносится к значению 128. Изображение в зеленом канале (значения бинормали) будет выглядеть подобно тому, как прежде выглядел красный канал, но повернутым на 90 градусов против часовой стрелки. Синий канал выглядит как прежде, но он повернут на 90 градусов.
После этой математики и перемещений вперед/назад между последними рисунками расслабьте ваши глаза на больших картинках:
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение] [Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение] [Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Теперь мы знаем, как отображается каждый канал, и можем сделать следующую реконструкцию (эксперимент) в Maya:

  • Назначим материал «Ламберт» на хайрезную геометрию (цилиндр и плоскость), сделаем цвет материала нейтрально серым (128, 128, 128), установим самосвечение Incandescence нейтральным (128), и сделаем значение diffuse равным 1.

[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]

  • Настроим вид для рендера, это будет вид сверху (ортографическое представление).
  • Создадим направленный источник света (directional light) белого цвета и интенсивностью равной 1 (intensity=1), направленный справа налево (параллельно экрану).
  • Создадим «минус» источник света (directional light).

Когда просчитывается сцена с источником света «минус», то получается, что у вас вычтен свет — таким образом можно затемнить сцену. Это довольно удобно, если в сцене появляются засвеченные районы, а настройки для всех источников света уже отрегулированы. Таким способом можно решить проблему, не испортив освещение для других районов. Добавьте источник «минус» белого цвета с интенсивностью -1, но направленной слева направо, тоже параллельно экрану (таким образом, оба источника света будут в плоскости бинормали).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Если мы сравним скриншот из вьюпорта Maya и изображение в красном канале в просчитанной карте нормалей, то они будут выглядеть совершенно одинаково.
То же самое верно и для зеленого канала, но на этот раз направленный источник света надо направить сверху вниз, а источник негативного света снизу вверх (те же самые источники, но в другой плоскости — плоскости касательной).
Для синего канала вам понадобится только один направленный источник, освещающий прямо сверху (параллельно с вектором нормали в TS).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Если мы хотим увидеть все каналы вместе, то для этого надо изменить цвет для каждого источника, чтобы отобразить только один канал. Схема для установки нарисована ниже (понадобится 5 источников света).
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Применив эту схему освещения, вы можете проверить в реальном времени карту нормалей в ортографической проекции для любой геометрии.
[Вы должны быть зарегистрированы и подключены, чтобы видеть это изображение]
Эта информация не слишком полезна, так как все еще нужна геометрия, но посмотрите следующий абзац. Мы сможем сымитировать эту схему освещения в Photoshop.
]

http://ru.inbforum.com

上一页INBforum   Перейти вниз

上一页INBforumПредыдущая тема Следующая тема Вернуться к началу  Сообщение [Страница 1 из 1]

Права доступа к этому форуму:
Вы не можете отвечать на сообщения

Copyright ©2009-2010 LTD Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.

IT:SINGLESERVGoogle谷歌翻译TranslateFORUMSOFTLAYERGoogle谷歌广告联盟AdSenseAsia

 

Создать форум | Общество и актуальные темы | Общественные темы | © PunBB | Бесплатный форум поддержки | Контакты | Сообщить о нарушении | Последние обсуждения