Отправляет email-рассылки с помощью сервиса Sendsay

Новости сайта www.dyda.info

  Все выпуски  

DarkBASIC - легко создаем 3D миры и игры!


Информационный Канал Subscribe.Ru


БЕСПЛАТНО! Русский DarkBASIC демо + примеры и "фенечки"
  Ограничение по трафику
Номер 14/октябрь 2002
От редактора

  Информация для новых подписчиков! Если вы "не врубаетесь" о чем идет речь в рассылке - посмотрите предыдущие номера рассылки. И вам станет интереснее! :-) Также советую посетить оффициальный русский сайт www.darkbasic.ru и darkbasic.narod.ru

  Замирая в глубоком пардоне, Илья Середа.


Содержание номера:

      1. Новости.

      2. Руководство по созданию 3D-игр.

      3. Статья Владимира Илюнькина присланная G.Badger-ом

      4. Это интересно...




Новости

  После долгого затишья Crow Interactive представляет новые скриншоты из игры ARMAGEDDON. На снимках, наконец-то, мы можем видеть бой между главным героем игры и одним из разновидностей монстров - Скелетами.

Скриншот Скриншот Скриншот Скриншот

На следующих 4 снимках вы можете увидеть прототип игрового экрана (меню), с помощью которого осуществляется дополнительная навигация по игровому миру:

Скриншот Скриншот Скриншот Скриншот

Видеоролик из игры ARMAGEDDON вы можете скачать (часть-1 и часть-2). Ролик разбит на две части для удобства скачивания.

  На украинском сайте автора пародийной игры "Любовь со 101-го взгляда" появилось дополнение в виде "Лены: фанатки спорта и культуризма". :-)) Кстати, эта игра пользуется заслуженной популярностью. Распространяется бесплатно. При регистрации (бесплатной) вы можете получить кучу и еще кучку дополнений. :-) Рекомендую к посещению - заглядывать сюда.

  В следующем номере читайте обзор DarkBASIC Pro и интервью с Риком Ваннером и Ли Бамбером! "... В конце интервью я задал им классический вопрос - Ну когда наконец выйдет DBPro в России? ..." ответ на этот и другие интересные вопросы, вы узнаете в следующей рассылке. А приготовил все это для вас - David Good.

  Новости сайта Russian Dark Basic Developers Network:

  • Открылся новый форум на сайте www.darkbasic.ru. Форум отличается от старого наличием поиска и более быстрой загрузкой. В остальном это все то же крайне неудобное дерево. Посмотреть на это чудо можно тут: www.darkbasic.ru/forum.php

  • В разделе Галерея скриншотов добавлены несколько новых скриншотов, демонстрирующих бои. Смотреть всем

  • Обновил следующие разделы: Игры в разработке (Глубина и Sopwitch 2), Готовые игры (Любовь со 101 взгляда), Галерея скриншотов (SKVsoft и Jol)

  • Народ!!! Если у вас есть интересные новости о Дарк Бейсике или обо всем, что с ним связано (обзоры редакторов, игр, анонсы игр или просто общие статьи ), вы можете разместить их на этом сайте. Для этого вам нужно кликнуть на кнопку написать статью (там где Russian Dark Basic Developers Network) и ввести текст статьи. В течении суток, ваша статья будет опубликована на сайте.

  • Заработал новый раздел сайта - Галерея скриншотов. Если хотите чтобы там были ваши скриншоты, присылайте их сюда: rcsdevil@online.ru. Скриншоты должны быть формата jpg и иметь размеры не более 800х600.




Руководство по созданию 3D-игр.

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

  Для более детальной и полной информации - рекомендую обратиться к первоисточникам. А это компания "Медиахаус" и "Руководство пользователя", которое вы получаете в коробке с лицензионным DarkBASIC-ом.

III. ИГРА

7. Эффект шлейфа (particle system)

Цель урока: создание простого эффекта шлейфа.

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

rem Загружаем частицы (шлейф)
Load Image "fire.bmp",2
For x  = 0 to 10
 Make object plain x+10,5,5
 Texture object x+10,2
 Set object x+10,1,0,0
 Ghost object on x+10
Next x
rem Включаем счетчик частиц
Pn=10

Эту часть кода следует поместить в начале программы, где мы загружаем все наши объекты и звуки. Прежде всего, загружаем текстуру для частиц и создаем десять плоских объектов. Команда "Set Object" используется для установки особых свойств объекта. Семь настраиваемых свойств объекта - это каркас, прозрачность, выбраковка, фильтр, источник света, туман и окружение. Нам потребуются только три из них: каркас, прозрачность и выбраковка. Первый параметр после команды - номер используемого объекта. Второй параметр - атрибут каркаса. Устанавливаем его равным 1, чтобы объект отображался заполненным полигонами, а не в виде каркаса. Это установки по умолчанию для большинства 3D-объектов. Третий параметр - атрибут прозрачности. Мы устанавливаем его равным 0. В данном контексте прозрачность означает, что черный цвет на растровых изображениях не будет показан при текстурировании объекта. Четвертый параметр - атрибут выбраковки. Этот параметр устанавливается равным 0, если в 3D-сцене требуется рендеринг обеих, видимой и обратной, сторон полигона. Обычно требуется рендеринг только одной стороны полигона. В большинстве случаев нет необходимости прорисовывать обе стороны, но поскольку мы используем плоский объект, не имеющий объема, то должны все-таки сделать это, чтобы наблюдатель мог видеть полигон отовсюду. Еще одна новая команда "Ghost Object" применяется для того, чтобы сделать объект прозрачным. При этом он появится подобно привидению. С помощью этой команды можно включать и выключать режим прозрачности. Команда использует один параметр - номер объекта, который надо сделать прозрачным. Мы также инициализируем переменную "Pn", и она становится равной номеру первой созданной нами частицы. Переменная "Pn" будет использоваться для хранения номера следующей обрабатываемой частицы.

  If BulletLife > 0
  Dec BulletLife
  Move object 2,10

  bX#=Object position X(2)
  bY#=Object position Y(2)
  bZ#=Object position Z(2)

  Rem Шлейф частиц
  inc Pn
  if Pn=20 then Pn=10
  Scale object Pn,100,100,100
  Position object Pn,bX#,bY#,bZ#
  point object Pn,X#,Y#,Z#
  Zrotate object Pn,rnd(180)
  for x = 1 to 10
   scale object int((Wrapvalue((Pn-9+x)*36))/36)+10,100+x*25,100+x*25,100+x*25
  set cursor 10,10
  print int((Wrapvalue((Pn+x)*36))/36)+10
  next x

  Position sound 2,bX#,bY#,bZ#
  set cursor 10,10
  if Sqrt((mX# - bX#)^2 + (mY#+25 - bY#)^2 + (mZ# - bZ#)^2) <20
   print "Цель поражена"
   BulletLife = 0
  endif
  if BulletLife = 0
   Hide object 2
   stop sound 2
  endif
 Endif

Здесь мы добавили простой шлейф в часть игрового кода, вычисляющую время "жизни" снаряда.

 inc Pn
  if Pn=210 then Pn=10
  Scale object Pn,100,100,100
  Position object Pn,bX#,bY#,bZ#
  point object Pn,X#,Y#,Z#
  Zrotate object Pn,rnd(180)
  for x = 1 to 10
   scale object int((Wrapvalue((Pn-9+x)*36))/36)+10,100+x*25,100+x*25,100+x*25
  next x

Когда снаряд начинает свою "жизнь", мы увеличиваем значение переменной "Pn", чтобы задействовать следующий объект системы частиц в множестве. Затем проверяем, не превысило ли значение переменной "Pn" числа созданных нами частиц, и если превысило, устанавливаем "Pn" равным 10. Возвращаем масштаб частицы в первоначальное значение и помещаем ее туда, где находится снаряд. Затем направляем частицу на камеру и поворачиваем ее на угол со случайным значением. Затем в цикле For : Next с помощью математической формулы масштабируем каждую частицу, чтобы казалось, что дым рассеивается. Попутно решаем задачу, какая частица находится в начале хвоста дыма, а какая - в его конце. Для этого воспользуемся уже знакомой командой "WrapValue". Обычно она применяется для того, чтобы значения углов не превышали 360 градусов. Так как мы используем 10 объектов, то вычитаем 9 из значения "Pn". Величина "Pn" всегда будет меняться от 10 до 19, что соответствует 10 объектам. Затем мы добавляем значение переменной "х" и умножаем все на 36. Если значение "Pn" равно 5, и мы находимся на шестой итерации цикла, тогда значение параметра "WrapValue" будет равно 11, помноженному на 36, или 396. Эта величина явно превышает 360, поэтому функция "WrapValue" делает значение переменной равным 36. Затем мы делим 36 на 36 и получаем значение 1. Оно является номером следующей после десятого объекта частицы, которая будет первой. 

По существу, этот алгоритм последовательно, циклически перебирает все значения от 1 до 10, причем неважно, с какого значения мы начали. Поиск необычных решений трудных задач - неотъемлемая часть программирования. Можно по-разному решить задачу, и наиболее простой способ часто оказывается наилучшим. Этот пример также показывает вам, что вы не обязаны использовать команды DarkBASIC каким-то одним определенным способом. Нетрадиционное мышление приводит ко многим необычным решениям. Каждый объект масштабируется в соответствии с его позицией в хвосте дыма, представленной значением переменной цикла. Это дает эффект рассеивающегося дыма.

8. Gosub

Цель урока: показать действие команды Gosub.

В этом уроке мы продемонстрируем действие команды "Gosub". Мы будем использовать "Gosub" для того, чтобы упорядочить и упростить программу, когда начнем добавлять к ней большое количество функций, а также чтобы сделать более понятным то, что происходит в ее основном цикле.

If BulletLife > 0 then Gosub ShootBullet

Мы заменили несколько строк кода для проверки времени "жизни" снаряда всего одной строкой. Команда "Gosub" применяется для того, чтобы выполнить код, расположенный в другом месте программы, а затем вернуться туда, откуда был произведен вызов команды "Gosub". Здесь мы вызываем подпрограмму "ShootBullet".

  ShootBullet:
  Dec BulletLife
  Move object 2,10

  bX#=Object position X(2)
  bY#=Object position Y(2)
  bZ#=Object position Z(2)

  inc Pn
  if Pn=21 then Pn=10
  Scale object Pn,100,100,100
  Position object Pn,bX#,bY#,bZ#
  point object Pn,X#,Y#,Z#
  Zrotate object Pn,rnd(180)
  for x = 1 to 10
   scale object int((Wrapvalue((Pn-9+x)*36))/36)+10,100+x*25,100+x*25,100+x*25
  set cursor 10,10
  next x

  if bY# < Get Ground height(1,bX#,bZ#) then BulletLife=0
  Position sound 2,bX#,bY#,bZ#
  set cursor 10,10
  if Sqrt((mX# - bX#)^2 + (mY#+25 - bY#)^2 + (mZ# - bZ#)^2) <20
   print "Цель поражена"
   BulletLife = 0
  endif
  if BulletLife = 0
   Hide object 2
   stop sound 2
   for x=10 to 20
    hide object x
   next x
   Explode = 20
  endif
Return

Чтобы объявить подпрограмму, ей нужно задать уникальное имя и расположить его в начале подпрограммы. После имени подпрограммы нужно поставить двоеточие, иначе имя не будет распознано, что вызовет ошибку. В том месте, где заканчивается код подпрограммы, следует поместить команду "Return", чтобы исполнение кода было продолжено с того места, откуда была вызвана подпрограмма. Этот метод значительно уменьшает беспорядок в основном цикле, позволяя легче понять, что в нем происходит. Четко разработав структуру подпрограмм, вы избавите себя от многих часов головной боли по поводу упорядочивания структуры вашего кода.

9. Эффект взрыва

Цель урока: создание простого эффекта взрыва.

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

rem Создаем эффект взрыва
Make Object Sphere 30,20
texture object 30,2
ghost object on 30
Hide Object 30
Make Object Sphere 31,20
texture object 31,2
ghost object on 31
Hide Object 31

Load 3Dsound "Explode.wav",3

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

 if Mouseclick()=1 and Explode =0
  if BulletLife<50
   Position object 2,X#,Y#-7,Z#
   Set object to camera orientation 2
   BulletLife =120
   show object 2
   Loop sound 2
  Endif
 Endif

Как видите, мы добавили в программу переменную "Explode". Проверяем, не произошел ли взрыв. Если взрыв происходит в данный момент, то не будем выстреливать еще один снаряд, потому что это может резко обрезать звук взрыва, уменьшая действие эффекта. Мы также установили интервал, через который снаряд может быть снова выпущен. Новый снаряд можно будет выстрелить, если при проверке окажется, что время "жизни" снаряда меньше 50. Это сделано для того, чтобы убедиться, что снаряд находится достаточно далеко, и отсутствие эффекта взрыва не будет замечено игроком.

   if bY# < Get Ground height(1,bX#,bZ#) then BulletLife=0

Эта строка кода находится в подпрограмме "ShootBullet". Она проверяет, не попал ли снаряд в землю, и устанавливает значение переменную "BulletLife" равное 0 при положительном результате.

  if BulletLife = 0
   Hide object 2
   stop sound 2
   for x=10 to 20
    hide object x
   next x
   Explode = 20
  endif

Эта часть кода также находится в подпрограмме "ShootBullet". Код выполняется после того, как время "жизни" снаряда установлено равным 0, либо по причине столкновения с чем-либо, либо по причине окончания "жизни" снаряда. При этом убираются все объекты шлейфа, равно как и сам объект "снаряд". Переменной взрыва присвоено значение 20 для начала отсчета взрыва.

If Explode > 0 then Gosub ExplodeRocket

Эта строка кода располагается в нашем основном цикле. Если счетчик взрыва больше 0, то для выполнения кода взрыва вызывается подпрограмма "ExplodeRocket".

Rem Взрыв снаряда
ExplodeRocket:
 Position object 30,bX#,bY#,bZ#
 Show object 30
 Position object 31,bX#,bY#,bZ#
 Show object 31
 EScale=20*(30-Explode)
 Scale object 30,EScale,EScale,EScale
 Yrotate object 30,WrapValue(Explode*37)
 Scale object 31,EScale/1.5,EScale/1.5,EScale/1.5
 Yrotate object 31,WrapValue(359-Explode*37)
 Dec Explode
 If Explode = 0 then hide object 30: Hide object 31
 If Explode=18
  position sound 3,bX#,bY#,bZ#
  play sound 3
 endif
 If Explode < 15 then position sound 3,X#,Y#,Z#
Return

Подпрограмма "ExplodeRocket" производит взрыв. В место попадания снаряда мы помещаем две сферы, созданные для эффекта взрыва. Затем мы рассчитываем коэффициент масштабирования взрыва и сохраняем его в переменной "EScale". Затем масштабируем первую сферу и вращаем ее со скоростью, уменьшающейся по мере того, как сфера становится больше. То же самое мы делаем со второй сферой, только ее мы масштабируем с меньшей скоростью, чем первую сферу, а вращаем с большей скоростью, основанной на значении "Explode". После этого мы применяем команду "Dec" для уменьшения значения "Explode" на единицу. Потом проверяем, равно ли значение этой переменной 0. Если оно равно 0, обе сферы взрыва убираются. Заметьте, что мы использовали двоеточие, чтобы выполнить две команды "HideObject" в одной строке. Мы могли бы применить сравнение "If : EndIf", но двоеточие в качестве разделителя делает наш код короче и легче читаемым. Следующие строки кода создают звуковой эффект, когда вы сначала видите, как что-то происходит вдали, а затем слышите взрыв. Далее код задает ожидание, пока значение счетчика не достигнет 18, и только после этого начинает воспроизводить звук. Программа помещает источник звука в конечной точке полета снаряда. Когда счетчик достигает 15, источник звука перемещается в координаты камеры, что создает эффект отдаленного взрыва. За счет того, что используется команда "Play Sound", а не "Loop Sound", звук воспроизводится только один раз.

  В конце концов у вас должно получиться следующее. А это пример из предыдущей рассылки (ссылка исправлена) - качать здесь.



Статья Владимира Илюнькина присланная G.Badger-ом

  Данная статья прошла по сети FIDONET. Так как мне ее прислали без названия - то и здесь она без. Данных автора я не нашел (ну что-б спросить разрешения публиковать), так что сорри. Не буду больше отвлекать. Читайте:

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

На рисунке, возможно плохо, но видно, что чем ближе расстояние от источника тени к объекту "тенеприемнику", тем тень четче, а чем дальше расстояние - тем размазаннее тень.

Хочется добавить, что такую закономерность можно выявить практическим методом (например приближая и отдаляя конец карандаша от поверхности стола).



Плывущие облака (неравномерной "плотности") дают динамический эффект изменения яркости солнечного/лунного света (соответственно это сказывается на яркости объектов освещаемых этим светом), то есть облака заслоняют солнечный/лунный свет, влияя на его яркость. Постоянное медленное, плавное изменение яркости ландшафта и поверхностей, освещённых солнечным/лунным светом, придаёт игре динамичность, можно сказать, что это ещё +1 средство борьбы со статичностью игровых миров. Я имею в виду яркость "глобального" или "основного" светового источника, то есть, это действует и на помещения, через окна которых попадает солнечный/лунный свет и на любые другие поверхности, которые подвержены освещению глобальным световым источником (солнечный и "лунный свет").

Так же эффективно использовать этот приём (периодическое изменение яркости светового источника выраженное изменением яркости освещённых поверхностей) при горении огня (свечи, фонари, факела, костры, камины), яркость света от этих источников динамична (плавно изменяем яркость света).

Кстати, вместе с изменением яркости, можно менять и цвет (например цвет солнечного/лунного света + цвет облачных масс, так же это подходит для каминов/костров/факелов - там цвет меняется в зависимости от горящего материала), ну естественно мы же не будем просчитывать плотность облаков или сгораемый материал, а просто будем менять значения яркости/цвета в случайной последовательности.

И тут есть деталь, на которую стоит обратить внимание. Яркость тени (прозрачность) - не зависит от яркости светового источника. Тень (от конкретного светового источника) вообще не имеет градиента, теневая площадь не может иметь области разной яркости/прозрачности. Я часто замечал ошибки, где в играх тень плавно меняла свою яркость. Ошибка возникает как результат неверного восприятия эффекта "расплывчатости" областей тени от объектов находящихся выше других теневых источников, то есть это и есть эффект "расплывчатости" теневых граней, о котором говорил выше (интенсивность "расплывчатости" зависит от расстояния от теневого источника до теневого приёмника).

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

(!!!) Не обязательно постоянно держать оружие перед глазами, можно оставить лишь экранный прицел, а при нажатии на клавишу "стрелять" вскидывается на прицел оружие и стреляет, затем спустя некоторое время рука с оружием - опускается вниз.

Эффектно использовать световые лучи в пыльных местах, то есть лучи света исходящие из проёмов и щелей. Просто не стоит забывать об этом эффекте, тем более это легко реализовывается (цветные полупрозрачные полигоны). Можно ещё текстуру хаотически летающей пыли вставить, трёх кадров хватит, очень эффектно смотрится. А последним штрихом к этому эффекту, будет - "периодическое изменение яркости" светового луча, это выражается плавным изменением прозрачности отображаемого луча, причём это можно согласовать с яркостью глобального источника (яркость на улице (солнечный/лунный свет)), про периодическое изменение яркости глобального источника было упомянуто выше. Смотри рисунок.

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

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

Во! Можно даже фишку такую сделать, в качестве свойства двери, открываешь её - шум, закрываешь - нет шума, а реализация: придется отдельной замкнутой области присваивать шум, то есть шум без точки возникновения, то есть не как звуковой источник имеющий 3D координату (для объёмного звука), а просто шумовой фон на местности.

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

Луч лазера, для лучшей реалистичности - делать партиклами (цвет партиклов зависит от цвета луча), все же - видимый лазерный луч это подсвечиваемые частицы в воздухе (пыль) лучом лазера.

Как и в изобразительном искусстве, "тень" это 80 % реалистичности кадра, остальные 20% - цвет. Изображение это тень и световая окраска.

Живой интеллект в отличие от запрограммированного - непредсказуем ;), так как причин влияющих на принятое решение - слишком много, поэтому имеет смысл, в частых случаях, действия и решения персонажей делать - случайными, это придаёт характеру личности - некий психический шарм: особенно такое стоит использовать при создании персонажей женского пола.

Туман это пустота, глупо использовать туман в насыщенном объектами месте, за туманом всегда скрываются большие пустынные пространства.

Не стоит забывать, что от огня может идти дым.

Порой дизайнеры делают ошибку, изображая пластиковые лица персонажей (слишком гладкий материал).

Персонаж должен иметь тело, если он смотрит вниз, то должен видеть своё тело, а не его отсутствие.

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

Персонажи должны узнаваться, внешний вид и движения должны свидетельствовать о:

1 - мудрости человека (умеренность и спокойствие, отсутствие беспорядочных жестов),

2 - материальном статусе (вид одежды и ухоженность внешнего вида),

3 - чёткий психотип (гордость и трусость бывает смешена; жалость и слабость показывается боязливым прищуром с одновременным горбатым наклоном вперёд, а тело - волочиться, причём энергичность в движениях отсутствует; устремлённость прослеживается в экономии времени на лишние отвлечённые разговоры, на уме и в движениях - цель; меланхолия - мало действий и движений, больше рассуждений, гробовое спокойствие и усталость, медленные движения, склонность сидеть на одном месте и делать одно действие (нюхать табак, пить, постоянно курить, медленно играть на музыкальном инструменте); трусость - неопределённость в резких движениях; робость - застенчивая улыбка, несмелая речь, рассеянные движения, тихий голос, легкая сутулость (эффект горбатости от опускания головы), голова опущена и взгляд направлен на пол/ботинки собеседника, нетребовательность и эффект воспитанности (от чрезмерной скромности); наглость (дерзость/грубость) - необдуманные движения, рефлекторность реакций, в ситуациях - исключает компромисс, требователен, жаден, прямые показательные действия и демонстративность эмоций).

4 - верности собеседнику/надёжность (неверный человек со стремлением "кинуть" (обмануть) собеседника, в вопросе обсуждает лишь свои интересы и сразу выдаёт свою недисциплинированность и ненадёжную натуру)

:ну и побольше наблюдайте в одиночку за окружающей обстановкой, умейте и пробуйте прогнозировать действия людей/толпы в целом.

Далее о звуке. Вспомните игру ГЭГ, когда персонаж шлялся по канализации, там появляется великолепная атмосфера, благодаря грамотному использованию звуковых эффектов, точнее это некий баланс визуальной картины и звукового сопровождения, так вот, изображают там ничем не примечательную канализацию, но скрашивают (точнее дополняют, детализируют) этот пейзаж - звуками (нам показываются внешние звуки (вне канализации), и таинственные канализационные звуки (кстати очень живо звучат звуки перемещения, плескание канализационной воды - очень живое (видимо записывали вживую)). В том же ГЭГ, в замке, там музыкальные фрагменты показываются нам как сопроводительные звуки (эх, а посмотрите как им удалось показать таинственную атмосферу большого замка), там не совсем звуки а именно периодически всплываемые музыкальные фрагменты (блин, как тонко, казалось бы "незаметная деталь", но как влияют на игрока, давят на восприятие атмосферы, выделяют изгибы архитектуры, эта великолепная детализация продуктов восприятия - достойна внимания). Глядя на ГЭГ - становиться ясно то, что у восприятия есть два канала "изображение" и "звук", это известно, я про роль второго, то есть у нас на халяву открыт пользовательский канал восприятия, и для влияние на игрока, надо использовать этот канал - максимально. Вы очень детально относитесь к графике, но звуковая картина - тоже обязана присутствовать. Хорошая графика, но плохой звук - даёт моно изображение, то есть неполную картину. Отвечающим за звуковое сопровождение - стоит обратить на ГЭГ внимание, ибо звуковое сопровождение там сделано умело и грамотно (не перестаю восхищаться знатоками своего дела).

Помните, всё насыщенно звуком, нет абсолютно тихого места (в играх обычно это забывают), в городе - общественный шум, в сельской местности - природный шум (шорох от растений раскачиваемых ветром, насекомых, животных и птиц). "Не допускайте ситуации, когда игрок не слышит звуков!!!!!!!" - это правило. Где бы вы не находились - всегда и везде присутствуют звуки! Почему? Да потому, что отсутствие звуков придаёт "мёртвость" игре, источники звуков - всегда присутствуют, их отсутствие - свидетельствует об отсутствие живых существ и природных явлений, а это уже нереально, отсутствие звуков - сразу выдаёт статичность игрового мира, будте внимательны.

Для имитации живого игрового мира, нужно показать игроку, что мир живёт, что это отдельный мир, отдельная реальность, а игрок - лишь персонаж, посторонний в этом мире, игра живёт без него своей жизнью, в свою очередь игровой мир должен реагировать на действия персонажа, но не в коем случае не заставлять его совершать действия, навязывать и оказывать давление (типа "беги спасай свою бабу, через 10 минут - всё взорвется к ядреной матери, спеши, быстрее, быстрееее"), игрок должен гулять по миру, наслаждаться красотой виртуального мира, и самое главное он должен быть свободен и волен! Для этого и играют в игры, чтобы почувствовать себя неограниченно свободным в виртуальном мире, вольным, отдыхающим от негативных явлений мира реального, (в реалии "грузят", "напрягают", заставляют думать, крутиться, что-то делать, так дайте людям отдохнуть, если и требуете от игрока действий, то они должны быть в меру легки на выполнение, но в тоже время должны приносить удовольствие игроку, процесс выполнения задач должен быть интересным (кстати, "интересным" и "сложным" это не одно и тоже) и иметь отдачу от совершённого действия, визуальную реакцию, компенсирующею затраченные усилия игрока). Чтобы совершить какое либо действие - игрок должен сам захотеть что то сделать, если захочет - сделает (не надо навязывать), а хочет гулять и любоваться пейзажами, так пускай гуляет и осматривает ваши труды (для этого дизайнеры и старались), а как нагуляется, можно уж и мир спасать. Часто игроки бросают играть в игру, на первом уровне, при отсутствии своего желания выполнять обязательное задание. Пускай игрок зачарованно смотрит на красоту игрового мира неискажённого людскими атрибутами, и отдыхает под естественные приятные звуки окружающей жизни, движения: движение, динамика, живость мира, это и есть главное, благодаря чему игрок "всасывается" в виртуальный игровой мир, на время забыв о проблемах реального.

Так вот, чтобы придать живость игровому миру - используйте всякую живность, насекомых, птиц и естественные природные звуки. Можно ввести птиц, которые летают, издают звуки, садятся с ветки на ветку, живут своей жизнью. Насекомых, ползающих по стволам деревьев, муравейники и. т. д. Природные явления, погода. Ветер, объекты подверженные ветру и самое главное звуковой шум ветра. Все явления должны быть связаны, например:


  • перед дождём или во время холода птицы щебечут менее активно, а во время дождя во все молчат (да и во время ветра они затихают, ибо не -удобно во время ветра жизни радоваться);
  • в дождь - насекомые не летают (крылья намокают);
  • ночью птицы поют с 3 часов и ночью включаются сверчки;
  • перед грозой или во время грозы - ветер, тучи;
  • в момент усиления ветра громкость всех звуков лучше убавить (приглушить), ибо звуковые колебания воздуха сносит ветром;
  • на огонь должны оказывать естественное влияние ветер, дождь и прочие явления.

То есть явления должны быть реально взаимосвязаны, а не анархично включающиеся и выключающиеся наборы эффектов.

Во, чую тут вы уже ухмыляетесь, мол, "вот гонит, замечтался и об реализации не думает" Как это реализовывать? На словах да, просто и красиво, а на деле думаю, всё не так уж и ресурсоёмко. Насекомых (тараканы, жучки, мошки и прочие гадости) можно сделать партиклами, а птиц - 12 полигонов и не показывайте близко игроку ;) , птицы то на землю в основном не садяться, поэтому "работать" они будут - на высотах (ветки и небо ;) ). Взаимосвязь условий думаю реализовать также не сложно: лично я люблю в программировании мелочность, детальность: можно сказать ювелирное это дело, вдохнуть жизнь в каждую элемент, не забывая об взаимосвязанности всех элементов и насытить такими приятными мелочами всё содеянное, ювелирная детализованная продуманность свидетельствует о внимательности и дотошности авторов в пользу качества их продукта.

Эффект "блики на линзах" - дерьмо.

В архитектуре есть такая фишка - ворота, вход. Лицо здания - ворота, поэтому их делают громадными, располагающимся между гигантских колонн, с роскошными арками, украшенными барельефами. Человек, проходя через такие ворота - впечатляеться, дивится, получает эффект, а после ворот успех гарантирован, его офигевшее сознание, воспринимает здание как нечто великое, поэтому внутри уже можно всячески мухлевать: нда, криво сказал: так вот я к чему, видео ролик и меню игры (и музыка в меню) это ворота!!! Если игроку не понравиться заставка и меню, то к самой игре он уже будет относиться скептически, настрой уже не тот будет, понимаете? Заставка и меню это обёртка, если фантик от очень вкусной конфеты будет заляпан грязью, то сама конфета - съедена не будет. Перед запуском игры игрок ожидает увидеть вашу игру скорее, ему не терпится и поэтому начальный ролик и оформление - уже под его критикой! Если он с самого начала увидит лажу, то когда запустит игру - весь эффект будет отравлен скептическим настроением игрока, помните, что заставка и меню это "грандиозные ворота", это красивая обёртка, оформление должно быть на высоте, дабы создать нужную эмоциональную среду для игрока, заманите его пряником. Раз он увидел от вас хорошо оформленное меню с хорошей музыкой, да заставкой при запуске - он будет ждать от вас такого профессионального уровня на протяжении всей игры.

Ночной город - воля световым эффектам.

Был в сосновом лесу (давно правда), звуки издаваемые животными и птицами - глухие, сопровождающиеся шорохом и хрустом веток. (наверное влияют сосны и покров почвы из прошлогодней хвои).

Луна всегда подсвечивает рядом находящиеся облака.

Видел огни от пожарной машины, ночью. Этот синеватый свет покрывает большие пространства. В играх "NFS 3-x" и "Дальнобойщики2" оказывается не преувеличивали этот эффект

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

Вид со спины - аркадно- мултяшная фишка (не предавайтесь грехам подобным).

Большинство людей не любят космические пейзажи (клёпанные металлические стены, сопровождаемые проводами и иногда мигающими лампочками).

Не стоит забывать о шуме ветра и водных течений.

Вода не голубая! (Открытие, да? ;) Поверхность воды имеет видимый цвет соответствующий отражающемуся изображению (водоёмы кажутся нам голубыми, только потому, что в них отражается "голубое небо"). Следовательно голубая вода в помещениях - грубая ошибка.

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

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

Ещё о музыке. Помните, что старая музыка (исполненная на классических народных инструментах) может хорошо сочетаться с современными индустриализованными пейзажами, когда современная музыка не куда не годиться для сопровождения старинных пейзажей.

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

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

(c) Владимир Илюнькин, 2002.

  Как вам? А? Мне понравилось! Это будет полезно тем, кто только собирается сделать свою игру или кто уже ее делает. Для обсуждения статьи прошу на частный форум или на официальный русский форум.



Это интересно...

  Программа предназначена для создания секретного диска защищенного паролем и зашифрованного, на вашем компьютере. Программа работает в трее (рядом с часами). Полное описание программы на английском языке - здесь. Скачать можно здесь (выбирайте Dekart Private Disk Light).

  Я ее использую. Неглючная. Надежная. БЕСПЛАТНАЯ! Сделал диск на 200 Мегабайт (кнопка Create), после чего подключил к операционной системе компьютера (кнопка Mount), отформатировал и использую для хранения исходников игр на
DarkBASIC-е. Отключается секретный диск нажатием кнопки Dismount. Использовать ее просто и легко! С управлением разберется даже ребёнок, а вскрыть секретный диск не сможет даже профессионал! Рекомендую.


Выпуск закончил 11 октября 2002 года в 09:20 мск


(C) 2002 Илья Середа
http://darkbasic.narod.ru - это и так понятно :-)
    http://virland.narod.ru - "Домашняя киностудия"
     http://sereda.narod.ru - "ВАЗ 1111 ОКА"

http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное