Освещение



Освещение

В Drakan точечное освещение изменяющихся объектов и ландшафта вычислялось динамическим образом. Иначе говоря, любое перемещение источника света или объекта должно было пересчитываться. При этом чем больше источников света и чем большие площади они охватывают, тем, разумеется, медленнее идет игра. Обратное справедливо.

«Частота кадров - один из наиболее критических факторов, за которым необходимо следить при программировании игры», - говорит Стюарт Денман. В игре Drakan сложное освещение - одна из причин дополнительного расхода памяти. (Использовано с разрешения компании Psygnosis, Inc.)

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

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

Далее Стюарт Денман обсуждает аргументы «за» и «против» работы с лицензированным или собственным движком.



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

Surreal повезло, поскольку мы добились начального финансирования проекта, имея на руках лишь небольшую демонстрационную программку. Большинству разработчиков это не удается. Я осознал (хотя и не сразу), что попасть в эту индустрию, если вы никогда в ней не работали, весьма трудно. Вам необходимо доказать собственную состоятельность либо с помощью репутации, либо поразив всех гениальной демо-программой. Жаждущие получить заказ на создание игры всегда могут появиться из ниоткуда и с ходу выдать демо-версию, соперничающую с профессиональными работами. Пока такое возможно, а значит, шансы есть у всех

В программировании информация часто хранится в виде массивов, то есть строк данных. Нередко попытка обращения к областям памяти находящимся за пределами массивов, вызывает общий сбой Windows - General Protection Fault (GPF). Например, если массив содержит только пять элементов, а программа попытается получить доступ к восьмому, вы увидите на экране сообщение о GPF. Чтобы застраховать себя от подобных ошибок, обратите внимание на следующую программу.

Это должен сделать каждый программист - создать шаблон для массивов. Не используйте массивы в стиле Си, если это не является абсолютно необходимым. Определение шаблона должно выглядеть примерно так:

template <class Entry> class Array
{
private:

Entry *pEntry;
int iSize;

Далее шаблон содержит внутренние компоненты для добавления (размещения) и удаления записей массива, а также компоненты для доступа к массиву, подобные приведенному ниже:

public:

// Обеспечивает доступ к записям массива...
Entry &operator [](const int ilndex) const
{

Assert(ilndex >= 0 && ilndex < iSize);
return pEntry[ilndex];

}

Функция Assert очень важна, так как она вызывает ошибку отладки, если значение выражения-аргумента Assert равно FALSE. Этот небольшой фрагмент программы спас нас от такого количества ошибок, что я просто не представляю, что бы мы без него делали. Наш макрос Assert выглядит примерно так:

// Режим отладки:
#if defined(_DEBUG)

extern BOOL MyAssertFunc(BOOL, int, char *};

#define NatBreakf) { _asm { int 3 } }

// Утверждает, что значение ехр - истина.
#define Assert(ехр) \

if (MyAssertFunc((int)(exp),__LINE__,__FILE__)) \
NatBreak();

// Режим без отладки:

#else

#define Assert(exp)

#endif // _DEBUG

При окончательной сборке все макросы Assert исключаются из компиляции. При сборке для отладки функция MyAssertFunc включается в библиотеку. Функция вычисляет первый аргумент и выводит окно сообщения, указывающее строку и файл, где сработало утверждение (последние два аргумента). После этого программист может принять решение продолжить или прервать выполнение. При выборе прерывания функция возвращает значение TRUE, и инструкция int 3 приведет к остановке отладчика на строке макроса Assert.

Узнать все о проекте Drakan вы сможете, заглянув на сайт www.psygnosis.com/drakan/.



Содержание Назад Вперед