@Kiril1221

В чем смысл Z-буферизации, как я представляю, что сцену с парой тысяч полигонов он за 10 лет не нарисует?

Читаю про z-буфер, и эти примеры с 2 кубами, или 4 линиями, сразу вопрос, а что если там, ну самая обычная игровая сцена из Skyrim-а или любой другой игры 21 века, там же несколько миллионов граней, то есть 100 деревьев стоящих друг за другом, и что 99 деревьев будут обрисованы, и потом перекрыты 100.
Либо я что-то не понимаю, либо его не используют лет так 30.
  • Вопрос задан
  • 595 просмотров
Решения вопроса 1
trapwalker
@trapwalker
Программист, энтузиаст
Z-буферизация нужна чтобы корректно пересекать объекты сложной формы.
В современной графике всё сложнее, но z-буферизация никуда не денется никогда. Это просто еще один приём, чтобы достичь каких-то конкретных целей.
Вообще нарисовать 2к полигонов - это плёвое занятие для современных видео-карт. Важно же, чтобы сквозь прорехи в листве этого вашего сотого дерева проглядывали деревья или какие-то другие объекты позади.
Полигоны сортируются по расстоянию до камеры. Сначала рисуются наиболее удаленные, потом те, что ближе.
Z-буфер, кстати, используется не только для определения перекрытия объектов, но и для быстрого поиска объектов под лучом.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@AlexSku
не буду отвечать из-за модератора
Обычно для дерева применяют технологию billboard, т.е. плоский прямоугольник, который поворачивается лицом к камере. Т.е. 100 деревьев - 100 квадратов, 200 треугольников, нарисовать - раз плюнуть (самих текстур может быть не очень много, но у каждого дерева можно менять размеры и цвет).
Z-буфер нужен, если лень сортировать объекты по удалённости от камеры. Иногда вообще это нельзя сделать для пересекающихся объёмных тел.
Ответ написан
Во всех современных играх используется z-buffer. В том числе всяких GTA V.
И если рисовать сначала ближние объекты, то отрисовка перекрытых z-буфером фрагментов будет аппаратно отсекаться видеокартой, а это очень быстро. Полностью они отрисовываться чаще всего не будут.
Плюс, в игре никогда не будет ситуации с 99 полнополигональными деревьями на одной линии, ибо кроме z-буфера используются и другие технологии.
Например, благодаря LOD, полное количество полигонов будет только у самых ближних объектов, а чем дальше объект, тем более низкополигональная его версия будет подставляться вместо него. Вместо самых далеких объектов вообще будут плоские картинки.
Благодаря деревьями видимости из кадра будет убираться часть объектов, которые сейчас не должны быть видимы камерой, они просто не будут рисоваться, потому что движок поймет, что они перекрыты от взгляда.
итд...

Есть способы местами обойтись без z-буфера. Например, для помещений используют двоичные деревья, чтобы рисовать стены в порядке от самых ближних к самым дальним.
Плюс, для объектов с прозрачностью z-буфер использоваться вообще невозможно, приходится сортировать грани и рисовать их в порядке от дальних к ближним, чтобы прозрачность корректно накладывалась.
Короче, нюансов вагон и маленькая тележка.

Советую на хабре почитать серию постов "как рендерится кадр в игре n" https://habr.com/ru/company/ua-hosting/blog/271931/ там довольно хорошо показаны все шаги, в том числе z-буфер.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы