Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #64, МАРТ 2006 г.

графоманские улучшения

ФЛЕНОВ МИХАИЛ AKA HORRIFIC

Спецвыпуск: Хакер, номер #064, стр. 064-024-6


В составе DirectX SDK есть очень хороший пример рисования деревьев на поверхности ландшафта (DXSDK\Samples\C++\Direct3D\Billboard). Деревьев очень много, и чтобы не перебирать их все, во время отображения используется сортировка. Попробуй убрать сортировку и производить проверку всех деревьев при каждом формировании сцены — производительность примера заметно упадет.

оптимизация 3d

При создании фигуры с помощью Direct3D используй минимально необходимые размеры. Например, при создании буфера индексов IDirect3DIndexBuffer9 каждый элемент массива может быть 16- или 32-битным. Если количество индексов не превышает 65 535, то следует использовать 16-битный массив. В данном случае переход на 32 бита будет неоправданным и принесет лишние расходы памяти, которой никогда не бывает много.

В Direct3D мы формируем сцену с помощью вершин и треугольников. Чем их больше, тем больше времени движок и видеокарта тратят на формирование сцены. И вновь мы выбираем между количеством и качеством! Посмотри на рисунок, где показана сфера, созданная из 32-х сегментов. Сфера получается гладкой, но количество необходимых треугольников слишком велико.

Можно сократить количество сегментов до 16-ти, то есть уменьшить его в два раза. В результате сокращается количество ресурсов, необходимых для отработки фигуры, но сфера получается угловатой. Я думаю, такое положение дел устроит далеко не многих.

Если же нам нужны сглаженные поверхности, то приходится выбирать между гладкостью и скоростью. В большинстве игр разработчики стараются использовать прямоугольные поверхности — для создания четырехугольной плоскости достаточно всего лишь двух треугольников.

Получается, что скорость создания сцены зависит не только от количества объектов на экране (объектов интерьера, освещений, существования теней). На сцену влияют и количество вершин, из которых состоит объект. Здесь необходимо подходить к решению задачи с деликатностью и осторожностью.

С другой стороны, если создать сферу из ста сегментов, то мы получим явную избыточность, особенно если эта сфера в сцене будет находиться очень далеко от зрителя и выглядеть мелкой. Пользователь просто не сможет увидеть мелкие детали, которые ты захочешь передать. Если у тебя есть 3D-редактор, позволяющий контролировать количество сегментов (например 3D Studio Max), то попробуй сейчас создать сферу размером во весь экран. Для нормального отображения и получения гладкой поверхности необходимо не менее 30-ти сегментов. Если же отдалить сферу как можно дальше (чтобы в диаметре она казалась не больше десятикопеечной монеты), то будет достаточно и 12-ти сегментов.

Получается, что при формировании сцены мы можем использовать разное количество сегментов для объектов с разной удаленностью и значительно сэкономить жизнь процессору и видеокарте, а следовательно, увеличить скорость создания сцены.

Назад на стр. 064-024-5  Содержание  Вперед на стр. 064-024-7