HLFX.Ru Forum
Показать все 7 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Технические вопросы (https://hlfx.ru/forum/forumdisplay.php?forumid=20)
-- Устаревшие оптимизации рендереров (https://hlfx.ru/forum/showthread.php?threadid=5319)


Отправлено nemyax 26-07-2019 в 10:33:

Устаревшие оптимизации рендереров

Хочется выслушать мнение опытных товарищей о том, у каких хитростей и приёмов рендеринга в наше время истёк срок годности. Как полезешь в код какого-нибудь доступного рендерера, бросается в глаза, сколько там много возни с вещами, которые по идее бесплатно даёт видеоускоритель. То бакфейсы куллят, то к фрустуму примеряют, ну и т. д.
Возникает мысль: почему бы не навалить сразу всё (хотя бы непрозрачное) в вершинный буфер и просто не херачить бы по нему glDrawArrays-ом? Благо видимопамяти нынче до дури. Ну или если у вас дерево, не хранить бы в листьях смещение-размер и не пускать бы glDrawElements?
Нужна ли вся эта ручная работа в современном мире?


Отправлено XaeroX 26-07-2019 в 10:59:

Обо всём нужно париться. Потому что никогда не знаешь, на каком железе тебе придётся работать. Сегодня у тебя в ТЗ прописан минимум GeForce RTX, а завтра прибегает манагер и говорит - так, давай по-быстренькому ещё поддержку андроида запилим, пять сторипоинтов выделили, ну и немножно поовертаймить придётся. А ты такой понимаешь, что современный мир начинает рушиться, и проклинаешь тот день, когда поверил ребятам с хабра про то, что кругом полно бесплатного сыра бесплатных фич современных ускорителей, и начинаешь рассылать резюме в другие конторы в надежде получить новый оффер, но в глубине души осознаёшь, что все манагеры одинаковые, и возникновение такой проблемы на новом месте - вопрос времени.

Цитата:
nemyax писал:
почему бы не навалить сразу всё (хотя бы непрозрачное) в вершинный буфер и просто не херачить бы по нему glDrawArrays-ом?

Потому что для этого надо быть уверенным, что целевая видеокарта обрабатывает все вершины быстрее, чем часть из них + оверхед процессора и передачи по шине. Плюс наверное ещё понадобится early-z pass. Это сравнение не всегда очевидно, и разумеется всецело зависит от конфигурации железа. Если целевая платформа строго определённая - можно быстро сделать тесты, проверить и выбрать самый быстрый способ. Если это игра, которая должна работать у кучи народу - ну тут я бы не был столь оптимистичен.
Цитата:
nemyax писал:
Благо видимопамяти нынче до дури.

Ну вот я по этой причине и не юзаю DDS.
Цитата:
nemyax писал:
Нужна ли вся эта ручная работа в современном мире?

Ручная работа во все времена высоко ценилась.

__________________

xaerox on Vivino


Отправлено Дядя Миша 26-07-2019 в 11:19:

Цитата:
nemyax писал:
которые по идее бесплатно даёт видеоускоритель

Это если мы точно знаем что у всех он одинаковый, например в иксбоксе.

Цитата:
nemyax писал:
То бакфейсы куллят, то к фрустуму примеряют, ну и т. д.

Ну как бы, чтобы видимо карта могла отсечь невидимые вертексы по фрустуму, тебе надо как минимум эти вертексы отрендерить в вершинном шейдере. А фрустум проверяет всю модель на попадание ббокса в пирамиду, вообще независимо от того, сколько в модели вертексов - 6 штук или два миллиона. Вот тебе и выгода, например.

Цитата:
nemyax писал:
почему бы не навалить сразу всё (хотя бы непрозрачное) в вершинный буфер и просто не херачить бы по нему glDrawArrays-ом

Здесь есть один маленький неочевидный момент. Даже если допустить, что мы каким-то чудом разрулили тот факт, что разные примитивы рисуются с разными шейдерами и разными текстурами (свежие версии GL это позволяют), это вовсе не значит, что один гигантский буффер будет эффективнее множества мелких. Я в этом уже давным давно убедился когда оптимизировал отрисовку травы. Я тогда рассуждал примерно так же. Создам ка я под траву один большой вбо, натолкаю тудой сколько влезет, да и буду рисовать за один дрокол. Ну и что? Во первых вышло медленее почти на треть. Во вторых в какой-то момент всё это упало с нехваткой видимопамяти. То есть это только так кажется что памяти до чёрта, а она между прочим шарится между остальными приложениями. Можете провести занятный тест - запустить фаерфокс и ЧАЭС из паранои одновременно. Лично у меня это приводит к тому, что ксаш начинает ругаться GL_OUT_OF_MEMORY и часть текстур не прогружается. Выключаем мозиллу - нет проблемы. А у меня 2 гигабайта видимопамяти.
Хорошо, может я там сделал не всё оптимальным образом. Но ведь ты предлагаешь вообще эту память не считать? Другой примерчег - скачай демку Unigine Superposition. Там маленькая такая комнатка, а текстуры 4096х4096 в максимальном качестве. Так вот при двух моих гигабайтах памяти, оно мне даёт поставить только средний уровень качества, иначе честно предупреждает, что видимопамяти нехватит. Это к вопросу о том, как 640 килобайт хватит всем.

Цитата:
nemyax писал:
Нужна ли вся эта ручная работа в современном мире?

А это зависит от тово что мы будем рисовать. Ежели это будет уровень из третьего квейка, то его можно целиком затолкать в один вбо и нарисовать за один вызов и наверное это будет быстро. А ежели уровень из метроиксодус, то не прокатит уже.

Добавлено 26-07-2019 в 14:19:

Вообщем надо считать сколько полигонов в кадре будет в среднем. Если десять тысяч - пливать на всё. А если 10 миллионов - надо задуматься.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 26-07-2019 в 11:23:

Цитата:
Дядя Миша писал:
Ежели это будет уровень из третьего квейка, то его можно целиком затолкать в один вбо и нарисовать за один вызов и наверное это будет быстро

Но не факт, что быстрее, чем с "устаревшими оптимизациями".

__________________

xaerox on Vivino


Отправлено Дядя Миша 26-07-2019 в 11:24:

Брашевая геометрия уже сама по себе большая проблема, потому что она не стрипифицирована. Эффективно такое не нарисуешь. Зато кубать легко.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено XaeroX 26-07-2019 в 11:26:

Дядя Миша
Стрипифицировать кокрастоке не проблема, алгоритмы давно известны. Но пользы от стрипификации НОЛЬ, если юзается DIP и индекс-буфер находится в видимопамяти. Это за счёт PostTNL кэша, а он со времён первого жирафа существует.

__________________

xaerox on Vivino


Отправлено Дядя Миша 26-07-2019 в 11:35:

Цитата:
XaeroX писал:
Но пользы от стрипификации НОЛЬ, если юзается DIP и индекс-буфер находится в видимопамяти

Здрастиприехоле, я када модельки с лайтмапами зафанил, у меня фпс на треть упал.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Временная зона GMT. Текущее время 09:55.
Показать все 7 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024