HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Устаревшие оптимизации рендереров
О чём можно не париться, когда делаешь рендерер в 2019 году
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4133

Рейтинг



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

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

Сообщить модератору | | IP: Записан
Сообщение: 181940

Старое сообщение 26-07-2019 10:33
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

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

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

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

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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 181941

Старое сообщение 26-07-2019 10:59
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

Сообщить модератору | | IP: Записан
Сообщение: 181944

Старое сообщение 26-07-2019 11:19
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 181945

Старое сообщение 26-07-2019 11:23
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



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

__________________
My Projects: download page

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

Цитата:

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

Сообщить модератору | | IP: Записан
Сообщение: 181946

Старое сообщение 26-07-2019 11:24
-
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 34498
Нанёс повреждений: 514 ед.
Возраст: 37

Рейтинг



Награды
 
[1 награда]


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

__________________
Правдой дорожить, лжи не потакать,
Дальних не судить, ближним помогать,
С тишиной сойтись на исходе дня
Научи меня, Родина моя!

Сообщить модератору | | IP: Записан
Сообщение: 181947

Старое сообщение 26-07-2019 11:26
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32188
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
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'

Сообщить модератору | | IP: Записан
Сообщение: 181948

Старое сообщение 26-07-2019 11:35
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 15:50. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Наш форум > Технические вопросы > Устаревшие оптимизации рендереров
О чём можно не париться, когда делаешь рендерер в 2019 году
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

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