forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Clear Engine (Понятный движок) (http://forum.boolean.name/showthread.php?t=18702)

pozitiffcat 12.11.2013 00:20

Clear Engine (Понятный движок)
 
Наконец-то получилась более или менее нормальная архитектура, без лишних заморочек.

Clear engine позиционирует себя, как легковесный, переносимый трехмерный движок для написания игр на языке c++. Прежде всего уделается внимание на легкое использование движка.
Движок имеет мало зависимостей сторонних библиотек, и поэтому может быть легко перенесен на другие платформы.

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

На данный момент компилируется под Windows, Linux, Mac OS X, iOS.
В альфа стадии умеет:
Шейдеры
Jpeg
Скелетная анимация
Встроенные шейдеры
Встроенное освещение
Делегаты для работы с объектами
Камеры

Не начинал еще писать доку.
Теоретически, уже что-то можно на нем делать.
В планах сделать билд систему, что бы было очень легко компилировать под различные системы, бинарный формат данных модели. Загрузка TGA, думаю других более сложных форматов не будет, скорей всего будет написан свой формат. Есть конвертер ms3d в формат движка с анимациями, но я забыл включить его в архив, кому надо зареквестите (все рвно никто пробывать не будет).
Шейдер для нормал мапов хочу включить из коробки.. ток надо бы оптимизировать.. на iphone4 3 кубика уже падает fps. Скелетка из 50ти костей в иерархии и 2к вершинами дает 20 фпс, если разместить из 10 штук одновременно (фрустума нет еще)

Хочу из движка сделать что нибудь легковесное и простое, подобного, бесплатного ничего не нашел...

На сайте есть скомпиленая демка для винды x64

P.S. есть такая мысль, что-то типа сотрудничества, вы пишите приложения, я пилю фичи, которые вы реквестите, конечно если они вписываются в концепцию движка...

Посмотреть видео:
Сайт движка: http://malcdevelop.org/

moka 12.11.2013 01:16

Ответ: Clear Engine (Понятный движок)
 
Молодцом! Много попыток, таки выйдет что-то.

Только сразу вопрос: почему XML?
Это же ужасно тяжеловесный формат, и читаемость в нём для 3д формата ну вообще не нужно.
Даже JSON и то лучше был бы, или ещё лучше - BSON.
Но XML - это весьма в прошлом тем более для такого типа данных..

Давай больше скринов и видео!

jimon 12.11.2013 01:34

Ответ: Clear Engine (Понятный движок)
 
Вложений: 1
вроде неплохо как для первого движка, правда довольно наивный подход к архитектуре

Цитата:

Хочу из движка сделать что нибудь легковесное и простое, подобного, бесплатного ничего не нашел...
попробуй выбросить наследование на данном этапе вообще, вместо ILoader + CJpegLoader сделать просто ImageLoader который уже сам поймет что это за изображение и как его загружать

интерфейс INode в принципе вроде-как компонентно-ориентированый, зачем ему тогда быть интерфейсом ? просто сделай его Node и пили туда компоненты в стиле mesh, sprite, sound, script и тд

IScene ? IMesh ? ISkeleton ?? ITexture ??? и что у тебя будет CScene, CFastScene, CVeryFastScene ?! :crazy: легковесное и простое оно не про ооп головного мозга, оно про YAGNI


HolyDel 12.11.2013 07:10

Ответ: Clear Engine (Понятный движок)
 
пример синтаксиса в студию?

Цитата:

думаю других более сложных форматов не будет
dds, ktx, нативные мобильные форматы

Цитата:

попробуй выбросить наследование на данном этапе вообще, вместо ILoader + CJpegLoader сделать просто ImageLoader который уже сам поймет что это за изображение и как его загружать
да ну. как минимум CTgaLoader у него точно будет. А потом может и еще тыща форматов.

Цитата:

IScene ? IMesh ? ISkeleton ?? ITexture ??? и что у тебя будет CScene, CFastScene, CVeryFastScene ?!
http://forum.boolean.name/showpost.p...8&postcount=30

pozitiffcat 12.11.2013 08:53

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от jimon (Сообщение 270036)
вроде неплохо как для первого движка, правда довольно наивный подход к архитектуре


попробуй выбросить наследование на данном этапе вообще, вместо ILoader + CJpegLoader сделать просто ImageLoader который уже сам поймет что это за изображение и как его загружать

интерфейс INode в принципе вроде-как компонентно-ориентированый, зачем ему тогда быть интерфейсом ? просто сделай его Node и пили туда компоненты в стиле mesh, sprite, sound, script и тд

IScene ? IMesh ? ISkeleton ?? ITexture ??? и что у тебя будет CScene, CFastScene, CVeryFastScene ?! :crazy: легковесное и простое оно не про ооп головного мозга, оно про YAGNI


Далеко не первый движок, и я долго шел к этой архитектуре, и на мой взгляд она должна быть именно такой, я еще CCore хочу разделить не в компайл тайме, а сделать стратегии

pozitiffcat 12.11.2013 08:54

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от moka (Сообщение 270034)
Молодцом! Много попыток, таки выйдет что-то.

Только сразу вопрос: почему XML?
Это же ужасно тяжеловесный формат, и читаемость в нём для 3д формата ну вообще не нужно.
Даже JSON и то лучше был бы, или ещё лучше - BSON.
Но XML - это весьма в прошлом тем более для такого типа данных..

Давай больше скринов и видео!

Иду по стопам Ogre3D так сказать )))
PS: насчет скринов, я хочу запилить няшную демо сценку в стиле HL2, правда моделер из мя никакой ))) и систему пост процессинга запилить надо для пущей няшности, пока что нечего показывать, разве что анимированного чувачка ))) Могу под ubuntu x64 собрать кому интересно, или вечером под мак ось, когда дома появлюсь...

pozitiffcat 12.11.2013 09:07

Ответ: Clear Engine (Понятный движок)
 
Вложений: 1
Пример синтаксиса:
Точка вкода в приложение не main, а main_ce(), т.к. в разных системах в разных местах точка входа, например в андроид там нужно входит уже после инициализации приложения. Далее:
PHP код:

// подсовываем драйвер рендера и размер окна (размер окна игнорится на мобилках)
auto core Ce::createCore(Ce::createDriver(), glm::vec2(800480));
// создаем сценку
auto scene core->createScene();
// настраиваем параметры
scene->setPerspective(45core->windowSize().core->windowSize().y1.0100.0);
// точка обзора (может быть INode, тогда этот view matrix игнорится и берется из INode, это как бы дефолтный обзор)
scene->setViewMatrix(glm::lookAt(glm::vec3(00, -5), glm::vec3(000), glm::vec3(010)));
// загружаем аним модельку
std::shared_ptr<Ce::INodenode2 core->loadNode("dwarf.xml");
node2->setParent(scene->rootNode()); // можно scene->rootNode()->addNode(node2);
node2->setPosition(glm::vec3(0, -0.50));
node2->setScale(glm::vec3(0.030.030.03));
node2->setAnimation(0300true10);
// свет, светом может быть любая нода, что самое крутое можно модельку заставить быть источником света
auto light core->createPreparedNode(Ce::E_PN_CUBE);
Ce::SLightInfo lightInfo;
lightInfo.ambient glm::vec4(0.00.00.01.0);
lightInfo.diffuse glm::vec4(1.0);
light->enableLighting(lightInfo);
light->setParent(scene->rootNode());
light->setPosition(glm::vec3(00, -2));
light->setScale(glm::vec3(0.10.10.1));
core->start(); 

Код на pastebin

запилил нормал мапы из коробки, достаточно просто назначить текстуру нормалей на объект

Это конечно самый простой пример. Более сложный во вложении.
Подумал, надо в вершину запихать тангенсы и бинормали, чтобы нормал мапы быстрее считать, не нравится мне их производительность на мобилках.
https://bitbucket.org/pozitiffcat/clear_engine

оффтоп: блин когда запилят подсветку синтаксиса для c++

Mr_F_ 12.11.2013 12:25

Ответ: Clear Engine (Понятный движок)
 
Цитата:

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

Цитата:

Встроенное освещение
как много источников света обрабатываешь?

Цитата:

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

Цитата:

Есть конвертер ms3d
кто юзает мс3д вообще? тебе нужна лёгкость использования - давай из major 3д пакетов экспорт, достаточно из FBX хотя бы.

Цитата:

scene->setViewMatrix
ну это движок же, всё таки нужна какая-то реализация камеры имхо, которой трансформ задаётся как обычной ноде, а не так. и получается камеру нельзя запарентить?

----
Цитата:

Ce::SLightInfo lightInfo;
glm::lookAt(glm::vec3(0, 0, -5), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0))
ну и не по теме, просто интересно, неужели я единственный человек, который не любит писать много букв и называет классы короткими словами типа "Light", делает using namespace чтобы не перебивать его 150 раз и делает функции, принимающие сразу цифорки без троекратных "glm::vec3"? подобную многобуквенную хрень нередко вижу в чужом коде, а потом хвалятся что у них движок весит 5 мегабайт.

pozitiffcat 12.11.2013 12:59

Ответ: Clear Engine (Понятный движок)
 
Цитата:

проще байтики писать, чем громоздкий хмл. и грузить байтики проще.
xml проще руками поменять, например имя текстуры, а так да, байтики лучше.
Цитата:

как много источников света обрабатываешь?
из коробки один источник, но в шейдер заносятся бесконечное кол-во при рендере сцены, можно запилить потом чтоб ограничивал и включал только те, что рядом как в Огре
Цитата:

к тому же либы на всё это есть
хочу помаксимуму избавится от зависимостей, оставив лишь жизненно необходимые. (так же потом можно выпилить glm, но хз оправдано ли это)
Цитата:

кто юзает мс3д вообще? тебе нужна лёгкость использования - давай из major 3д пакетов экспорт, достаточно из FBX хотя бы.
ну я этим еще не занимался, естественно надо же )))
Код:

ну это движок же, всё таки нужна какая-то реализация камеры имхо
там можно задать ноду в качестве камеры

Насчет не по теме. Ну этому кому как удобней, мне больше нравится без using namespace...

Цитата:

подобную многобуквенную хрень нередко вижу в чужом коде, а потом хвалятся что у них движок весит 5 мегабайт.
я этим хвалиться не собираюсь, моя цель это легковесность.

Mr_F_ 12.11.2013 13:10

Ответ: Clear Engine (Понятный движок)
 
Цитата:

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

jimon 12.11.2013 13:55

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от HolyDel (Сообщение 270039)

ну дык, 2007 год, я после этого еще 6 лет движки писал, и понял что не в ооп счастье :crazy: мудрость она такая

pozitiffcat 12.11.2013 13:56

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Mr_F_ (Сообщение 270052)
ну вертексы руками менять точно никто не будет, наверное есть смысл тогда разделить описание материалов и геометрию.

Ну это потом запилится, пока так. Естественно я об этом подумал :rolleyes:

pozitiffcat 12.11.2013 13:58

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от jimon (Сообщение 270055)
ну дык, 2007 год, я после этого еще 6 лет движки писал, и понял что не в ооп счастье :crazy: мудрость она такая

я разделил на интерфейсы, что бы скрыть реализацию, пилить pimpl не хочется, как то мне это костыльновато видится, да и pimp больше подходит для скрытия реализации объектов создаваемых на стеке. имхо

HolyDel 12.11.2013 14:11

Ответ: Clear Engine (Понятный движок)
 
Цитата:

ну дык, 2007 год, я после этого еще 6 лет движки писал, и понял что не в ооп счастье мудрость она такая
и к чему пришел щас?
я пока не нашел более удобный способ разделения интерфейсов и реализации.

pozitiffcat 12.11.2013 14:22

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от HolyDel (Сообщение 270058)
и к чему пришел щас?
я пока не нашел более удобный способ разделения интерфейсов и реализации.

ну он имеет ввиду что для движков это лишнее. На опыте я понял что все таки лучше отделять интерфейс, иначе потом каша в коде получается

jimon 12.11.2013 16:13

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от HolyDel (Сообщение 270058)
и к чему пришел щас?
я пока не нашел более удобный способ разделения интерфейсов и реализации.

1) data driven & data oriented design

скажем если гейм\левел дизайнер не может взять ваш движок и вставить туда спрайт или скрипт сам - нафиг такой движок нужен

2) everything is data pipeline

если движок сам не может себе автоматически конвертить контент быстро и удобно - нафиг надо, юнити умеет потому юнити и популярное

3) object as pure aggregation

http://cowboyprogramming.com/2007/01...your-heirachy/

node ? component ? не нужно

4) SoA

вы все еще пишите float x,y,z ? не нужно

5) хардкод техник рендер пайплайна, как в UE, CryEngine и прочих

делать возможность впилить свое HBAO на уровне данных ? ой, а как вы его сделаете на мобилках ? рендер техники это code path forever

6) data flow programming, reactive programming для некоторых вещей наподобие пайплайна рендера и шейдеров

императивные подходы не всегда решают однако

7) clear C11 only

если подходить со стороны интерфейсов в data driven движке то ооп там не сильно надо, ибо это тупо плеер данных, как пример могу показать интерфейс моей библиотеки которая агрегирует разные социальные сдк под мобилки : https://github.com/Goortom/dd-publis...d_publishing.h, посмотрите насколько он чистый и простой, даже почти не нужна справка

или например интерфейс библиотеки загрузки изобрежаний : http://pastebin.com/xbdcZPC8 (пока не в паблике), посмотрите насколько он простой, нужно добавить к нему всего две функции и вы получите сверх мощную либу которая умеет грузить данные напрямую через memory mapped files

C11 это мощнейший язык, после того как перенесли потоки и атомарные операции в библиотеку мы почти полностью отвязались от POSIX, теперь стало возможно делать библиотеки без убер фреймворка, и писать их на чистом C11

и вообще


8) dual quaternions graph

как показывает практика - скейл объектов это очень вырожденный случай, и скейл в самом дереве трансформов не нужен, потому можем отказаться от матриц вообще и сильно ускорить все вычисления

9) lua

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

10) heap ? malloc ? new ?

тупо не нужно, вообще, просим страницы виртуальной памяти напрямую у ОС

11) everything is async, no callbacks

если можно сделать без коллбеков - делаем без коллбеков

ps. плюс еще куча мудрости, я так сходу и не вспомню =)

Mr_F_ 12.11.2013 16:27

Ответ: Clear Engine (Понятный движок)
 
Цитата:

если можно сделать без коллбеков - делаем без коллбеков
мм как? либо коллбеки, либо какая-то проверяющая хрень с интервалом ожидает готовности.

jimon 12.11.2013 16:58

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Mr_F_ (Сообщение 270064)
мм как? либо коллбеки, либо какая-то проверяющая хрень с интервалом ожидает готовности.

представь какая каша в коде получается если у тебя async file io в несколько потоков и коллбек после загрузки, ты просто погрузнешь в мьютексах чтобы правильно потом отработать загруженные файлы

а с проверяющей "хренью" у тебя получается чистый lock-free код, ты обрабатываешь результаты асинхронных операций по мере возможности, и никаких тебе мьютексов

в таком lock-free коде если ты встречаешь место где тебе нужно просто подождать - используешь await подобный паттерн, как в c# http://msdn.microsoft.com/en-us/libr.../hh156528.aspx

pozitiffcat 12.11.2013 18:07

Ответ: Clear Engine (Понятный движок)
 
jimon, я хз про что ты тут распинаешься, но помоему все эти убер фичи, которые умеет Unity не вписываются в концепцию моего движка, да даже если я и захочу что-то запилить, разве составит проблем внести новую абстракцию? Зачем же тогда умные книжки про ООП? Для того, что бы потом не столкнуться с проблемами. Как же Ogre3D, он очень сильно ООП и популярен.

Цитата:

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

jimon 12.11.2013 18:57

Ответ: Clear Engine (Понятный движок)
 
предлагаешь геймдизайнеру ставить вижуал студию и писать код ?

pozitiffcat 12.11.2013 19:15

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от jimon (Сообщение 270072)
предлагаешь геймдизайнеру ставить вижуал студию и писать код ?

я тебя не понимаю. Игру пишет программист, причем тут гейм дизайнер...
и да dod нет смысла использовать. Ну с экономим 50% производительности, но это при условии, что мы заюзаем 100500 нод на сцене.
На самом деле никто такого использовать не будет. Unity игры вообще вон на C# пишут с наследованиями и ничего норм работает.

Samodelkin 12.11.2013 19:40

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от pozitiffcat (Сообщение 270073)
я тебя не понимаю. Игру пишет программист, причем тут гейм дизайнер...

Ты недооцениваешь геймдизайнеров, они и не на такое способны.

pozitiffcat 12.11.2013 19:53

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Samodelkin (Сообщение 270074)
Ты недооцениваешь геймдизайнеров, они и не на такое способны.

ну вы скажите как должно быть ))) я походу не сильно в теме гейм дизайна

jimon 12.11.2013 20:24

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от pozitiffcat (Сообщение 270076)
ну вы скажите как должно быть ))) я походу не сильно в теме гейм дизайна

я изначально написал что это довольно наивный подход, то что я описал в большом посте нужно для движка который будет использоваться командой для коммерческих с четкими сроками, ибо например писанина геймкода на ц\цпп может привести к битой памяти и трудноотловимым ошибкам, собсно весь большой пост я описал чтобы чуть-чуть поделится добытой мудростью :crazy:

движки разные бывают, какой бы ты не писал - это уже опыт и это хорошо =)

pozitiffcat 12.11.2013 20:36

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от jimon (Сообщение 270078)
я изначально написал что это довольно наивный подход, то что я описал в большом посте нужно для движка который будет использоваться командой для коммерческих с четкими сроками, ибо например писанина геймкода на ц\цпп может привести к битой памяти и трудноотловимым ошибкам, собсно весь большой пост я описал чтобы чуть-чуть поделится добытой мудростью :crazy:

движки разные бывают, какой бы ты не писал - это уже опыт и это хорошо =)

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

pozitiffcat 12.11.2013 21:37

Ответ: Clear Engine (Понятный движок)
 
Запилил работу с пост эффектами.
PHP код:

scene->addPredefinedPostProcessProgram(E_PP_GLOW); 


Mr_F_ 12.11.2013 22:00

Ответ: Clear Engine (Понятный движок)
 
Цитата:

scene->addPredefinedPostProcessProgram(E_PP_GLOW);
а свои шейдеры как?

pozitiffcat 12.11.2013 22:09

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Mr_F_ (Сообщение 270099)
а свои шейдеры как?

scene->addPostProcessProgram(ownProgram);

Mr_F_ 12.11.2013 23:34

Ответ: Clear Engine (Понятный движок)
 
и куда они рендерить будут, как отрендерить сколько-то пассов одними и потом заюзать в другом, как сделать даунсемпл в цепочку в 2 раза более маленьких текс до 1 пикселя (например, яркость экрана для хдр подсчитать), как дела с MSAA, где вообще выбираем РТ, ну и т. д.

pozitiffcat 12.11.2013 23:46

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Mr_F_ (Сообщение 270112)
и куда они рендерить будут, как отрендерить сколько-то пассов одними и потом заюзать в другом, как сделать даунсемпл в цепочку в 2 раза более маленьких текс до 1 пикселя (например, яркость экрана для хдр подсчитать), как дела с MSAA, где вообще выбираем РТ, ну и т. д.

несколько пассов можно, рендерится все в фрейм буффер, итог выводится в бэк буффер. Тут получается линейно проходит по всем эффектам. Насчет яркости подсчитать, я такое не делал еще, что нам мешает перед пассом задать параметр шейдеру впринципе получив его из текущей картинки? Ну MSAA можно запилить если надо, какие там могут возникнуть проблемы-то...

moka 13.11.2013 00:42

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от jimon (Сообщение 270066)
представь какая каша в коде получается если у тебя async file io в несколько потоков и коллбек после загрузки, ты просто погрузнешь в мьютексах чтобы правильно потом отработать загруженные файлы

а с проверяющей "хренью" у тебя получается чистый lock-free код, ты обрабатываешь результаты асинхронных операций по мере возможности, и никаких тебе мьютексов

в таком lock-free коде если ты встречаешь место где тебе нужно просто подождать - используешь await подобный паттерн, как в c# http://msdn.microsoft.com/en-us/libr.../hh156528.aspx

libuv в такой ситуации отличное решение. У тебя есть главный поток логики, позади есть процессы но в контролируемых условиях, и обрабатываются независимо, когда готовы - сообщат тебе.
Посмотри как асинхронность устроена в node.js на основе libuv. По сути это одна очередь функций, и задние потоки о которых пользователю платформой не нужно заботиться.
Скейлиться во всех отношениях, никаких lock'ов и простоев в ожиданиях - когда будет готово, нам сообщят.

jimon 13.11.2013 00:47

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от moka (Сообщение 270119)
libuv в такой ситуации отличное решение. У тебя есть главный поток логики, позади есть процессы но в контролируемых условиях, и обрабатываются независимо, когда готовы - сообщат тебе.
Посмотри как асинхронность устроена в node.js на основе libuv. По сути это одна очередь функций, и задние потоки о которых пользователю платформой не нужно заботиться.
Скейлиться во всех отношениях, никаких lock'ов и простоев в ожиданиях - когда будет готово, нам сообщят.

посмотри как сделана асинхроность в C# : http://msdn.microsoft.com/en-us/libr.../hh191443.aspx и http://habrahabr.ru/post/139734/

moka 13.11.2013 00:50

Ответ: Clear Engine (Понятный движок)
 
await (C#) == yield (ECMA6)
Но в 98% он не нужен, т.к. есть нормальная event-driven парадигма, и promises.

pozitiffcat 13.11.2013 01:21

Ответ: Clear Engine (Понятный движок)
 
никто случайно не сталкивался, что на айфоне glViewport нужно указывать двойного размера? Если задать параметры что приезжают в
Код:

CGRect screenBound = [[UIScreen mainScreen] bounds];
то вьюпорт будет на четверть экрана - тоесть в 2 раза меньше по обоим осям...

jimon 13.11.2013 01:31

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от moka (Сообщение 270123)
await (C#) == yield (ECMA6)
Но в 98% он не нужен, т.к. есть нормальная event-driven парадигма, и promises.

wut ? yield он и в C# yield

Цитата:

Сообщение от pozitiffcat (Сообщение 270129)
никто случайно не сталкивался, что на айфоне glViewport нужно указывать двойного размера? Если задать параметры что приезжают в
Код:

CGRect screenBound = [[UIScreen mainScreen] bounds];
то вьюпорт будет на четверть экрана - тоесть в 2 раза меньше по обоим осям...

self.contentScaleFactor = 2.0f; у вьюшки которая рисует твой GL контекст

SBJoker 13.11.2013 01:31

Ответ: Clear Engine (Понятный движок)
 
ЕМНИП там размеры интерфейса в виртуальных единицах. На ретине отношение виртуальных единиц к пикселям 1:2

pozitiffcat 13.11.2013 01:38

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от SBJoker (Сообщение 270131)
ЕМНИП там размеры интерфейса в виртуальных единицах. На ретине отношение виртуальных единиц к пикселям 1:2

задал единичку, но изображение стало какое-то гавеное, и вообще как правильно сделать-то?

SBJoker 13.11.2013 01:42

Ответ: Clear Engine (Понятный движок)
 
Узнавать у системы текущий скейл фактор, и его и устанавливать. Или домножать размеры буфера.

pozitiffcat 13.11.2013 01:46

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от SBJoker (Сообщение 270134)
Узнавать у системы текущий скейл фактор, и его и устанавливать. Или домножать размеры буфера.

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

Mr_F_ 13.11.2013 03:04

Ответ: Clear Engine (Понятный движок)
 
Цитата:

какие там могут возникнуть проблемы-то...
ты не представляешь как их много может возникнуть с ним :)

moka 13.11.2013 04:06

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от jimon (Сообщение 270130)
wut ? yield он и в C# yield

RTFM!
yield (C#) != yield (ECMA6)

Цитата:

yield is your await keyword.
http://bjouhier.wordpress.com/2013/0...in-javascript/

jimon 13.11.2013 05:20

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от moka (Сообщение 270139)

я вот не понимаю тебя, yield return в C# и yield в ECMA6 делает одно и тоже

а именно : c#
Цитата:

public class PowersOf2
{
static void Main()
{
// Display powers of 2 up to the exponent of 8:
foreach (int i in Power(2, 8 ))
{
Console.Write("{0} ", i);
}
}

public static System.Collections.IEnumerable Power(int number, int exponent)
{
int result = 1;

for (int i = 0; i < exponent; i++)
{
result = result * number;
yield return result;
}
}

// Output: 2 4 8 16 32 64 128 256
}
и js1.7 :

Цитата:

function fib() {
var i = 0, j = 1;
while (true) {
yield i;
var t = i;
i = j;
j += t;
}
}

var g = fib();
for (var i = 0; i < 10; i++) {
console.log(g.next());
}
скажи мне в чем разница ? ну кроме вызова .next в js
они полностью одинаковы по функционалу и семантике использования

вот по той ссылке что ты добавил чувак сделал супер либу которая с помощью yield повторяет функционал аналогичный await

если я с помощью микроскопа забиваю гвоздь, то микроскоп можно назвать молотком, но от этого микроскоп микроскопом не перестает быть, так что никогда не путай утилитарную фунциональность, семантику и контекст :)

moka 13.11.2013 05:38

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от jimon (Сообщение 270144)
я вот не понимаю тебя, yield return в C# и yield в ECMA6 делает одно и тоже

а именно : c#


и js1.7 :



скажи мне в чем разница ? ну кроме вызова .next в js
они полностью одинаковы по функционалу и семантике использования

вот по той ссылке что ты добавил чувак сделал супер либу которая с помощью yield повторяет функционал аналогичный await

если я с помощью микроскопа забиваю гвоздь, то микроскоп можно назвать молотком, но от этого микроскоп микроскопом не перестает быть, так что никогда не путай утилитарную фунциональность, семантику и контекст :)

Проблема в коллизии имён тут. Но суть yield'а в JS именно в применении как await'а, т.к. это асинхронная парадигма, вот почитай тут:
http://blog.alexmaccaw.com/how-yield...transform-node

Суть как раз использования генераторов в асинхронной модели - идентична вашему await в C#.

pozitiffcat 13.11.2013 10:21

Ответ: Clear Engine (Понятный движок)
 
хм.. похоже про сильные пост-эффекты на мобилках можно забыть. Код типа
Код:

for( i= -4 ;i < 4; i++)
{
      for (j = -3; j < 3; j++)
      {
          sum += texture2D(TEXTURE_DIFFUSE, texcoord + vec2(j, i)*0.004) * 0.27;
      }
}

выдает охринительные тормоза. Слишком много выборок, ну а как иначе!

Mr_F_ 13.11.2013 12:22

Ответ: Clear Engine (Понятный движок)
 
Цитата:

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

pozitiffcat 13.11.2013 12:25

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Mr_F_ (Сообщение 270152)
блюр можно делать в 2 пасса, сначала горизонтал, а потом вертикал, будет меньше семплов (но больше записей в текстуру).

да я попробывал там прирост в 5-7 фпс.. ниочем. Не ужели до сихпор в GLES < 3 не придумали шустрый шейдер для этого ))))

jimon 13.11.2013 13:51

Ответ: Clear Engine (Понятный движок)
 
так делай блюр с другим ядром, можно попробовать просто 5 выборок для начала, если мало будет то 9 : центральная и потом одна или две слева, справа, сверху и снизу

pozitiffcat 13.11.2013 15:41

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от jimon (Сообщение 270157)
так делай блюр с другим ядром, можно попробовать просто 5 выборок для начала, если мало будет то 9 : центральная и потом одна или две слева, справа, сверху и снизу

мега уродство получается тогда )))

Добавил Render target, думаю простое использование...
PHP код:

// создание таргета
    
Ce::SRenderTarget target;
    
// камера таргета
    
target.node camera;
    
target.texture core->driver()->createTexture();
    
// данные о текстуре
    
Ce::STextureData texData;
    
texData.buffer 0texData.width 256texData.height 256texData.textureFormat Ce::E_TF_RGB;
    
target.texture->setData(texData);
    
// добавляем в ядро (вот все-таки хз, может и на сцену надо бы, а не в ядро)
    
core->addRenderTarget(target);

    
// задаем текстуру таргета какому то объекту
    
someNode->material(0).textureDiffuse target.texture


HolyDel 13.11.2013 18:02

Ответ: Clear Engine (Понятный движок)
 
MRT незабудь

pozitiffcat 13.11.2013 20:44

Ответ: Clear Engine (Понятный движок)
 
Пример использования MRT, на не поддерживаемом устройстве не будет работать MRT, и шейдер с gl_FragData[1] не скомпилируется, ну это и понятно. (libc++abi.dylib: terminating with uncaught exception of type std::runtime_error: IShader compilation failed: ERROR: 0:6: Index 1 beyond bounds (size 1))

PHP код:

Ce::SRenderTarget target;
    
target.node light;
    
// тут мы добавляем две текстуры в таргет
    
target.textures.push_back(core->driver()->createTexture());
    
target.textures.push_back(core->driver()->createTexture());
    
Ce::STextureData texData;
    
texData.buffer 0texData.width 64texData.height 64texData.textureFormat Ce::E_TF_RGB;
    
target.textures[0]->setData(texData);
    
target.textures[1]->setData(texData);
    
// тут мы задаем шейдер, которым будет рисоваться сцена (в моем случае я рисую все красным в 0 текстуру и зеленым цветом в 1 текстуру, чтобы проверить МРТ)
    
target.programOverload program;
    
core->addRenderTarget(target);

    
auto monitor core->createPreparedNode(Ce::E_PN_CUBE);
    
monitor->setPosition(glm::vec3(200));
    
scene->rootNode()->addChild(monitor);
    
// тут 0 или 1 индекс текстуры на котором показывать отрендереную сцену
    
monitor->material(0).textureDiffuse target.textures[0]; 


pozitiffcat 26.11.2013 01:18

Ответ: Clear Engine (Понятный движок)
 
Вложений: 3
Начал пилить экспортер из блендера, умеет сохранять объекты, инфу по текстурам и нормал мапы, впринципе то что пока сделано в движке...

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

Samodelkin 26.11.2013 03:11

Ответ: Clear Engine (Понятный движок)
 
Мне кажется, или ты где то накосячил с форматом нормал мапы или ее текстурными координатами - немного не туда затенение отбрасывается ( помойму на 90 градусов повернуто ).
А так то здоровски все выглядит!

moka 26.11.2013 03:15

Ответ: Clear Engine (Понятный движок)
 
tangent и binormal не расчитаны?

pozitiffcat 26.11.2013 09:16

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Samodelkin (Сообщение 270613)
Мне кажется, или ты где то накосячил с форматом нормал мапы или ее текстурными координатами - немного не туда затенение отбрасывается ( помойму на 90 градусов повернуто ).
А так то здоровски все выглядит!

правда? что-то не обращал внимания...

pozitiffcat 26.11.2013 09:19

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от moka (Сообщение 270614)
tangent и binormal не расчитаны?

нет еще не занимался этим... надо запилить, сейчас 64 байта вершина весит, если добавить нормал бинормал е texcoord2 будет 96, нормально? или нужно до 128 догонять.. что-то не нашел инфы в инете. Еще заметил такую вещь, что на моей gt240 тормозит glow постэффект в фул скрине, там 8х6 выборка из текстуры...

pozitiffcat 26.11.2013 10:16

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от moka (Сообщение 270614)
tangent и binormal не расчитаны?

с tbn так должно выглядеть?

Samodelkin 26.11.2013 10:31

Ответ: Clear Engine (Понятный движок)
 
Источник света сверху? Тогда опять не так. Тангенты и бинормали должны быть расчитаны - без них вообще нельзя нормал мэп делать. Ну или по крайне мере тангенты нужно расчитать, а бинормали можно находу в шейдере. Еще я сталкивался с тем что у нормал мэп разные форматы бывают, иногда нужно местами менять координаты или инвертировать значения нормалей. Вобщем возьми нормал мэп с понятным рельефом и определи на глаз, правильно затенение работает или нет. Еще иногда косяки с повертексным освещением бывают если трисы очень большие по сравнения с расстоянием до источника света.

pozitiffcat 26.11.2013 10:56

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Samodelkin (Сообщение 270625)
Источник света сверху? Тогда опять не так. Тангенты и бинормали должны быть расчитаны - без них вообще нельзя нормал мэп делать. Ну или по крайне мере тангенты нужно расчитать, а бинормали можно находу в шейдере. Еще я сталкивался с тем что у нормал мэп разные форматы бывают, иногда нужно местами менять координаты или инвертировать значения нормалей. Вобщем возьми нормал мэп с понятным рельефом и определи на глаз, правильно затенение работает или нет. Еще иногда косяки с повертексным освещением бывают если трисы очень большие по сравнения с расстоянием до источника света.

я расчитал тангенты и бинормали, источник светит ровно как на скриншоте

ARA 26.11.2013 12:24

Ответ: Clear Engine (Понятный движок)
 
Смотрится косячно. Возьми карту нормалей кирпичной стенки, затекстурь плоскость, поднеси источник света почти вплотную и понаблюдай за кирпичиками и скрин сюда.

Сталкивался с подобным некорректным отображением нормалмап в юнити, когда засовывал туда карты сгенереные с помощью CrazyBump. Проблема решилась установкой настройки Normal map y-axis: up в CrazyBump.

pozitiffcat 26.11.2013 13:58

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от ARENSHI (Сообщение 270627)
Смотрится косячно. Возьми карту нормалей кирпичной стенки, затекстурь плоскость, поднеси источник света почти вплотную и понаблюдай за кирпичиками и скрин сюда.

Сталкивался с подобным некорректным отображением нормалмап в юнити, когда засовывал туда карты сгенереные с помощью CrazyBump. Проблема решилась установкой настройки Normal map y-axis: up в CrazyBump.

вот видео http://rutube.ru/video/5cd2690117324...f0beebc5f0ea9/

Mr_F_ 26.11.2013 14:13

Ответ: Clear Engine (Понятный движок)
 
Цитата:

вот видео
на плоскости и без TBN сойдёт.
покажи на флипанутом кубе, затекстурь все стены одной и той же нормалкой и таскай там лайт повсюду.

pozitiffcat 26.11.2013 14:35

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Mr_F_ (Сообщение 270635)
на плоскости и без TBN сойдёт.
покажи на флипанутом кубе, затекстурь все стены одной и той же нормалкой и таскай там лайт повсюду.

это уже с tbn

вот куб, что-то здесь не так
http://rutube.ru/video/e7c98c126c668...9ebc1ed97240d/

Mr_F_ 26.11.2013 15:21

Ответ: Clear Engine (Понятный движок)
 
да, выглядит сломано, отрисовывай в какой позиции находится лайт, шариком или спрайтом

pozitiffcat 26.11.2013 16:07

Ответ: Clear Engine (Понятный движок)
 
Цитата:

Сообщение от Mr_F_ (Сообщение 270639)
да, выглядит сломано, отрисовывай в какой позиции находится лайт, шариком или спрайтом

есть норм шейдер?


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

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