Category Без рубрики

Hardcore wanted

Софтрендеры писал и не раз… уже не вставляет. Хочется чего-то более хардкорного и полезного! Вот в мою больную голову неведомым мне образом закатилась мысль – а не написать ли мне эмулятор чего-нибудь? :3 Но так как я ничерта не смыслю в этом деле – решил начать с простого ) С эмуляции DENDY (nes). Собсно да – начинаю писать эмулятор ) В свободное время… 9ох ё.. и как эти процессорры то эмулировать…)

: P

0
0

PIMPL

Дело было вечером, делать было нечего : ) Почитал об этой идиоме (pointer to implementation). Мне как-то раньше объясняли что это такое! Да так объяснили, что я чуть не поседел, решив, что это что-то мегозаумное, жёсткое в реализации и вообще только для программеров over9000 уровня )

Погуглил, прочитал за пару минут первую попавшуюся статью и.. ОМГ, дак тут то идея, которая будет понятна любому школьнику ))) Оказалось – мне СЛИШКОМ извращённо объясняли и ещё я сам идею юзал уже давно, правда слегка не так, а по-своему :3

Переписал систему ввода с каноничной идеей PIMPL ) Впринципе чуть-чуть красивше смотрится, чем раньше ^__^

А, кстати, обновил железо чуть-чуть : ) Заменил видеокарту! Раньше стояла gf 8600 gts, а теперь купил и поставил gf GTX 550 Ti ! Жырнота! Разница огромная!! Особенно это заметно при массивной выборке текстур – так в 8600 скорость выборки была примерно 8 гигатекселей в секунду, теперь же 28 гигатекселей : ) И те тяжёлые места в моих сценах, где ФПС падал до 30 теперь выдают не меньше 250 ФПС!

Блин, такая видяха расслабляет : Как бы не наговнокодить с ней 😀 Что ещё радует кроме высокой производительности – полная аппаратная поддержка DirectX11! О да!! Можно пощупать тесселяцию и динамическую линковку шейдеров ^^ Да и собсно писать полноценный именно DX11 рендерер для движка : )

Ах да, насчёт рендеров. У меня в движке реализован мультирендеринг. Тоесть могу рендерить сцену хоть через DX9-11, хоть через OpenGl, да хоть через софтварный рендерер : )) 9кстати новая версия софтрендера сейчас в разработке – юзаю блочную растеризацию и MMX). Но есть тут мааааленькая проблема – линковка gAPI библиотек :

В поле Additional dependencies настроек линковки проекта я прописываю нужные lib-ы, они линкуются к библиотеке проекта и всё прекрасно работает! НО! Представим ситуацию, когда у меня реализован рендеринг на DX9 и глупо запрещать запуск на Windows XP. Как, собсно, запускать на XP мой проект?? Когда он слинкован с DX11 либами. которых в XP может и не быть! о_О

Раньше я юзал M$-only фичу #pragma comment (lib, “blablabla.lib”) и, впринципе, указав дефайнами набор рендереров можно было отключить какую угодно версию DX и для XP собрать версию без DX11. Но это смотрится больше как костыль : (

Единственным годным решением пока вижу вынесение рендереров в отдельные DLL как плагины и подгрузку нужной библиотеки уже во время зщапуска руками : ) Кстати, так у меня было изначально! И систему плагинов я НЕ удалил ; )

Но, думаю, пока рано над этим заморачиваться! Рендереры описаны в отдельных классах в отдельных файлах ) Поэтому перенести в DLL – не составит особого труда.

The end. Ушёл дальше покорять мир!

0
0

Raytracing

Накидал по-быстрому трассировщик пути : )

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

Не суперское качество, конечно, но ждать ещё несколько минут/часов стало влом – остановил : )

0
0

Небольшой BugFix

Нашёл различные баги в рендеринге. Большинство из них из за копипаста! О_О Копипаст – ЗЛО!! Ррр, надо отучиваться.

Теперь ни каких варнингов от DX-а нет, ФПС значительно поднялся, а волосы у меня стали ещё более “мягкие и шелковистые”(с)

За модельку интерьера спасибо Аврелию, любезно выложившему её на форуме gamedev.ru

0
0

Апдейт шрифтов

Пофиксил свою тупую генерацию шрифтов! Они выглядели стрёмно (похоже будто отключено сглаживание) а если заюзать светлый шрифт на светлом фоне, то вообще адское УГ.

Вот апдейтю предыдущий скрин только с правильным рендерингом шрифта!

0
0

GUI – начало

Занялся собсно GUI. Пока сделал нормальную систему сообщений, менеджер слоёв, оконный менеджер, рендеринг текста и несколько видов различных контролов.

Вот скрин с 3 из них – “надпись”, “текстовое поле”, “кнопка”. Всё кликабельно, настраиваемо. На всё что можно/нужно привязаны события. Есть поддержка скинов.

0
0

Небольшой апдейт по прогрессу

Давно не отписывался – надо бы сообщить ВСЕМУ МИРУ о моём [говно] движке! (ведь весь мир же ждал этого, правда? *_*)

Итак, начнём перечисление скромных апдейтов:

1. Пофиксил прозрачность. Есть и альфа тест и альфа бленд. Работают вроде годно : ) Ну, если честно не совсем пофиксил )) Альфа бленд всё ещё криво освещается. Дело в том, что у меня же Light PrePass рендеринг, который не дружит с прозрачностью. В следствие чего все объекты с полупрозрачностью надо рисовать форвард-рендерингом, что влечёт за собой написание ещё одного рендера. Жесть. Не, ну я конечно могу костылей понаставить и за пол часа сделать рендеринг стекляшек, но мы ж, поработители мира – такие, ага, суровые ) Надо сразу делать “качественно”. Лол!

2. Пофиксил компилятор ресурсов. Теперь всё компилится удобно! : )

3. Полностью переписал экспортёр моделей. Теперь для модели в 16 к треугольников экспорт идёт не 30 секунд а 1-2 секунды. жЪр!

4. Экспортнул анимацию.. загрузил – чотко рендерится ) но в самом конце трека анимации небольшой рывок есть. Кажется я знаю в чём дело и пофиксю на неделе.

5. Начал писать GUI! Посмотрел я wxWidgets, MYGUI, CEGUI – да нуу. Это “не то”. Лучше я свой напишу!
Кстати по случаю GUI собрался и сделал нормально события/делегаты (как в шарпе почти). Ну, вот например создание кнопки и аттач к ней метода.

//add button
GUIButton* button = new GUIButton(gui);
button->SetPosition(Vec2i(50,50));
button->SetWidth(200);
button->SetHeight(100);
button->SetBackColor(Vec4f(1.0f,0.0f,0.0f,0.7f));
mainMenu->AddChild(button);

button->Event_MouseLeave+=NewDelegate(this, &CrysisGame::BT1Leaved);
button->Event_MouseClick+=NewDelegate(this, &CrysisGame::BT1Click);
Ну и остальные бла-бла-бла методы.. выпонели же, да?

и сами методы:

void BT1Click(GUIWindow* sender, int b)
{
static_cast(sender)->SetCaption(STR(“Click”));
}
void BT1Leaved(GUIWindow* sender, int b)
{
static_cast(sender)->SetCaption(STR(“Leaved”));
}

7. Добавил рендеринг в текстуру параметров поверхности! И заметил значительный спад FPS : ( Зато теперь могу делать материалы с разными BRDF!!!! ^______^

Кстати купил Crysis 2! : Сначала жутко демотивировал меня а теперь обратный эффект – мотивирует делать более качественную графику )

Ох, пойду я спать… вчера отмечал 2 днюхи… fuckin’ headache!

0
0