Параметрические поверхности
Источник:
Создавая сетку из полигонов, нужно жертвовать либо детализацией, либо глубиной прорисовки: если использовать одну статичную сетку для всего трехмерного мира, то близко расположенным объектам будет не хватать деталей, а на детальный рендеринг удаленных объектов будут зря расходоваться ресурсы процессора. Чтобы эта проблема не возникала, можно хранить в памяти несколько сеток и переключаться между ними (см. «Уровень детализации»), но иногда лучше строить сетку на лету, добавляя или убирая полигоны при изменении дистанции.
Источник:
С помощью параметрических поверхностей можно задать математической формулой, скажем, криволинейное перекрытие арки — и по этой формуле движок будет генерировать сетку полигонов на ходу. Для отображения искривленных поверхностей можно использовать сплайны* заданной ширины — в Quake 3: Arena эта технология применена для прорисовки всевозможной «органики».
*Сплайн — кривая в трехмерном пространстве, заданная определенным числом переменных.
Уровень детализации
Источник:
Игроки все больше перемещаются по трехмерному миру, поэтому уровень детализации приходится сильно варьировать. Так, когда игрок стоит под деревом, он должен видеть каждую веточку и каждый листочек, но вся эта сложнейшая модель не нужна, если до дерева еще далеко. Есть множество способов упростить геометрию удаленных объектов: импостеры, тесселяция параметрических поверхностей или переключение на сетки с меньшим количеством деталей — все это входит в понятие «уровень детализации».
Источник:
Прекрасный пример — система рендеринга леса в Far Cry, появившемся в 2004 году. Деревья переключаются с моделей высокой детализации на модели низкой, а потом вообще на спрайты, в то время как подлесок бледнеет и исчезает на средних дистанциях, а в джунглях вообще видно только то, что у тебя под ногами. Играя с детализацией, разработчики смогли выпустить Far Cry на доступном в то время железе.
Постэффекты
Источник:
Разработчики жить не могут без спецэффектов, добавляемых на стадии постобработки, — размытость света на ярких гранях, размытость изображения при движении, эффект глубины резкости встречаются в каждой сцене. Все это стало возможным благодаря современным графическим процессорам, которые могут конвертировать содержимое кадрового буфера в текстуру в любой момент рендеринга. Получившаяся картинка используется в качестве отправной точки на следующем этапе рендеринга, и вот так конвертировать буферное изображение в текстуру можно много раз. Например, впечатляющий эффект глубины резкости (когда объект на переднем плане резок, а фон очень сильно размыт) создается при обычном рендеринге. Для этого цветовая текстура размывается и накладывается поверх оригинальной, четкой картинки, а с помощью значения глубины Z-буфера вычисляется, какая часть изображения должна быть четкой, а какая — размытой. Все современные игры пользуются постэффектами, но Prince of Persia: The Sands of Time — одна из первых игр, где с помощью этих технологий была создана незабываемая картинка.
Источник:
High Dynamic Range Rendering (HDR)