Size: a a a

RU Rust GameDev — русскоговорящее сообщество

2020 December 17

IL

Ilya Lakhin in RU Rust GameDev — русскоговорящее сообщество
Ветвления и память(и особенно ветвления) - это ключевые вещи которые тормозят исполнение на GPU. Локальной памяти у него с гулькин нос ) Ветвления он в принципе может делать, но при возникновении ситуаций ветвления скорость может падать фатально, и быть ниже чем если то же самое просто на CPU исполнить
источник

IL

Ilya Lakhin in RU Rust GameDev — русскоговорящее сообщество
В этом смысле с точки зрения производительности шейдеру зачастую может быть выгоднее посчитать SDF для каждого объекта каждый раз, чем делать выбор для какого считать, для какого нет. Потому что выбор - это ветвление. Но тут опять же зависит от количества объектов. В некоторых случаях может быть целесообразно разветвить, например, по тем же BVH
источник

IL

Ilya Lakhin in RU Rust GameDev — русскоговорящее сообщество
Во-вторых, хотя шейдер в принципе может быть достаточно большим(в плане числа инструкций), он на самом деле совсем не бесконечный. И при инлайменте, посколько SDF функции как правило как-то взаимосвязаны друг с другом, он растет с "комбинаторной" скоростью. То есть у вас есть некая сцена собранная комбинациями функций. Вы добавляете ещё одну комбинацию, и она, соответственно, увеличивает объем шейдерного кода(условно) сразу в два раза
источник

IL

Ilya Lakhin in RU Rust GameDev — русскоговорящее сообщество
Это в свою очередь накладывает ограничение на число уникальных сущностей на сцене, которые вы можете таким образом задать
источник

IL

Ilya Lakhin in RU Rust GameDev — русскоговорящее сообщество
Причем, с ростом числа сущностей и эффектов с ними, вы будете получать ситуацию, при которой сама сцена, возможно, будет рендериться сравнительно быстро, но загрузка шейдера на каждое следующее изменение в его тексте, через OpenGL, может занимать заметное время. Грубо говоря, десятки секунд, а потом и вовсе упадет вплоть до зависания видеокарты. )
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Ой-ой-ой
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Не весело
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
То есть комплексность сцены весьма ограничена?
источник

IL

Ilya Lakhin in RU Rust GameDev — русскоговорящее сообщество
Ну, тут штука в том, на самом деле, что сегодня, по большому счету, просто нет железа подходящего под эти задачи
источник

IL

Ilya Lakhin in RU Rust GameDev — русскоговорящее сообщество
GPU были спроектированы для быстрого рендеринга однотипных и как правило довольно простых сущностей(полигонов), а не для интерпретации очень объемных программ. То что делают ребята из демо-сцены — это всё делается на пределе возможностей видеокарты, и зачастую они добиваются результата очень кропотливой и ручной, само собой, оптимизацией внутри кода шейдера под конкретную сцену, которую они хотят построить
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
То есть чистый SDF для 3д на текущий момент не самое адекватное решение?
источник

IL

Ilya Lakhin in RU Rust GameDev — русскоговорящее сообщество
Понимаете, смотря что вы хотите получить на выходе
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
А что насчёт той идее с переводом SDF объектов в воксели? По сути требуются те же самые операции загрузки и выгрузки шейдеров
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Ilya Lakhin
Понимаете, смотря что вы хотите получить на выходе
Ну у меня 2 варианта скажем так
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Либо чистые реймарчнутые SDF, либо sparse voxel DAG
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Приоритетнее первое, но как вы сказали это не совсем возможно на текущий момент
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Насчёт ГПУ, я так понимаю шейдеры загружаются в ГПУ память? Та которая медленная но большая.
1.Возможно ли к каждому сектору экрана применить свои шейдеры?
2. Возможно ли заставить ГПУ обрабатывать 2 паралельнвх шейдера на одном секторе экрана (подумал что сдф можно распиливать на слои и накладывать друг на друга)
источник

IL

Ilya Lakhin in RU Rust GameDev — русскоговорящее сообщество
Я не очень понимаю, как воксели тут помогут. Рендеринг вокселей, поскольку это однотипные объекты, и их действительно можно реорганизовать в некую Octree иерархию, вероятно можно рендерить сравнительно быстро. Это конечно отдельная большая задача, но полагаю это вполне возможно. Вопрос весь в том, где вы будете брать сами воксели. Если у вас изначально сцена задается SDF полем, его ведь всё равно нужно где-то отмаршировать. Если маршировать на стороне GPU вы получаете тот же набор проблем, которые я описал выше. Если на стороне CPU, ну вы просто делаете рендер на CPU получается, и вам на самом деле GPU как бы и вообще становится не нужен вовсе.
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Да, я уже понял что тут ситуация весьма патовая
источник

A

Adevald in RU Rust GameDev — русскоговорящее сообщество
Не посоветуете какие-нибудь книги или статьи по работе с ГПУ и всех подобных тонкостях?
источник