People Soft Понедельник, 29.04.2024, 18:39
Меню сайта
Категории каталога
Blitz3D [3]
Delphi [0]
Pascal [5]
Главная » Статьи » Blitz3D

Курс молодого бойца, Ч. 2
Статья взята с сайта blitzetc.boolean.name
Курс молодого бойца, часть 2: теоретическая подготовка

В первом выпуске журнала была статья "Фазы создания игр", в которой описано, с чего нужно начать при создании игры. Написано верно, но мы создаем мега-игру, и нам всякие правила и рекомендации по созданию обычных игр не указ. Хотя со структурой игры не поспоришь. И игра и мега-игра состоит из одинаковых частей. Однако углубим и расширим знания, почерпнутые в прошлом номере.
"Визуализация" - это то, что отвечает за отображение виртуального мира на экране. Состоит из двух составляющих графического движка и графического контента (Медиа). Графический контент состоит из 3D моделей и картинок, которые будет показывать графический движок. Все красивости в игре зависят от медиа и только от медиа! Программист может лишь написать алгоритм, который будет есть минимум ресурсов, позволяя использовать навороченные модели и большие текстуры. Если игра тормозит, и программист не может ничего ускорить, значит упрощаем наши замечательные модели или апгрейтим компьютер. (В первую очередь видюху, системник подождет...) Ну и самое радикальное решение - меняем программиста. От графического движка зависит, в каком формате могут быть картинки, текстуры, модели, какие эффекты можно сделать, скорость вывода графики.
"Интерфейс пользователя" - бывает игровым и системным. В игровом - играют, в системном - настраивают параметры, сохраняют, загружают. Интерфейс настолько сильно связан с "системой ввода/вывода", что можно сказать, что это одна система.
"Логика игры" - Это все что происходит в игре. Ее можно разделить на множество частей, причем эти части зависят от того, какой жанр игры вы выбрали, какая концепция визуализации и перемещения и еще множество переменных влияющих на эту подсистему. Выделю те, которые будут точно везде. "Работа с камерой", перемещение персонажа, физика, АИ, анимация и звук.
Визуализация.

Виртуальный мир (любой) состоит из трех видов объектов интерактивных, не интерактивных и эффектов. Интерактивные объекты могут быть игровыми объектами и персонажами. Не интерактивные - это локация (условно) и объекты на локации. Эффекты - это все то, что нафиг ненужно для игрового процесса, но красииииво и жрет столько ресурсов, что мама негорюй!!! Само собой, минимальный набор крутого игродела - это два объекта "Персонаж" и "Локация", многие и вовсе обходятся только локацией. С нее и начнем.
Локация.

Локация понятие весьма растяжимое. Начиная от плоского квадратика N на N… нет мало лучше M на M, и кончая сложной системой моделей. Именно локация задает настроение игре, создает ее атмосферу. Локации можно разделить на две принципиальные группы Ландшафты и Декорации. Ландшафты используются для создания открытых пространств, а Декорации для закрытых. Хотя это условность. Можно, например, сделать декорацию ландшафта. Принципиальная разница заключается в том, что Декорация создается в 3D редакторе, а Ландшафт (тем или иным способом) создается игровым движком.
Ландшафт

Вот два способа, которые знаю я:

Первый - загрузка карты высот в сплайновую поверхность (LoadTerrain). Карта высот - черно-белая картинка, где черный цвет высота 0, а белый высота 1. Шаг между высотами = 1/255. Сплайновая поверхность - математическое явление, смысл которого заключается в том, что по отдельным точкам поверхности строится вся поверхность… Достоинство этого метода в том, что такая поверхность отображается быстро, что очень хорошо, но есть и изнанка - у Terrain нет "тела". Поэтому его поверхность тяжело сделать разно-фактурной. Текстура натягивается на всю поверхность Terrain. Т.е. если текстура - трава, то и вся поверхность будет травой. Можно сделать огромную текстуру, на которой нарисовать различные участки ландшафта различными текстурами, но огромная текстура сведет на нет выигрыш от использования Терана. Но есть такая штука - мультитекстурирование. На поверхность накладывается несколько текстур. Например, берем текстуру земли и текстуру на которой схематично нарисованы зоны зеленая (трава), белая (голая земля), черная (типа дорога). При наложении двух текстур мы увидим вполне понятную картину, добавить третьим слоем текстуру состоящую из беспорядочных точек (Нойсовая называется) и вообще классно, только травки, камушки (спецэффекты) добавим чтобы народ внимание на низкую детализацию не обращал… Для природы самое оно! Можно, правда, сделать несколько экземпляров террана, наложить на каждый свою текстуру + карту прозрачности и посмотреть что получится, но мне кажется, будет изврат…

Второй - загрузка карты высот в 3Д объект. Программно создаем квадратик 1х1 и его углы поднимаем в соответствии с картой высот. Положительная сторона этого дела заключается в том, что у нашего ландшафта появляется тело которое можно красить текстурами как заблагорассудится. Хочешь в этом месте травку нарисовать? Пожалуйста! Дорожка здесь идет? Нет проблем! Но за все приходится платить. Очень много съедается ресурсов. Ландшафт 100х100 клеток скушает у вас 20000 треугольников. Естественно есть способы сделать, чтобы эти 20000 рисовались не сразу, но это не всегда помогает… Те кто умеет работать в 3D редакторе скажут: "Нафига козе баян? Я в Максе нарисую быстрее, качественнее и с лайтмапами (Редкий эффект такой, который мало ресурсов жрет)" Но этот способ со счетов не сбрасываем. Есть случаи, когда кроме этого у нас ничего не будет…

Есть идея насчет третьего способа, но он непроверенный. Строить карту не по карте высот, а по карте изолиний, может получиться весьма хорошо. Недостаток, который вижу без проработки этого вопроса - это отсутствие софта для создания карт изолиний… Достоинство меньшее чем во втором случае кол-во полигонов. Есть тело, но не очень хорошая развертка модели…
Декорации

Декорации рисуются в 3Д редакторе. Они отличаются высокой детализацией, сложной геометрией, красивостью всякой и маленькой площадью, ну хорошо - весьма ограниченной площадью. Минус - коридоры, залы, узкие улицы, коридоры, дворики, туннель, прибрежная полоса, каналы, горная дорога. Короче, быть игроку на коротком поводке. Шаг вправо, шаг влево расстрел все видящими вертолетами, мучительная боль от пересечения барьера… Хотя многие сочтут это достоинством. Создаются очень просто! Берется 3Д редактор и рисуется! Только у меня почему-то не получается… Наверное нужно редактор какой-то другой взять. ;) Многие скажут: "Нет 3Д редактора кроме 3Дмакс и чарФХ пророк его.." Я скажу: "Ищите и обрящете…" Я пользуюсь Wings3D и после него не могу смотреть на 3Дмакс, Милк и прочие редакторы построенные на четырех оконном интерфейсе. Для создания уровней можно посмотреть редакторы для игровых движков, которые делают уровни в формате bsp или написать свой.
Объекты
Не интерактивные объекты

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

Эффекты это не материальные и не интерактивные объекты. Они применяются к интерактивным, не интерактивным объектам или локации. Тени, дым, колыхающиеся языки пламени - это эффекты. Трава, деревья могут быть эффектами, если они не интерактивны…
Интерактивные объекты

И наконец самая большая головная боль - интерактивные объекты. Это объекты, которыми можно в игре манипулировать. Их можно использовать, брать, открывать, перемещать… С ними можно делать все что угодно. При условии, что вы сможете это закодировать. ;) Если интерактивный объект невидимый, то его называют "триггер". У интерактивных объектов в наличии два особо значимых свойства: 1) Тип срабатывания - в каком случае объект реагирует на воздействие. Может срабатывать при приближении, прикасании, клике, ударе, по условию. От любого события, какое сможете запрограммировать… 2) Тип действия - что происходит с объектом, когда он "срабатывает"… Может открыть дверь, запустить механизм, ударить игрока, "сработать" другой триггер. Любое действие, какое вы сможете запрограммировать.

Для более детального понимания, какие объекты могут быть, что такое интерактивные объекты и как работать с триггерами предлагаю посмотреть RPG maker 2003. Правда, в нем представлена несколько иная картина. Я утверждаю, что если у интерактивного объекта нет графического представления - он триггер, а в RM считается, что если у триггера есть графическое представление, то он интерактивный объект. Но это не важно, результат одинаков. ;)
Интерфейс пользователя

Интерфейс пользователя обычно обзывают GUI. Как не удивительно, но эта часть такая же важная, как и визуализация. Именно через интерфейс игрок будет взаимодействовать с вашим миром. Формально к GUI относятся кнопочки, поля ввода, ползунки, надписи, переключатели и прочие визуальные элементы… Но к GUI можно и нужно отнести управление персонажем, манипулирование с объектами. Ведь от удобства управления зависит, насколько быстро игрок погрузится в созданный вами мир. Кроме этого внешний вид панелек, кнопок, шрифтов недолжен расходится со стилем игры. Если у вас игра про древний мир, то странно будет увидеть оформление интерфейса в стиле хайтек… Но самое удивительное, что создание хорошего GUI у вас займет много времени, и нервов, и это не считая графического наполнения… Существует минимальный набор элементов которые должен уметь отображать GUI для игры: кнопки, картинки, текст, поле ввода. Если GUI поддерживает несколько окон, то вам с ним по пути надолго, если есть исходники, возможно навсегда… Часто возможности по созданию GUI являются частью движка, но часто и не являются. Сами принципы создания GUI довольно простые и имея немного опыта и желания всегда можно написать свой GUI чем мы с вами займемся если вы пробудите с нами достаточно долго.
Логика игры

Логика игры это все вычисления, и действия связанные с игрой кроме непосредственно прорисовки мира. Это чистая и незамутненная вотчина программиста. Здесь не нужны таланты художника, модельера, композитора. Нужна строгая логика, знание языка программирования, хорошая алгоритмическая база. В этой части мертвые модели обретают жизнь, мир наполняется звуками и красками, кнопочки интерфейса нажимаются… Тысячи байт информации разрозненные и безжизненные превращаются в единый мир, подвластный программисту… Хотя программист и является самым низкооплачивамым специалистом и игровой индустрии, и считается что в игре главное модели, графика, звук. Без программиста все модели, картинки и звуки так и останутся Media… Именно эта часть игры и является игрой (Игровым движком). Здесь создаются возможности игрового мира и все глюки.
Работа с камерой

Для того чтобы видеть наш мир, нам нужно спроецировать его на экран монитора. Для этого и нужна "камера". Что значит работа с камерой? Камера - это наши глаза в виртуальном мире, и как в реальном, нам нужно изменять наш угол обзора. Т.к. не всегда мы видим мир глазами персонажа, нужно организовывать слежение за глав. героем. В случае с видом от первого лица, управление камерой совмещается с управлением персонажем, но не исчезает!
Перемещение персонажа

В этой части программы описывается, как персонаж перемещается и взаимодействует с внешним миром. Больше и сказать нечего. Но сам этот блок очень многогранен, и его строение непредсказуемо и зависит от опыта программиста, расположения звезд и неизвестно чего еще…
Физика

Эта часть отвечает за физические свойства мира, притяжение, столкновения и т.д. Если подходить к делу скрупулезно (что бы как в жизни), то самостоятельно такую физику не напишешь, нужно использовать внешние физики, но следует знать, что если вы будете все объекты в мире включать в физическую модель, у вас будет слайд шоу! Сделать свою гравитацию вполне по силам создателю мега-игры. Это гораздо проще, чем использовать для этой цели внешнюю физику, там ведь нужно много изучать, да частенько доки на иностранном…
АИ

Искусственный интеллект - очень громкое название. Эта часть программы описывает поведение окружающей среды… Благодаря АИ монстры ходят, ловушки срабатывают двери открываются… Хотя можно отделить триггеры от НПС, и АИ сделать только для монстров, а на триггеры сделать отдельный блок. Обычно это та часть, которая превращает мега-игру в очень средненькую игру, если совсем не убивает…
Анимация и звук

Этот блок хитрым образом связан почти со всеми блоками… И с GUI, и с перемещением персонажей, и с физикой, и с АИ… Анимация и звук идут параллельно. Задача этого блока своевременно менять анимацию и звуковое сопровождение объектов, элементов интерфейса…
Строение вселенной.

Со строением игры немного разобрались, давайте разберемся со строением Виртуальной вселенной. Вселенная имеет форму шара с радиусом 2^32 единиц, хотя есть мнение, что она имеет форму куба с такой стороной. Точных данных на этот счет нет… На периферии нашей вселенной наблюдаются сильные искажения пространства, что выражается в тряске и дерганье при движении и поворотах, взаимных проникновениях объектов, обусловленных ошибками при определении расстояния от камеры до треугольника т.к. Z-buffer работает на пределе своих возможностей. Z-buffer свойство вселенной прорисовывать дальние треугольники первыми… В этих условиях необходимо помнить, что без проблемное построение мира возможно только в центральной части вселенной. Но нужно знать, что микрокосмос не бесконечен и так же имеет размеры. При очень маленьких размерах так же наблюдается аномальное поведение виртуальных объектов. Если наш мир - планета, то можно принять единицу - виртуальной вселенной равной 1 метру или 0.5 метра или 0.1 метра. Самое простое это 1:1. Если ваш мир - вся вселенная, то у вас проблемы… Диаметр нашего Солнца 61392000000 метров, диаметр нашей виртуальной вселенной 4294967296 единиц. Если брать 1:1, то нашей вселенной не хватит чтобы отобразить наше светило. Мечтатели дальних странствий и реальных размеров, вы рано родились… Но не все потеряно. Если подойти к делу создания своего мира с головой, все возможно… Правда нужно сделать виртуальное пространство в нашей виртуальной вселенной, метрикой которого вы будете управлять… Но это сложно сделать создателю мега-игры, тут нужно технически. ;)

Свет в нашей вселенной презирает преграды. Он распространяется легко и свободно, проходя через объекты, равномерно освещая их треугольники. Вернее их вершины. Типов источников света может быть три точечный, направленный, пятновой (типа фонарик)… Всего может быть 8 источников света… Теней в нашей вселенной нет… Если вы где-то в виртуальном мире видели сотни ламп в коридорах и четкую тень которую отбрасывает персонаж, восхититесь мастерству людей которые создали такую иллюзию. Создав свет, объекты не начнут отбрасывать свет на все вокруг! Для того чтобы персонаж начал отбрасывать тень нужно написать программу и научить компьютер рисовать тень. Для того чтобы сотни ламп осветили коридор, нужно аккуратно нарисовать освещение этого коридора… А для этого нужно много знать и работать. Если вы хотите что-то сделать, и не знаете, как, то вам нужно сначала разобраться как ЭТО происходит в реальном мире. Если вы хотите сделать настоящую тень, то должны знать, как нарисовать эту тень в жизни, на листе бумаги. И конечно нужно искать информацию о создании интересующих вас возможностях. Многое придумано до вас. Можно и нужно воспользоваться накопленными знаниями.

Для осознания следующей порции моего бреда вам понадобится изучить труды Матвея Меркулова. Я не хочу повторяться и описывать азы. Следующий раз мы начнем с гравитации и управления персонажем от первого лица.


Категория: Blitz3D | Добавил: Pupkin (16.09.2007) | Автор: Роман Прядко
Просмотров: 616 | Комментарии: 1 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Имя *:
Email *:
Код *:
Форма входа
Поиск
Статистика

    html counter счетчик посетителей сайта


    Онлайн всего: 1
    Гостей: 1
    Пользователей: 0
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Заделано студией People Soft © 2024