Size: a a a

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

2020 December 29

IL

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

R

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

IL

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

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
> не слишком отличную от полигонов

Хотя на самом деле у вас производительность сразу просядет уже на маршировке. Маршировка - это цикл с условным выходом. На практике для маршировки негладких форм шагов там может выходить десятки и даже сотни.
источник

IL

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

R

Roman in Rust GameDev — русскоговорящее сообщество
С полигонами число шагов тоже не фиксированно
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
А логарифм от количества полигонов
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Глубина BVH
источник

IL

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

R

Roman in Rust GameDev — русскоговорящее сообщество
Наоборот он потенциально быстрее
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Асимптота логарифм, а не линия как у классической растеризации
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Только константа уж сильно больше пока
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
Ну ладно, возвращаясь к маршировке. Как вы планируете решать проблему маршировки?
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Маршировать как обычно. Ограничить шаги десятками
источник

IL

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

R

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

R

Roman in Rust GameDev — русскоговорящее сообщество
В таком случае я просто назову это пересечением с поверхностью
источник

IL

Ilya Lakhin in Rust GameDev — русскоговорящее сообщество
К тому же учитывайте, что десятки шагов - это те самые (n*m - 1) * (очень переменные десятки шагов). А потом вам понадобится искать градиент - это ещё минимум на 4. Потом вы захотите делать тени, а с тенями AABB применять напрямую не получится, потому что нужно вычислять не только пересечение луча с объектами, но и его расстояние до ближайшей поверхности в процессе пересеченения. И ещё куча других проблем
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Никак мне не помешает AABB получить растояние
источник

R

Roman in Rust GameDev — русскоговорящее сообщество
Получая пересечение я получаю точку где оно произошло
источник