Методы сглаживания краев граней в OpenGL

Когда я освещаю свою человеческую модель в OpenGL, используя нормали лица, очень хорошо видно, где каждое лицо находится на модели. Освещение становится значительно более плавным при использовании нормалей вершин, но все же заметно. Существует ли какая-либо техника для сглаживания органических моделей без добавления дополнительных вершин (например, подразделений)?


person Kai    schedule 05.06.2009    source источник


Ответы (3)


Если вы видите отдельные грани с нормалями для каждой вершины, возможно, вы забыли включить сглаживание:

glShadeModel(GL_SMOOTH);

Если это не помогает, убедитесь, что все вершины с одинаковым положением также имеют одинаковую нормаль. Однако это должно быть сделано блендером автоматически. Также возможно, что в вашей модели слишком мало полигонов. Если это так, вам нужно либо использовать больше полигонов, либо делать то, что сказал Baszero. Создать карту нормалей и используйте его вместе с шейдером GLSL.

person Maurice Gilden    schedule 05.06.2009

Если у вас есть доступ к модели/сетке с более высоким разрешением или, возможно, к приличному инструменту для 3D-моделирования, который может создавать модель высокого разрешения с помощью подразделений или других причудливых методов...

GLSL попиксельное освещение + карты нормалей< /а>

ОБНОВИТЬ:

http://www.blender.org/development/release-logs/blender-246/render-baking/

person basszero    schedule 05.06.2009
comment
Я использую Блендер. Я делаю свою модель низкополигональной из соображений производительности. Затенение Фонга кажется многообещающим, но оно не поддерживается OpenGL, и это преимущество не гарантирует снижения производительности. - person Kai; 05.06.2009
comment
Если это не вопрос OpenGL ES 1.1 (например, iPhone), ваше оборудование, вероятно, поддерживает шейдеры, и вы можете написать шейдер, который реализует затенение Фонга + сопоставление нормалей. - person Maurice Gilden; 05.06.2009
comment
Итак, вы создаете модель высокого разрешения в Blender и используете ее для создания карты нормалей. Создайте версию с более низким разрешением и используйте карту нормалей + шейдеры для создания отсутствующих деталей вершин в конечном отрендеренном продукте. - person basszero; 05.06.2009

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

Вот один, где вы вычисляете среднее значение пяти соседних треугольников.

Ваше здоровье !

person ralphtheninja    schedule 05.06.2009