графоманские улучшения ФЛЕНОВ МИХАИЛ AKA HORRIFIC Спецвыпуск: Хакер, номер #064, стр. 064-024-7 Посмотри на рисунок, где показаны сферы различного размера. Самая большая сфера создана из 32-х сегментов, а остальные — из 12-ти. Обрати внимание на то, что самая маленькая сфера выглядит вполне гладкой, хотя на сферах побольше хорошо видны угловатости. Использовать множество сегментов на маленьких объектах — лишняя растрата ресурсов. То же касается и текстур. Чем ближе объект, тем лучше видна каждая деталь на текстуре. На самой большой сфере можно увидеть, что текстура есть, но на самой дальней сфере обычно не разглядишь ничего. Она настолько мала, что кажется окрашенной в один цвет. Тогда зачем использовать текстуру? Не лучше ли просто окрасить сферу в нужный цвет? Пользователь ничего не заметит, особенно если сфера будет находиться в движении. Чтобы повысить скорость работы с текстурами, предлагаю действовать следующим образом: ? СОВСЕМ НЕ ИСПОЛЬЗОВАТЬ ТЕКСТУРЫ ДЛЯ САМЫХ ДАЛЬНИХ (ОТ ЗРИТЕЛЯ) ОБЪЕКТОВ, ТОЛЬКО ОКРАШИВАТЬ ИХ ЦВЕТОМ, МАКСИМАЛЬНО СООТВЕТСТВУЮЩИМ ЦВЕТУ ТЕКСТУРЫ. ? ПО МЕРЕ ПРИБЛИЖЕНИЯ ОБЪЕКТА НАТЯНУТЬ НА НЕГО ТЕКСТУРУ НЕБОЛЬШОГО РАЗМЕРА, НАПРИМЕР 16X16. ВОТ ТАК МЫ ЗАРАНЕЕ МАСШТАБИРУЕМ БИТОВЫЙ ФАЙЛ, ОБЛЕГЧАЯ ЖИЗНЬ ВИДЕОКАРТЕ. ? ДЛЯ БОЛЬШИХ ОБЪЕКТОВ, НАХОДЯЩИХСЯ ПОБЛИЗОСТИ, ИСПОЛЬЗОВАТЬ БОЛЕЕ КАЧЕСТВЕННЫЕ ТЕКСТУРЫ. Если масштабировать текстуры заранее, то качество изображения будет лучше, чем если бы оно было сделано DirectX, так как профессиональный художник сможет сделать необходимые сглаживания, чтобы вид уменьшенного изображения был приемлемым. Конечно, невозможно подготовить все возможные варианты текстур, но хотя бы несколько вариантов должны быть сделаны. Меньшие по размеру текстуры, которые будут использоваться для дальних объектов, обработаются быстрее благодаря меньшему размеру и меньшему коэффициенту программного масштабирования. Текстуры, масштабированные заранее, — это один из немногих трюков, благодаря которому мы повышаем и скорость, и качество сцены. итого Я мог бы еще долго рассказывать об оптимизации в играх, но эта тема слишком широкая и требует отдельной книги, над чем я сейчас и работаю. Прошу ко мне на сайт www.vr-online.ru — уже к моменту выхода этого номера я постараюсь выложить что-нибудь новое по оптимизации и графике. Удачи! И не бойся экспериментировать и обманывать пользователя (они это любят) ПРИ ИСПОЛЬЗОВАНИИ DIRECTDRAW НИКОГДА НЕ ПРИМЕНЯЙ ФУНКЦИИ GDI: ОНИ ТОРМОЗЯТ ПРОГРАММУ. ПОЛЬЗУЙСЯ ТОЛЬКО ПРЯМЫМ ДОСТУПОМ К ПОВЕРХНОСТИ И КОПИРОВАНИЕМ ПОВЕРХНОСТЕЙ ДЛЯ ЗАЛИВКИ DIRECTDRAW ПОВЕРХНОСТИ МОЖНО ИСПОЛЬЗОВАТЬ ФУНКЦИЮ BLT, НО НАМНОГО БЫСТРЕЕ БУДЕТ ЧЕРЕЗ ПРЯМОЙ ДОСТУП ЗАЛИТЬ ПОВЕРХНОСТЬ ОПРЕДЕЛЕННЫМ ЦВЕТОМ ФУНКЦИЕЙ FILLMEMORY ИНТЕРФЕЙС IDIRECTDRAWCLIPPER ДОСТАТОЧНО ПРОЖОРЛИВ. НЕМНОГО СТАРАНИЙ — И ТЫ СМОЖЕШЬ НАПИСАТЬ ПРОВЕРКУ ВЫХОДА ЗА ПРЕДЕЛЫ ПОВЕРХНОСТИ САМОСТОЯТЕЛЬНО, СООТВЕТСТВЕННО, МАКСИМАЛЬНО ОПТИМИЗИРУЕШЬ ЭТОТ КОД ОПТИМАЛЬНАЯ ГЛУБИНА ЦВЕТА ДЛЯ СОВРЕМЕННОЙ ИГРЫ — 16 БИТ. ЕСЛИ СДЕЛАТЬ 24, ТО РАСХОДЫ ОПЕРАТИВНОЙ И ВИДЕОПАМЯТИ НЕОПРАВДАННО ВЫРАСТУТ, А РАЗНИЦУ В КАЧЕСТВЕ В ДИНАМИЧНЫХ СЦЕНАХ НЕ ЗАМЕТИТ ДАЖЕ ЗОРКИЙ ГЛАЗ ОРЛА |