Может кто нибудь обьяснить как работает алгоритм пересечения луча и AABB? Рою интернет, уже довольно много информации нашёл, но вообще не могу разобраться.
Мне неоднократно попадалась информация, что видеокарта рисует пиксели не по одному, а блоком. И к следующему блоку не приступает, пока не закончит предыдущий. Время отрисовки блока определяется самым медленным его пикселем. То есть если отбрасывать часть пикселей из блока дискардом, на производительность это повлияет слабо.
Я решил проверить это и заодно узнать размер блока. Рендерил один и тот же кадр, отбрасывая часть пикселей либо в шахматном порядке, либо линиями (см. иллюстрации). Замерял фпс для разных размеров шашечек/линий. Во всех случаях количество отрисованных пикселей одинаковое.
С интерпретацией результатов возникли проблемы. Кто-нибудь может объяснить, почему такая разница в фпс между шашками и линиями при размере в 16 пикселей? Правильно ли я понимаю, что размер блока можно считать равным 32х32? На других видеокартах всё может быть иначе?
Смысл забивать голову? Он работает, этого достаточно.
Добавлено 03-04-2020 в 21:18:
Цитата:
ncuxonaT писал: видеокарта рисует пиксели не по одному, а блоком. И к следующему блоку не приступает, пока не закончит предыдущий
Очевидно растеризуемое пространство делится на квадратики и каждому конвейеру достаётся свой квадратик. Чтобы каждый конвейер рисовал свой пиксель - о таком я не слышал, судя по всему это провоцирует промахи кэша и замедлит работу. К примеру texture2D сразу четыре пикселя за раз читает.
Цитата:
ncuxonaT писал: Время отрисовки блока определяется самым медленным его пикселем.
ну очевидно все конвейеры должны завершить свою работу.
Цитата:
ncuxonaT писал: Рендерил один и тот же кадр, отбрасывая часть пикселей либо в шахматном порядке, либо линиями (см. иллюстрации).
шо-то ты не то тестировал.
Можно попробовать вот такой фокус (в реальных приложениях так делать нелья, но для теста вполне) - читать и писать в одну и ту же FBO текстуру.
Например сделать стекло. Она у тебя замерцает квадратами и ты сможешь увидеть размер блока.
Ну я надеялся попасть в размер блока, чтобы часть блоков отбрасывалась целиком. И на этом моменте наблюдался бы скачок фпс. Собственно, он и наблюдается, только почему-то разный результат для линий и шашек.
Цитата:
Дядя Миша писал: Можно попробовать вот такой фокус (в реальных приложениях так делать нелья, но для теста вполне) - читать и писать в одну и ту же FBO текстуру.
Например сделать стекло. Она у тебя замерцает квадратами и ты сможешь увидеть размер блока.
Попробовал. Как ни странно, нет никаких артефактов, ничего не мерцает даже на 10 стеклах подряд.
ncuxonaT писал: Ну я надеялся попасть в размер блока, чтобы часть блоков отбрасывалась целиком. И на этом моменте наблюдался бы скачок фпс. Собственно, он и наблюдается, только почему-то разный результат для линий и шашек.
Попробовал. Как ни странно, нет никаких артефактов, ничего не мерцает даже на 10 стеклах подряд.
Попробуй поиграть с FPS и всинх отключить, может быть это как-то влияет
Вопрос к знающим: как можно оптимизировать террейн, сделанный в Terrain Generator? Дело в том, что мне нужно сделать довольно большой уровень с открытой местностью, террейн этот вопрос решает неплохо(учитывая, что делаю я в Paranoia 2 v1.51 и вопрос с его окраской буду решать с помощью слоёв в рендере). Но полигонов очень много - и, что самое неудобное, после экспорта в Джек Хамер я не могу нормально нанести Null-текстуру на невидимые грани(там все полигоны как отдельные маленькие браши) - в ручную это почти невозможно, их слишком много. Может их можно как-то объединить уже в Джек Хамере?
SNMetamorph писал: Попробуй поиграть с FPS и всинх отключить, может быть это как-то влияет
Всинк выключен, фпс варьируется от 400 на одном стекле, до 100 на десяти, но ничего не меняется.
Цитата:
Дядя Миша писал: MRT надо. и glReadBuffer( GL_NONE );
glReadBuffer( GL_NONE ) никак не влияет
Зачем МРТ? Рендер во фреймбуффер, к нему привязана текстура, эту же текстуру стекло использует.
Добавлено 04-04-2020 в 21:22:
Получилось, короче. Оказывается, можно без последствий читать из текстуры, в которую пишешь, если пишешь в тот же пиксель, что читаешь. Инвертировал у стекла текстурную координату по х, и вот они артефакты. Что интересно, рендерится, судя по всему, блоками в шахматном порядке, последовательно разбивая их от 32х32 до 4х4
Lev писал: Вопрос к знающим: как можно оптимизировать террейн, сделанный в Terrain Generator? Дело в том, что мне нужно сделать довольно большой уровень с открытой местностью, террейн этот вопрос решает неплохо(учитывая, что делаю я в Paranoia 2 v1.51 и вопрос с его окраской буду решать с помощью слоёв в рендере). Но полигонов очень много - и, что самое неудобное, после экспорта в Джек Хамер я не могу нормально нанести Null-текстуру на невидимые грани(там все полигоны как отдельные маленькие браши) - в ручную это почти невозможно, их слишком много. Может их можно как-то объединить уже в Джек Хамере?
могу лишь посоветовать попробовать как альтернативу - GenSurf, с ним проблем не возникало
Дядя Миша писал: Этих программок - две штуки. И вот одна из них сама красит нуллом бока. Открываешь уровень в блокноте и автозаменой меняешь NULL на SOLIDHINT.
Ты о каком формате говоришь? MAP или RMF? Чёт не пойму я, где там опция по отсечению граней.