среда, июля 27, 2005

Строю карты теней

По просьбе Джима мне нужно было для нашей игрушки построить тени, которые темны, густы и зловещи. При этом в тени менгиров должны обязательно стонать проклятые души. Для этой непростой задачи я выбрала карты теней (shadowmaps). Почему именно их? Мне нужно смоделировать тени от удаленного источника света, лучи идут параллельно. Это я о солнце. При этом местность открытая. Идеальная ситуация для карт теней.
Алгоритм построения карт теней был предложен Лансом Виллиамсом (Lance Williams) в 1978 году. Его работа по этому поводу называлась "Наложение изогнутых теней на изогнутые поверхности" (Casting curved shadows on curved surfaces).

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

  1. Перемещаем камеру в положение источника света. Рендерим то, что отбрасывает тень.
  2. Потом возвращаем камеру обратно и рендерим сцену, накладывая на нее тень. Тень при этом придется хитрым образом преобразовать. Повернуть там, растянуть. В конце поста приведены ссылки где есть необходимые матрицы.
При наложении надо учитывать глубину, то бишь сравнивать Z координату со стороны источника света и со стороны камеры. Иначе тени будут отбрасываться совсем не туда, куда хотелось бы. Вон, глядите как она по склону вверх карабкается...

Это был вариант без учета глубины. Просто отрендерила в картинку и наложила поверх сцены.

Тень отрендеренная со стороны источника света

+ (накладывается на сцену)

= (получаем сцену с тенью)


Наложение с анализом глубины уберет лишнее:


Я пользуюсь возможностями карточек GeForce, которые позволяют делать текстуры глубины (DepthTextures). Создаю D3DUSAGE_DEPTHSTENCIL текстуру, ставлю ее в качестве Z-буфера, для изображения ставлю обычную текстуру. Цвет пишу серый, при этом объекты можно не текстурировать. Потом получившуюся текстуру накладываю, используя в качестве маски текстуру глубины. Вроде как ATI мне такое делать не позволит, надо будет проверить. Но на ATI можно использовать шейдеры. В любом случае, такое точно не пройдет на GeForce2 и на Intel 8XX, а я хотела, чтобы тени работали и на них.
В своих поисках я наткнулась на весьма экзотический метод построения карт теней с помощью буфера, изначально предназначенного для тумана. Можно попробовать, но фпс у автора метода весьма низкий получается.
Смотрела индексные карты теней, которые у меня заработали даже на Riva TNT2 Ultra, но у меня их использовать не получится, тень из вышеприведенного примера не построишь с их помощью.
Если кто делал тени на карточках класса GeForce2 и ниже, поделитесь опытом, плз.

Ссылки по теме:
Shadow Mapping Tutorial
Implementing Shadow Maps on Mainstream Graphics Hardware - Intel Software Network
Shadow Mapping and Shadow Volumes
Hardware Shadow Mapping - NVIDIA
Вариант от ATI через шейдеры

Technorati tag:

понедельник, июля 25, 2005

Люди думают не как компьютеры

Профессор Майкл Спивей провел исследования, которые показывают, что люди думают не как компьютеры. Компьютерная обработка информации обычно проходит через некую последовательность этапов для получения конечного результата. Так вот, Спивей утверждает, что человек мыслит иначе. Человеческий мозг мыслит не дискретно. "...Вам не нужно находится в каком-либо состоянии, как компьютеру, вы можете находиться между состояниями, быть частично в одном и частично в другом состоянии одновременно...".
При этом все попытки моделировать человеческий интеллект опираются на то, что человек мыслит как компьютер...

Technorati tag:

пятница, июля 15, 2005

Искусственный интеллект против естественного

Я сейчас пытаюсь уместить в своей голове статьи по нечеткой логике (Fuzzy logic) и главы по программированию AI из Game Programming Gems 1.
Сколько сил тратится на то, чтобы поведение объекта было всегда осмысленно, чтобы юнит в игре ни в коем случае не стоял тупо пялясь в пространство, просчитывая свои действия, а всегда двигался осмысленно. Чтобы ступеньки не являлись для работа непреодолимым препятствием. Тем не менее к успехам в роботехнике основная масса людей относится скептически, а отношение к компьютерным врагам в играх выражается словами "тупой компьютер". Но иногда наблюдая за проявлениями интеллекта естественного у меня складывается ощущение, что ИИ кое-кого догнал и обогнал. Не людей, правда. Мне очень вовремя подкинули ссылки, которые наглядно иллюстрируют мои слова.
Итак:
Стадо баранов дружно покончило жизнь самоубийством, потому что Самый Главный Баран прыгнул в пропасть. Вот если бы стадо виртуальных баранов попрыгало в пропасть вслед за главным, на разработчиков посыпались бы упреки.
Следование за неким ведущим юнитом вещь обычная в компьютерных играх. Если толпа народу идет из замка А в замок В, то можно проложить путь для одного юнита, а остальные будут следовать за ним. Если ведущий юнит убит, то оставшиеся не будут стоять как стадо баранов, а будет выбран новый ведущий. Юниты в большинстве игр умнее стада баранов. Это приятно.

Гвоздь программы Dogs are not so smart.

Вы говорите, что Aibo пытается играть с нарисованным на стене кругом? Что у Aibo может заклинить ноги? Aibo - отдыхает!

Спасибо Джиму и Маньяку за ссылки.

Technorati tag:

четверг, июля 14, 2005

AAAI-05 Blog

Не далее как вчера завершилась конференция по искусственному интеллекту AAAI-05. Проводит ее American Association for Artificial Intelligence. Для тех кому интересно как оно прошло, вот блог группы студентов, которые там побывали: AAAI-05 Blog.

Technorati tag:

вторник, июля 05, 2005

ToyMaker.info

Страничка Кейта Дитчбурна (Keith Ditchburn), посвященная программированию игр. Весьма достойная страничка. Заметки по DirectX и C++ аккуратно разделены по темам: Камера, Ландшафт, Макросы и т.п. Каждая тема объяснена ну ооочень подробно, с картинками, примерами кода.
Последняя игра, в разработке которой он принимал участие - Emperor Battle for Dune, классика, а сейчас он читает лекции по программированию игр в университете.


Кейт пишет, что у него много идей и сайт будет регулярно обновляться.


Technorati tag:

пятница, июля 01, 2005

Техническая информация по видеокартам

Хороший архив с информацией по видеокартам: DirectX Device Capabilities. Если не помнишь на память версию вертексного шейдера на RADEON 9800 PRO или сколько текстур одновременно поддерживает NVIDIA GeForce2 MX, то можно заглянуть сюда. Ничего нового в этот архив уже давно не добавлялось, увы.

Updated 17.06.2007 Архив недоступен

Technorati tag: