fps magazine issue 17

29

Upload: timur-gafarov

Post on 12-Mar-2016

233 views

Category:

Documents


5 download

DESCRIPTION

FPS is a free and open source Russian e-zine mainly dedicated to development of computer games.

TRANSCRIPT

Page 1: FPS Magazine Issue 17
Page 2: FPS Magazine Issue 17

Нас читают:

gcup.ruВсе для начинающегои профессионального

разработчика игр

xtreme3d.narod.ruСайт движка Xtreme3D

make-games.ruПортал создания игр

gamer-club.ucoz.comВсе для создания игр без

программированияи не только

mizzystic.ruКрупнейший информационный

Game Maker портал

xbobr.at.uaСоздание игр, программ,

музыки

dapf.usФорум дизайнерови программистов

esate.ruМультимедиа-сообщество

www.mobkiosk.com"Мобильный киоск"

dogames.ruМастерская игр

gamecreate.ruСоздай свою игру!

igrostroenie.net.ruИгровые движки и ресурсы

gacon.ucoz.ruCайт, посвященный

разработке игр

bigslava.3dn.ruСообщество

творческих людей

antistarforce.comИгровой портал

© 2008 - 2012 Редакция журнала "FPS". Все названия и логотипы являютсяинтеллектуальной собственностью их законных владельцев и не используются вкачестве рекламы продуктов или услуг. Редакция не несет ответственности задостоверность информации в статьях и надежность всех упоминаемых URL-адресов.Мнение редакции может не совпадать с мнением авторов материалов.Материалы издания распространяются по лицензии Creative Commons AttributionNoncommercial Share Alike (CC-BY-NC-SA), если явно не указаны иные условия.Главный редактор: Тимур ГафаровДизайн и верстка: Тимур ГафаровПо вопросам сотрудничества обращаться по адресу [email protected].Официальный сайт журнала: http://fpsmag.zymichost.com

В этом выпуске:

● BlenderНовости из мира Blender....................3

Cycles в Blender 2.61......................6

Обзор дополнений...........................9

КОНЦЕПТЕР. Интервью с Давидом Ревуа.......11

● AlchemyИнструмент импровизатора..................15

● DigipenИнститут разработки игр...................16

● Язык DНовости...................................19

Воспроизводим WAV-файлы...................20

● Проблемы быстродействияКак ускорить работу программ?.............24

● Модели освещенияГейдрих-Сейдель...........................27

№ 172011

http://fpsmag.zymichost.com ● mailto:[email protected]

Page 3: FPS Magazine Issue 17

- 3 -

BlenderНовости

В ДЕКАБРЕ состоялся релиз Blender 2.61. Из существенныхнововведений этой версии следует отметить:

● технологию отслеживания движений (Motion Tracking) из томатной ветки (Tomato Branch), которая позволяет вос- становить анимацию камеры с видеосъемки и синхро- низировать соответствующим образом трехмерные объекты для их последующего наложения в композиторе; ● новый движок рендеринга Cycles, который теперь доступен наряду с Blender Internal. Cycles представляет собой мощный интерактивный трассировщик лучей с поддержкой аппарат- ного ускорения на GPU. Подробнее об этом проекте читайте ниже; ● систему динамического рисования. Это новый модификатор, позволяющий превратить трехмерные объекты в своеоб- разные «холсты» и «кисти». При их соприкосновении во время анимации, на «холсте» остаются следы, которые влияют на материал объекта. Эта система значительно облегчает динамическое создание сложных эффектов – таких, например, как появление дождевых луж, следов на снегу, грязи, пыли, инея на объектах и т.д.;

● систему симуляции океана. Существующий симуляторжидкостей в Blender мало подходит для моделированияморских волн – в то время, как морской пейзаж был и остаетсяодним из самых излюбленных мотивов в компьютернойграфике. А реалистичная анимация моря в мультфильмах – этои вовсе «высший пилотаж» (вспомните хотя бы Pixar и «Впоисках Немо»). Данный проект призван помочь художникам вэтом нелегком деле.

Page 4: FPS Magazine Issue 17

- 4 -

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

Программист Николас Бишоп, автор системы BMesh,написал в блоге про свой новый проект по реализациидинамической топологии в Blender.

Суть идеи в том, что при лепке топология обновляется врежиме реального времени – во время каждого штриха, а не поего завершении, что существенно повышает удобствомоделирования. Реализация Бишопа никак не зависит отсхожего проекта Unlimited Clay.

Исходники проекта доступны на Gitorious. Возможно, скоротакже появятся соответствующие сборки Blender наGraphicAll.org. Все подробности расписаны в блоге разра-ботчика.

18 сентября в русскоязычном сегменте Интернетасостоялся очередной удаленный семинар по использованиюBlender, который на этот раз был посвящен архитектурнойвизуализации. Ведущий семинара – Игорь Безуглый, директори главный визуализатор компании «Слон».

Игорь уже пять лет занимается архитектурнойвизуализацией зданий «на местности» и в рамках семинарарассмотрел типичные ошибки, допускаемые при модели-ровании экстерьеров и интерьеров. Также были подробнорассмотрены вопросы постановки и настройки камеры длякомпозитинга трехмерных сцен и статичной двумернойграфики.

Page 5: FPS Magazine Issue 17

- 5 -

Медленно, но верно началась работа над небезызвестнымпроектом Mango – новым открытым фильмом Blender. Вноябре у всех желающих был шанс войти в команду по работенад фильмом – для этого необходимо было отправить своепортфолио в Blender Institute. Кроме того, недавно на сайтепроекта появились первые концептуальные наброски. Один изавторов, кстати – Давид Ревуа, арт-директор фильма «Синтел»(интервью с ним читайте в этом номере журнала).

David Revoy - www.davidrevoy.com - СС-BY Blender Foundation

[email protected]

Вы разрабатываете перспективный проект? Открылиинтересный сайт? Хотите «раскрутить» свою команду илистудию? Мы Вам поможем!

Спецпредложение от «FPS»!

«FPS» предлагает уникальную возможность: совершенно БЕСПЛАТНОразместить на страницах журнала рекламу Вашего проекта!! При этом от Вастребуется минимум:

● Соответствие рекламируемого общей тематике журнала. Это можетбыть игра, программное обеспечение для разработчиков, какой-либо движокили SDK, а также любой другой ресурс в рамках игростроя (включая сайты попрограммированию, графике, звуку и т.д.). Заявки, не отвечающие этомутребованию, рассматриваться не будут.

● Готовый баннер или рекламный лист. Для баннеров приемлемоеразрешение 800x200 (формат JPG, сжатие 100%). Для рекламных листов —1000x700 (формат JPG, сжатие 90%). Содержание — произвольное, но невыходящее за рамки общепринятого и соответствующее грамматическимнормам. Совет: к созданию рекламного листа рекомендуем отнестисьответственно. Если не можете сами качественно оформить рекламу, найдитеподходящего художника. «Голый» текст без графики и оформления непринимается.

● Краткое описание Вашего проекта и — обязательно — ссылка насоответствующий сайт (рекламу без ссылки не публикуем).

Заявки на рекламу принимаются на почтовый ящик редакции:[email protected] (просьба в качестве темы указывать «Сотрудничество сFPS», а не просто «Реклама», так как письмо может отсеять спам-фильтр).

Прикрепленные материалы (рекламный лист, информация и пр.) могут бытькак прикреплены к письму, так и загружены на какой-либо надежный сервер(убедительная просьба не использовать RapidShare, DepositFiles, Letitbit идругие подобные файлохранилища — загружайте файлы на свой сайт илиftp-сервер и присылайте статические ссылки). Все материалы желательноархивировать в формате zip, rar, 7z, tar.gz, tar.bz2 или tar.lzma.

Page 6: FPS Magazine Issue 17

- 6 -

Cycles @ Blender 2.61Ключевое нововведение Blender 2.61 – это, без сомнения,

«официальная» интеграция в пакет нового движка рендерингаCycles. В «FPS» №16 '11 мы уже успели познакомить читателейжурнала с базовыми принципами работы Cycles на примерепользовательской сборки Blender. Теперь пришло время для, таксказать, более пристального взгляда.

Внесение чего-либо в основную ветку Blender – всегдазнаковое событие. Это свидетельствует об определенном уровненадежности и качества того или иного инструмента. И Cycles в этомсмысле – не исключение, хоть в официальном чейнджлоге и стоитоговорка «first preview release». Налицо значительное повышениепроизводительности: разработчики честно сдержали заявленноена октябрьской конференции Blender в Амстердаме обещаниеповысить скорость работы движка в 2 раза.

Не лишним будет обнадежить консервативно настроенныхпользователей – Cycles не собирается в будущем вытеснятьBlender Internal; старый встроенный движок останется полностьюдоступен.

Одна из самых интригующих особенностей Cycles – интер-активный рендеринг. Не любите постоянно нажимать F12 и долгождать результата? Значит, Cycles – для вас! Система рендерингаработает практически в реальном времени, и эффект отизменения настроек сразу же становится виден на экране – сучетом теней, отражений, глобального освещения, каустики и т.д.

Эта технология является ответом Blender на V-Ray RT для 3dsMax. Cycles тоже поддерживает рендеринг на GPU при помощиCUDA, что в разы повышает скорость вычислений на современныхвидеокартах от nVidia. В перспективе планируется такжеподдержка OpenCL. Мгновенная реакция на действия пользо-вателя может ощутимо помочь художнику на этапе настройкиматериалов и освещения. Такой подход привносит совершенноновые ощущения и опыт работы над сценой!

Page 7: FPS Magazine Issue 17

- 7 -

Чтобы включить интерактивный рендеринг, активируйтеCycles и в любом окне просмотра сцены переключите методотображения на Rendered. Можно улучшить качество пред-просмотра – для этого необходимо повысить количество сэмпловв поле Samples > Preview на вкладке Integrator в настройкахсцены.

Из числа значимых «новинок» Cycles в Blender 2.61 можноотметить поддержку микрорельефа (в терминологии Cycles –смещения). Смещение задается либо в настройках материала навкладке Displacement, либо непосредственно в редакторе узлов.Эта возможность на данный момент помечена как экспери-ментальная.

Кстати, использование узлов для создания материалов – еще одна фундаментальная концепция Cycles. Это роднит его с семейством программируемых движков в стиле RenderMan. Понятие материала теперь максимально приближено к понятию шейдера: пользователю предоставляется свобода создания

собственных композитных шейдеров на основе различныхвходных данных и встроенных моделей освещения (BSDF). Этомогут быть как фотореалистичные материалы, так и полностьютворческие.

Помимо шейдеров поверхности материала, в Cyclesпредусмотрена возможность работы с его объемом. Шейдеробъема (volume shader) описывает поведение света по мере егопроникновения внутрь объекта. Это необходимо дляреалистичного моделирования полупрозрачных материалов сэффектом подповерхностного рассеивания (SubsurfaceScattering).

Многие пользователи наверняка оценят встроеннуюподдержку DOF (Depth Of Field) – глубины резкости, которуюранее приходилось делать в композиторе. Теперь онаинтегрирована с объектом камеры: просто укажите фокусноерасстояние (или объект, на который нужно сфокусировать камеру),повысьте радиус апертуры и наблюдайте результат в реальномвремени. И никакой пост-обработки!

Page 8: FPS Magazine Issue 17

- 8 -

В Cycles также учитываются стандартные лампы Blender. Наданный момент есть поддержка ламп типа Point, Sun и Area. Вкачестве источников света также можно использоватьобъекты-излучатели с шейдером Emission в материале. Крометого, при рендеринге учитывается свет окружения.

Существенный недостаток Cycles, присущий вообще всемфизически корректным рендерам – высокий уровень цветовогошума при малом количестве сэмплов (менее 1000). В частности,много лишнего шума дают зеркальные бликующие материалы.Разработчики знают об этой проблеме и уже наметили пландействий по ее устранению. Не исключено, что в будущемспециально для этого в композиторе появится фильтршумоподавления.

Ссылки к статье:Cycles на wiki.blender.org

Коллекция уроков

[email protected]

P.S. Несмотря на относительную молодость проекта, врусскоязычном Blender-сообществе Cycles уже успели наградитьсобственным прозвищем – «суслик» :)

Page 9: FPS Magazine Issue 17

- 9 -

Обзор дополнений BlenderВыпуск 1

Благодаря удобному и мощному API для языка Python, Blenderподдается практически неограниченному расширению. Для старойверсии программы (серия 2.4x) уже создано огромное множестворасширений – от простых скриптов экспорта до комплексныхинструментариев и профессиональных коммерческих плагинов.Для 2.5 и 2.6 их пока не так много – но эта ситуация быстроменяется. Этим выпуском мы открываем серию обзоров полезныхдополнений для Blender 2.5 и выше, которые могут заин-тересовать пользователей, использующих программу в качествеинструмента для разработки игр или создания игровогоконтента...

Suicidator City GeneratorSuicidator City Generator (SCG), разработка французского

программиста Арно Кутюрье – это дополнение для Blender 2.6x,предназначенное для процедурного моделирования городов. Сего помощью вы можете за пять минут создать свой собственныймегаполис – с небоскребами и автострадами.

SCG «на лету» генерирует город в соответствии с заданнымипараметрами. Можно застроить свою «столицу мира» простымибоксами, а можно – весьма детализированными конструкциями сомножеством полигонов. Основная концепция SCG – случайность.Каждый сгенерированный город по-своему уникален и не похожна другие.

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

Дополнение стоит € 14.95. Есть бесплатная версия – сограничениями на размер текстур и площадь моделируемогогорода.

http://arnaud.ile.nc/sce/

Page 10: FPS Magazine Issue 17

- 10 -

Mouse GestureНе знаю, как другие, но я лично скучаю по жестам мышью из

Blender 2.4x, которые позволяли перемещать объекты, нарисовавпрямую линию, и вращать их, нарисовав эллипс – это экономилосотни нажатий клавиш. По всей видимости, эту возможность так ине собираются возвращать в новой версии пакета. Во всякомслучае, она уже который год ждет своего часа в официальномToDo по интерфейсу Blender 2.5. Сейчас уже вышла 2.6, но воз иныне там...

Однако мало кому известно: решение этой проблемысуществует, и уже достаточно давно. Chromoly, известныйBlender-программист, выпустил дополнение Mouse Gesture,которое возвращает привычные жесты мышью. Более того, косновным жестам трансформации (прямая линия = перемещение,окружность = вращение, уголок = масштабирование) добавилисьновые – жесты переключения проекции.

На панели свойств (клавиша N), на вкладке Mouse Gesture,можно изменить режим жестов с Transform на View – ипереключаться на вид сверху (вертикальная линия снизу вверх),спереди (вертикальная сверху вниз), сбоку (горизонтальная слеванаправо) или с камеры (горизонтальная справа налево).

Ссылка на скачивание

Дополнение работает со всеми версиями Blender начиная с2.56. Распространяется на условиях GNU GPL.

MD5 ExporterМногие игровые движки поддерживают MD5 – формат

моделей idTech 4 / Doom 3. MD5 позволяет хранить модели соскелетной анимацией, причем анимация хранится в отдельномфайле от самой модели (используются расширения *.md5mesh и*.md5anim). Формат хорошо изучен, в Интернете легко можнонайти исходники на C/C++ для загрузки и рендеринга MD5,например, при помощи OpenGL.

Изначально для создания моделей в этом форматеиспользовался пакет Maya, но сейчас существуют«неофициальные» экспортеры и для всех остальных3D-редакторов. Есть такой экспортер и для Blender – у негодостаточно длинная «биография» версий; сейчас он благополучнопортирован под Blender 2.5+.

http://www.katsbits.com/tools/

[email protected]

Page 11: FPS Magazine Issue 17

- 11 -

Давид Ревуа (David Revoy) – известный в кругахпользователей Blender художник-фрилансер. Он специа-лизируется на книжной и игровой иллюстрации, но болееизвестен широкой аудитории как арт-директор фильма«Синтел».

В 2010 году он выпустил обучающий DVD-курс по работесо свободными графическими пакетами – «Chaos &Evolutions», в котором были представлены видеоуроки вформате HD, демонстрирующие процесс рисованияперсонажей. Другой популярный видеокурс Ревуа – «Blend &Paint» – объясняет основы интерфейса Blender, модели-рование, настройку освещения и рендеринг, а также переносотрендеренной картинки в MyPaint и GIMP для дальнейшейобработки.

Журнал «BlenderArt» недавно опубликовал интервью сДавидом Ревуа в рамках выпуска, целиком посвященногомоделированию и анимации персонажей.

Давид, многим читателям ты известен именно какавтор концепт-арта для «Синтел». Но ведь это не перваятвоя работа. Расскажи немного о себе.

Мне 29 лет, я занимаюсь фрилансом в своей домашнейстудии в Тулузе во Франции. Мои работы можно увидеть наобложках книг. Еще я занимаюсь иллюстрацией настольныхигр, так что у меня достаточно насыщенная творческаяжизнь.

Сейчас я пользуюсь только свободным софтом и Linux(хотя и преподаю работу с Photoshop и Painter в колледже),потому что мне по душе социальная и культурная революциявокруг свободного программного обеспечения. «Синтел» –мой первый проект в качестве арт-директора. Работа в такомпроекте на такой должности для меня как «свободногохудожника» была мечтой.

Твой видеокурс для Blender Institute удачнопродается и получает положительные отзывы. Огля-дываясь на этот проект, каким ты видишь его естес-твенное развитие?

Page 12: FPS Magazine Issue 17

- 12 -

Во-первых, мне очень приятна похвала, да и читатьотзывы об этом курсе всегда интересно. Что касаетсяпродолжения, я задумал «Chaos & Evolutions» именно каккурс, который максимально отвязан от конкретныхинструментов. Его содержание скорее отражает моюметодику работы и, если хотите, философию относительноискусства. Мне хочется верить, что этот курс будет полезенна протяжении еще очень долгого времени. Надеюсь, чтовидеоролики распространятся по разным интернет-ресурсам.

В книге Джонатана Уильямсона «CharacterDevelopment in Blender 2.5» используется модельженского персонажа из «Chaos & Evolutions». Расскажиподробнее, как так получилось?

Действительно, этот персонаж – из «Chaos & Evolutions».Около года назад Джонатан попросил меня создать дизайндля двух персонажей. Я предложил уже существующуюмодель из моего видеокурса – она была доступна под CC-BY(как и все другие художественные работы на диске). Вторымперсонажем стала Кара, которую вы, наверное, уже виделиее на Blender Cookie.

Ты сотрудничал с Уильямсоном при работе наднесколькими проектами – в том числе и над его книгой.Есть ли у вас еще какие-нибудь совместные планы набудущее?

Работать с Джонатаном – сущее удовольствие. Конечно,будучи «креативщиками», мы постоянно обсуждаем те илииные новые идеи. Но я немного суеверен и предпочитаю нераспространяться раньше времени о проектах, которые ещене распланированы как следует.

Как ты считаешь, повысила ли работа над «Синтел» ивидеокурсами твой уровень признания и зрительскойсимпатии?

Откровенно говоря, да – если говорить о сообществеOpen Source. Но у меня впереди еще достаточно работы,чтобы добиться признания широкой публики. Я стараюсь какможно чаще обновлять свою галерею на DeviantArt, а также«свечусь» в известных CG-коммьюнити, чтобы незацикливаться на Open Source.

При работе над «Синтел» ты пользовался толькосвободными инструментами – GIMP, MyPaint, Alchemy.Какое у тебя осталось впечатление от работы с ними?

Gimp-painter 2.6.8 и MyPaint (еженедельная сборка с Gitmaster) в Linux Mint работают действительно стабильно. Яполностью доверяю им при работе на заказчика. По моемуличному опыту они даже стабильнее, чем моя предыдущаяконфигурация: Adobe Photoshop CS2 и Corel Painter XI.5 наWindows XP Pro SP3. В этом смысле это действительнопрофессиональные продукты. За последние месяцы неприпомню ни единого падения или потери данных. Я могусделать в них всю свою работу от начала до конца без«сюрпризов» посередине. Разработчики – просто молодцы!

Page 13: FPS Magazine Issue 17

- 13 -

Программа Alchemy, по сути, является эксперимен-тальной – в том смысле, что позволяет делать совершеннонеобычные вещи. Но экспериментальный софт хоть ипомогает придумать и опробовать какие-то новые идеи,все-таки остается экспериментальным. Большинствопользователей все равно продолжает пользоваться болеетрадиционными решениями. Как ты считаешь, есть ли уAlchemy шанс завоевать сердца художников? Или проектуэто и не нужно?

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

Я практически уверен в том, что авторы других программдля цифровой живописи со временем перенесут к себеразные интересные идеи, заложенные в Alchemy (к примеру,в Autodesk SketchBook уже появилось динамическоесимметричное рисование). Ну а сам Alchemy навернякапродолжит двигаться в исходном направлении: какинструмент виджеинга и прочих экспериментальныхнаправлений в искусстве. Такие программы – совершеннопотрясающий источник идей.

Насколько я могу судить, заметный рост интереса кMyPaint в последнее время во многом обязан твоемудеморолику про спидпейнтинг. Достаточно многиевысказанные тобой идеи были реализованы в версии0.8.0, а твой набор кистей сейчас используется впрограмме по умолчанию. Ты продолжаешь взаимо-действовать с разработчиками? Если да, то на какомуровне?

Сейчас я общаюсь в основном с разработчиками MyPaintи Krita – главным образом, потому что часто пересобираюэти программы из исходников. Так что я могу судить о том,что происходит в этих проектах. Что касается GIMP, я всевремя пользуюсь им в своей работе как фрилансер, и по этойпричине не слишком расположен тестировать нестабильныеверсии. Наверное, поэтому со стороны может показаться, чтоя несколько прохладно отношусь к программе, хотя на самомделе меня очень волнует выпуск версии 2.8.

Что касается именно взаимодействия, я не то чтобыочень активен; я просто читаю списки рассылки и участвую вобсуждениях на IRC и форумах. Как обычный пользователь ястараюсь помогать проектам чем могу и когда могу. Иногда япросто прошу помощи, когда та или иная программа«падает», иногда я просто говорю «Здорово!», чтобывоодушевить программистов, иногда я хочу их о чем-топопросить, для чего я просто рисую прототип функции,чтобы сразу было понятно, что мне надо. Со временемдружеские, хоть и виртуальные, отношения с разра-ботчиками только крепнут, и меня это очень радует. Ядействительно ценю тот огромный труд, который онивкладывают в свои программы. Они настоящие мастерасвоего дела!

Page 14: FPS Magazine Issue 17

- 14 -

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

Самым важным мне кажется повышение произво-дительности при работе над большими изображениями.Многие художники привыкли рисовать большими кистями(512×512) по большим холстам (6000×6000 и выше) и приэтом работать с большим количеством слоев и разнымирежимами смешивания. Работать над такими рисунками всвободных приложениях, даже при наличии современныхмощных компьютеров, все еще сложновато. Так что, с моейточки зрения, именно оптимизация производительностипрограмм помогла бы привлечь внимание профес-сиональных художников.

За предоставленную информацию благодаримпортал linuxgraphics.ru и журнал BlenderArt

Blender:настольная книга

«Blender. Настольная книга» – это проект от журнала«FPS» по созданию полноценного русскоязычногоэлектронного руководства по основам работы в Blender2.5 и 2.6. Целевая аудитория – начинающие пользо-ватели программы (как перешедшие со старых версий,так и начинающие знакомство с Blender «с нуля»). Книгабудет представлять собой сборник статей, охваты-вающих различные аспекты использования Blender,скомпонованных по принципу «от простого к сложному».

Издание будет распространятся бесплатно, полицензии Creative Commons BY SA. На данный моментактивно ведется подготовка текста книги.

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

Подробности на сайте проекта:

http://fpsmag.zymichost.com/book

Page 15: FPS Magazine Issue 17

- 15 -

Как часто вам приходилось хаотично водить карандашом по бумаге в поискахвдохновения? Этим, несомненно, «страдают» все художники без исключения. Увидев вслучайных штрихах или пятнах интересный силуэт, они часто используют его в качествеосновы для будущего произведения искусства.

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

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

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

Модули делятся на две категории: cоздающие модули,отвечающие за характер линий, форм, фигур и т. д.(одновременно может быть активен только один такоймодуль) и модули эффектов – они модифицируют ужеимеющиеся или рисующиеся в данный момент формы, атакже могут добавлять новые формы на основе имеющихся(одновременно могут быть активны несколько такихмодулей). Alchemy также поддерживает пользовательскиемодули, написанные на Java.

Alchemy разрабатывается в Японии при поддержкеExploratory Software Project. В настоящее время программаимеет статус бета-версии, хотя и вполне стабильна.Программа кроссплатформенная (Java-приложение). Распро-страняется по лицензии GNU GPL.

Официальный сайт проекта – al.chemy.org.

Page 16: FPS Magazine Issue 17

- 16 -

DigiPenИнститут разработки игр

Разработка компьютерных игр, казалось бы, только вчеравышедшая из гаражей и хакерского андеграунда в большойбизнес, стала де-факто одновременно и индустрией, и искусством,и наукой. Как промышленность, она подразумевает эконо-мический подход, как искусство – участие творчески одаренных,талантливых людей с креативным мышлением, как наука –собственный академический аппарат и систему подготовкиспециалистов. И, если с первыми двумя условиями в нашей странехудо-бедно справляются, то с последним ситуация достаточноплачевна. На Западе десятки учебных заведений предлагаютпрограммы обучения, связанные с разработкой игр. В России, ксожалению, ни один вуз не готовит таких специалистов.Приходится все изучать самому. В этом отношении мы находимсяв той же ситуации, что и «первопроходцы» игровой индустрии.

Собственно, в самообразовании как таковом нет ничегоплохого. Просто без соответствующего диплома в глазахокружающих вы так и останетесь чудаком-любителем, какими бызнаниями и опытом не располагали. В нашей стране, где даже кхудожникам-профессионалам относятся как минимум несерьезно(как, на художника тоже нужно учиться?!), сказать, что вызанимаетесь разработкой игр – примерно то же самое, что назватьсвоей профессией, скажем, алхимию. А все потому, что у нас«этому не обучают». Это проблема чисто психологическогохарактера. Но если она вам мешает, и отсутствие «корочки» все жене дает покоя, стоит обратить внимание на зарубежные учебныезаведения.

Пожалуй, самым «раскрученным» среди них можно считатьТехнологический институт DigiPen (DigiPen Institute of Technology).Это коммерческий колледж в США, специализирующийся наинформатике, вычислительной технике и дизайне с акцентом наразработку компьютерных игр. Учившиеся в этих стенаххудожники, аниматоры, программисты и менеджеры еще будучистудентами создавали такие хиты, как Synaesthete, Narbacular Dropи Tag: Power of Paint. DigiPen по праву можно назвать «кузницейинди-легенд»...

В 1988 г. Клод Комер основал корпорацию DigiPen в Ванкувере(Канада) как компанию, которая занимается компьютернойсимуляцией и анимацией. Поскольку спрос на продукцию вырос,DigiPen столкнулась с недостатком в квалифицированных кадрах,и в 1990 г. она начала предлагать специальную программуобучения в области трехмерной компьютерной анимации. В концегода, опираясь на успех и образовательный опыт подготовкиучащихся к работе в студиях по производству 3D-анимации,DigiPen начала сотрудничать с американским отделом Nintendo сцелью предоставить высшее образование тем, кто заинтересованработать в игровой индустрии. Результатом стало основание в1994 г. DigiPen Applied Computer Graphics School (Школыприкладной компьютерной графики DigiPen). Для первого потокастудентов была подготовлена двухлетняя программа курса«Программирования двумерных и трехмерных видеоигр».

Вскоре в DigiPen осознали необходимость предоставленияпрограммы обучения на уровне степени бакалавра. На основесвоих профессиональных знаний и опыта, инженеры DigiPenразработали программу обучения на четыре года, которые онипредставили для авторизации в Совет Вашингтона по высшемуобразованию (Washington State Higher Education CoordinatingBoard, HECB).

Page 17: FPS Magazine Issue 17

- 17 -

В мае 1996 г. HECB предоставил DigiPen разрешение на выдачудиплома адъюнкт-бакалавра наук по специальности «интер-активное моделирование в режиме реального времени». Этостало первой в мире академической программой подготовкиспециалистов в области разработки компьютерных игр.

В 1998 г. открылся Технологический институт DigiPen вРедмонде (где, кстати, также находится главная штаб-квартираMicrosoft!), который начал предлагать следующие программыобучения:

● Младший научный сотрудник, «интерактивное моделирование врежиме реального времени»;

● Бакалавр наук, «интерактивное моделирование в режиме реаль-ного времени».

В 1999 году была добавлена специальность «прикладноеискусство в трехмерной компьютерной анимации». DigiPenпрекратила свою образовательную деятельность в Канаде, иотделение Редмонда стало единственным образовательнымучреждением DigiPen. Первая церемония выпуска состоялось 22июля 2000 г. – выпускались шесть младших научных сотрудников ипять бакалавров.

В ноябре 2002 г. институт получил аккредитацию от комиссииACCSCT (Accrediting Commission of Career Schools and Colleges ofTechnology). В 2004 г. DigiPen добавил следующие программы:

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

В 2007 г. число студентов достигло 900. DigiPen продолжаетстремиться к высокому уровню обучения, которого требуетиндустрия, и до сих пор считается лидером образования в сферецифровых интерактивных развлечений. Работы студентов DigiPenучаствуют в различных фестивалях и конкурсах независимыхвидеоигр. Все они доступны для скачивания на официальномсайте института.

Кстати, всем известная игра Portal была разработанакорпорацией Valve совместно со студентами DigiPen. Пред-шественником Portal является инди-проект Narbacular Drop,который разрабатывался группой студентов института. Игравышла, и до сих пор распространяется бесплатно. Игровой процессв ней состоит из перемещений по подземельям и преодолеванияловушек с помощью системы порталов. Игрок может открыть двасвязанных портала на любой неметаллической поверхности:стене, полу или потолке.

Впоследствии создатели Narbacular Drop, выступавшие подназванием Nuclear Monkey Software, устроили презентацию своейигры в офисе Valve, в ходе которой растроганный Гейб Ньюэллвскочил со стула, чуть ли не обнял студентов и заявил, что имнемедленно стоит войти в состав компании. Дебютным проектомнового отделения Valve, состоявшего из четырех программистов итрех дизайнеров из института DigiPen, и стала легендарная Portal...

Тимур ГАФАРОВ[email protected]

Page 18: FPS Magazine Issue 17

Корпорация Zenimax, которой сейчас принадлежит компания id Software, открылапод лицензией GPL исходные тексты наработок, связанных с игрой Doom 3 – включаяигровой движок id Tech 4. Помимо Doom 3, на базе id Tech 4 построены и болеесовременные игры – такие, как Quake 4 и Prey. Ресурсы игры (карты, текстуры, звуки ит.д.) по-прежнему являются интеллектуальной собственностью компании Zenimax ираспространяются по отдельному соглашению EULA.

К сожалению, из-за наличия подлежащей лицензированию технологииформирования теней, запатентованной компанией Creative Labs, представленный кодне включает в себя реализацию метода Depth Fail для предварительного рендерингатеней. Данная функциональность известна как «Carmack's Reverse». По словам ДжонаКармака, для обхода патента требуется добавить четыре строки и изменить две строкикода.

По инициативе юристов компании Zenimax, код был открыт не под лицензией GPL2, как это делалось ранее, а под GPL 3. При этом текст лицензионного соглашения былнемного изменен. Изменения были внесены в 15 раздел «Отказ от гарантий» и в 16раздел «Ограничение ответственности». Было добавлено упоминание о непредо-ставлении лицензии на использование торговых марок и логотипов, а такжеупоминание о том, что, создавая производные проекты на основе представленногокода, вся ответственность перекладывается на разработчика производного продукта.

Открытие Doom 3 продолжило сложившуюся ранее традицию, по которой idSoftware открывает код своих устаревших игровых движков, с момента выпускакоторых прошло пять лет. Например, в прошлом году был открыт код игры Return ToCastle Wolfenstein и связанного с ней движка id Tech 3 / Quake 3. В настоящий моментоткрытыми являются движки игр Wolfenstein 3D, Doom, Quake, Quake 2 и Quake 3, чтодает возможность энтузиастам создавать на их базе новые свободные игры. О планах пооткрытию движка id Tech 5, на основе которого построены Rage и Doom 4, пока ничегоне известно.

Исходный код Doom 3 доступен на GitHub: https://github.com/TTimo/doom3.gpl

Источник: www.opennet.ru

Page 19: FPS Magazine Issue 17

- 19 -

Язык D: новости> Компилятор DMD обновился до версии 1.072 и 2.057 (дляD1 и D2 соответственно). Ключевая особенность релиза –поддержка 64-битных версий Mac OS X. Кроме того,добавлена поддержка классов, интерфейсов и исключений вCTFE. Исправлено множество багов. Также стало известно,что с 31 декабря 2011 г. прекращается рзработка DMD 1.x.Всем владельцам проектов на D1 рекомендуется начатьпортировать их на вторую версию языка. Компиляторы D1останутся доступными, но никакой официальной поддержкииметь не будут.

http://www.digitalmars.com/d/1.0/changelog.htmlhttp://ftp.digitalmars.com/dmd.1.072.zip

> xfBuild – утилита для сборки проектов, изначальнонаписанная на D1/Tango – портирована на D2/Phobos. xfBuildсчитается одной из самых быстрых систем автоматизациисборки для D, так как использует многопоточность икэширует зависимости между модулями.

https://github.com/AndrejMitrovic/xfBuildhttps://bitbucket.org/h3r3tic/xfbuild

> Вышел Mono-D – плагин для среды MonoDevelop,предоставляющий поддержку языка D: подсветку синтаксисаи управление проектами. На данный момент доступнаальфа-версия Mono-D.

http://mono-d.sourceforge.nethttp://monodevelop.com

> Появился DMagick – объектно-ориентированный API дляпопулярной библиотеки обработки изображений Image-Magick (наподобие Magick++ и RMagick для C++ и Rubyсоответственно). DMagick написан на D2 и работает сImageMagick версии 6.6.0 и выше.

http://code.mikewey.eu/p/DMagick/http://www.imagemagick.org

> LDC – компилятор D с LLVM в качестве бэкенда – теперьможет собирать динамические библиотеки. Для этогоиспользуется флаг «-shared». Правда, официального релизановой версии пока не было объявлено.

http://www.dsource.org/projects/ldc

Page 20: FPS Magazine Issue 17

- 20 -

Воспроизведение WAV-файловчерез OpenAL

Практически в любой игре есть звуковые эффекты – дажеесли нет фоновой музыки. За примером далеко ходить ненадо: возьмите, скажем, тот же пасьянс «Паук» в Windows.Поэтому необходимо предусмотреть хотя бы самый простойспособ загружать и воспроизводить звук из файла. Ну аформата аудиофайлов проще, чем WAV, наверное, не найти.

Немного истории. Формат Waveform (или просто WAV)был разработан в 1991 году совместно Microsoft и IBM вкачестве стандартного формата-контейнера для хранениязвукового потока на PC. Это реализация спецификации RIFF(Resource Interchange File Format) – метода хранения данныхв виде порций (chunks), близкого к 8SVX и AIFF длякомпьютеров Amiga и Macintosh соответственно.

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

Мы рассмотрим простейший декодер WAV, под-держивающий только несжатый звук – PCM. Вывод звукабудет осуществляться через OpenAL.

module main;

import std.stdio;

import std.stream;

import std.conv;

import derelict.openal.al;

Объявим необходимые структуры. В первую очередь,заголовок-дескриптор, состоящий из идентификатора (4байта), целочисленного обозначения размера порции и типаформата (4 байта). В идентификаторе содержится текст«RIFF», в типе формата – «WAVE».

struct WAVHeader

{

ubyte[4] id;

int size;

ubyte[4] type;

}

Структура WAVChunk содержит информацию о порцииданных (идентификатор и размер):

Page 21: FPS Magazine Issue 17

- 21 -

struct WAVChunk

{

ubyte[4] id;

int size;

}

WAVFormatChunk хранит метаданные о звуковом файле(тип сжатия, количество каналов, частоту дискретизации,битрейт и др.):

struct WAVFormatChunk

{

short compression;

short channels;

int sampleRate;

int bytesPerSecond;

short blockAlignment;

short bitsPerSample;

}

Удобнее оформить декодер в специальный классWAVSound, экземпляры которого будут хранить отдельныезвуки.

class WAVSound

{

protected:

WAVFormatChunk format;

ubyte[] data;

ALuint buffer;

ALuint source;

/* ... */

}

В конструктор передается имя WAV-файла. Для загрузкиданных из файла мы будем использовать std.stream.File.

public this(string filename)

{

auto wavFile = new std.stream.File(filename);

ubyte[WAVHeader.sizeof] wavHeaderArray;

WAVHeader wavHeader;

wavFile.read(wavHeaderArray);

wavHeader = cast(WAVHeader)wavHeaderArray;

Благодаря тому, что в D можно легко преобразовыватьмассив байтов в структуру оператором приведения (cast),загрузка данных не представляет никакой сложности.

После загрузки дескриптора, мы вводим проверку навалидность:

if (wavHeader.id!="RIFF" || wavHeader.type!="WAVE")

throw new Exception(

filename ~ " is not a valid RIFF/WAV file");

Аналогично – читаем следующую порцию (это должныбыть метаданные):

ubyte[WAVChunk.sizeof] wavChunkArray;

WAVChunk wavChunk;

wavFile.read(wavChunkArray);

wavChunk = cast(WAVChunk)wavChunkArray;

Page 22: FPS Magazine Issue 17

- 22 -

if (wavChunk.id == "fmt ")

{

ubyte[WAVFormatChunk.sizeof] wavFormatChunkArray;

wavFile.read(wavFormatChunkArray);

format = cast(WAVFormatChunk)wavFormatChunkArray;

}

if (format.compression != 1)

throw new Exception(

filename ~ " is not a PCM WAV file");

Наконец, загружаем непосредственно аудиоданные изакрываем файл:

wavFile.read(wavChunkArray);

wavChunk = cast(WAVChunk)wavChunkArray;

if (wavChunk.id == "data")

{

data = new ubyte[wavChunk.size];

wavFile.read(data);

}

wavFile.close();

Перед тем, как перейти к работе с OpenAL, следуетвыбрать правильный формат аудио:

ALenum alformat;

if (format.channels == 1)

{

if (format.bitsPerSample == 8)

alformat = AL_FORMAT_MONO8;

else if (format.bitsPerSample == 16)

alformat = AL_FORMAT_MONO16;

}

else if (format.channels == 2)

{

if (format.bitsPerSample == 8)

alformat = AL_FORMAT_STEREO8;

else if (format.bitsPerSample == 16)

alformat = AL_FORMAT_STEREO16;

}

А вот теперь создаем буфер и источник звука в OpenAL:

alGenBuffers(1, &buffer);

alGenSources(1, &source);

alBufferData(buffer,

alformat,

data.ptr,

data.length,

format.sampleRate);

alSource3f(source, AL_POSITION, 0.0, 0.0, 0.0);

alSource3f(source, AL_VELOCITY, 0.0, 0.0, 0.0);

alSource3f(source, AL_DIRECTION, 0.0, 0.0, 0.0);

alSourcef (source, AL_ROLLOFF_FACTOR, 0.0 );

alSourcei (source, AL_SOURCE_RELATIVE, AL_TRUE );

alSourcei (source, AL_BUFFER, buffer );

}

Для управления воспроизведением необходимо ещеввести несколько методов:

Page 23: FPS Magazine Issue 17

- 23 -

void play()

{

alSourcePlay(source);

}

void pause()

{

alSourcePause(source);

}

void stop()

{

alSourceStop(source);

}

void rewind()

{

alSourceRewind(source);

}

bool playing()

{

ALenum state;

alGetSourcei(source, AL_SOURCE_STATE, &state);

return (state == AL_PLAYING);

}

void free()

{

alDeleteSources(1, &source);

alDeleteBuffers(1, &buffer);

}

Привожу простой пример использования классаWAVSound:

void main()

{

DerelictAL.load();

ALCchar* defaultDevice = cast(ALCchar*)alcGetString(null,

ALC_DEFAULT_DEVICE_SPECIFIER);

ALCdevice* device = alcOpenDevice(defaultDevice);

assert (device !is null, "failed to open audio device");

writefln("OpenAL device: %s", to!string(defaultDevice));

ALCcontext* context = alcCreateContext(device, null);

alcMakeContextCurrent(context);

alcProcessContext(context);

scope(exit)

{

alcMakeContextCurrent(null);

alcDestroyContext(context);

alcCloseDevice(device);

}

WAVSound snd = new WAVSound("sound.wav");

snd.play();

while(snd.playing) { }

snd.free();

}

Тимур ГАФАРОВ[email protected]

Page 24: FPS Magazine Issue 17

- 24 -

Проблемыбыстродействия

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

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

Не стоит полагать, что каждый пользователь, знакомясь сновой программой, говорит себе: «Пусть эта штука работаетпобыстрее, а не то...» Быстродействие программы чащеоценивается на подсознательном уровне. Работа с быстройпрограммой, мгновенно реагирующей на все ваши команды,

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

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

Эксперты по оптимизации программ написали многиетома на эту тему. Из их исследований мы узнали многополезного о том, как написать программу, выполняющуюсвои функции за минимальное время. Мы не будемрассматривать такую оптимизацию – эта тема слишкомобширна.

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

Аппаратная часть быстрее программной. Приложение,которое работает в режиме 1024x768x24 и при этомобеспечивает вывод 60 кадров в секунду, было быневозможно написать без аппаратного ускорения. Так какбольшинство движков автоматически использует всевозможности для аппаратного ускорения, вам даже непридется беспокоиться на этот счет.

Page 25: FPS Magazine Issue 17

- 25 -

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

Нехватка видеопамяти. На большинстве новыхвидеокарт установлено свыше 128 Мб памяти, но многиекарты имеют лишь 64 Мб. Это не так уж много. Сувеличением разрешения проблема становится еще острее.В зависимости от объема установленной памяти, можнорекомендовать использование различных видеорежимов,обеспечивающих хорошее быстродействие. Когда свободнаявидеопамять кончается, текстуры создаются в системнойпамяти. Хотя системная память и обладает некоторымипреимуществами по сравнению с видеопамятью, быстро-действие не относится к их числу.

FPS – еще не все. В наши дни часто приходится слышать очастоте вывода кадров, или FPS (Frames Per Second,количество кадров в секунду). Этот показатель сталкритерием для сравнения графических приложений. Однако,все же не стоит переоценивать важность этой харак-теристики. FPS показывает, с какой частотой приложениеобновляет информацию, выводимую видеокартой на экран.Тем не менее может возникнуть ситуация, при которойчастота генерации содержимого для новых кадровпревышает частоту смены кадров, установленную длявидеокарты и монитора.

В этом случае часть кадров пропадет, потому чтовидеокарта не будет успевать выводить (а монитор –отображать) генерируемые данные. В идеальном вариантеприложение должно генерировать кадры со скоростью,соответствующей кадровой частоте видеокарты и монитора,и для этого есть несколько причин.

Во-первых, такая синхронизация предотвращает эффектрасхождения, потому что монитор всегда выводитполностью сформированное изображение. Во-вторых, нетсмысла генерировать кадры быстрее, чем человеческий глазможет их воспринимать. Частота смены кадров на мониторевыбирается с учетом человеческого восприятия;следовательно, если приложение генерирует кадры счастотой их смены монитором, то оно выводит максимумвизуальной информации, воспринимаемой человеческимглазом. Сказанное оказывается особенно справедливым длявидеорежимов с частотой смены кадров в 60 Гц и выше.

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

Хороший способ избежать аппаратной зависимости –протестировать приложение на максимальном количестверазных аппаратных конфигураций.

Page 26: FPS Magazine Issue 17

- 26 -

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

Перестановка кресел на «Титанике». Вспоминаявремена своей учебы, я понимаю, что тогда мы слишкомбеспокоились о быстродействии. Например, один профессорподсчитывал, сколько дополнительных инструкций уходитна вызов функции. Он любил рассуждать о разнице вбыстродействии при использовании вызовов функций встиле C и Pascal и о преимуществах развертки циклов. Онвырос в эпоху перфокарт и ассемблера. Его учили тщательностроить программу на ассемблерном уровне, где приходитсяучитывать каждый байт, поэтому вполне естественно, что онне выносил напрасной траты байтов и команд процессора.Действительно, вызов функции требует нескольких лишнихтактов, а уменьшение количества аргументов экономитпамять в стеке, но что из того? Преимущества, получаемые отвызова функций и от использования аргументов, оправ-дывают затраты.

По сравнению с техникой, применявшейся в эпохуперфокарт, современный компьютер невероятно быстр имощен. Экономить каждый байт в современном програм-мном пакете – то же самое, что пытаться переставлятькресла на палубе «Титаника». Никакого толку от этогозанятия не будет – хуже того, оно отвлечет вас от решениянастоящих проблем с быстродействием.

Джефф ДАНТЕМАНН«Графика для Windows средствами DirectDraw»

Page 27: FPS Magazine Issue 17

- 27 -

Модели освещения

Анизотропное распределениеГейдриха-Сейделя

Традиционные модели освещения (например, Ламберта иФонга) рассматривают так называемые изотропные поверхности.Для этих поверхностей их свойства в точке не зависят оториентации плоскости – то есть, поворот поверхности вокругнормали к точке не изменяет интенсивность отраженного от неесвета.

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

Одной из самых простых анизотропных моделей считаетсяраспределение Гейдриха-Сейделя (авторы – Вольфганг Гейдрих иГанс-Петер Сейдель). Оно основано на модели Фонга.

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

Интенсивность зеркально отраженного света в этой моделизадается следующей формулой:

kspec = [sin(L,T)sin(V,T) − cos(L,T)cos(V,T)]n

где n – экспонента Фонга, V – вектор наблюдателя, L – вектористочника света и T – вектор направления бороздок в даннойточке поверхности. Зачастую его задают в пространствекасательных и переводят в мировые координаты путемумножения на TBN-матрицу.

Page 28: FPS Magazine Issue 17

- 28 -

Реализация на GLSL*

Вершинная программа:

varying vec4 V_eye;

varying vec4 L_eye;

varying vec4 N_eye;

void main(void)

{

gl_Position = ftransform();

V_eye = gl_ModelViewMatrix * gl_Vertex;

L_eye = gl_LightSource[0].position - V_eye;

N_eye = vec4(gl_NormalMatrix * gl_Normal, 1.0);

V_eye = -V_eye;

}

* - предполагается, что в приложении уже включены и настроенысоответствующие параметры OpenGL (позиция источника света,свойства материала и др.) Приведенная реализация в целях упрощенияне учитывает интенсивность источника света. Исходный кодпредоставлен как общественное достояние (Public Domain) и можетбыть использован для любых целей безо всяких ограничений.

Фрагментная программа:

varying vec4 V_eye;

varying vec4 L_eye;

varying vec4 N_eye;

vec3 reflect(vec3 N, vec3 L) {

return 2.0*N*dot(N, L) - L;

}

void main(void) {

vec4 Ca = gl_FrontMaterial.ambient;

vec4 Cd = gl_FrontMaterial.diffuse;

vec4 Cs = gl_FrontMaterial.specular;

vec3 V = normalize(vec3(V_eye));

vec3 L = normalize(vec3(L_eye));

vec3 N = normalize(vec3(N_eye));

float diffuse = clamp(dot(L, N), 0.0, 1.0);

vec3 R = reflect(N, L);

vec3 D = normalize(vec3(1.0, 1.0, 0.3));

vec3 T = cross(N, cross(D, N));

float cosLT = dot(L,T);

float cosVT = dot(V,T);

float sinLT = sqrt(1-cosLT*cosLT);

float sinVT = sqrt(1-cosVT*cosVT);

float k = clamp(

pow((sinLT*sinVT - cosLT*cosVT), 16.0), 0.0, 1.0);

float specular = k + pow(max(dot(R, V), 0.0 ), 64.0);

gl_FragColor = Ca + (Cd*diffuse) + (Cs*specular);

gl_FragColor.a = 1.0;

}

Page 29: FPS Magazine Issue 17

Это все!

Надеемся, номер вышел интересным. Если так, поддержитеFPS! Отправляйте статьи, обзоры, интервью и прочее на любыетемы, касающиеся игр, графики, звука, программирования и т.д. на[email protected].

http://fpsmag.zymichost.com