forum.boolean.name

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

pozitiffcat 03.03.2012 13:03

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 код:

#include <string>
#include "c3dengine.h"
using namespace std;
int main()
{
    
Init(1024,768);
    
CameraSetPosition(0,20,-30);
    
CameraSetTarget(0,0,0);
    
int mesh LoadMesh("tiny\\tiny.x");
    
int node CreateNode();
    
NodeAttachMesh(nodemesh);
    while(
Loop())
    {
        
Cls();
        if(
IsKeyDown(KEY_ESCAPE)) break;
        
Render();        
        
Flip();
    }
    
Drop();
    return 
0;


добавил работу с физикой convex, trimesh, и функции для настройки параметров body
скелетная анимация
оптимизировал всяческие вычисления

СКАЧАТЬ СЕЙЧАС в архиве демо и документация

Mr_F_ 03.03.2012 14:05

Ответ: C3D Engine
 
Молодец, но в чём будут отличия от ксорса? По описанию ты делаешь то же самое :)

pozitiffcat 03.03.2012 15:46

Ответ: C3D Engine
 
Ну тут заточено на шейдерах, будет свой формат с редактором. Я не собираюсь догонять ксорс по крутости, я делаю нечто другое, хоть и похожее. Здесь нет материалов, тут всем рулят файлы эффектов. И хочу добиться плотной интеграции с физическим движком. Формат сцен будет свой, а формат сетки будет X. Редактор сцен будет поддерживать импорта разных форматов, но выходной всегда будет един.
Конечно планы еще размытые, много еще стоит передумать... незнаю что получится.

4yBa4Ok 03.03.2012 19:02

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

Сообщение от pozitiffcat (Сообщение 221406)
И хочу добиться плотной интеграции с физическим движком.


А ты можешь юзать физический двиг либо Havok либо PhysX?

pozitiffcat 03.03.2012 19:06

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

Сообщение от 4yBa4Ok (Сообщение 221431)

А ты можешь юзать физический двиг либо Havok либо PhysX?

только bullet из-за его легковесности

4yBa4Ok 03.03.2012 19:14

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

Сообщение от pozitiffcat (Сообщение 221432)
только bullet из-за его легковесности


Печалька....

HolyDel 04.03.2012 01:24

Ответ: C3D Engine
 
дружище, почему инт?

кто мешает делать так:
Код:

NodeAttachMesh(mesh,node);

pozitiffcat 04.03.2012 01:44

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

Сообщение от HolyDel (Сообщение 221478)
дружище, почему инт?

кто мешает делать так:
Код:

NodeAttachMesh(mesh,node);

для интеграции с другими ЯП

pozitiffcat 15.03.2012 11:30

Ответ: C3D Engine
 
Доступно обновление.
[101 - 15.03.2012]
Добавлена поддержка пост-эффектов
Добавлена физика trimesh, capsule, box, convex
Изменена работа камеры, теперь она является узлом сцены
Исправлены баги команды Drop.
Мелкие фиксы

pozitiffcat 16.03.2012 16:47

Ответ: C3D Engine
 
[102 - 16.03.2012]
Создание нескольких камер
Рендер в текстуру с определенной камеры
7 источников освещения
Контроллер FPS
Определение скорости мыши
Оптимизация стандартного шейдера
Перемещение мыши в определенную точку на экране
Работа с контроллерами
Узнавание поворота объекта
Рендер заднего буффера в текстуру
Оптимизация анимированных узлов
Определения объекта коллизии
Выбор объектов мышью

pozitiffcat 16.05.2012 12:59

Ответ: C3D Engine
 
Проект жив. Вы не думайте! Я изучал как работает анимация, и 3ds max SDK
Движок переписывается с нуля. Что готово на данный момент.
  1. Свой формат моделей (*.cg3d и *.cg3dm скрипт материала к ним)
  2. Экспортер из 3ds max (пока что скомпилировал для 2010 версии)
  3. Анимация, морф, скелет (в конечном итоге все преобразуется в морф. Для скорости, ведь это же Casual Engine...)
  4. Шейдеры (пока только стандартный, каким отрисовывается)
  5. Семантики
Что в планах. Вкратце.
Использование звукового движка (пока не определился какого). Использование физики physx по умолчанию. SDK - возможность написания плагинов (пока не думал над тем как будет работать). Сделать много семантик на все случаи жизни и запилить попиксельное освещение с тенями в стандартном шейдере.
В конечном итоге будет dll. Движок процедурный, потому что мне так нравится и это удобно (Blitz3D way). Почему я выбрал процедурность, а не объектность? Потому что большинство не хочет разбираться с ООП движком. Взять в пример Ogre3D не сложнее блица, но все же юзверов у него меньше, чем у того же блица, потому что блиц тупо удобней.

Mr_F_ 16.05.2012 13:13

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

Анимация, морф, скелет (в конечном итоге все преобразуется в морф. Для скорости, ведь это же Casual Engine...)
а как считаешь морф?

pozitiffcat 16.05.2012 13:26

Ответ: C3D Engine
 
В максе пробегаю по всем кадрам и извлекаю положение вершин помноженое на матрицу объекта. Этим методом неважно каким модификатором в максе сделана анимация, тем самым можно экспортировать совершенно любую анимацию

HolyDel 16.05.2012 13:48

Ответ: C3D Engine
 
не гибко же. и по памяти - пипец.

pozitiffcat 16.05.2012 14:02

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

ЗЫ если не ошибаюсь блиц конвертирует внутри себя в морф, а в файле модели лежит скелет. Это сделано для быстродействия анимации

HolyDel 16.05.2012 15:05

Ответ: C3D Engine
 
ошибаешься.
это два разных подхода - морфная анимация и скининг.

Mr_F_ 16.05.2012 16:36

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

В максе пробегаю по всем кадрам и извлекаю положение вершин помноженое на матрицу объекта. Этим методом неважно каким модификатором в максе сделана анимация, тем самым можно экспортировать совершенно любую анимацию
а в реалтайме как морфишь то? неужто локаешь VB каждый кадр или того хуже держишь VB на каждый кадр?
и насчёт не гибко - это действительно так.
к примеру не выйдет применить одну и ту же анимацию ходьбы к 2м челам с одинаковыми скелетами - придётся засирать память нефигово.

pozitiffcat 16.05.2012 19:59

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

Сообщение от Mr_F_ (Сообщение 228063)
а в реалтайме как морфишь то? неужто локаешь VB каждый кадр или того хуже держишь VB на каждый кадр?
и насчёт не гибко - это действительно так.
к примеру не выйдет применить одну и ту же анимацию ходьбы к 2м челам с одинаковыми скелетами - придётся засирать память нефигово.

А вот я это реализовал! Только что. И не засирает память

В реалтайме морфит каждый кадр 3д макс. Мне кроме интерполяции вообще ненадо никаких вычислений


ЗЫ. я локаю буфер каждый кадр. Не просто так же придумали флаг DYNAMIC для буффера... спецом для анимаций

pozitiffcat 16.05.2012 20:00

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

Сообщение от HolyDel (Сообщение 228061)
ошибаешься.
это два разных подхода - морфная анимация и скининг.

Естественно! У меня скин переводится в морф и записывается в файл. В файле уже морф, сформированый

Mr_F_ 16.05.2012 20:10

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

ЗЫ. я локаю буфер каждый кадр. Не просто так же придумали флаг DYNAMIC для буффера... спецом для анимаций
это небыстро может быть, ну точнее сойдет для медии на уровне 2004 и ниже)
хотя раз казуальный движок то может и ок)
но есть ещё один минус - нельзя получить трансформацию кости в кадре у тебя (бывает нужно).
я последний раз когда делал морфинг, запекал его в флоатовые текстуры (ось Х - номер кадра, ось Y - номер вертекса), и в VS читал и интерполировал, но это с SM 3.0 только можно.

pozitiffcat 16.05.2012 20:15

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

Сообщение от Mr_F_ (Сообщение 228069)
но есть ещё один минус - нельзя получить трансформацию кости в кадре у тебя (бывает нужно).

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

HolyDel 16.05.2012 20:18

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

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

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

pozitiffcat 16.05.2012 20:22

Ответ: C3D Engine
 
У меня морфинг человеческий. Скрещивает 3д МАКС, который выдает мне файл с морфной структурой!

HolyDel 16.05.2012 20:25

Ответ: C3D Engine
 
а. ну тогда нет проблем :) раз морфный файл и морфный рендер :)

pozitiffcat 17.05.2012 22:42

Ответ: C3D Engine
 
Будет встроеный в двиг нормал маппинг. Постараюсь его реализовать с per-pixel освещением и тенями, пока что мало представляю как это все сделать

pozitiffcat 20.05.2012 18:41

Ответ: C3D Engine
 
Добавил видео по рендеру
http://youtu.be/DQvAw-lfzZQ
На этом видео я показываю: морфная анимация загружается один раз, а используется на нескольких моделях, тоже касается и текстур. Анимация каждого человечка играет с разной скоростью, что бы было видно, что морфная анимация не привязана к конкретному объекту, это совершенно отдельный объект.
Загружать морфную анимация не надо ручками, все делается автоматически и движок сам понимает, кому и какой морфный объект, загруженный ранее, присвоить.

16 человечков с анимацией - 300 FPS
памяти ест 26 мб
100 человечков с анимацией - 111 FPS
памяти ест 32 мб

Просьба потестировать на запуск приложение кому не лень - http://rghost.ru/38187610

Randomize 21.05.2012 21:18

Ответ: C3D Engine
 
Охренительно музыка дополняет происходящее

pozitiffcat 22.05.2012 00:25

Ответ: C3D Engine
 
Близится зарелизивание беты


Что нужно сделать
• PointTo у камеры
• Выделение объектов мышью (хз в бэте или нет, там небольшой гемор)
• Попиксельное освещение (не в бэте)
• Множество проходов с источниками света (пока не вкурсе как делается) (не в бэте)
• Тени в стандартном шейдере (не в бэте)
• Настройка физики из скрипта материала
• Везде сделать корректное удаление
• Текст
• 2д графика
• Удалить лишние данные из файла меша
• Использовать центрирование при извлечении меша из нода (перемножить каждую точку на минус матрицу положения меша)
• Названия анимаций
• Рендер в чужое окно
• Задать fov
• Получение текстового значения имени класса
• Получение объектов по именам, задавание имен, получение в виде списка. Получать например так models_count(), get_model(int)
• попроверять правильность поворотов, преобразований


Что сделано
• Пост – эффекты
• Искаропки есть setNormalMap(CTexture*)
• Аудио
• Менеджер звуков
• Загрузка звука
• Проигрывание звука
• Нормальный mouselook
• Функция движения move
• Работа с разными менеджерами сцены (теоретически работает)
• Улучшить координаты текстур при выгрузке из 3ds max (вроде норм)
• При экспорте затирать существующий материал
• Назначать текстуру нормали из 3ds max
• Рендер с камеры
• Камера может быть нодом и цепляться к чему угодно
• Свет может быть нодом и цепляться к чему угодно
• Установка шейдера и техники в материале
• Работа с несколькими камерами
• Исключить варнинги в коде
• Сохранение позиций объектов в файл
• Морфная анимация не грузится повторно для каждого подобного объекта, а берется из кэша
• Проверены правильность работы матриц в иерархии
• Извлечение мешей модели по имени в отдельную ноду
• Текстуры и морфы удаляются с удалением сцены
• Логи
• Освещение (список ламп в менеджере сцены)
• Настройка параметров эффекта
• Физика Bullet
• Физический мир
• Добавление физических тел



4yBa4Ok 22.05.2012 13:45

Ответ: C3D Engine
 
PhysX будет подключаться отдельной .dll

pozitiffcat 22.05.2012 14:01

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

Сообщение от 4yBa4Ok (Сообщение 228510)
PhysX будет подключаться отдельной .dll

Да. Искаробки будет bullet. Верней он уже есть )))

4yBa4Ok 22.05.2012 17:25

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

Сообщение от pozitiffcat (Сообщение 228512)
Да. Искаробки будет bullet. Верней он уже есть )))

Это был не вопрос а утверждение)

pozitiffcat 23.05.2012 13:35

Ответ: 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
• Физический мир
• Добавление физических тел

pozitiffcat 23.05.2012 21:56

Ответ: C3D Engine
 
Новенький видос... кому интересно
http://www.youtube.com/watch?v=WRFwZ...ature=youtu.be

Без фрапса (запись видео) выдает 184 FPS это физика с конвексами, звук, анимации, 9 человечков и 64 мб ОЗУ
23 FPS выдают 169 человечков и 77 мб жрут озу.
100 человечков 39 FPS

ЗЫ. если убрать загрузку текстур жрет 17 мб озу... это у мя текстуры огромные )))))

pozitiffcat 24.05.2012 15:15

Ответ: C3D Engine
 
добавил Frutsum culling, теперь FPS зависит только от того что попадает на экран, в дальнейших планах реализовать occlusion culling. Так что теперь хоть 100500 человечков FPS может быть 400-500 =)
кстати кому интересно мой проц E3300 NVIDIA GT240, и тестится еще на INTEL X4500. фпсы плавают примерно в полтора раза между этими двумя видеокартами. если на NVIDIA 500 то на интеле 350

pozitiffcat 25.05.2012 14:45

Ответ: C3D Engine
 
Поработал с производительностью, теперь скорость отрисовки как в ксорсе, на скринах ниже это видно. Плюс в моем сэмпле еще конвексная физика ест ФПС.. но это мелочи. Честно, не думал, что ксорс такой быстрый движок. До сих пор не понимаю как он сделал такой быстрый рендер. Пустое окно 3000 ФПС против моего 900 ФПС, причем я пробовал без своего движка напрямую юзать функции DirectX и все равно 900 фпс. КАК???? компилятор MSVS 2010. Загруженая сцена по FPS одинакова, вместе с анимациями и физикой.

HolyDel 25.05.2012 17:56

Ответ: C3D Engine
 
Дружище, если хочешь посоревноваться с действительно быстрым движком, то вот тебе бенчмарки.
4096 кубов (без инстансинга, ибо это тест цены ентити)
http://axelynx.googlecode.com/files/...enchmark10.zip

вывод тяжелой геометрии
http://axelynx.googlecode.com/files/...yBenchmark.zip

спрайтовая система:
http://axelynx.googlecode.com/files/...sBenchmark.zip

Цитата:

Пустое окно 3000 ФПС против моего 900 ФПС, причем я пробовал без своего движка напрямую юзать функции DirectX и все равно 900 фпс. КАК????
Sleep(1) may be?

pozitiffcat 27.05.2012 17:38

Ответ: C3D Engine
 
http://malcdevelop.ru/uploads/cg3d129.zip
релиз беты.
Я тут так подумал... че плодить неактуальщину, займуська я DirectX11.

HolyDel 28.05.2012 00:05

Ответ: C3D Engine
 
годное решение. однако есть еще мобильные платформы. а там opengl es.
хотя на winphone api dx11 c аппаратной поддержкой фич dx9.

pozitiffcat 28.05.2012 02:33

Ответ: C3D Engine
 
Уже есть успехи... впринципе тоже самое, что и DX9, тока с анимацией еще не понятно, как передавать в шейдер инфу...

HolyDel 28.05.2012 13:35

Ответ: C3D Engine
 
а как матрицы трансформации передаешь и прочую лабуду?

pozitiffcat 28.05.2012 20:13

Ответ: C3D Engine
 
Там в четвертых шейдерах есть специальный константный буфер. Если ты по 9 директ то там я семантики во всю использую, очень удобно.

HolyDel 28.05.2012 21:03

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

Там в четвертых шейдерах есть специальный константный буфер.
я в курсе :)
всмысле вот через cb и передавай анимацию.

pozitiffcat 29.05.2012 00:05

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

Сообщение от HolyDel (Сообщение 228950)
я в курсе :)
всмысле вот через cb и передавай анимацию.

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

HolyDel 29.05.2012 00:13

Ответ: C3D Engine
 
нене.
передаешь только скаляр между первым и вторым буфером

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

я еще думал заливать все в float текстуру и одной выборкой с текустуры ставить позицию в нужное место. но пока не реализовал.

pozitiffcat 29.05.2012 00:59

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

Сообщение от HolyDel (Сообщение 228961)
нене.
передаешь только скаляр между первым и вторым буфером

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

я еще думал заливать все в float текстуру и одной выборкой с текустуры ставить позицию в нужное место. но пока не реализовал.

Я собираюсь передавать индекс вершины и 2 массива с вершинами xyz - это фреймы между которыми нужно интерполировать ну и соответственно время от 0 до 1

4yBa4Ok 29.05.2012 11:41

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

pozitiffcat 29.05.2012 14:14

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

pozitiffcat 07.06.2012 15:38

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

pozitiffcat 08.06.2012 17:08

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

HolyDel 08.06.2012 17:16

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

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

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

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

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

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

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

Вложение 17006

pozitiffcat 08.06.2012 19:33

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

HolyDel 08.06.2012 19:56

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

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

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

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

pozitiffcat 08.06.2012 20:12

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

HolyDel 08.06.2012 20:22

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

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

pozitiffcat 08.06.2012 22:00

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

HolyDel 08.06.2012 22:04

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

pozitiffcat 08.06.2012 22:18

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

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

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

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

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

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

pozitiffcat 09.06.2012 01:41

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

moka 09.06.2012 03:56

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

HolyDel 09.06.2012 12:18

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

Цитата:

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

pozitiffcat 09.06.2012 15:01

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

Сообщение от MoKa (Сообщение 229894)
Не забывай о том что пишешь то ты открытый движок, для разработчика.

Движок закрыт в DLL. Просто функции движка позволяют на основе него набросать побыстрому свой каркас, я бы даже сказал не позволяют, а на этом движке необходимо затачивать свой удобный каркас (в PDF есть пример с освещением)... это лишь набор функций, что бы не ковыряться с гапи, а быстро начать делать что-либо... причем будут дополнения в виде bullet, physx, squall , etc.

HolyDel 09.06.2012 15:52

Ответ: C3D Engine
 
новая версия работает медленнее. в два раза. когда все кубы видны. причем как то странно работает - если просто отъехать от стартовой точки назад - то фпс 70 если смотреть на кубы сверху то фпс 30. wtf?
нет, не так. если ему дать просраться на 5к фпс, то потом при взгляде на все кубики фпс падает до 30-ти. возможно проблема в моих драйверах. да - это стопудово в драйверах дело. аксель себя ведет также - если не дать просраться демке, то на 4к кубах она дает 900фпс вместо 750... странно, надо думать как это дело лечить.
обертка над гапи не должна проигрывать в производительности конструктору типа unity.

pozitiffcat 09.06.2012 16:42

Ответ: C3D Engine
 
O_o у меня наоборот быстрее (NVIDIA GT240, Intel E3300) 50 - 60 fps давало, вместо прошлой 20-25, я вообще не понимаю как у меня такая маленькая производительность.. я вообще все убирал, и все равно мало FPS.. как ты компилишь? MSVS ? Может какие-то особенные флаги компилятора?

HolyDel 09.06.2012 17:04

Ответ: C3D Engine
 
я ж написал что ето в моем железе проблемы.
работать стало быстрее. с 60 фпс до 70.
если не давать демке работать на 1000+ фпсах.

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


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

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