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 03.12.2013 19:14

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

Сообщение от HolyDel (Сообщение 270950)
У меня в движке есть граф сцены, что совершенно не мешает рендерить в ручную объекты.
Код:

camera->RenderEntity(entity(;

у меня slim ;) ничего лишнего, хочу попробовть такую реализацию

pozitiffcat 03.12.2013 19:17

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

Сообщение от moka (Сообщение 270946)
Проблемы с альфа сортами, и рендером батчами под одним материалом для одного прохода и миниманизации переключений стейтов, подобное ляжет на плечи разраба.

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

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

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

загрузка изображения1 в атлас - получение текстурной координаты
загрузка изображения2 в атлас - получение текстурной координаты
билд атласа (создает текстуру внутри себя)
создание изображение1, передав в атлас текстурные координаты1
создание изображение2, передав в атлас текстурные координаты2

pozitiffcat 03.12.2013 19:21

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

Сообщение от ABTOMAT (Сообщение 270947)
Ну и в чём будет принципиальное отличие?
В 2Д так делали потому что в каком порядке отрендеришь картинки, в таком они и будут друг на друге лежать.
В 3Д этим занимается Z-буфер, и хоть ты в каком порядке отрендеришь, всё будет так же, как и с Z-буфером.
Логично рендерить группами с одинаковыми текстурами/шейдерами, чтоб не гонять их каждый раз и этим стоит заниматься движку.
Альфе нужна сортировка, но с этим опять же лучше пусть двиг справляется.
В-общем я не вижу что такого может прогер сделать крутого, что не может сделать за него двиг и смысла забивать прогеру голову этим.
Разве что в FPS ствол поверх всего отрендерить, но ради 1 ствола огорода не городят.

я когда делал освещение, я просто охренел от количества шейдеров, которые расплодились, и что-то простотой перестало пахнуть, решил сделать движок, расчитаный на более продвинутого в плане графики программиста, и возложить цикл на его плечи, так контролировать всякую такую хрень проще. Темболее нарисовать в цикле много раз 1 меш в цикле (как 2д с картинками) проще ИМХО.
Опытом проверится... на самом деле хз.

HolyDel 03.12.2013 20:28

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

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

pozitiffcat 04.12.2013 17:02

Ответ: Clear Engine (Понятный движок)
 
добавил доки, правда их там мало не все успел написать
https://bitbucket.org/pozitiffcat/sl...oc/?at=default

реализовал кучу функционала, которым можно воспроизвести работу Clear Engine. И даже более, единственное ограничение, это формат вершины, 96 байт positions, normal, texcoord, texcoord2, joint, weight, binormal, tangent.

Mr_F_ 04.12.2013 17:07

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

96 байт
жирно. необходим выбор программистом любого своего варианта

pozitiffcat 04.12.2013 17:10

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

Сообщение от Mr_F_ (Сообщение 270996)
жирно. необходим выбор программистом любого своего варианта

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

Mr_F_ 04.12.2013 17:16

Ответ: Clear Engine (Понятный движок)
 
ни одной модели не нужны все эти данные, большинство моделей не имеют скининга, а те кто имеют - редко требуют вторые UV.
тангент и бинормал ужимаются в один vec4.

--
со страницы 19 можно почитать как жестоко ужимали вертексы в just cause 2:
http://www.humus.name/Articles/Perss...GameWorlds.pdf

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

pozitiffcat 04.12.2013 20:23

Ответ: Clear Engine (Понятный движок)
 
запилил атрибуты
PHP код:

sProgramInitData progInit;
progInit.add(VertexAttribute::VaPosition"POSITION");
progInit.add(VertexAttribute::VaTexcoord0"TEXCOORD");
progInit.add(VertexAttribute::VaJoint"JOINT");
progInit.add(VertexAttribute::VaWeight"WEIGHT");
progInit.vertexSource readTextFile(context"simple_anim.vs");
progInit.fragmentSource readTextFile(context"simple_anim.fs");
m_program context->video()->createProgram(progInit);

sVertexDeclaration vd;
vd.attributes.push_back(sAttributeDeclaration(VertexAttribute::VaPosition03));
vd.attributes.push_back(sAttributeDeclaration(VertexAttribute::VaTexcoord0242));
vd.stride sizeof(sVertex);
surface->setVertexDeclaration(vd); 


HolyDel 05.12.2013 02:09

Ответ: Clear Engine (Понятный движок)
 
столько лишних слов...
это нифига не slim.

pozitiffcat 05.12.2013 09:49

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

Сообщение от HolyDel (Сообщение 271025)
столько лишних слов...
это нифига не slim.

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

Slim не в плане простоты, а в плане того, что движок не жирный.

Samodelkin 05.12.2013 15:45

Ответ: Clear Engine (Понятный движок)
 
Кстати вот в d3dx есть такая штука id3dxeffect, которая позволяет более менее структурировать большое кол-во шейдеров, хотя конечно имхо от большого кол-ва шейдеров нужно по возможности избавляться. Можешь попробовать в opengl что-то подобное сам сделать.

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

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

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

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

Поэтому я бы еще раз обратил внимание на пост товарища jimon'а где то в начале темы - там он расписывал о driven data.
Это удачное решение потому что позволяет четко распределить обязанности между движком и редакторами. Задача движка воспроизводить контент на разных платформах, с минимальным вмешательством программиста. Задача редакторов предоставить функционал движка разработчикам игр в наиболее подходящей для данного проекта форме. Тем самым подход становится более декларативным - мы даем движку контент и говорим что делать, а не как делать. Движок становится проще, а редакторы гибче, к тому же я могу на каждый проект сделать свой набор редакторов, и делать их по мере необходимости.

Mr_F_ 05.12.2013 17:07

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

Цитата:

ассемблерных вставок
интересно кстати, у кого-нибудь хоть их юзанье на практике оправдывалось?
я кроме sincos за одну инструкцию не знаю ничего такого полезного, что нельзя было бы сделать в обычном С, он компилится и так более-менее предсказуемо.

Samodelkin 05.12.2013 17:46

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

simd однозначно лучше на ассемблере. потому как компилятор далеко не всегда может сам распаралелить цикл или т. п. У себя в двиге кое-где заюзал, но пока очень мало - оптимизацию на потом оставил, так что точнее сказать не смогу, но теоретически на x64 где 16 xmm регистров можно соответственно добиться ускорения в 8 раз. avx еще больше.
На С++ интринсики работают чуть хуже.
Однако если у тебя с производительностью все нормально то от ассемблера стоит воздержаться.

Mr_F_ 05.12.2013 18:03

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

Цитата:

На С++ интринсики работают чуть хуже.
а чем хуже? всегда их юзаю как раз.


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

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