пятница, 31 декабря 2010 г.

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

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

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

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

четверг, 30 декабря 2010 г.

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

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

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


четверг, 23 декабря 2010 г.

GOD DAMN YOU, MAX SCRIPT!!!! SHIT!!!

Сцуко, нахрен разработчиков 3DS MAX в биореакторы, блеать!!!111одинодин

Весь день угрохал на скелетную анимацию. НЕ РАБОТАЛА И ВСЁ! И не понятно в чём дело! Ведь я прекрасно знаю как делать скелетку! О_О <-- это какраз больше всего и бесит!

И, хвала великому Ктулху, я СДЕЛАЛ ЭТО : D В чём фишка была - ? Неет, вот нихрена, не я на этот раз накосячил!

Экспортёр у меня написан на MAXscript-е.

Вначале была такая логика работы: прохожусь по всем объектам сцены, если класс объекта == "кость" то в массив костей добавляем, если объект - проверяем, есть ли у него скиннинг. Если есть скиннинг, то этот объект экспортим (ну там ещё куча проверок и т.п.)

всё это в таком цикле:

for obj in objects do
{
БЛА БЛА БЛА
}

всё работало отлично на шарпе.

А вот когда начал портировать на С++, я какбы всё оптимизирую, в том числе и экспортёры. Переписал с нуля и собсно привнёс новую логику работы:

for obj in selection do
{
БЛА БЛА БЛА
}

тоесть экспортить так можно будет ВЫДЕЛЕННЫЙ объект и ВЫДЕЛЕННЫЕ кости, это удобно ведь!

Вот и всё, в ЭТОМ и проблема! for obj in selection do - в таком цикле ПОЧЕМУТО совершенно другие индекы у костей! В следствие чего и иерархия костей экспортится КРИВАЯ, из за чего и в движке жепЪ.

Почему так? - х.з. Я специально в цикле for obj in objects do вывел все объекты сцены и не был удивлён - вывелись все и только те, которые я выбирал при экспорте. Тоесть в количестве объектов внутри objects и selection разницы нет ни какой. Тогда ПОЧЕМУ индексы у костей в selection не верные? Для меня лично загадка.

Ффф, вынос мозга.

вторник, 21 декабря 2010 г.

Новые скрины

Пилю освещение дальше. Сделал спот-лайты и много чего ещё.

Крайний апдейт:
добавил проективные текстуры спотлайтам.






а тут ВИДНО споты : )

понедельник, 20 декабря 2010 г.

Освещение.

Ух, провозился с ним 2 дня! Однако результ ат доставляет : ) Внизу скрин, на котором 48 лайтов. Рендерится вся сцена с 800+ FPS. Ни когда ранее в одном кадре не делал столько лайтов : ) На скрине комната на полу которой лайты, хоть этого и не видно (комнаты). Демка с лайтами, диффузом и т.п. будет в течение 3 дней.




update:

доделал финальный пасс. Там есть диффуз : )



апдейт: сделал блики + normalMapping




воскресенье, 19 декабря 2010 г.

Light pre-pass renderer

Какбэ начал прикручивать Light pre-pass renderer : ) Офигенная штука и главное избавлена от сурового ИМХО недостатка DS - проблемы с количеством материалов + невозможность юзать MSAA.

Как обычно - смотреть неначто! Но запостю : )


следующая будет демка. По-интереснее : )

среда, 15 декабря 2010 г.

Update

[+] Добавлен инпут джойстика, мыши, клавы
[+] Добавлены 100500 врапперов всевозможных ресурсов GAPI
[+] Добавил класс "сцена" и менеджер сцен (так как сцен может у меня рендериться несколько одновременно)
[+] Собсно наконец-то сделал базовый рендер и отрисовал чёртов кубик : )
[+] Добавил сценеграф, материалы, лайты, тесты видимости

Вот он, мой первый ацкий кубик на С++

суббота, 11 декабря 2010 г.

Экспортёр

Переделываю экспортёр для 3DS MAX8. Теперь он у меня экспортит не только меши со скелеткой : ) Можно экспортировать любую нужную инфу, всё работает бысро и правильно. Пофиксил баги с миррором в TBN и множество других старых недочётов. Всё вроде как путём. Завтра (ух ё, уже сегодня) если будет время таки доделаю рендеринг моделей, наконец скрины выложу (да хоть для себя самого : ))


пятница, 26 ноября 2010 г.

    

[+] подключил к проекту freetype
[+] сделал генерацию текстурных шрифтов
[*] окончательно допилил лог, файловую систему.
[+] поел пельменей
[+] добавил врапперы текстуры и вершинного буфера, свои классы потоков.

На очереди загрузка и рендеринг объектов с дефолтным шейдером и сценеграф трансформаций.


Вот пример - кусок текстуры шрифта, сгенеренный в рантайме моим движком, используя мего библиотеку freetype




Кстати, большое спасибо Andrey, Sergio, FDsagizi, Wolshebnik за помощь в раскуривании С++ и графике!!

суббота, 20 ноября 2010 г.

WIP news

Да пошёл он в жопу этот C#. К чертям блин! Заипал совсем. Кроссплатформенности нет, сцуко, тянет НЕРЕАЛЬНОГО размера фреймворки, тупит на массивных вычислениях и главное - тысяча дроидов, ОПЯТЬ жопа с компилляцией убер-шейдеров!! Арррр. Опять если много шейдеров компилить, то чем больше компилится тем КРИВЕЕ они компилятся. Если после компилляции каждого шейдера вызывать ещё какие-нибудь функции компилера, например препроцессинг убер-шейдера БЕЗ последующей компилляции то ещё несколько шейдеров компилятся нормально а потом опять задница.
Да, блин, конечно, это не вина КОНКРЕТНО C#, это вина кривого SlimDX (я не просто уверен, я знаю что я НЕ накосячил на этот раз). Но блин. Ну нету ни какой другой альтернативы для C#! MDX помер давно, XNA - гори в аду. ПРОСТО обёртки над DX11 нету - вот в этом и проблема C#, под него нихрена нету кто бы что не говорил (по сравнению с С/С++). Да и пошло оно всё лесом! Буду писать только на С++.

Собсно теперь C# так сказать "движок" - в топку. Пусть себе пылится. Может немного позже отдам кому-нибудь, пусть мучаются ))


1. Добавил свою виртуальную файловую систему
2. Написал content provider для ZIP архивов. Можно читать/писать файлы в ZIP архивах впринципе даже не зная, что работа идёт собсно с архивом. У каждого провайдера контента общий интерфейс, который и используется юзером.

Ну например так я могу создать провайдер ZIP, создать файл в архиве и записать в него данные. Ну, вообщето всё будет красивше чем в примере ниже - это только наброски.Но всё уже работает отлично : )

IZipFileContentProvider prov(_text("C:\\Users\\L\\Desktop\\TextNEW.zip"));

IFile* file2 = prov.getFileSystem()->GetRootFolder()->NewFile(_text("OLOLOTEST.txt"));
IDataStream* stmWrite = file2->OpenWrite(FM_OPEN_OR_CREATE);
char data[] = {'1', '2', '7', '8', '8', 'A', 'A', 0};

stmWrite->Write(data, 7);
file2->Close();

вот собсно и всё ) Не нравится?? о_О А мне пофиг! : D Мне нравится.

Пофиксил работу со строками. Теперь движок полностью поддерживает юникод. Multi-byte character set не стал юзать Да и вообще это НАСТРОЙКА в студии. Полагаться только на настройки - FAIL, когда речь идёт о кроссплатформенности ИМХО.

Кстати посмотрел "пилу 7" только что - таки доставила. По сравнению со скайлайном - куда лучше.


p.s. http://news.softodrom.ru/ap/b8078.shtml ^____^

суббота, 23 октября 2010 г.

Ну и занудное это занятие - писать мультирендер!

Начал писать DirectX11 рендер. Честная многопоточность очень понравилась, сам API очень похож на DX10 API Поэтому смог повторить DX10 рендерер очень быстро.

DX11 порадовал честной многопоточностью : ) Да и поддержкой FeatureLevel DX9, DX10 : ))

Вот я и подумал - а нафига мне паритсься с мультирендером, делать подобие константных буферов в DX9 да и вообще поддерживать его рендерер, если есть DX11!! : P

К моменту, когда напишу "игру" (к 3012 году), DX9 будет уже полностью не актуален! Собсно нет смысла его поддерживать! Всёравно движку нужны минимум 3.0 шейдеры.

Мультирендер остаётся, просто DX9 рендерер больше не буду писать : ) Хотя на всякий пожарный закоментеным оставил.

понедельник, 18 октября 2010 г.

WIP News (C++)

C++ движок

[+] Добавлена система плагинов
[*] Дополнен рендерер DirectX10
[+] Обёрнуты несколько типов графических ресурсов для мультирендера
[*] Начал портировать свою математическую библиотеку с C# на С++


С плагинами долго провозился : ( Зато теперь удобно, можно с лёгкостью загрузить любой, поддерживаемый движком примерно так:

g_pEngine.GetPluginServer()->LoadPlugin("RendererDX10.dll");

пятница, 15 октября 2010 г.

WIP News

Работа над С++ проектом сегодня ВРЕМЕННО ПРИостановилась. Всё дело в том, что мне необходимо (причины не важны) чтобы я мог скомпилировать движок как динамическую так и статическую библиотеку!

Изначально у меня проект динамической библиотеки. Аттачится к юзающему её проекту чётко, всё работает.

Решил скомпилить как статическую либу. Ну чтож.. как это сделать - х.з. аще : )) Полез в настройки проекта, поменял типа проекта с Dynamic Library (.dll) на Static Library (.lib). И реально! Проект скомпилился в .lib, вроде всё путём. Ан нет. Если я компилю с ней проект, юзающий движок, то компилляция прохоодит успешно! Но при запуске "игры" она всёравно требует .DLL движка. Как настроить - не ясно. Просмотрел 100500 раз настройки проекта.

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


Пока простаивает С++ движок, пишу C#.

Ну что.

-- Первым делом вычистил из движка последние остатки DirectX. Теперь gAPI можно встретить только внутри класса рендерера.

-- Пока подчищал - нашёл старый костыль, который подставил в место после отрисовки шадоумапы т.к. не знал природу бага, который возникал если не поставить этот костыль. Оказалось всё прозаично - вначале кадра я очищал Z-Bufer не 1 а 0 >_<

-- Оптимизтировал рендер в текстуру.

-- Сделал менеджер пост-эффектов.

Ну скажем вот так я добавил HDR сцену:

PostHDR HDR = new PostHDR();
scene.Graphics.PostEffectManager.Add(HDR);

Всё достаточно просто, однако менеджер ещё не завершён. Есть нерешённые проблемы.

[+] Добавил DirectX10 рендерер. Он ещё пустой.

Начал оборачивать ресурсы в DirectX10 рендерере.
Полностью обёрнуты:
InputLayout, VertexBuffer, IndexBuffer, VertexShader, PixelShader + Include(интерфейс), можно мои убер-шейдеры теперь компилить и в DX10 ^____^

также реализовал базовые функции рендерера - наблюдаю при запуске игры очищенное окно и GUI поверх него. Сцена ещё не рисуется в DX10.



Кстати. Отныне движок за кадр полноценно может рисовать сразу несколько сцен. Не просто одну сцену с разных камер а реально разные сцены. При создании сцены теперь необходимо указывать размер выходного изображения - текстуры, в которую отрендерилась сцена.

Собсно всё крайне просто - каждая сцена рисуется в текстуру, потом все ти текстуры передаются в OutputMerger который согласно указанным параметрам смешивает сцены. Блендит их или делает "картинку в картинке". Поверх результата накладывается GUI и всё это выводится на экран.

Как-то вот так...

среда, 13 октября 2010 г.

Свершилось...

В общем меня много что достало при разработке движка на C#.

В особенности траблы с врапперами всякой херни.

То в SLIMDX какой-то баг, то во враппере OGG хрень, которую приходится вручную править и вместо одного часа ебстись со звуком недели две и т.п.

Для C# не вижу я годных готовых мощных решений в плане звука, физики и графики и т.п.

Я ненавижу XNA и за бесплатно юзать ни за что не буду : ) Собсно других альтернатив, кроме SlimDX я не вижу.

Да ну.. к чёрту всё! Решил переписать движок на С++.

Вот, пол дня уже как сижу и пытаюсь его переписывать и с каждой минутой всё плотнее и плотнее приходит осознание того, как я херово знаю C++ : D

А ещё назло инет АЦЦКИ лагает - погуглить траблы аще нереально!!!!! >_< жопа какаято. После C# - С++ напрягает.

Но "врагу не сдаётся наш гордый варяг" же : \ Без гугла так моим любимым методом тыка напишу всёравно.

Долго и упорно вспоминал WINAPI : D

В итоге таки сделал окошко : ))


#include "RenderWindow.h"
#define L_WIN32

LRESULT __stdcall WndProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
switch(message)
{
case WM_DESTROY:
PostQuitMessage(0);
DestroyWindow(hwnd);
break;
case WM_KEYDOWN:
switch(wparam)
{
case VK_ESCAPE:
PostQuitMessage(0);
break;
}
break;
}

return DefWindowProc(hwnd, message, wparam, lparam);
}

RenderWindow::RenderWindow(int width, int height)
{
g_hInst = GetModuleHandle(NULL);
g_hwnd = NULL;

//memset(&g_wndClass,0,sizeof(WNDCLASSEX));

g_wndClass.cbSize = sizeof(WNDCLASSEX);
g_wndClass.cbClsExtra = NULL;
g_wndClass.cbWndExtra = NULL;
g_wndClass.hbrBackground = (HBRUSH)GetStockObject(1);
g_wndClass.hCursor = (HCURSOR)LoadCursor(g_hInst, IDI_APPLICATION);
g_wndClass.hIcon = LoadIcon(g_hInst, IDI_APPLICATION);
g_wndClass.hIconSm = LoadIcon(g_hInst, IDI_APPLICATION);
g_wndClass.hInstance = g_hInst;
g_wndClass.lpfnWndProc = WndProc;
g_wndClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
g_wndClass.lpszMenuName = NULL;
g_wndClass.lpszClassName = L"Onotole";

if(!RegisterClassEx(&g_wndClass))
{
MessageBox(g_hwnd, L"Can not create window class! We all gonna die!!", L"OH SHIT!", MB_OK);
}

if(!(g_hwnd = CreateWindowEx(NULL, L"Onotole", L"Onotole window", WS_OVERLAPPEDWINDOW, 10,10,width,height,NULL,NULL, g_hInst, NULL)))
{
MessageBox(g_hwnd, L"Can not create window! We all gonna die!!", L"HOLY SHIT!", MB_OK);
}

ShowWindow(g_hwnd, SW_SHOWNORMAL);
UpdateWindow(g_hwnd);
SetForegroundWindow(g_hwnd);
SetFocus(g_hwnd);

}

void RenderWindow::Update()
{
#ifdef L_WIN32
MSG msg;
while(PeekMessage(&msg,0,0,0,PM_NOREMOVE)) {
if(!GetMessage(&msg,0,0,0)) break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
#endif
}

void RenderWindow::SetCaption(wchar_t* text)
{
SetWindowText(g_hwnd,text);
}

RenderWindow::~RenderWindow(void)
{
}





Эт конечно только базовый вариант но уже оно есть, оно работает и это радует меня - нуба в С++ : )))

Также намутил главный класс движка, всякие енумы и т.п. Он может создовать рендерер:

g_pEngine.CreateRenderer(RT_DIRECTX10, RenderParams(320,240,0,false,false));

Пока что мегократко описал 4 рендерера - DX9,10, OGL, software. Буду вплотную заниматься DX10, потом остальные допишу (эт типа мультирендер возрождаю на С++)

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

Маловато за сегодня но я просто ещё не привык к С++ : )


Перешёл на С++... решился таки..

вторник, 28 сентября 2010 г.

Апдейт скринов.

Какбэ скрины такиеже беспонтовые, но текстурки по-качественней поставил )

Намоделил геометрии, позже расставлю и отскриню более годные картинки )








суббота, 25 сентября 2010 г.

WIP News

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

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

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




пятница, 23 июля 2010 г.

Анимация и события.

Сегодня,правда в сыром пока ещё виде, сделал привязку скриптов/собьтий к любому времени трека анимации (не только к ключевым кадрам но и ммежду ними ессно). Теперь с помощью этой фишки я озвучил шаги игрвого персонажа в точное время анимации а не тупо "проигрывание зацикленного трека ходьбы" что ИМХО УГ ещё то. Класс. Можно привязать к событиям что угодно, хоть скрипт порабощения мира и на каждом шагу own it : D

четверг, 22 июля 2010 г.

Багфиксы.

Слишком много УГ в проекте. Решил подчистить всё. Оказалось что освещение и тем более блики всё время у меня вообще не верно считались!!! Переписал, собсно вот парой строк сделал:

пятница, 9 июля 2010 г.

GUI. Продолжение.

Вот наконецто защитил диплом и имею больше свободного времени на движок.

Пофиксил несколько оставшихся мемориликов, пофиксил подчистку всего мусора после выгрузки движка (в видеопамяти некоторые объекты оставались : \ ) И решил пройтись сначала по движку и привести всё в подобающий вид. Начал с GUI. Множества контролов пока ещё не хватает но больше всего не радовало отсутствие нормальной поддержки скинов для GUI. Вот, посидело немножко, переписал дофига в GUI (по красивше) и сделал поддержку скинов. Правда нужен ещё редактор скинов так как вручную я риальне запарился считать пиксели : D

Вот тут окошко, чекбокс и кнопка. Всё отскинено. Окно под Win7 сделал xDD Только нету кнопок закрытия, сворачивания и т.п. Осталось допилить RadioButton и написать всяческие списки. А так всё шоколадно.

суббота, 26 июня 2010 г.

Обновление PSSM

Добавил альфу в тени (прозрачные участки текстуры теперь не отбрасывают тень) + PCF сглаживание сделал настраиваемым. Тут PCF 4x4

четверг, 24 июня 2010 г.

12 часов ада

2.5 дня писал PSSM. Из них последний мне ещё надолго запомнится...

Надоже! 12... ДВЕНАДЦАТЬ часов подряд ебался с багом в PSSM - неверно считалась глубина! Упорно решил добить сегодня и не отвлекаться ни на что. Какбэ дело принципа - "сделаю и точка". Ну собсно и сделал.

[цитата моего сообщения в аське]
Действительно полезно отвлекаться от проблемы : ))

Пил чай в стеклянном станкане. чота поставил напротив другого станана. В голову пришла мысль об альфаблендинге...БИНГО! альфаблендинг был включен и глубины ТУПО СМЕШИВАЛИСЬ : D вырубил перед отрисовкой карты глубины альфу и вуаля, тени работают! ГЕНИАЛЬНО БЛЯ : D

Надо же. Такая глупая фишка и столько мозга вые*ано было! А сколько бутербродов съедено а сколько пепси выпито...ууууууу. Но тем не менее меня как всегда ждала заслуженная награда - чёткие классные тени ^^



Тут PCF 2x2. Можно будет 3x3 сделать попозже.


Скрин да, ни о чём : )))) Даже выключена фильтрация текстур внизу на террайне и объектов нету. И пох! Главное что естьо пруф существования PSSM ^^ : P

суббота, 5 июня 2010 г.

Восстанавливаю систему растений - часть 2: да придёт трава

Сделал BVH для куллинга растительности. Полёт нормальный : )

Однако угнетает тот факт, что растительность хавает слишком много оперативной памяти : ( Всё из за того, что самих растений на ландшафте - десятки миллионов!! Я храню позицию кадого растения - 16 байт. Вот и выходит астрономической прожорливости травка : (

Вот несколько скринов. Они WIP. Тут к траве не применяются тени, не применяется цвет ландшафта.

Просто так выложил : )

Травко:



Или травку или меня или меня травкой проглючило и она начала летать:


Трам пам пам



Сверху трава не выглядит Унылым Говном : )



продолжение следует...

пятница, 7 мая 2010 г.

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




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

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

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

Engine updates:

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

воскресенье, 25 апреля 2010 г.

В задницу этот 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

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

суббота, 20 марта 2010 г.

Пришествие ODE

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

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

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

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

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

пятница, 12 марта 2010 г.

GUI re-re-re invent wheel

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

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

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

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

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

среда, 10 марта 2010 г.

Progress news

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

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

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

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

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

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

суббота, 6 марта 2010 г.

WIP terrain editor

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

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

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


вторник, 2 марта 2010 г.

Просто 2 кривых скрина

Вот, просто так выложу пару кривых скринов : D

Тут гавёная текстура звёзд и тестово затекстуренный ландшафт (тоесть там пятнами вякая хрень нанесена и всё : )


понедельник, 1 марта 2010 г.

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

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

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

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

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

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

вторник, 23 февраля 2010 г.

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

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

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



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

понедельник, 8 февраля 2010 г.

Какбэ пофиксил карту бликов(SpecularMap) и карту свечения (EmissiveMap).

Вот скрин. Эта всё таже самая сцена только я материал изменил у "пола"

Какбэ парочка скринов. Пальма кривовата потомучто я сам её моделил ( а моделлер из меня такойже как и балерина). Сегодня переписал процентов 20 движка! сделано очень много важных изменений как в архитектуре так и в реализации. На скрины ни чего специально не ставил красивого. Это скрины того, на чём я тестю свой код.

что на скрине (почти ни чего) - возможно не видно но есть:
1. Hardware instancing (пальма рисуется через инстансинг)
2. NormalMapping на полу (также руки дошли наконец сделать тайлинг текстур : D )
3. VarianceShadowMapping - я только не заюзал размытие (кроме анизотропного фильтра для текстуры)
4. ну и собсно освещение : ) отсвещение на скринах от SpotLight. Движок же поддерживает SpotLught, PointLight, DirectionalLight

До конца месяца будет уже нормальная демка с более привлекательной графикой : D


воскресенье, 31 января 2010 г.

Мдэ. 3+ часа ночи (ан нет, уже утра). Чем ещё программист 3д графики в это время может занимаца? Да, вы угадали, созданием "кусудам" xDD

вотЪ какбэ поделка сурового южного программиста:
(фак, почемуто блогЪ не показывает эти картинкаи. Бережёт вашу психику? : D Вообщем, просто кликните по одному из трёх квадратиков ниже и увидите картинку ; )



четверг, 14 января 2010 г.

WIP - GUI system


Какбэ начал делать систему GUI (графического интерфейса пользователя). Задача при кажущейся лёгкости в действительности оказалась далеко не тривиальной. О_О Вот, собсно готова система сообщений, система оверлеев и окон - мона уже окна потягать за заголовки : D, учитывается правильный порядок отрисовки окон. всё жЫрно вообщем но пока что на начальном этапе. это скрин того что есть на данный момент (хотя можно ещё было накидать кнопок и ещё чего но было влом xD)

вторник, 12 января 2010 г.

И чо я сюда зашёл? : )

Х.з. нафиг мне ещё один блог (в предыдущих дальше одного поста дело както не пошло : D) но гугл какбы заполоняет : Р та и блог мне больше всего понравился оформлением и функционалом. Вообщем, буду постить скрины и демы своего 3Д игрового (и графического ) движка : )