forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Проекты C++ (http://forum.boolean.name/forumdisplay.php?f=56)
-   -   C3D Engine (http://forum.boolean.name/showthread.php?t=16433)

4yBa4Ok 29.05.2012 11:41

Ответ: C3D Engine
 
Я как понял PhysX не скоро....

pozitiffcat 29.05.2012 14:14

Ответ: C3D Engine
 
Да и тем более я на две недели в отпуске и ничего сейчас не делаю, а в инет выхожу с планшетного ПК ))))

pozitiffcat 07.06.2012 15:38

Ответ: C3D Engine
 
Поменял концепцию движка.
Теперь он работает под openGL 2.1 (ибо по моим тестам быстрее directx 9), попрежнему остался казуальным. Только теперь в ядре не будет встроеной физики звука и так далее. Все это будет отдельными библиотеками. И пользователь сам может выбрать что ему использовать. В качестве звука, физики пользователь сможет использовать различные движки, все будет зависеть от того какие dll он подключит к проекту.
Теперь в качестве шейдеров будет использован CG. Никаких FFPшных функций не используется. Нет стандартного шейдера, конечно есть в комплекте пример, но программист свой шейдер делает сам и назначает его по умолчанию, и именно он будет использоваться в программе при создании объектов, пока что какого-то конкретного ToDo нету. Названия семантик, тоже можно менять. Возможность программировния техник в шейдере, под различные версии GLSL.
ТЫТРУБА
Будет детальный туториал
это будет последние кардинальные изменения... я окончательно определился с концепцией

pozitiffcat 08.06.2012 17:08

Ответ: C3D Engine
 
Build 131 - только графическая составляющая + Tutorial из 5 примеров и PDF. Не все возможности описаны в туториале...
скачать движок
PDF
В туториале описывается как создать проект, как рисовать объекты, как написать первый шейдер, как настраивать, как создать модель (сетку) из кода и анимацию (например для написания своего загрузчика), как сделать источник освещения.
Движок предназначен для пользователей среднего уровня. На основе него можно написать свой каркас.. это и есть концепция. Designer Casual Graphics 3D engine.

HolyDel 08.06.2012 17:16

Ответ: C3D Engine
 
Вложений: 1
очень низкий уровень создания меша.
проще писать на гапи.

что думаешь о мобильных платформах?
почему cg а не glsl, если у тебя не мультигапи?

ну и почему capi, если пишешь на плюсах? intellisens хороший помощник в написании кода...

а вообще респект, что-то уже есть :)

примеры, желательно сделать так, чтобы они собирались в папку с бинарниками движка. чтобы небыло мути со всякими не найдена dg3d.dll.

getCamera() - в движке не больше одной камеры?

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

Вложение 17006

pozitiffcat 08.06.2012 19:33

Ответ: C3D Engine
 
Да фрустума еще нет. CG потому что удобно и похоже на HLSL + затачивается под разные версии шейдеров, камерой может выступать любая нода, достаточно вызвать setCamera. Как ты добился такой скорости? HolyDel У тебя даже без фрустума скорость офигенная!
capi, для дальнейшего заюзывания в разных ЯП.
Про мобильные платформы даже не читал... хотя тестировть есть на чем... но как-то не очень заинтерисован...

HolyDel 08.06.2012 19:56

Ответ: C3D Engine
 
Цитата:

Как ты добился такой скорости?
были кучи бенчмарков.

в двух словах ничего лишнего. нет необходимости переключать стейт - не переключаю стейт. нет необходимости счтитать матрицу - не считаю матрицу. и т.д.
ну и еще:
16 битные индексы.
оптимизация под post TnL кэш
оптимизация под картный 32-м байтам размер аттрибутов вершины
оптимизация по переключениям стейтов (для этой демки не актуально)

или ты про скорость твоей демки на моей машине? тут просто i7 и 460GT.

pozitiffcat 08.06.2012 20:12

Ответ: C3D Engine
 
А что дало резкий прирост скорости?

HolyDel 08.06.2012 20:22

Ответ: C3D Engine
 
ничего не дало)) просто я не делал ничего такого, чтобы скорость резко падала, а ты что то сделал)) или шейдер применяешь на каждый дип, или еще что то в етом роде.

быстрее чем рендерит железо рендер все равно идти не будет.
ну и профайлер наш друг, да.

pozitiffcat 08.06.2012 22:00

Ответ: C3D Engine
 
Что-то переключение стейтов совсем не влияют на FPS...

HolyDel 08.06.2012 22:04

Ответ: C3D Engine
 
ну ты бы показал код рендера :)
или профайлером посмотри. не может тупая отрисовка быть такой долгой, где то ты что-то лишнее делаешь :)

pozitiffcat 08.06.2012 22:18

Ответ: C3D Engine
 
Код:

//отрисовка сцены
for(int i=0;i<_nodes.size();i++)
        {
                if(!_nodes[i]->vbo()) continue;
                float px = 0; float py= 0; float pz = 0;
                _nodes[i]->position(px,py,pz,true);//узнаю глобальные координаты (тут тормозит перемножение матриц парента и своей, прям сильно, хз че делать)
                if(_frustum->CubeInFrustum(px,py,pz,_nodes[i]->vbo()->box()))//если попадает во фрустум
                        _nodes[i]->drawVBO(m_view, m_projection);//отрисовка
//отрисовка сетки

//там есть места где сематники в шейдер задаются, но они не влияют на скорость я пробовал коментировать. компилял интеловским компилятором, тоже скорости не дало.. я в тупике, а код твоего движка не понял, да и лень разбираться...

void CVBO::drawBuffers()
{
        if(g_last_drawed_vbo == this)//это если сетка назначена на несколько объектов (быстрее не становится все равно)
        {
                APP->render()->dips_up();
                glDrawElements(GL_TRIANGLES,_cnt_indices,GL_UNSIGNED_INT,0);//short быстрее не делает
                return;
        }

        if(_vbuffer)
        {
                glBindBufferARB( GL_ARRAY_BUFFER_ARB, _vbuffer );
                glVertexPointer( 3, GL_FLOAT, 0, (char *) NULL );
        }
        if(_nbuffer)
        {       
                glBindBufferARB( GL_ARRAY_BUFFER_ARB, _nbuffer );
                glNormalPointer(GL_FLOAT,0,(char*)NULL);
        }
        if(_tbuffer)
        {       
                glBindBufferARB( GL_ARRAY_BUFFER_ARB, _tbuffer );
                glTexCoordPointer( 2, GL_FLOAT, 0, (char *) NULL );
        }
        if(_ibuffer)
        {
                APP->render()->dips_up();
                glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, _ibuffer);
                glDrawElements(GL_TRIANGLES,_cnt_indices,GL_UNSIGNED_INT,0);//short быстрее не делает
                //glBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
        }
        g_last_drawed_vbo = this;
        //glDisableClientState(GL_VERTEX_ARRAY);
        //glDisableClientState(GL_NORMAL_ARRAY);
        //glDisableClientState(GL_TEXTURE_COORD_ARRAY);
        //glDisableClientState(GL_ELEMENT_ARRAY_BUFFER_ARB);
}
        }

пользуюсь математической библиотекой glm, включил поддержку sse2, fps выросло всего на 4 :) + матрицы по ссылке стал передавать... в итоге на 10 fps прирост, мало
поднял fps с 25 до 60 при 4096 кубиках - ксорс на моем железе дает 90, axelinx 250... Unity 60
заметил снижает скорость передача матрицы в шейдер.. а как быть? один шейдер 4096 кубов, следовательно 4096 передач параметров для каждого куба.. как это оптимизировать?

pozitiffcat 09.06.2012 01:41

Ответ: C3D Engine
 
Обновил PDF-ку, добавил урок работы с камерами, рендером в текстуру и пост-эффектами
PDF
Движок - билд 132
Оптимизация под SSE2
добавлен frutsum
некоторые оптимизации ядра

moka 09.06.2012 03:56

Ответ: C3D Engine
 
Не забывай о том что пишешь то ты открытый движок, для разработчика. Следственно нужна качественная документация, и продуманная архитектура и интерфейс, также дружелюбные паттерны. Очень важно то как выглядит код, имена функций и т.п. Этим сейчас многие берут сильно вверх, а именно дружелюбностью. В пример возьми node.js, на нём начять кодить как 2 пальца. И документация содержит тела самих функций - что более чем объясняет какие данные нужны на входе, и как она работает. Также это заставляет разработчика движка следить за кодом очень критично, что требует больше времени, но ведёт к более элегантным решениям.
Также тупо Враппер ГАПИ никому не нужен. Возьми например Unity - это нечто совсем иное, и народу ОЧЕНЬ нравится, новый подход, по другому нужно мыслить - такое продумать не так и просто..

HolyDel 09.06.2012 12:18

Ответ: C3D Engine
 
я хз. я тоже передаю матрицу трансформации на каждый дип, правда одну.
возможно, можно как-то оптимизировать через UBO, но это уже не совсем то. такие вещи скорее нужно будет делать на уровне пользовательского кода через инстансинг.

Цитата:

поднял fps с 25 до 60 при 4096 кубиках
молодец! более чем в два раза ускорил.


Часовой пояс GMT +4, время: 18:02.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot