![]() |
C3D Engine
обновлено инфо
C3D Engine является легковесным графическим, а в будущем и игровым движком, основанном на DirectX 9.0c использующем в основе визуализации шейдеры. Плотно интегрирован с физикой. Применяется для написания легковесных казуальных игр с наименьшими затратами времени. Как устроен конвейер визуализации: Программа -> Менеджер сцены -> Узел сцены -> Сетка -> Подсетка В свою очередь, при отрисовке подсетки, устанавливаются параметры эффекта – это матрицы world, view, projection не перемноженые, текстура и диффузный цвет материала. По умолчанию используется встроеный эффект. Можно загрузить и использовать свой. Эффекты можно применять к сеткам. Этот эффект будет действовать для всех узлов, где применяется сетка. Эффект можно применить отдельно для узла. Эффект можно применить отдельно к материалу сетки, относительно сетки или узла. Файл эффекта использует предустановленные переменные matrix WorldMatrix; //абсолютная мировая матрица объекта matrix ViewMatrix; // матрица вида matrix ProjMatrix; // матрица проекции matrix WorldViewProjMatrix; // перемноженая матрица float4 MatDiffuse; // диффузный цвет материала texture Tex; //текстура Для отображения объектов нужно создавать узлы сцены CreateNode(). Потом сетку нужно передать этому узлу NodeAttachMesh(node,mesh); Одна сетка может быть назначена на несколько узлов сцен, поэтому сетку не требуется грузить много раз, например для отображения однотипных объектов. Можно назначать эффекты и для отдельных узлов NodeSetEffect(node, effect). Эффектам можно задавать стандартные параметры Technique, Matrix, float, int, bool, float array, Texture. Эффекты так же можно назначить на часть объекта NodeSetEffectByMaterialId(node,effect,id) Узлы сцены могут иметь родителей, при этом все трансформации с узлом производятся локально. Объектам можно назначать физические тела (на данный момент куб, выпуклая форма и статичекий тримеш), не используйте физику для потомков. Потомки должны создаваться на уровне физики, если вы хотите иметь для них физические свойства. Можно определять столкновения с объектами (оба объекта должны быть физическими) На данный момент камера не может быть прикреплена ни к одному объекту, но можно производить перемещения и обзор. Работа с клавиатурой и мышью. Работа со скелетной анимацией. Экспорт анимации нужно производить из 3ds max с помощью плагина panda soft Разработка ведется одним человеком - мной :) Пример простого приложения: PHP код:
скелетная анимация оптимизировал всяческие вычисления СКАЧАТЬ СЕЙЧАС в архиве демо и документация ![]() |
Ответ: C3D Engine
Молодец, но в чём будут отличия от ксорса? По описанию ты делаешь то же самое :)
|
Ответ: C3D Engine
Ну тут заточено на шейдерах, будет свой формат с редактором. Я не собираюсь догонять ксорс по крутости, я делаю нечто другое, хоть и похожее. Здесь нет материалов, тут всем рулят файлы эффектов. И хочу добиться плотной интеграции с физическим движком. Формат сцен будет свой, а формат сетки будет X. Редактор сцен будет поддерживать импорта разных форматов, но выходной всегда будет един.
Конечно планы еще размытые, много еще стоит передумать... незнаю что получится. |
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
дружище, почему инт?
кто мешает делать так: Код:
NodeAttachMesh(mesh,node); |
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
Доступно обновление.
[101 - 15.03.2012] Добавлена поддержка пост-эффектов Добавлена физика trimesh, capsule, box, convex Изменена работа камеры, теперь она является узлом сцены Исправлены баги команды Drop. Мелкие фиксы |
Ответ: C3D Engine
[102 - 16.03.2012]
Создание нескольких камер Рендер в текстуру с определенной камеры 7 источников освещения Контроллер FPS Определение скорости мыши Оптимизация стандартного шейдера Перемещение мыши в определенную точку на экране Работа с контроллерами Узнавание поворота объекта Рендер заднего буффера в текстуру Оптимизация анимированных узлов Определения объекта коллизии Выбор объектов мышью ![]() |
Ответ: C3D Engine
Проект жив. Вы не думайте! Я изучал как работает анимация, и 3ds max SDK
Движок переписывается с нуля. Что готово на данный момент.
Использование звукового движка (пока не определился какого). Использование физики physx по умолчанию. SDK - возможность написания плагинов (пока не думал над тем как будет работать). Сделать много семантик на все случаи жизни и запилить попиксельное освещение с тенями в стандартном шейдере. В конечном итоге будет dll. Движок процедурный, потому что мне так нравится и это удобно (Blitz3D way). Почему я выбрал процедурность, а не объектность? Потому что большинство не хочет разбираться с ООП движком. Взять в пример Ogre3D не сложнее блица, но все же юзверов у него меньше, чем у того же блица, потому что блиц тупо удобней. |
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
В максе пробегаю по всем кадрам и извлекаю положение вершин помноженое на матрицу объекта. Этим методом неважно каким модификатором в максе сделана анимация, тем самым можно экспортировать совершенно любую анимацию
|
Ответ: C3D Engine
не гибко же. и по памяти - пипец.
|
Ответ: C3D Engine
насчет памяти - модель можно оптимизировать исключив каждый энный кадр. Анимация хуже не становится, памяти жрет меньше. Также можно хранить одну анимацию для энного кол-ва объектов, а не на каждый объект по анимации - тоже оптимизация.
ЗЫ если не ошибаюсь блиц конвертирует внутри себя в морф, а в файле модели лежит скелет. Это сделано для быстродействия анимации |
Ответ: C3D Engine
ошибаешься.
это два разных подхода - морфная анимация и скининг. |
Ответ: C3D Engine
Цитата:
и насчёт не гибко - это действительно так. к примеру не выйдет применить одну и ту же анимацию ходьбы к 2м челам с одинаковыми скелетами - придётся засирать память нефигово. |
Ответ: C3D Engine
Цитата:
В реалтайме морфит каждый кадр 3д макс. Мне кроме интерполяции вообще ненадо никаких вычислений ЗЫ. я локаю буфер каждый кадр. Не просто так же придумали флаг DYNAMIC для буффера... спецом для анимаций |
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
Цитата:
хотя раз казуальный движок то может и ок) но есть ещё один минус - нельзя получить трансформацию кости в кадре у тебя (бывает нужно). я последний раз когда делал морфинг, запекал его в флоатовые текстуры (ось Х - номер кадра, ось Y - номер вертекса), и в VS читал и интерполировал, но это с SM 3.0 только можно. |
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
Цитата:
дружище, не ленись, сделай человеческий скининг. или оставь человеческий морфинг. зря ты их скрещиваешь. |
Ответ: C3D Engine
У меня морфинг человеческий. Скрещивает 3д МАКС, который выдает мне файл с морфной структурой!
|
Ответ: C3D Engine
а. ну тогда нет проблем :) раз морфный файл и морфный рендер :)
|
Ответ: C3D Engine
Будет встроеный в двиг нормал маппинг. Постараюсь его реализовать с per-pixel освещением и тенями, пока что мало представляю как это все сделать
![]() |
Ответ: C3D Engine
Добавил видео по рендеру
http://youtu.be/DQvAw-lfzZQ На этом видео я показываю: морфная анимация загружается один раз, а используется на нескольких моделях, тоже касается и текстур. Анимация каждого человечка играет с разной скоростью, что бы было видно, что морфная анимация не привязана к конкретному объекту, это совершенно отдельный объект. Загружать морфную анимация не надо ручками, все делается автоматически и движок сам понимает, кому и какой морфный объект, загруженный ранее, присвоить. 16 человечков с анимацией - 300 FPS памяти ест 26 мб 100 человечков с анимацией - 111 FPS памяти ест 32 мб Просьба потестировать на запуск приложение кому не лень - http://rghost.ru/38187610 |
Ответ: C3D Engine
Охренительно музыка дополняет происходящее
|
Ответ: C3D Engine
PhysX будет подключаться отдельной .dll
|
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
Чуть чуть осталось до беты
ToDo Что нужно сделать • Выделение объектов мышью (после беты) • Методы для настройки RigidBody • Попиксельное освещение (после беты) • Множество проходов с источниками света (пока не вкурсе как делается) (после беты) • Тени в стандартном шейдере (после беты) • Настройка физики из скрипта материала • Везде сделать корректное удаление (проверить) • попроверять правильность поворотов, преобразований (перед релизом беты) • нормальная обработка типов освещения и направления (после беты) • blitz3d wrapper, c++ wrapper, c# wrapper Что сделано • Пост – эффект • Использовать центрирование при извлечении меша из нода (перемножить каждую точку на минус матрицу положения меша из 3dsMax) • Получение объектов по именам, задавание имен, получение в виде списка. Получать например так list_count(), get_list_item(int) • Задать fov • Получение текстового значения имени класса • Возможность получить имя класса нода, это может быть свет, камера, модель или просто нода • Анимации могут быть различные на все подмодели одной модели • Названия анимаций • 2д графика • Переработаны скрипты материалов • Альфа канал в шейдерах теперь обрабатывается CMaterial::setAlphaEnabled(bool state) • Текст • Удаление физики с объекта • PointTo у камеры, да и вообще у объектов • Обработка моделей вообще без текстур • Рендер в чужое окно • Аудио • Менеджер звуков • Загрузка звука • Проигрывание звука • Нормальный mouselook • Функция движения move • Работа с разными менеджерами сцены (теоретически работает) • Улучшить координаты текстур при выгрузке из 3ds max (вроде норм) • При экспорте затирать существующий материал • Назначать текстуру нормали из 3ds max • Рендер с камеры • Камера может быть нодом и цепляться к чему угодно • Свет может быть нодом и цепляться к чему угодно • Установка шейдера и техники в материале • Работа с несколькими камерами • Исключить варнинги в коде • Сохранение позиций объектов в файл • Морфная анимация не грузится повторно для каждого подобного объекта, а берется из кэша • Проверены правильность работы матриц в иерархии • Извлечение мешей модели по имени в отдельную ноду • Текстуры и морфы удаляются с удалением сцены • Логи • Освещение (список ламп в менеджере сцены) • Настройка параметров эффекта • Физика Bullet • Физический мир • Добавление физических тел |
Ответ: C3D Engine
Новенький видос... кому интересно
http://www.youtube.com/watch?v=WRFwZ...ature=youtu.be Без фрапса (запись видео) выдает 184 FPS это физика с конвексами, звук, анимации, 9 человечков и 64 мб ОЗУ 23 FPS выдают 169 человечков и 77 мб жрут озу. 100 человечков 39 FPS ЗЫ. если убрать загрузку текстур жрет 17 мб озу... это у мя текстуры огромные ))))) |
Ответ: C3D Engine
добавил Frutsum culling, теперь FPS зависит только от того что попадает на экран, в дальнейших планах реализовать occlusion culling. Так что теперь хоть 100500 человечков FPS может быть 400-500 =)
кстати кому интересно мой проц E3300 NVIDIA GT240, и тестится еще на INTEL X4500. фпсы плавают примерно в полтора раза между этими двумя видеокартами. если на NVIDIA 500 то на интеле 350 |
Ответ: C3D Engine
Поработал с производительностью, теперь скорость отрисовки как в ксорсе, на скринах ниже это видно. Плюс в моем сэмпле еще конвексная физика ест ФПС.. но это мелочи. Честно, не думал, что ксорс такой быстрый движок. До сих пор не понимаю как он сделал такой быстрый рендер. Пустое окно 3000 ФПС против моего 900 ФПС, причем я пробовал без своего движка напрямую юзать функции DirectX и все равно 900 фпс. КАК???? компилятор MSVS 2010. Загруженая сцена по FPS одинакова, вместе с анимациями и физикой.
![]() |
Ответ: C3D Engine
Дружище, если хочешь посоревноваться с действительно быстрым движком, то вот тебе бенчмарки.
4096 кубов (без инстансинга, ибо это тест цены ентити) http://axelynx.googlecode.com/files/...enchmark10.zip вывод тяжелой геометрии http://axelynx.googlecode.com/files/...yBenchmark.zip спрайтовая система: http://axelynx.googlecode.com/files/...sBenchmark.zip Цитата:
|
Ответ: C3D Engine
http://malcdevelop.ru/uploads/cg3d129.zip
релиз беты. Я тут так подумал... че плодить неактуальщину, займуська я DirectX11. |
Ответ: C3D Engine
годное решение. однако есть еще мобильные платформы. а там opengl es.
хотя на winphone api dx11 c аппаратной поддержкой фич dx9. |
Ответ: C3D Engine
Уже есть успехи... впринципе тоже самое, что и DX9, тока с анимацией еще не понятно, как передавать в шейдер инфу...
|
Ответ: C3D Engine
а как матрицы трансформации передаешь и прочую лабуду?
|
Ответ: C3D Engine
Там в четвертых шейдерах есть специальный константный буфер. Если ты по 9 директ то там я семантики во всю использую, очень удобно.
|
Ответ: C3D Engine
Цитата:
всмысле вот через cb и передавай анимацию. |
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
нене.
передаешь только скаляр между первым и вторым буфером в аттрибутах вершины должна быть текущая позиция и следующая. я еще думал заливать все в float текстуру и одной выборкой с текустуры ставить позицию в нужное место. но пока не реализовал. |
Ответ: C3D Engine
Цитата:
|
Ответ: C3D Engine
Я как понял PhysX не скоро....
|
Ответ: C3D Engine
Да и тем более я на две недели в отпуске и ничего сейчас не делаю, а в инет выхожу с планшетного ПК ))))
|
Ответ: C3D Engine
Поменял концепцию движка.
Теперь он работает под openGL 2.1 (ибо по моим тестам быстрее directx 9), попрежнему остался казуальным. Только теперь в ядре не будет встроеной физики звука и так далее. Все это будет отдельными библиотеками. И пользователь сам может выбрать что ему использовать. В качестве звука, физики пользователь сможет использовать различные движки, все будет зависеть от того какие dll он подключит к проекту. Теперь в качестве шейдеров будет использован CG. Никаких FFPшных функций не используется. Нет стандартного шейдера, конечно есть в комплекте пример, но программист свой шейдер делает сам и назначает его по умолчанию, и именно он будет использоваться в программе при создании объектов, пока что какого-то конкретного ToDo нету. Названия семантик, тоже можно менять. Возможность программировния техник в шейдере, под различные версии GLSL. ТЫТРУБА Будет детальный туториал это будет последние кардинальные изменения... я окончательно определился с концепцией |
Ответ: C3D Engine
Build 131 - только графическая составляющая + Tutorial из 5 примеров и PDF. Не все возможности описаны в туториале...
скачать движок В туториале описывается как создать проект, как рисовать объекты, как написать первый шейдер, как настраивать, как создать модель (сетку) из кода и анимацию (например для написания своего загрузчика), как сделать источник освещения. Движок предназначен для пользователей среднего уровня. На основе него можно написать свой каркас.. это и есть концепция. Designer Casual Graphics 3D engine. |
Ответ: C3D Engine
Вложений: 1
очень низкий уровень создания меша.
проще писать на гапи. что думаешь о мобильных платформах? почему cg а не glsl, если у тебя не мультигапи? ну и почему capi, если пишешь на плюсах? intellisens хороший помощник в написании кода... а вообще респект, что-то уже есть :) примеры, желательно сделать так, чтобы они собирались в папку с бинарниками движка. чтобы небыло мути со всякими не найдена dg3d.dll. getCamera() - в движке не больше одной камеры? у тебя очень высокая цена ентити, сопостовима с юнити, в два раза выше чем у блица, в три раза выше чем у хорса и в 10 раз выше чем у меня. и, судя по всему, нет даже проверки на фрустум камеры. надо пилить. Вложение 17006 |
Ответ: C3D Engine
Да фрустума еще нет. CG потому что удобно и похоже на HLSL + затачивается под разные версии шейдеров, камерой может выступать любая нода, достаточно вызвать setCamera. Как ты добился такой скорости? HolyDel У тебя даже без фрустума скорость офигенная!
capi, для дальнейшего заюзывания в разных ЯП. Про мобильные платформы даже не читал... хотя тестировть есть на чем... но как-то не очень заинтерисован... |
Ответ: C3D Engine
Цитата:
в двух словах ничего лишнего. нет необходимости переключать стейт - не переключаю стейт. нет необходимости счтитать матрицу - не считаю матрицу. и т.д. ну и еще: 16 битные индексы. оптимизация под post TnL кэш оптимизация под картный 32-м байтам размер аттрибутов вершины оптимизация по переключениям стейтов (для этой демки не актуально) или ты про скорость твоей демки на моей машине? тут просто i7 и 460GT. |
Ответ: C3D Engine
А что дало резкий прирост скорости?
|
Ответ: C3D Engine
ничего не дало)) просто я не делал ничего такого, чтобы скорость резко падала, а ты что то сделал)) или шейдер применяешь на каждый дип, или еще что то в етом роде.
быстрее чем рендерит железо рендер все равно идти не будет. ну и профайлер наш друг, да. |
Ответ: C3D Engine
Что-то переключение стейтов совсем не влияют на FPS...
|
Ответ: C3D Engine
ну ты бы показал код рендера :)
или профайлером посмотри. не может тупая отрисовка быть такой долгой, где то ты что-то лишнее делаешь :) |
Ответ: C3D Engine
Код:
//отрисовка сцены поднял fps с 25 до 60 при 4096 кубиках - ксорс на моем железе дает 90, axelinx 250... Unity 60 заметил снижает скорость передача матрицы в шейдер.. а как быть? один шейдер 4096 кубов, следовательно 4096 передач параметров для каждого куба.. как это оптимизировать? |
Ответ: C3D Engine
Обновил PDF-ку, добавил урок работы с камерами, рендером в текстуру и пост-эффектами
Движок - билд 132 Оптимизация под SSE2 добавлен frutsum некоторые оптимизации ядра |
Ответ: C3D Engine
Не забывай о том что пишешь то ты открытый движок, для разработчика. Следственно нужна качественная документация, и продуманная архитектура и интерфейс, также дружелюбные паттерны. Очень важно то как выглядит код, имена функций и т.п. Этим сейчас многие берут сильно вверх, а именно дружелюбностью. В пример возьми node.js, на нём начять кодить как 2 пальца. И документация содержит тела самих функций - что более чем объясняет какие данные нужны на входе, и как она работает. Также это заставляет разработчика движка следить за кодом очень критично, что требует больше времени, но ведёт к более элегантным решениям.
Также тупо Враппер ГАПИ никому не нужен. Возьми например Unity - это нечто совсем иное, и народу ОЧЕНЬ нравится, новый подход, по другому нужно мыслить - такое продумать не так и просто.. |
Ответ: C3D Engine
я хз. я тоже передаю матрицу трансформации на каждый дип, правда одну.
возможно, можно как-то оптимизировать через UBO, но это уже не совсем то. такие вещи скорее нужно будет делать на уровне пользовательского кода через инстансинг. Цитата:
|
Ответ: DG3D Engine
Цитата:
|
Ответ: C3D Engine
новая версия работает медленнее. в два раза. когда все кубы видны. причем как то странно работает - если просто отъехать от стартовой точки назад - то фпс 70 если смотреть на кубы сверху то фпс 30. wtf?
нет, не так. если ему дать просраться на 5к фпс, то потом при взгляде на все кубики фпс падает до 30-ти. возможно проблема в моих драйверах. да - это стопудово в драйверах дело. аксель себя ведет также - если не дать просраться демке, то на 4к кубах она дает 900фпс вместо 750... странно, надо думать как это дело лечить. обертка над гапи не должна проигрывать в производительности конструктору типа unity. |
Ответ: C3D Engine
O_o у меня наоборот быстрее (NVIDIA GT240, Intel E3300) 50 - 60 fps давало, вместо прошлой 20-25, я вообще не понимаю как у меня такая маленькая производительность.. я вообще все убирал, и все равно мало FPS.. как ты компилишь? MSVS ? Может какие-то особенные флаги компилятора?
|
Ответ: C3D Engine
я ж написал что ето в моем железе проблемы.
работать стало быстрее. с 60 фпс до 70. если не давать демке работать на 1000+ фпсах. я у себя походу sleep-ом буду ограничивать фпс тысячей. а то какая-то фигня творится после того, как видюха или винда поработает на высокой частоте обновления. |
Часовой пояс GMT +4, время: 19:36. |
vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot