Как исказить нормаль поверхности из карты высот

Я работаю над реализацией рельефного отображения в своем собственном 3D-трассировщике. И, если быть совсем кратким, мне нужен такой результат:

требуется результат

Я читал страницы и страницы о рельефных картах, картах высот, картах нормалей, ... и я думаю, что понимаю большую часть предмета, разницу между всем вышеперечисленным и т. д. и т. д. (у меня работает perlin-bumpmapping - result). объект с текстурным изображением. Большинство документов и страниц более чем расплывчаты по этому вопросу.

Сначала я подумал, что вы просто добавите текстуру изображения к своему объекту, для данного пикселя вы вычислите цвет rgb из текстуры, а затем вычислите коэффициент яркости из значения rgb (что-то вроде значения оттенков серого,... ) и возмутил с его помощью нормаль перед добавлением световых эффектов. - Я хочу (ред.) рассчитать нормали на лету.

Вопрос: если вышеизложенное вообще возможно: как возмущать нормаль с учетом коэффициента легкости? И если я ошибаюсь, буду очень признателен за любые советы/ссылки, которые могли бы помочь мне продвинуться к данному результату.

Вопрос 2: если вышеперечисленное невозможно для любого заданного изображения RGB, может ли кто-нибудь объяснить, как исказить изображение с учетом карты высот? как первое изображение в Википедии Большое спасибо.

P.S: Я делаю/должен делать реализацию на Java.


person nachtwezen    schedule 22.11.2013    source источник
comment
Похоже, здесь содержится некоторая полезная информация о возмущении поверхности нормалей: rorydriscoll.com /2012/01/11/производные карты   -  person SWPhantom    schedule 22.11.2013


Ответы (1)


Это руководство по Cg (язык шейдеров) для бамп-мэппинга от nVidia. Я использовал эту идею несколько раз. При рельефном отображении нормали НЕ возмущаются. Они взяты из предоставленной вами карты нормалей. Хитрость заключается в том, как применить сэмплированную нормаль к свету в пространстве объекта и вектору половинного угла при выполнении расчетов освещения. Я считаю, что учебник объясняет это довольно подробно.

На карте высот у вас фактически есть расстояние объекта от камеры/света, сохраненное в текстуре, и вы используете его для расчета окклюзии и т. д. в дополнение к возмущающим нормалям. В этой главе о GPU Gems объясняется, как комбинировать карту высот с картой нормалей, получая как детали поверхности, так и такие вещи, как окружающее затенение, в одном и том же.

person Arun R    schedule 26.11.2013