А вот и я с небольшим набором апдейтов )
В последнее время разработка идёт не очень быстро... тут много факторов, но основной, наверно, отсутствие нормальной работы (в моём городке сложно найти адекватную, а за 10 тысяч в месяц админом работать.. не очень хочется : ) Правда зовут в Питер.. но чота, блин, страхово. Страхово не от переезда, а скорее всего от того, что "не пройду собеседование". Вот откуда эта неуверенность? Пздц.
Итак, хватит лирики, переходим к делу:
1. Добавлен класс ActionMap в игровой движок! Теперь все действия игрока мапятся именно в нём. Происходит это примерно так:
actionMap.BindAction(ACTION_FORWARD, KEY_Q);
actionMap.BindAction(ACTION_BACKWARD, KEY_E);
actionMap.BindAction(ACTION_JUMP, KEY_SPACE);
actionMap.BindAction(ACTION_ACCELERATION, KEY_LSHIFT);
actionMap.BindAction(ACTION_FIRE, KEY_MOUSE_LEFT);
actionMap.BindAction(ACTION_USE, KEY_F);
actionMap.BindAction(ACTION_TURNLR, KEY_AXIS_X);
actionMap.BindAction(ACTION_TURNUD, KEY_AXIS_Y);
Неудобно!? Бред! Очень удобно! Удобно как программно прописывать биндинги, так и загружать их и менять в рантайме!
2. Но одними биндингами сыт не будешь : ) Для управления персонажем используется новый класс ActionBuffer (название само за себя говорит). движок чекает инпут и по инпуту, подглядывая в ActionMap добавляет новые действия в ActionBuffer который позже отправляется игроку на выполнение. Всё очень просто : )
вот код ActionBuffer (есть у кого предложения оптимизации КОДА?)
#ifndef ActionBuffer_h__
#define ActionBuffer_h__
#include "Action.h"
#define NUM_SLICES 4
class ActionBuffer
{
private:
int buffer[NUM_SLICES];
public:
void AddAction(int action)
{
action--;
int slice = action >> 5;
action -= (slice << 5);
buffer[slice] |= (1 << action);
}
void RemoveAction(int action)
{
action--;
int slice = action >> 5;
action -= (slice << 5);
buffer[slice] &= ~action;
}
void Reset()
{
memset(buffer, 0, sizeof(GameAction) * NUM_SLICES);
}
bool CheckAction(int action)
{
action--;
int slice = action >> 5;
action -= (slice << 5);
return (buffer[slice] & (1 << action)) !=0;
}
};
#endif // ActionBuffer_h__
какбы конец кода.
Ну, ещё я пофиксил многие баги физики, научил капсулу игрока не падать, правильно коллайдиться. Также сделал управление камерой персонажа (можно переключать first person/third person виды). Собсно теперь могу спокойно персом бегать по уровню : ) Осталось решить одну маленькую назойливую проблему - прохождение камеры сквозь стены : ( Оно заметно когда включен режим обзора "от третьего лица".
Как решать? - думаю надо сделать для камеры физический объект - сферу! Путь коллайдится с миром, а я буду в соответствии со сферой поправлять позицию камеры.
Пока вот так.
понедельник, 21 марта 2011 г.
пятница, 11 марта 2011 г.
ЫЫЫ
Пофиксил баг с тенями! Теперь PCF корректней работает + собсно бага нет. Он слишком глупый. чтобы я его называл : )

Uploaded with ImageShack.us
Ну какбы вот : )
На ебанутые яркие блики не обращаемс внимания ^___^ это я ещё BRDF для материалов не прикрутил к отложенному освещению
Uploaded with ImageShack.us
Ну какбы вот : )
На ебанутые яркие блики не обращаемс внимания ^___^ это я ещё BRDF для материалов не прикрутил к отложенному освещению
Небольшой апдейт
[+] написал экспортёр физической геометрии для 3DS Max
[+] сделал автоматическую загрузку и поддержку физической геометрии
[*] Вернул отключенные тени (были проблемы с ними, правда 1 ещё осталась)
Всё вроде хорошо, только тени ипут моск! Почему-то есть такой баг, как на скрине:

Uploaded with ImageShack.us
Возле ног перса виден баг тени. Пока х.з. в чём проблема. Первое что подумал - у меня слишком большой epsilon для тени! и реально очень большой стоял! Сделал таким маленьким, что артефакты начали проявляться, но баг не исчез : \ Сейчас буду искать причину.
[+] сделал автоматическую загрузку и поддержку физической геометрии
[*] Вернул отключенные тени (были проблемы с ними, правда 1 ещё осталась)
Всё вроде хорошо, только тени ипут моск! Почему-то есть такой баг, как на скрине:
Uploaded with ImageShack.us
Возле ног перса виден баг тени. Пока х.з. в чём проблема. Первое что подумал - у меня слишком большой epsilon для тени! и реально очень большой стоял! Сделал таким маленьким, что артефакты начали проявляться, но баг не исчез : \ Сейчас буду искать причину.
четверг, 10 марта 2011 г.
Небольшой апдейт.
Сделал фабрику для сущностей и собсно их загрузку из файла XML.
Пока это выглядит так:
miranda = EntityFactory::me()->BuildEntity(AS_STRING("root/Data/Entities/unnamed_entity.xml"), pGraphics);
miranda->GetTransform()->SetPosition(Vector3D(0.0f,50.5f,0.0f));
gameWorld->AddEntity(miranda);
Пока это выглядит так:
miranda = EntityFactory::me()->BuildEntity(AS_STRING("root/Data/Entities/unnamed_entity.xml"), pGraphics);
miranda->GetTransform()->SetPosition(Vector3D(0.0f,50.5f,0.0f));
gameWorld->AddEntity(miranda);
четверг, 3 марта 2011 г.
Время...
Время.. оно как долбаный песок - ускользает сквозь пальцы, не удержать его..
Казалось бы "что мне стОит написать игру", ведь это не так сложно! И это действительно так! Когда ты знаешь что делаешь, вопрос о сложности отходит на второй план а сам процесс разработки становится более.. эм.. творческим, как ещё сказать.. И да, писать игры не сложно, вот только это "творчество" незаметно съедает огромное количество времени! И это напрягает.. в итоге времени не хватает ни на "игру" ни на что другое
Хреново это всё, нужно будет подумать о путях оптимизации расходов времени, его ведь так мало... а хотя, бывает ли его много?
***********************************
Кстати, допилил класс IMeshObject Теперь рендеринг мешей (любых - хоть статичных, хоть со скиннингом, хоть процедурных) - стал гораздо более быстрым и удобным! Количество кода рендеринга сократилось как минимум в 2х раза, что не может не радовать. Правда появился какой-то баг с BoundingBox-ом объекта, но это не проблема - сейчас найду : )
Казалось бы "что мне стОит написать игру", ведь это не так сложно! И это действительно так! Когда ты знаешь что делаешь, вопрос о сложности отходит на второй план а сам процесс разработки становится более.. эм.. творческим, как ещё сказать.. И да, писать игры не сложно, вот только это "творчество" незаметно съедает огромное количество времени! И это напрягает.. в итоге времени не хватает ни на "игру" ни на что другое
Хреново это всё, нужно будет подумать о путях оптимизации расходов времени, его ведь так мало... а хотя, бывает ли его много?
***********************************
Кстати, допилил класс IMeshObject Теперь рендеринг мешей (любых - хоть статичных, хоть со скиннингом, хоть процедурных) - стал гораздо более быстрым и удобным! Количество кода рендеринга сократилось как минимум в 2х раза, что не может не радовать. Правда появился какой-то баг с BoundingBox-ом объекта, но это не проблема - сейчас найду : )
четверг, 24 февраля 2011 г.
WIP
Пофиксил экспортёр - стал немного быстрее + экспортит объекты, состоящие из нескольких отдельных мешей.
Переписываю класс mesh-а. Изначально это был один общий класс. Сейчас сижу - разделаю. Будет общий интерфейс IMesh через который все виды мешей можжно будет одинаково рендерить, апдейтить. Давно пора было сделать. Например мне нужны некоторые методы для работы со скелетной анимацией (со скелетом И с вершинами) ну и т.п. зачем эти методы внутри статичного меша? Не нужны! Так же прикручу процедурные меши, что будет достаточно просто : ) А процедурные мне очень нужны (геометрические шейдеры не спасут).
Загрузил персонажа Miranda из Mass Effect 2 ^____^

где-то баг в загрузке материала о_О Глаза у миранды чёрные, гхм
ах да, убрал ещё добавление ambient освещения из всех типов лайтов. Было не пр
72;вильно сделано - каждый лайт добавлял свою долю ambient! так, добавив 10 лайтов радиусом 1 мм можно было засветить всю сцену о-О. Добавил новый тип источника света - AmbientLight который не нужно добавлять, который рендерится автоматом в зависимости от настроек сцены. Теперь освещение правильное.
Переписываю класс mesh-а. Изначально это был один общий класс. Сейчас сижу - разделаю. Будет общий интерфейс IMesh через который все виды мешей можжно будет одинаково рендерить, апдейтить. Давно пора было сделать. Например мне нужны некоторые методы для работы со скелетной анимацией (со скелетом И с вершинами) ну и т.п. зачем эти методы внутри статичного меша? Не нужны! Так же прикручу процедурные меши, что будет достаточно просто : ) А процедурные мне очень нужны (геометрические шейдеры не спасут).
Загрузил персонажа Miranda из Mass Effect 2 ^____^

где-то баг в загрузке материала о_О Глаза у миранды чёрные, гхм
ах да, убрал ещё добавление ambient освещения из всех типов лайтов. Было не пр
72;вильно сделано - каждый лайт добавлял свою долю ambient! так, добавив 10 лайтов радиусом 1 мм можно было засветить всю сцену о-О. Добавил новый тип источника света - AmbientLight который не нужно добавлять, который рендерится автоматом в зависимости от настроек сцены. Теперь освещение правильное.
понедельник, 14 февраля 2011 г.
Итоги работы
Так, что же я на этом С++ смог наваять на данный момент:
Графический двиг:
статическая библиоткека, реализовано:
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#
Игровой движок:
только начал! Прикрутил физику к сущностям. Всё ))
пока всё : ( Мда, не густо..
Графический двиг:
статическая библиоткека, реализовано:
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#
Игровой движок:
только начал! Прикрутил физику к сущностям. Всё ))
пока всё : ( Мда, не густо..
суббота, 12 февраля 2011 г.
Подписаться на:
Сообщения (Atom)