Восстанавливаю систему растений – часть I

Вот.. решил поднять растительность (долгое время всё было закомментено)

Первый скрин первого испытания. На скрине массив деревьев расставлен по ландшафту, отрисован хардварным инстансингом. А также игрок. Почему красный? ээм, на нём просто дефолтная текстура “NoTex.dds” ибо текстуру я ему не назначил (както влом). И в руках у него автомат – прицеплен к костям.

А, кстати,да, кости…

Engine updates:

[+] Добавил иерархию трансформаций объектов. Теперь можно объекты друг к другу цеплять (например зщаписку к двери)
[+] Добавил привязку объектов к костям скелета меша. Теперь вот челу на скрине дал в руки оружие : ) Всё работает шоколадно.
[?] Начал делать поддержку скриптов в треках анимации. Тоесть можно будет какому либо кадру анимации или событию назначать скрипт : )

0
0

В задницу этот ODE…

Сколько этта гадина (ODE) мне крови попила… жесть. Сколько бессонных ночей ушло на настройку ODE!! И всё впустую… ODE ну уже черезчур бажный! То предметы застревают друг в друге, то проваливаются, то система взрывается. Эти баги вылазят везде – где можно и не можнО! Большая часть разработки движка уходить ТОЛЬКО на настройку параметров ODE! Последней каплей было то, когда я сделал физику ландшафта! Оооо… это цирк натуральный! Люди, передвигаясь по ландшафту, вечно в нём застревали, после чего выпрыгивали очень высоко! : D Но было не очень смешно т.к. в моменты застревания в ландшафте двиг..ээ..да чё там двиг.. вся система ложилась нафиг! Секунд 10 были стабильные 3 ФПС а потом всё возвращалось в норму до следующего раза! Нее, нафиг такое счастье!!!!

Порывшись в инете, нашёл несколько физдвигов. PhysX не понравился изза “мутной” политики NVIDIA в отношении него. Есть ощущение, что его скоро сделают платным. Та и дрова таскать с собо не охота.

Посмотрел на Newton physics engine – помоему тоже самое что и ODE, однако сразу насторожило то, что гравитацию нельзя выставить! нужно применять её самому о_О. Бред какойто. Та и функционал вместе с качеством симуляции оставляют желать лучшего… фтопку!

И вот.. наконецто я нашёл Bullet! Вот он, ИМХО лучший бесплатный физдвиг! Порадовало наличие SoftBody физики : ) Движок на первый взгляд сделан качественно. Много “фишек”, легко добавляются свои типы физических объекто в и алгоритмы столкновений! Качественная симуляция, присутствуес CCD(!).

Решил юзать его. Однако появилась небольшая проблема – нету враппера для Bullet! O_O Долго я искал врапперы, пробовал разные – одно фуфло. И тут случайно я забрёл сюда: http://code.google.com/p/bulletsharp/ Здесь Andres Traks пишет свой враппер под названием “BulletSharp”! Враппер написан на C++CLI, тоесть ни каких лишних библиотек : ) Подключаем 1 библиотеку,будто она написана на C# и вперёд! : D Враппер ещё на альфа версии, однако большинство “жизненноважных” фич уже сделано : ) Активность у проекта очень высокая, апдейты выходят каждый день, автор адекватный и всегда быстро реагирует на просьбы и замечания по врапперу. Всё путём ; )

Теперь юзаю Bullet и ни капли не жалею о том, что больше не юзаю ODE.

Прогресс движка:

[+] Сделан базовый KinematicController игрока! Не стоит думать, что я только для игрока, которым играет человек, сделал физику : ) В моём движке ннапример человек-NPC также является игроком – построен на классе CPlayer.
[*] пофиксил баги с физикой, пофиксил текстурирование ландшафта, пофиксил контроллер камеры! Теперь камера работает мегоидеально! : ) Контроллер позволяет с лёгкостью переключаться между First-person и Third-person типами управления, позволяет настраивать максимальные углы поворота камеры, скорость, плавность, всяческие эффекты (трясение при взрыве например).
[+] Добавил реестр классов сущностей. Зачем нужны классы – расскажу вкратце: представим что у нас в игровм уровне находятся 2 бота! Это люди. Один человек является снайпером а второй обычным воякой с АК-47 например. Это один и тотже игровой класс CPlaye, однако модель поведения и некоторые специфичные параметры у них разные. ЧТо теперь? Делать для каждого вида игрока свой класс? Бред!: D Мой реестр классов инициализируется ил LUA скрипта. Тоесть чтобы создать новый класс сущности, мы должны создать его описание в LUA скрипте EntityRegistry.lua Он является базой данных классов сущностей. ри запуске движка база данных сущностей из скрипта грузится в реестр классов. После этого мы можем спокойно создавать инстансы любого класса одной лишь строкой!

ну к примеру ПСЕВДОКОД:

Entity player = Factory.BuildEntity(Registry.GetClass(“Player”));

Всё! Мы создали игрока одной строкой : ) При чём у него уже настроено поведение(AI) и некоторые параметры. Удобно в общем : D

*ушёл прогать дальше*

0
0

Пришествие ODE

Сегодняшний день был довольно продуктивен.

С утра понял, что статичная геометрия меня уже сильно подзае.. поднадоела. Так я решил переписать всю физическую систему движка. Жесть, вот это меня больше всего и парит – чем больше кода, сложнее движок, тем сложнее что-либо исправлять в нём. Поменял строку и получил 50-100 ошибок, а строк таких уйма. Вот и сижу, трачу пол дня только лишь на исправление ошибок : ) Результат, конечно, радует но, всёже, кому нужны такие пляски с бубном? А всё идёт от некачественного планирования работы и структуры программы. Вот только планировать как-то не особо получается : Не, не то, чтобы я такой тупой был, просто не имею представлоения о том, что же нужно делать то : D Это же мой первый движок. Вот так шаг за шагом, наступая постоянно на свои же грабли, набираюсь опыта, оттачиваю движок. Так сказать медленно но верно движусь к цели : )

Сегодня, как я уже говорил, переписал физическую систему. Всё построено с учётом максимального удобства испольования, возможности смены физического движка. На данный момент используется ODE (Open Dynamic Engine) в качестве физического движка. Ну он, конечно, не такой навороченный как PhysX но мне его возможностей пока что хватает да и враппера нормального для PhysX-а я не нашёл (одно старьё). Да и впринципе не важно.

Гы, наконец добавил физику ландшафту : ) теперь можно ходить по ландшафту и пинать кубики : D Всё пока что работает чётко.

Осталось сделать нормальное физическое описание для игрока. Ну, чтобы прыгал, бегал и т.д. : )

0
0

GUI re-re-re invent wheel

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

1. создаём экземпляр GUIFont – передаём в него имя файла шрифта, который отрендерить, размер шрифта (как в винде) и наборы Unicode диапазонов букв.
2. движок загружает *.ttf (True Type Font), по указанному пути, рендерит все буквы с указанными параметрами в текстуру шрифта, генерирует описание к шрифту

и собсно всё. Шрифт можно применить к любому элементу GUI.

Сделал элемент GUI: Label. В нём реализован рендеринг текста, выравнивание текста по краям, по центру при чём вертикально и горизонтально + базовое форматирование текста.
Вообще весь GUI переписал процентов на 70. Но теперь доволен им ибо всё рисуется быстро и правильно : )

вот несколькими простыми строками накидал простейшее окно:

0
0

Progress news

Ура, товарищи.

Вот и закончился очередной этап написания движка : )

Только что (буквально минут 10 назад) доделал редактор ландшафта. Он является частью редактора уровней и способен как редактировать сетку ландшафта – согдавать горы, впадины, выравнивать и сглаживать ландшафт , так и “раскрашивать” его текстурами.

В настоящее время поддерживается 5 текстурных слоёв на ландшафте и в ближайшем будущем увеличение их количества не предвидится ибо нафиг? И так хватает. В том же FarCry2 используются 4 текстуры на весь ландшафт!

Собсно, вот скрин. Просто кистями текстурными поводил по ландшафту и вот что получилось:

*кликните на изображение чтобы посмотреть в боОльшем разрешении”

0
0

WIP terrain editor

Ухх. Сделал редактор ландшафта(в редакторе уровней встроен).

Реализован функционал редактирования сетки ландшафта что уже айс, однако не хватает таки ещё раскрашивания ландшафта но это завтра буду делать.

Скринить то впринципе нечего но тем не менее выложу парочку


0
0

Ёмаё, уже 1 марта

Ну и летит время! Омг. Ну, главное, что и дела на месте не стоят : )

Какбэ переделал шейдер неба и оно теперь рисуется на скорости 1200 ФПС, шейдер компилится доли секнуды по сравнению с прошлым результатом – компилилось 12-15 секунд и выдавало 40 ФПС : D

Сделал смену времени суток. Теперь в небо всеголишь нужно передать время (хоть реальное хоть игровое) и небо само павильно рассчитается. Также необходимо установить время восхода и захода солнца! Это даёт возможность контроллировать длительность дня/ночи + синхронизировано с игровым временем – PROFIT!

пример:
DayTime time = new DayTime(16,11,35); //16 часов 11 минут 35 секунд – время
SceneGraph->Sky.SetTime(time);
ииии..всё : )

Так, на небо и так много времени убил – займусь ландшафтом : )

0
0

Nishita’s atmospheric light scattering готов!

Ух как он подзаебал мой мозг но всёже я его сделал. 3 дня парился а оказалось проблема была аще в фигне : ) Еслибю сразу заметил то в первый же день всё было бы готово!

Собсно скрин заката (только небо 🙂 )

Качество меня радует но вот скорость это пздц! 40 ФПС ни как не жЪр : ) Но я думаю, скоро будет всё ОК так как я RayLeigh и Mie текстуры апдейтю каждый кадр! а достаточно апдейтить их раз в секунду, что даст риальне буст производительности да и всёравно будет практически незаметно (если не вглядываться специально) В Crysis AFAIR апдейтится аще через несколько секунд. Да и звёзды нужно замутить. Они то есть но вот мне не понравилось, что они видны внизу – на оранжевом фоне заката (я тупо блендил текстуру звёзд и цвет неба) Нуна замутить чтонить поинтересней : )

0
0