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 не верные? Для меня лично загадка.

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

0
0

Освещение.

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

update:

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

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

0
0

Light pre-pass renderer

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

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

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

0
0

Update

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

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

0
0

Экспортёр

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

0
0

Шрифты в движке

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

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

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

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

0
0

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 ^____^

0
0

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

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

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

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

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

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

0
0

WIP News (C++)

C++ движок

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

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

g_pEngine.GetPluginServer()->LoadPlugin(“RendererDX10.dll”);

0
0