Atrium: сборка для Linux
Эффект затенения
«Честные» динамические тени в аркадных 3D-играх не всегда бывают уместны. Как правило, разработчики ограничиваются статическими предрассчитанными тенями от неподвижных объектов и простым темным кружочком на земле под персонажем – дешево и сердито =) Я решил дополнить этот нехитрый метод одной простой, но важной деталью: изменение яркости персонажа в зависимости от его местоположения – в тени или на свету.
Цвет для яркости будет считываться из карты освещения, в которой «запечены» все статические тени на карте.
Допустим, у вас есть некий блок кода, в котором вы находите точку на поверхности полигона под ногами персонажа:
// Проверяем факт пересечения
IntrStatus istatus = character.downRay.intersectTriangle(tri);
if (istatus.hit)
{
// Извлекаем точку пересечения
Vector3f ipt = istatus.intersectionPoint;
if (ipt.y > currentFloorHeight)
{
currentFloorHeight = ipt.y;
// Берем материал полигона
Material mat = materialByIndex[tri.matIndex];
// Если нет карты освещения (текстура 1), то ничего не делаем
if (mat.textures[1])
{
// Берем изображение карты освещения
Image lightmap = imageByIndex[mat.textures[1].imgIndex];
// Находим текстурные координаты точки пересечения
Vector2f tc = triObjSpaceToTexSpace(tri.vertices, tri.texCoords2, ipt);
// Конвертируем текстурные координаты в дискретные
uint imgX = cast(uint)(tc.x * lightmap.width - 0.5f);
uint imgY = cast(uint)(tc.y * lightmap.height - 0.5f);
// Считываем цвет пикселя c карты освещения
Color lumel = lightmap[imgX, imgY];
// Применяем полученный цвет к материалу персонажа
chMaterial.ambientColor = lumel;
chMaterial.diffuseColor = lumel;
chMaterial.specularColor = lumel;
}
}
}
Осталось определить функцию triObjSpaceToTexSpace. Она будет использовать барицентрические координаты:
Vector2f triObjSpaceToTexSpace(
Vector3f[3] vertices,
Vector2f[3] texCoords,
Vector3f point)
{
Vector3f v0 = vertices[2] - vertices[0];
Vector3f v1 = vertices[1] - vertices[0];
Vector3f v2 = point - vertices[0];
float dot00 = dot(v0, v0);
float dot01 = dot(v0, v1);
float dot02 = dot(v0, v2);
float dot11 = dot(v1, v1);
float dot12 = dot(v1, v2);
float invDenom = 1.0f / (dot00 * dot11 - dot01 * dot01);
float u = (dot11 * dot02 - dot01 * dot12) * invDenom;
float v = (dot00 * dot12 - dot01 * dot02) * invDenom;
Vector2f t2 = texCoords[1] - texCoords[0];
Vector2f t1 = texCoords[2] - texCoords[0];
return texCoords[0] + t1 * u + t2 * v;
}
Atrium собирается последней версией LDC
Решив проверить LDC на практике, я только что собрал им Atrium. Результат очень обрадовал, при компиляции в релизном режиме и с уровнем оптимизаций -O3, LDC выдал весьма шустрый код: ~100 FPS против ~80 у DMD 2.060! При этом я всего один раз столкнулся с необходимостью поправить исходники — при использовании ассоциативного массива указателей.
Как вывод: LDC вполне созрел для использовании в качестве основного компилятора D под Linux — во всяком случае, для работы с OpenGL и графикой реального времени. К сожалению, я не в курсе, как у него обстоят дела c поддержкой Windows — надеюсь, со временем этот вопрос устаканится.
Atrium Project
Мои старые игры
Решил вспомнить былое и централизованно выложить в открытый доступ свои старые игры. Возможно, кого-то они заинтересуют – сейчас мода на ретро =)
Все ресурсы и исходники – под Public Domain, за исключением чужого контента (лицензионные оговорки – в тексте COPYING.txt)
Crematorium
Игра была сделана мной для II конкурса портала GameCreating.ru (сам сайт давно уже прекратил существование, но сообщество еще живо: http://gamecreating.borda.ru). Конкурс проводился в 2005 году. Кому интересно – тред с голосованием.
Представляет собой несложный шутер от первого лица в стиле первых Doom и Quake. Спрайтовые враги и оружие на фоне трехмерных одноэтажных локаций – подземных лабиринтов. В игре всего 5 уровней, (в начале каждого выводится краткий инструктаж с миссией), 3 типа оружия (пистолет, автомат, гранаты), 2 вида врагов + 1 финальный босс.
Скачать
City Builder
Симулятор градостроительства. Каждый построенный жилой дом увеличивает население вашего города, которое ежемесячно платит налог в казну. Размер налога зависит от степени развития городской инфраструктуры: количества магазинов, ресторанов, банков, отелей, садово-парковых зон и т.д. Можно строить заводы, которые ухудшают условия жизни в городе, но зато приносят высокий доход, а также сажать деревья, прокладывать асфальт, газон, песок и воду.
Есть возможность сохранять и загружать города, а также выбирать фоновую музыку.
Скачать
Croggler
Простенький платформер из 15 уровней, на каждом из которых вы должны победить черного призрака, летающего под потолком. Ваше единственное оружие – бомбы, которые призрак время от времени скидывает. Если бомбу вовремя не подобрать, она взрывается. На некоторых уровнях есть также второстепенные враги – их уничтожить невозможно, остается только уворачиваться…
Скачать
Blender 2.65 test build
Сегодня стала доступна первая тестовая сборка ожидаемого релиза Blender 2.65. В данной версии пакета пользователей ждет значительное число серьезных нововведений:
- Наконец-то появилась долгожданная поддержка Open Shading Language (OSL) — нового языка программирования шейдеров от Sony Pictures. Теперь рендер-движок Cycles является полностью программируемым в прямом смысле этого слова: материалы можно описывать не только в виде графа узлов, но и шейдерных программ в духе традиционных GLSL или RSL. К сожалению, OSL-шейдеры пока не компилируются для GPU и работают только в CPU-режиме — однако скорость исполнения байт-кода OSL и без того поражает воображение…
- Для Cycles также добавлена поддержка анизотропных материалов и размытия при движении (Motion Blur).
- Подвергся серьезному обновлению симулятор дыма: теперь он «из коробки» поддерживает симуляцию огня. Объект Domain работает на порядок быстрее. Дым теперь можно выпускать с поверхности мешей без использования системы частиц.
- Новинки в сфере моделирования: улучшенный инструмент «Фаска» (Bevel) и невероятно полезный новый инструмент «Симметризация» (Symmetrize), позволяющий, как ясно из названия, симметризировать топологию относительно координатных осей. Кроме того, был улучшен модификатор Decimate, позволяющий уменьшить количество полигонов в меше — появились новые алгоритмы редуцирования. Также был добавлен новый модификатор Triangulate, «на лету» упрощающий N-гоны до треугольников.
Более подробный обзор новинок ждите в следующем номере журнала «FPS».
Скачать сборку Blender 2.65 для Windows, Linux и Mac OS X можно здесь.
Журнал «FPS» №21
> Blender: обзор дополнений (выпуск 3)
> Tears of Steel: роботы тоже плачут…
> Эффект «старинного фото» в GIMP
> Журнал GIMP Magazine
> Язык D: новости
> Семь мифов о D
> Сборщик мусора — враг или друг?
> Юникод в OpenGL. Раз и навсегда
> Почему я выбираю Linux?
> Патентные войны
Номер доступен для онлайн-чтения и загрузки на сервисе Issuu.com и Документах Google. Последние новости по проекту вы можете узнать в публичной странице журнала в социальной сети Google+.
Почему я выбираю Linux?
Последние два года часто приходится слышать о том, что Linux на десктопах «не выстрелил». И что место его – в нише серверов, суперкомпьютеров, встраиваемых систем и мобильных устройств (в качестве Android, MeeGo и др). Не хочется сейчас касаться бессмысленных холиваров а ля «под Линукс нету Фотошопа» – я не буду оправдывать систему перед геймерами, домохозяйками, «офисным планктоном» и прочим подобным контингентом, равно как и агитировать кого-либо переходить на нее. Я просто намерен объяснить, что именно в Linux привлекает среднестатистического хакера – компьютерного энтузиаста-«кулибина», которого, как это ни парадоксально, интересует не наличие прикладного софта, а именно его отсутствие – чтобы был стимул написать свой! В моем случае – отсутствие игр (малый ассортимент, если быть точным). Именно этот факт послужил первой причиной выбора Linux в качестве основной целевой платформы разработки.







