forum.boolean.name

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

Igor' 02.02.2010 02:52

Exotic Engine
 
Вложений: 1
Привецтвую!

Учавствую на даный момент в разработке MMORPG,лид программером клиента,так получилось что сначало хотели юзать Leadwerks Engine для отрисовки графики,но всплыло много камней,ришил писать свой движок,пишу не только для проекта,движок будет общедоступным и фриварным,кроссплатформеным,юзаю OOP,но функционал планирую как в Leadwerks Engine,так же будет CAPI,тобиш функции.

Пока движок в начальной стадии,умеет проигрывать звук( юзается OpenAL, проигрывается mp3,wav,ogg,потдержка стримминга ),работа с гуи( через MyGUI ),и из 3д графики пока только работа с мешами,и шейдерами( через Cg ),и текстурками,так же работа с MRT через FrameBuffer Objects.

В планах,потдержка OpenCL,Deferred Renderer,физики через Newton.

Код:

void main(){

        Engine* engine = new Engine();


        // Инициализация
        engine->init(800,600);

        // Создаем мир
        World* world = engine->createWorld();

        Camera* camera = engine->createCamera();
        camera->setLocalPosition(float3(0.0,0.0,-4));

        Texture* colorMap = engine->loadTexture("color_map.dds");
        Texture* normalMap = engine->loadTexture("normal_map.dds");

        Material* material = new Material();
        material->setTexture( 0 , colorMap );
        material->setTexture( 1 , normalMap );
        material->setShader( engine->loadShader("mesh_vertex.cg","mesh_textured_bump_pixel.cg",0) );

        Mesh* cube = MeshUtil::getInstance().createCube();//createCube(material);
        cube->paint(material);
        cube->updateTangents();
        cube->updateBounds();
        //cube->scaleMesh( float3(1,0.1f,1) );

        cube->setLocalPosition(float3(0,0,5));
        cube->setLocalRotation(rotation(float3(0,0,0)*DEG2RAD));


        // OpenAL менеджер
        OpenAL* al = engine->getAL();

        // Грузим звук
        Sound* sound = al->createSound("industrial2.mp3",Sound::STREAM||Sound::LOOP);

        // Добавляем в список проигрываемых
        sound->play();

        while( !engine->keyHit(OIS::KC_ESCAPE) ){

                if( engine->keyHit(OIS::KC_F5) )
                        engine->makeScreenshoot();

                // очистка буффера цвета\глубины\стенцила
                engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,float4(0,0.2f,0.3f,1.0f),1.0f,0);
               
                cube->turn(float3(.5f,.5f,.5f));
                // рисуем мир
                engine->updateWorld(0.0f);
                engine->renderWorld(0.0f);

                // Вывод на экран
                engine->flip();
        }
        // заверщение работы движка
        engine->exit();
}


moka 02.02.2010 03:01

Ответ: HxEngine
 
Newton - давно уже не актуален. Почему он?
Удачи! Как с производительностью рендера?

ABTOMAT 02.02.2010 03:10

Ответ: HxEngine
 
Цитата:

В планах,потдержка OpenCL,Deferred Renderer,физики через Newton.
Привецтвую
Ньютон уже лет пять как не рулит
Потдержка OpenCL - это серьёзно

Igor' 02.02.2010 03:10

Ответ: HxEngine
 
Цитата:

Сообщение от MoKa (Сообщение 135627)
Newton - давно уже не актуален. Почему он?
Удачи! Как с производительностью рендера?

Newton - ещё как актуален,дай бог ему здаровья =)
Уж очень мне понравилась в нем система разрушений =)
Вобще ньютон развивается,единственое чего в нем нету это физики мягких тел,надеюсь что пока нету ;)

Ну рендер особо не нагружал,ещё много чего по мимо рендера надо написать.

Igor' 02.02.2010 06:13

Ответ: HxEngine
 
Вложений: 1
Попробывал сделать пост фильтер,вроде получается,пост филтер простой Black & White :)

Код:


struct Input{
  float2 texcoord : TEXCOORD0;
};

struct Output{
  float4 color : COLOR0;
};


void main( in Input In , out Output Out , uniform float4 materialColor , uniform sampler2D texture0 ){

  float saturation = .1f;
  float4 color = tex2D(texture0,In.texcoord);
  float grayscale = color.r * 0.3 + color.g * 0.59 + color.b * 0.11;
  float satgray = clamp(grayscale*(1.0-saturation),0.0,1.0);
  Out.color.x = satgray + saturation * color.x;
  Out.color.y = satgray + saturation * color.y;
  Out.color.z = satgray + saturation * color.z;
  Out.color.w = 1.0f;
}

Код:

void main(){

        Engine* engine = new Engine();


        // Инициализация
        engine->init(800,600);

        // Создаем мир
        World* world = engine->createWorld();

        Camera* camera = engine->createCamera();
        camera->setLocalPosition(float3(0.0,0.0,-4));

        Texture* colorMap = engine->loadTexture("color_map.dds");
        Texture* normalMap = engine->loadTexture("normal_map.dds");

        Material* material = new Material();
        material->setTexture( 0 , colorMap );
        material->setTexture( 1 , normalMap );
        material->setShader( engine->loadShader("mesh_vertex.cg","mesh_textured_bump_pixel.cg",0) );

        Mesh* cube = MeshUtil::getInstance().createCube();//createCube(material);
        cube->paint(material);
        cube->updateTangents();
        cube->updateBounds();
        //cube->scaleMesh( float3(1,0.1f,1) );

        cube->setLocalPosition(float3(0,0,5));
        cube->setLocalRotation(rotation(float3(0,0,0)*DEG2RAD));


        // Создаем всё для пост фильтера
        FrameBuffer* buffer = engine->createBuffer(800,600,FrameBuffer::COLOR0);
        Material* postmaterial = new Material();
        postmaterial->setDepthWrite(false);
        postmaterial->setDepthTest(false,0);
        postmaterial->setCullFace(false);
        postmaterial->setAlphaBlend(false);
        postmaterial->setAlphaTest(false,0);
        postmaterial->setTexture(0,buffer->getColorTarget(0));
        postmaterial->setShader( engine->loadShader("post_quad_vertex.cg","post_disaturation_pixel.cg",0) );


        // OpenAL менеджер
        OpenAL* al = engine->getAL();

        // Грузим звук
        Sound* sound = al->createSound("industrial2.mp3",Sound::STREAM||Sound::LOOP);

        // Добавляем в список проигрываемых
        sound->play();

        while( !engine->keyHit(OIS::KC_ESCAPE) ){

                if( engine->keyHit(OIS::KC_F5) )
                        engine->makeScreenshoot();

                // устанавливаем рендер в буффер
                engine->setFrameBuffer( buffer);

                // очистка буффера цвета\глубины\стенцила
                engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,float4(0,0.2f,0.3f,1.0f),1.0f,0);
               
                cube->turn(float3(.5f,.5f,.5f));
                // рисуем мир
                engine->updateWorld(0.0f);
                engine->renderWorld(0.0f);

                // устанавливаем рендер в бек буффер
                engine->setFrameBuffer(0);

                engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,float4(0,0.2f,0.3f,1.0f),1.0f,0);
                       
       
                // рисуем квад
                postmaterial->bind();
                PostQuad::getInstance().render();
                postmaterial->unbind();
               

                // Вывод на экран
                engine->flip();
        }
        // заверщение работы движка
        engine->exit();
}

Движок кст держит Geometry Shader, планирую сделать адаптивную тессиляцию.
Также забыл сказать,есть потдержка мультисеймплов и сжатие данных( архивы ).

IGR 02.02.2010 11:58

Ответ: HxEngine
 
а проект мморпг комерческий ??
Россия ?? Украина ??

Igor' 02.02.2010 13:41

Ответ: HxEngine
 
Цитата:

Сообщение от IGR (Сообщение 135655)
а проект мморпг комерческий ??
Россия ?? Украина ??

NDA ;)

SBJoker 02.02.2010 13:47

Ответ: HxEngine
 
Т.е. первый пост не подпадает под NDA?

З.Ы, в первом посте ты рассказал больше чем тебя спросили потом.

Igor' 02.02.2010 14:35

Ответ: HxEngine
 
Цитата:

Сообщение от SBJoker (Сообщение 135667)
Т.е. первый пост не подпадает под NDA?

З.Ы, в первом посте ты рассказал больше чем тебя спросили потом.

В первом посте я сказал что работаю над MMORPG,не сказал комерческий\не комерческий проект и т.д и т.п. Просто работаю с серьёзными людьми.

SBJoker 02.02.2010 14:55

Ответ: HxEngine
 
Ты непонял мой сарказм, на мой взгляд информация о том что делается какая то там ММОРПГ более важна чем в какой стране и то коммерческая ли она, потому упоминание NDA скорее позерство чем реальная необходимость.

Но если чо то мы прониклись уважением, так держать!

FDsagizi 02.02.2010 21:15

Ответ: HxEngine
 
опять Твенти файв...

Какой это по счету уже "Дви-Жек" ?

HolyDel 02.02.2010 21:57

Ответ: HxEngine
 
GAPI? Судя по контексту OpenGL (OpenAL а не DirectSound и FBO а не RTT да и Geometry Shaders наверное пока еще рано писать на DX, так как WinVista Win7 only)

сколько уже идет разработка? сколько разработчиков?

Цитата:

// очистка буффера цвета\глубины\стенцила
engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,flo at4(0,0.2f,0.3f,1.0f),1.0f,0);
имхо слишком низко. да и семантика кривовата по моему мнению. отчистить движек можно от загруженных ресурсов. а тут отчистка экрана (окна, полотна, фреймбуффера) и т.д.

Цитата:

engine->updateWorld(0.0f);
какой именно? все? активные?
почему не world->update(0.0f); (если в скобках твининг, то почему не 1.0?)

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

а вообще, так держать!
очень удачен синтаксис, понятен с первого взгляда (на 95%).
буду следить за обновлениями, надеюсь все у вас получится.

Igor' 03.02.2010 03:01

Ответ: HxEngine
 
Вложений: 1
Цитата:

Сообщение от HolyDel (Сообщение 135721)
GAPI? Судя по контексту OpenGL (OpenAL а не DirectSound и FBO а не RTT да и Geometry Shaders наверное пока еще рано писать на DX, так как WinVista Win7 only)

сколько уже идет разработка? сколько разработчиков?


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


какой именно? все? активные?
почему не world->update(0.0f); (если в скобках твининг, то почему не 1.0?)

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

а вообще, так держать!
очень удачен синтаксис, понятен с первого взгляда (на 95%).
буду следить за обновлениями, надеюсь все у вас получится.

Используется OpenGL,расширения версии 2.1.
В OpenGL есть расширение "ARB_geometry_shader".

engine->clear,для очистки текущего буффера.
engine->update\render World( deltaTime ),для очистки текущего мира,мир можно менять командой engine->setWorld.
для выгрузки всех ресурсов используется engine->exit();


Вобще есть уже первые нароботки по Deferred Renderer.
Использование DeferredRenderer:

Код:


void main(){

        Engine* engine = new Engine();


        // Инициализация
        engine->init(800,600);



        // Создаем мир
        World* world = engine->createWorld();

        engine->initDeferredRenderer();

        Camera* camera = engine->createCamera();
        camera->setLocalPosition(float3(0.0,0.0,-4));

        PointLight* point0 = engine->createPointLight();
        point0->setRange(200.0f);
        point0->setLocalPosition(float3(0,50,-30));

        Texture* colorMap = engine->loadTexture("color_map.dds");
        Texture* normalMap = engine->loadTexture("normal_map.dds");

        Material* material = new Material();
        material->setTexture( 0 , colorMap );
        material->setTexture( 1 , normalMap );
        material->setShader( engine->loadShader("mesh_vertex.cg","deferred_mesh_textured_bump_pixel.cg",0) );

        Mesh* cube = MeshUtil::getInstance().createCube();//createCube(material);
        cube->paint(material);
        cube->updateTangents();
        cube->updateBounds();
        //cube->scaleMesh( float3(1,0.1f,1) );

        cube->setLocalPosition(float3(0,0,5));
        cube->setLocalRotation(rotation(float3(0,0,0)*DEG2RAD));


        // Создаем всё для пост фильтера
        FrameBuffer* buffer = engine->createBuffer(800,600,FrameBuffer::COLOR0|FrameBuffer::COLOR1|FrameBuffer::DEPTH);


        // OpenAL менеджер
        OpenAL* al = engine->getAL();

        // Грузим звук
        Sound* sound = al->createSound("industrial2.mp3",Sound::STREAM||Sound::LOOP);

        // Добавляем в список проигрываемых
        sound->play();

        while( !engine->keyHit(OIS::KC_ESCAPE) ){

                if( engine->keyHit(OIS::KC_F5) )
                        engine->makeScreenshoot();

                // устанавливаем рендер в буффер
                engine->setFrameBuffer( buffer);
       

                // очистка буффера цвета\глубины\стенцила
                engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,float4(0,0.2f,0.3f,1.0f),1.0f,0);
               
                cube->turn(float3(0,.5f,0));
                // рисуем мир
                engine->updateWorld(0.0f);
                engine->renderWorld(0.0f);

                // устанавливаем рендер в бек буффер
                engine->setFrameBuffer(0);

                engine->clear(Engine::CLEAR_COLOR|Engine::CLEAR_DEPTH,float4(0,0.2f,0.3f,1.0f),1.0f,0);
                       
       
                DeferredRenderer::getInstance().render(buffer,camera,0.0f);

                // Вывод на экран
                engine->flip();
        }
        // заверщение работы движка
        engine->exit();
}

Point Light шейдер:
Код:


struct Input{
  float2 texcoord : TEXCOORD0;
};

struct Output{
  float4 color    : COLOR0;
};


void main( in Input In , out Output Out , uniform sampler2D texture0 , uniform sampler2D texture1 , uniform sampler2D texture2 , uniform float4x4 invViewProj ,  uniform float3 lightPosition , uniform float lightRange , uniform float3 cameraPosition ){

  float depth = tex2D(texture0,In.texcoord).x;
  float4 albedo = tex2D(texture1,In.texcoord);
     
  Out.color = albedo;
 
  if( depth >= 1.0f )
      return;
 

  float3 normal = tex2D(texture2,In.texcoord).xyz;
 
  // screen space coord
  float4 position;
  position.x = In.texcoord.x * 2.0f - 1.0f;
  position.y = -(In.texcoord.y * 2.0f - 1.0f);
  position.z = depth;
  position.w = 1.0f;
  position = mul( position , invViewProj );
  position /= position.w;
 
  // light vector
  float3 light_vector = normalize( lightPosition - position.xyz );
 
  // half vector
  float3 half_vector = normalize((cameraPosition - position.xyz) + (lightPosition - position.xyz));
 
  // light specular
  float specular  = 1.0f * pow(dot(half_vector,normal), 100);
 
  // light attenuation
  float attenuation = saturate(1.0f - distance(position.xyz, lightPosition) / lightRange);
 
  // final color
  Out.color = ( albedo * clamp(dot(normal,light_vector),0.0f,1.0f) ) + specular * attenuation;
}

Кст из потдерживаемых форматов текстур - tga,dds,png,jpg.

Igor' 03.02.2010 07:25

Ответ: HxEngine
 
Вобщем в DS,готовы Point\Directional источники(пока без теней),и ещё Ambient Light.
Исчу нормальную модельку для тестов пока,ибо из проекта пока низя ничего публично показывать( да и пока из моделей только персонажи ).

Igor' 04.02.2010 21:00

Ответ: HxEngine
 
Будет ешё один тип шейдеров,Compute Shader,как DirectCompute в D3D,будет работать на OpenCL.

Igor' 05.02.2010 01:15

Ответ: HxEngine
 
Совсем скоро будет релиз первой версии движка,как только сделаю:

1) Проверку пересечения луча,с чем либо Entity* World::traceRay( const float3& orig , const float3& dir , RayHit& hit , float max_distance )
2) Сделаю класс спрайта.

З.Ы. Первое уже готово :)

Igor' 05.02.2010 06:21

Ответ: HxEngine
 
Вот первое SDK - http://file.qip.ru/file/118768712/a376422d/HxSDK.html

Mr_F_ 05.02.2010 14:17

Ответ: HxEngine
 

Цитата:

Учавствую на даный момент в разработке MMORPG
это определённо плохая идея

IGR 05.02.2010 14:33

Ответ: HxEngine
 
Цитата:

это определённо плохая идея
почему ??

ABTOMAT 05.02.2010 15:41

Ответ: HxEngine
 
Просто плохая. Поверь.

Igor' 05.02.2010 16:37

Ответ: HxEngine
 
Цитата:

Сообщение от ABTOMAT (Сообщение 136088)
Просто плохая. Поверь.

Этот скриншот был сделан на третем дне разработки движка,что ты хотел увидить то там? :) Если не секрет конечно...

У меня знакомый работает тоже над MMORPG,так у них 5 программистов на клиент,и что из этого? За девять месяцев у них уровень на который наложены лайтмепы( вобще ни единого динамического эффекта ),ну да можно персонажем помегать уже,пострелять из одной пушки,так заметь они за деньги пишут,а у нас пока на энтузиазме до демы,по серверу уже есть наработки( логон сервер , выбор мира и т.д )...

IGR 05.02.2010 16:42

Ответ: HxEngine
 
Цитата:

Просто плохая. Поверь.
lol !! мы тоже занимаемся разработкой мморпг !!
шо ж мне делать после ваших советов !!:-D

на самом деле это оч хорошая весчь !!
ммо оч популярны !! и неверроятно прибыльны !! :)

Dream 05.02.2010 16:46

Ответ: HxEngine
 
Хватит уже всем говрить что MMO - это нереально, это для нубов, это тупо. Если человек делает, или пишите по теме, или лучше уже пройдите мимо.
2IGR
Цитата:

прибыльны
бугагагашеньки))))

Igor' 05.02.2010 16:47

Ответ: HxEngine
 
Цитата:

Сообщение от Mr_F_ (Сообщение 136078)



это определённо плохая идея

Тыб уж вобще полчал,хотябы кубик без ксорса отрисуй....

IGR 05.02.2010 16:49

Ответ: HxEngine
 
Цитата:

бугагагашеньки))))
не понял юмора !!

ЗЫЖ может все таки не будем засорять ЭТУ тему !!
или путь каждый останется при своем мнении и давайте откроем НОВУЮ в болтовне !!

jimon 05.02.2010 17:07

Ответ: HxEngine
 
посмотрел исходники, есть много минусов
1) комментарии, вы где ?
без них даже бесплатно двиг не нужен (в общем-то без редакторов любой двиг не нужен)
2) friend, отсутствие namespaceов, плохой стиль
3) архитектура блиц3д, посмотри как сделан огр или небула, забудьте вы этот чертов подход блиц3д, его нету в современном мире

ps. зачем эта тема ? писать "ыыы пацаны я сделал метод donothing" ? показывать лучше готовую работу или работу которая прошла некоторые этапы

Igor' 05.02.2010 17:24

Ответ: HxEngine
 
Цитата:

Сообщение от jimon (Сообщение 136103)
посмотрел исходники, есть много минусов
1) комментарии, вы где ?
без них даже бесплатно двиг не нужен (в общем-то без редакторов любой двиг не нужен)
2) friend, отсутствие namespaceов, плохой стиль
3) архитектура блиц3д, посмотри как сделан огр или небула, забудьте вы этот чертов подход блиц3д, его нету в современном мире

ps. зачем эта тема ? писать "ыыы пацаны я сделал метод donothing" ? показывать лучше готовую работу или работу которая прошла некоторые этапы

Вобще,работа уже прошла много этапов имено по движку,единственое что нету пока физики и анимации( хотя потдержка скиннинга уже есть ).

Есть экспортёр.

Не соглашусь что отсуцтвие namespace,это плохой стиль...

Зачем коментарии,если двиг понятен,коментарии нужны в коде таких движков как Unreal Engine,Ogre,ибо там без бутылки не разобратся,темболее будет справка...

Dream 05.02.2010 17:28

Ответ: HxEngine
 
Коментарии нужны чтобы можно было определить что делает конкретный блок кода. а не лезть в справку, просматривать всю логику.

Нейм спейсы дают лучшее разбиение на логические части, ИМХО

jimon 05.02.2010 18:15

Ответ: HxEngine
 
Igor'
о doxygen слышал ?

Igor' 05.02.2010 18:52

Ответ: HxEngine
 
Цитата:

Сообщение от jimon (Сообщение 136112)
Igor'
о doxygen слышал ?

Cлышал,и даже юзал.

Igor' 05.02.2010 18:57

Ответ: HxEngine
 
Вобще директор требует в движке возможность генерации лайтмепов,так что сейчас буду заниматся этим.

Igor' 06.02.2010 11:56

Ответ: HxEngine
 
Делаю лайтмаппер,теперь у Surface есть функция


Код:


struct BakeConfig
{
        int textureSizeW;
        int textureSizeH;
        int pixelsPerUnit;

        bool bakeDirectIllumination;
        bool bakeGlobalIllumination;
        bool bakeAmbientOcclusion;
};

Texture* bakeTexture( const BakeConfig& bake_cfg );

Кст в сдк который я уже выложил есть экзешник HxTest.exe,там загружена модель Sponza Atrium,можно раставлять источники света на пробел( сначало надо выбрать цвет источника 1,2,3,4 ).

BlackOut 06.02.2010 19:49

Ответ: HxEngine
 
Вложений: 2
Цитата:

Кст в сдк который я уже выложил есть экзешник HxTest.exe,там загружена модель Sponza Atrium,можно раставлять источники света на пробел( сначало надо выбрать цвет источника 1,2,3,4 ).
Кстати этого я увидить не могу

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

Система:OS M$ XP SP3; intel Celeron 2.27ГГц; 768 Мб RAM; nvidia GeForce FX 5200 (и таких динозавров, поверь еще много =) встречал хуже...)

Igor' 06.02.2010 21:33

Ответ: HxEngine
 
Цитата:

Сообщение от BlackOut (Сообщение 136340)
Кстати этого я увидить не могу

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

Система:OS M$ XP SP3; intel Celeron 2.27ГГц; 768 Мб RAM; nvidia GeForce FX 5200 (и таких динозавров, поверь еще много =) встречал хуже...)

Вай :),ну будет и Forward рендер.

Igor' 07.02.2010 00:31

Ответ: HxEngine
 
Вобщем по лайтмеперу,будет генерится для каждого сурфейса тексту сама лайтмепа(RGB),и текстура для нормал маппинга(R) с направлением пришедше света.

Пока готова генерация только лайтмепы,с запеканием Direct Illumination.

moka 07.02.2010 00:46

Ответ: HxEngine
 
Движок сам делает развёртку, и сохраняет для геометрии во второй слой UV?

Igor' 07.02.2010 01:12

Ответ: HxEngine
 
Цитата:

Сообщение от MoKa (Сообщение 136396)
Движок сам делает развёртку, и сохраняет для геометрии во второй слой UV?

Пока только в максе,потом может быть нарою алгоритм,и сделаю своё.

BlackOut 07.02.2010 01:15

Ответ: HxEngine
 
Igor' от куда знания черпаешь? и так как это будет MMORPG, какие у тебя мысли в плане сетевого движка?

Igor' 07.02.2010 01:17

Ответ: HxEngine
 
Цитата:

Сообщение от BlackOut (Сообщение 136402)
Igor' от куда знания черпаешь?

Вобще если постаратся то гугл многое может расказать :).

Цитата:

Сообщение от BlackOut (Сообщение 136402)
Igor' и так как это будет MMORPG, какие у тебя мысли в плане сетевого движка?

Ну вобще с этим я не замарачиваюсь,у нас есть серверный программист,он этим будет заниматься =)

Igor' 07.02.2010 05:32

Ответ: HxEngine
 
Вобщем лайтмепер юзается так:

Код:

if( engine->keyHit( OIS::KC_Q ) ){
                        for( int i = 0; i < ground->getNumSurface(); i++ ){
                                Surface* s = ground->getSurface(i);
                                BakeConfig config;
                                config.bakeDirectIllumination = true; // запеч направленое освещение
                                config.bakeAmbientOcclusion = false; // запеч амбиент окклюижн
                                config.bakeGlobalIllumination = false; // запеч не направленое освещение
                                config.causticPhotonMap = 0; // фотоная карта для каустики
                                config.globalPhotonMap = 0; // фотоная карта для GI
                                config.pixelsPerUnit = 16; // кол-во пикселей на метр
                                config.textureSize = 128; // изначальное разрешение текстуры
                                config.marge_range = 8; // бордюрка в 16 пикселей
                                config.marge_smooth = 0.0f; // сглаживание бордюрки
                                char name[128];
                                sprintf(name,"lightmaps\\ground_surface_%d.jpg",i);
                                strcpy(config.output_file,name); // имя файла текстуры если нужна сохранить лайтмапу в файл.
                                Texture* lm = s->bakeTexture(config);
                                s->getMaterial()->setTexture(1,lm);
                        }
                        Engine::getInstance().message("baked %d lights!",ground->getRootWorld()->getLightList().size());
                }

Есть ещё флаги bakeMask( запись маски UV в файл )\bakeUV( запись UV в файл ).

moka 07.02.2010 05:40

Ответ: HxEngine
 
Не терпится посмотреть на скрины результатов рендера лайтмап.

IGR 07.02.2010 14:25

Ответ: HxEngine
 
Цитата:

Сообщение от MoKa (Сообщение 136425)
Не терпится посмотреть на скрины результатов рендера лайтмап.

+1 !! Охота взглянуть на результат !!
Т.к. У меня то жифорс ФХ 5200 !! :)

Igor' 08.02.2010 01:06

Ответ: HxEngine
 
Цитата:

Сообщение от MoKa (Сообщение 136425)
Не терпится посмотреть на скрины результатов рендера лайтмап.

В ближайшем времени,я щас делаю оптимизацию трасировки лучей,ибо слишком тормозно работает просчёт лайтмепов из за этого...
Так же мб добавлю стримминг текстур,хотя это ещё не факт.

Кст за место Newton буду юзать Bullet,скорей всего.

moka 08.02.2010 04:04

Ответ: HxEngine
 
Bullet? Он вообще не коммерческий ведь.. Да и не потдерживается более?
Что мешает юзать PhysX?

Igor' 08.02.2010 04:24

Ответ: HxEngine
 
Цитата:

Сообщение от MoKa (Сообщение 136556)
Bullet? Он вообще не коммерческий ведь.. Да и не потдерживается более?
Что мешает юзать PhysX?

Bullet бесплатный и опенсурсный,потдерживается и ещё как,на гуглкод была размещена новая версия 20 часов назад,он держит оптимизацию на CUDA,в нем есть SoftBodies,Cloth. А физикс теперь менее доступный,да и возможно вобще скоро платный будет,и закрытый. Выводы делай сам =)

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

Igor' 08.02.2010 11:25

Ответ: HxEngine
 
Ещё добавил в функцию оптимизации weld вершин,очень интересно,было 15к вершин,после weld стало 2762...

Igor' 08.02.2010 14:52

Ответ: HxEngine
 
Вложений: 1
Встроил Bullet,пока не полностью,но уже можно создавать статические объекты и твёрдые тела.

Создание кубиков:

Код:

                if( engine->keyHit( OIS::KC_B ) ){
                        Mesh* cube = MeshUtil::getInstance().createCube();
                        cube->setLocalPosition( camera->getWorldPosition() );
                        cube->scaleMesh(float3(2,2,2));
                        cube->getSurface(0)->setMaterial(material);
                        RigidBody* body = Physic::getInstance().createRigidBody(cube,10.0f,true);
                }


IGR 08.02.2010 17:19

Ответ: HxEngine
 
Цитата:

Сообщение от Igor' (Сообщение 136576)
Ещё добавил в функцию оптимизации weld вершин,очень интересно,было 15к вершин,после weld стало 2762...

оу, забавно ... что за weld ?? подились ссылками на инфу !! :)

Dream 08.02.2010 17:39

Ответ: HxEngine
 
2 Igor'
конфиг кампа в студию:)

ABTOMAT 08.02.2010 18:11

Ответ: HxEngine
 
Цитата:

Ещё добавил в функцию оптимизации weld вершин,очень интересно,было 15к вершин,после weld стало 2762...
Ага, чтоб заср*ть всё освещение.
Несколько вершин в одних координатах делают не просто так.

Igor' 09.02.2010 04:45

Ответ: HxEngine
 
Цитата:

Сообщение от ABTOMAT (Сообщение 136605)
Ага, чтоб заср*ть всё освещение.
Несколько вершин в одних координатах делают не просто так.

Нет,проверка идёт не только одинаковое положение вершины но и проверяется нормаль и текстурные координаты,так что всё нормально с освещением будет ;)

Цитата:

Сообщение от DimasSup (Сообщение 136601)
2 Igor'
конфиг кампа в студию:)

Core 2 Duo 2GHz @ 2Ghz,GeForce 9600 GSO.

Цитата:

Сообщение от IGR (Сообщение 136598)
оу, забавно ... что за weld ?? подились ссылками на инфу !! :)

Просто удаление одинаковых вершин.

Igor' 09.02.2010 07:13

Ответ: HxEngine
 
Добавил возможность написания своих типов интитий:

Код:

        void registerEntityClass( const char* className , EntityConstructor constructor );

        Entity* createEntity( const char* className , Entity* parent = 0 );

        template< class Type >
        Type* createEntityT( const char* className , Entity* parent = 0 ){
                return static_cast<Type*>( createEntity(className,parent) );
        }

Типа:

Код:

class MyEntity : public Entity
{
public:
        ENTITY_DECL(MyEntity);

        MyEntity() : Entity(){}
        ~MyEntity(){}
};

Entity* MyEntityConstructor(){
        return new MyEntity();
}

Engine::getInstance().registerEntityClass("MyEntity",MyEntityConstructor);

И после можно спокойно её создавать:

Код:

MyEntity* ment = Engine::getInstance().createEntityT<MyEntity>("MyEntity");

Igor' 11.02.2010 18:11

Ответ: HxEngine
 
Добавил мешу функции void subdivide( int level )\void tesselate( int level ).
Низнаю выкладывать ли новый sdk.

Taugeshtu 11.02.2010 21:25

Ответ: HxEngine
 
Категорически нет.

moka 11.02.2010 21:28

Ответ: HxEngine
 
Рабочих примеров, и демок нужно побольше. Затем уже и скринов - это завлекает, новых пользователей. И уже приведя всё в порядок, можно выкладывать SDK :)

Igor' 12.02.2010 00:06

Ответ: HxEngine
 
Цитата:

Сообщение от MoKa (Сообщение 136944)
Рабочих примеров, и демок нужно побольше. Затем уже и скринов - это завлекает, новых пользователей. И уже приведя всё в порядок, можно выкладывать SDK :)

Да,я этим уже занимаюсь,возможно и видео уроки будут.

Igor' 13.02.2010 08:58

Ответ: HxEngine
 
Cкачал кое-как Autodesk FBX SDK,начал установку и о боже ему надо 1гб спейса на моем HDD,установил,посмотрел,вроде более менее понятно всё,сделаю наверно загрузку FBX ещё.

Igor' 13.02.2010 20:20

Ответ: HxEngine
 
Вложений: 1
Вот немного занялся лайтмепером:

moka 13.02.2010 20:22

Ответ: HxEngine
 
Артифактов немало, но уже весьма приятно.
Учитывай, что тени вблизи, должны быть намного чётче.

Igor' 13.02.2010 20:32

Ответ: HxEngine
 
Цитата:

Сообщение от MoKa (Сообщение 137257)
Артифактов немало, но уже весьма приятно.
Учитывай, что тени вблизи, должны быть намного чётче.

Ну так это ещё без Global Illumination ;)

moka 13.02.2010 21:01

Ответ: HxEngine
 
Igor', угу я вижу, это чистый Directional. Но его нужно хорошенько допилить.
Смотрю ты кастишь только от бэкфейсов? А почему не от обоих? Понимаю, может упасть скорость просчёта, зато качество вырастит на много :) Артифакты пропадут..

Igor' 13.02.2010 21:24

Ответ: HxEngine
 
Цитата:

Сообщение от MoKa (Сообщение 137282)
Igor', угу я вижу, это чистый Directional. Но его нужно хорошенько допилить.
Смотрю ты кастишь только от бэкфейсов? А почему не от обоих? Понимаю, может упасть скорость просчёта, зато качество вырастит на много :) Артифакты пропадут..

Хз,попробую.

Igor' 14.02.2010 02:04

Ответ: HxEngine
 
Дописал класс фотоной карты,можно будет сохранять\загружать карту.
Пишу трасировщик глобальных фотонов,после буду писать трасировщик фотонов для каустики...

Igor' 14.02.2010 07:21

Ответ: HxEngine
 
Вложений: 2
Вот зачатки Global Illumination,но пока без Final Gethering...


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

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