Повышение производительности в Voxel Engine

Как я уже упоминал в нескольких предыдущих постах, я создаю движок, похожий на майнкрафт.

Я разделил местность на регионы, и рендерятся только те регионы, которые находятся в зоне обзора камеры. Когда буферы вершин каждой области построены, они проверяют каждый блок, видны ли они, если нет, то не добавляются в буфер, если да, то проверяют, какие стороны не окружены другими блоками, и строит эти грани. . Также у меня включена отбраковка против часовой стрелки.

Может ли кто-нибудь предложить какие-либо другие способы повышения производительности (примечание: я еще не добавил индексные буферы, а только рендеринг с использованием вершинных буферов)? Предыдущая упомянутая причина может быть причиной моей низкой частоты кадров... И я также хотел бы знать, повысит ли производительность добавление индексов к этому движку.

Я также не думаю, что это имеет какое-либо отношение к распределению памяти.

РЕДАКТИРОВАТЬ: Хорошо, я добавил индексные буферы, производительность значительно увеличилась, но я все еще думаю, что ее можно было бы увеличить еще больше...


person Darestium    schedule 09.12.2011    source источник
comment
Вы реализовали какой-то алгоритм Marching Cubes вместо того, чтобы выводить все треугольники на дисплей?   -  person Emond Erno    schedule 10.12.2011
comment
Марширующие кубики? Я только что проверил статью в Википедии и... до сих пор не понимаю, что она делает;)   -  person Darestium    schedule 10.12.2011
comment
Алгоритм превращает воксельный мир в полигональный суп, исключая внутренние треугольники и показывая только те, которые находятся снаружи объектов. Если вы не реализовали что-то подобное, возможно, вы делаете много лишних вычислений.   -  person Emond Erno    schedule 10.12.2011
comment
Ну, дело в том, что я уже делал что-то подобное. При построении буфера вершин он проверяет, какие грани скрыты и какие блоки скрыты, и не добавляет их в буфер.   -  person Darestium    schedule 11.12.2011
comment
Причина, по которой я указал на это, заключалась в том, что часто алгоритм — это первое, на что следует обратить внимание. Измерение может помочь вам найти горлышко бутылки. Без кода мы не можем помочь. Индексный буфер может помочь, но нет никакой гарантии, и в вашей программе могут быть другие «плохие» места.   -  person Emond Erno    schedule 11.12.2011
comment
Хотите код? ;) и знаете ли вы, как не добавлять лица в буфер, когда они не в поле зрения игроков, но все еще находятся за пределами фрагмента?   -  person Darestium    schedule 12.12.2011
comment
Способ не допустить невидимых граней состоит в том, чтобы проверить их относительно усеченной пирамиды обзора. Если ваш мир построен из выровненных блоков, вы можете использовать своего рода трассировку лучей, которая проверяет видимость блока вместо проверки всех треугольников, это может быть быстрее. Все зависит от того, как вы создали свой код и чего вы пытаетесь достичь. У меня нет времени смотреть ваш код. Советую зайти на gamedev.net и поискать на форуме minecraft. Это даст вам массу материалов для чтения.   -  person Emond Erno    schedule 12.12.2011
comment
Ну, я уже реализовал что-то подобное, я (как упоминалось выше) разделил ландшафт на области размером 32x32x32, и когда они собираются отрисовываться, эти области проверяются, находятся ли они в усеченной видимости, это то, что вы подразумеваете под вышеизложенным ?   -  person Darestium    schedule 13.12.2011
comment
Да, и многое другое. Читайте Gamedev.net и ищите на форуме minecraft или воксельный движок.   -  person Emond Erno    schedule 13.12.2011


Ответы (1)


В такие времена мы обращаемся к профилировщику :) Я бы посоветовал CLR и SlimTune (спасибо A-Type). В зависимости от того, какую .NET Framework вы используете, вы должны загрузить соответствующую. Тогда вы сможете узнать, где ваши узкие места и на чем вам следует сосредоточить свое внимание, а не копаться в темноте.

person Caleb Jares    schedule 09.12.2011
comment
Профилировщик CLR — это профилировщик памяти, а не производительности. Это полезно, только если низкая производительность вызвана выделением памяти. - person Andrew Russell; 09.12.2011
comment
Я не думаю, что низкая производительность вызвана распределением памяти. - person Darestium; 10.12.2011
comment
Всегда хорошо убедиться. Большинство проблем, с которыми я сталкиваюсь, вызваны тем, что все должно быть в порядке. - person Brandon Buck; 10.12.2011