Время…

Время.. оно как долбаный песок – ускользает сквозь пальцы, не удержать его..

Казалось бы “что мне стОит написать игру”, ведь это не так сложно! И это действительно так! Когда ты знаешь что делаешь, вопрос о сложности отходит на второй план а сам процесс разработки становится более.. эм.. творческим, как ещё сказать.. И да, писать игры не сложно, вот только это “творчество” незаметно съедает огромное количество времени! И это напрягает.. в итоге времени не хватает ни на “игру” ни на что другое

Хреново это всё, нужно будет подумать о путях оптимизации расходов времени, его ведь так мало… а хотя, бывает ли его много?

***********************************
Кстати, допилил класс IMeshObject Теперь рендеринг мешей (любых – хоть статичных, хоть со скиннингом, хоть процедурных) – стал гораздо более быстрым и удобным! Количество кода рендеринга сократилось как минимум в 2х раза, что не может не радовать. Правда появился какой-то баг с BoundingBox-ом объекта, но это не проблема – сейчас найду : )

0
0

WIP

Пофиксил экспортёр – стал немного быстрее + экспортит объекты, состоящие из нескольких отдельных мешей.

Переписываю класс mesh-а. Изначально это был один общий класс. Сейчас сижу – разделаю. Будет общий интерфейс IMesh через который все виды мешей можжно будет одинаково рендерить, апдейтить. Давно пора было сделать. Например мне нужны некоторые методы для работы со скелетной анимацией (со скелетом И с вершинами) ну и т.п. зачем эти методы внутри статичного меша? Не нужны! Так же прикручу процедурные меши, что будет достаточно просто : ) А процедурные мне очень нужны (геометрические шейдеры не спасут).

Загрузил персонажа Miranda из Mass Effect 2 ^____^

где-то баг в загрузке материала о_О Глаза у миранды чёрные, гхм

ах да, убрал ещё добавление ambient освещения из всех типов лайтов. Было не пр
72;вильно сделано – каждый лайт добавлял свою долю ambient! так, добавив 10 лайтов радиусом 1 мм можно было засветить всю сцену о-О. Добавил новый тип источника света – AmbientLight который не нужно добавлять, который рендерится автоматом в зависимости от настроек сцены. Теперь освещение правильное.

0
0

Итоги работы

Так, что же я на этом С++ смог наваять на данный момент:

Графический двиг:

статическая библиоткека, реализовано:

1. система плагинов
2. мультирендер
3. менеджер ресурсов (правда пока всёравно в общем потоке работает Про потоки С++ хочу больше узнать, прежде чем юзать)
4. Виртуальная файловая система – поддержка ZIP архивов, обычных файлов с HDD, свой формат PAK файлов.
5. Скелетная анимация
6. Большой ландшафт. Макисмальный тестированный размер – 8*8 километров (с шагом сетки в 1 метр)
7. Рендеринг с отложенным освещением (не путать с полностью отложенным рендерингом!)
8. рендеринг травы – есть менеджер, занимающийся апдейтом, генерацией и рендерингом травы. Она отделена от основоного алгоритма рендеринга с целью оптимизации в следствие специфичности самой травы. Инфа о траве весит крайне мало. В памяти распаковываются только нужные инстансы травы, рендеринг в несколько DIP-ов идёт с использованием хардварного инстансинга. Мжно бьло бы сделать 1 DIP, но в таком случае Map/Unmap буферов будет каждый кадр.
9. Рендеринг растительности – все растения кроме травы. Свои методы анимации, свои методы отрисовки и шейдинга. Поа не прикрутил импосторы – провожу оптимизацию рендеринга того, что есть.
10. NormalMapping – тяжёлые параллаксы не люблю. Позже сделаю а пока и нормалмаппинга хватит.
11. EnvironmentMapping – накладываемс отражения из кубической карты, которая грузится с файла или же рендерится динамически.
12. ShadowMapping для spot light-ов. Сглаживание пока только PCF с настраиваемым ядром фильтра.
13. PSSM – каскадные тени для аутдора. Также юзаю PCF 4*4 Все тени рисуются в одну общую текстуру.
14. HDR – в нём реализован bloom, адаптация глаза, blue shift
15. Система убер-шейдеров
16. потом допишу, может что забыл )

Тулзы:

1. Экспортёры мешей, треков анимации (При экспорте меша можно точно указать какие данные экспортить а какие нет)
2. Эксплорер PAK файлов – так как формат мой собственный – нечем было просматривать “архивы”. Пришлось написать “эксплорер” для PAK файлов. Написан на C#

Игровой движок:

только начал! Прикрутил физику к сущностям. Всё ))

пока всё : ( Мда, не густо..

0
0

WIP News

Что сделал:

[+] Небо Нишиты (как в крайзисе) – динамическая смена времени суток. Можно задавать время восхода, заката солнца а также скорость его движения по небу : ) Ну и собсно начальное время суток. Задаётся в любой удобной форме. Юзаю “часы/минуты/секунды”. Очень удобно получилось : )

[*] LOD ландшафт. Оптимизировал макисмально (на сколько смог). Ландшафт размером 4096*4096 метров (с шагом сетки = 1 метр) занимает 128 мб видео памяти это против 1.5 гб на предыдущем алгоритме : ) Тоесть стриммить геометрию собсно и не нужно т.к. мне ландшафт больше 2*2 км собсно и не нужен. (а это 32 метра видео памяти). LOD-ы сделал индексными буферами (может потом прикручу GCM но пока всё устраивает) с вырожденными треугольниками. Т.е. ни каких дибильных “юбок”. Всё красиво и правильно стыкуется прореженными швами. Не доделал только блендинг текстур : ) Просто на траву отвлёкся. А так ни чего сложного. Максимум 5 текстурных слоёв будет (+маска).

[*] Рендеринг травы почти готов уже. на ландшафте 4096*4096 у меня может быть максимум 201+ миллион кустов травы : ) Все данные для этого занимают 16 метров всего-то. Осталось то, кстати, всего ни чего – тупо найти КРАСИВУЮ текстуру травы, а желательно несколько. У меня может быть максимум 4 вида травы на ландшафте. Да ещё и геометрию надо для неё намутить, хм. А вообще “трава” рендерится. Только вместо неё кубики : )

Освещение же у травы попиксельное – честное : )) (а какбы совсем пофиг! У меня же отложенное освещение ; )

Отскринюсь когда будет готов “лес”.

UPD: всёравно выкладывал скрин на гамедьев, а, ладно, запостю. Ни чего интересного. Для количества )

0
0

Начал писать ландшафт.

Начал писать ландшафт. Сначала хотел сделать стримминг и прочую хрень но подумав пришёл к выводу, что мне МЕГООГРОМНЫЕ ЛАНДШАФТЫ нафик не нужны (по крайней мере в первой игре если она когда-нибудь вообще реализуется). Максимальный размер ландшафта в движке установлен как 4096*4096 а минимальный 64*64. Ландшафт любого из дозволенных размеров располагается целиком в видео памяти, что я себе ТЕПЕРЬ могу позволить, так как раньше у меня ландшафт 4096*4096 занимал примерно 1 ГБ видеопамяти! Теперь же такой ландшафт занимает 128 мегабайт : ) И это очень радует. Наврядли мне понадобится вообще ландшафт больше 2048*2048, который, кстати, весит вообще 32 мегабайта : ))

Ещё, правда, много работы по ландшафту.

Хотел сделать скрин но так лениво стало отрубать HDR : DD А “на улице” сильная засветка так как у меня там ни неба ни чего, короче, влом : )

“помещение” и ландшафт начинаются с координаты 0.0.0, поэтому на ниже приведённом скрине ландшафт воткнулся в “комнату”. Ну какбы отскринил наверно для себя т.к. там ничо интересного пока нет : )

по-позже, как сделаю небо – запостю сюда же скрин outdoor-а )

upd: по немногочисленным просьбам поставил нормальный лайт а не кучу не пойми чего не пойми где

upd: поставил анизотропную фильтрацию текстур вместо линейной и MIP-уровни в тектсурах сгенерил. На дальнем плане чуток по-лучше стало.

если чо – картинки кликабельны )

кстати для сравнения: эта же самая сцена но с выключенным HDR эффектом:

0
0

Трындец.

Почти с самого начала работы над С++ движком (как только решил на С++ перейти с C#) у меня были постоянные проблемы, постоянно что-то отваливалось и еэто “что-то” сильно мешало работать.

Но, УРА, я нашёл причину бага ) Закомментил весь проект, потом раскомментил, и ещё несколько раз закомментил -пытался локализовать баг – ххренушки. Нашёлся в самом неожиданном для меня месте, в загрузке уровня о_О Классический FAIL – вышел за пределы массива.

Теперь всё работает стабильно, можно НАКОНЕЦТО продолжить добавлять фичи в движжок )

по порядку буду добавлять:

1. огромный ландшафт
2. динамическое небо (light scattering)
3. рендеринг густой лесной растительности (деревья, трава)
4. системы частиц
5. GUI

Ща надо хотябы начать ландшафт а то как-то стрёмно идти спать : )

0
0

Новый год же!111

Это какбэ последняя запись в блоге в этом году ) Сейчас надо вырубать компьютер, идти пить и веселиться, к чёрту ЗОЖ!! : ))

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

С Новым Годом, “мои невероятные друзья”(с) xD! Ура!!

0
0

Добавил тени и скиннинг.

Теперь в движке тени кастятся от лайтов. На кадр максимум 4 источника света могут отбрасывать тень.

На скринах ниже та хрень прпосреди сцены, она заскинена и движется в динамике, хоть на статичном скрине этого и не видно. Потом человечка поставлю


0
0