Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2017, 12:08   #1
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию Посоветуйте 3D движок для программы

Здравствуйте!
Посоветуйте для C++ (или C#) 3D движок.

Имеется программа написанная на Delphi + GLScene.
3D часть программы - основная, но не единственная (есть еще куча форм, никак не связанных с 3D + формирование отчетов и т.д.).

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

От движка требуется, что бы он мог без тормозов отрисовывать сцену в которой создано много простейших объектов (от 10 тыс. до 500 тыс).

В основном это малополигонные аналоги куба и цилиндров без текстур, загруженные из *.STL файла.
Но так же на сцене могут находиться более сложные 3D модели с текстурами, загруженные из *.obj файлов, но их не много, от 10 до 500 шт. (объем файлов обычно от 100КБ до 2МБ).

Все объекты находятся в неподвижном состоянии и не очень далеко друг от друга.
При отдалении камеры они все попадают на экран и рассматриваются с разных ракурсов.

Качество и красивость картинки не главное, не будет никаких эфектов взрывов, дыма и прочего.
Обработка физики тоже не нужна.
Главное производительность и возможность использования уже готовых 3D моделей с текстурами.

Так же требуется, что бы это была не отдельная среда разработки, а некий компонент, устанавливаемый в Visual Studio, т.к. помимо визуальной 3D части программы, требуется реализовать еще много всего, не связанного с 3D.

Подскажите, какой движок может подойти под эти требования?

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

Так же в ветке GLScene, народ разрабатывает на основе того же GLScene - GLSceneVKS / DGLEngine, прикручивают Vulkan api.
По идее, благодаря Vulkan должна сильно увеличиться производительность и это то что нужно.
Но к сожалению, до этого еще далеко (там уже есть какая-то пре-альфа версия, но устанавливаться она не хочет).

Последний раз редактировалось ZBEP; 13.01.2017 в 12:14.
ZBEP вне форума Ответить с цитированием
Старый 13.01.2017, 13:07   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Тут проще что-то свое набросать, если не будете дальше усложнять 3Д часть.

Цитата:
По идее, благодаря Vulkan должна сильно увеличиться производительность и это то что нужно.
Но к сожалению, до этого еще далеко (там уже есть какая-то пре-альфа версия, но устанавливаться она не хочет).
Теоретически да, но все зависит от того как написано. В вашем случае разницы с новыми директами то же вряд ли стоит ожидать.
p51x вне форума Ответить с цитированием
Старый 13.01.2017, 15:38   #3
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Свое конечно хорошо, но под GPU я толком не писал.
А GLScene и FMX как-то не полностью задействуют видеокарту.

Вот к примеру совсем маленький демонстрационный проект, в котором создается куб из кубов (40 х 40 х 40 = 64 000 объектов), без текстур, статичные.

Source: https://yadi.sk/d/TNHucANY38Rqib
Exe: https://yadi.sk/d/O_uMktwK38Rqkq

Полный код демки с использованием GLScene:
Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, GLScene, GLObjects, GLCoordinates,
  GLWin32Viewer, GLCrossPlatform, GLBaseClasses, GLBitmapFont, Vcl.ExtCtrls;

type
  TForm1 = class(TForm)
    GLScene1: TGLScene;
    GLSceneViewer1: TGLSceneViewer;
    GLCamera1: TGLCamera;
    World: TGLDummyCube;
    FRoom: TGLDummyCube;
    procedure GLSceneViewer1MouseWheel(Sender: TObject; Shift: TShiftState;
      WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
    procedure GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    procedure FormShow(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  mx,my:integer;
  GLCube:array[0..100000] of TGLCube;

implementation

{$R *.dfm}

procedure TForm1.GLSceneViewer1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  mx:=x;
  my:=y;
end;

procedure TForm1.GLSceneViewer1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  //Поворот сцены
  if ssLeft in shift then
  begin
    FRoom.TurnAngle :=FRoom.TurnAngle -(mx-x)/8;
    World.PitchAngle:=World.PitchAngle+(my-y)/8;
    if World.PitchAngle<0   then World.PitchAngle:=0  ;
    if World.PitchAngle>170 then World.PitchAngle:=170;
  end;

  mx:=x; my:=y;
end;

procedure TForm1.GLSceneViewer1MouseWheel(Sender: TObject; Shift: TShiftState;
  WheelDelta: Integer; MousePos: TPoint; var Handled: Boolean);
begin
  //Приближение и отдаление камеры.
  GLCamera1.Position.y:=GLCamera1.Position.y-(GLCamera1.Position.y/(WheelDelta/8));
end;

procedure TForm1.FormShow(Sender: TObject);
var n, ix,iy,iz, size :integer;
begin
  Form1.Caption:='Loading';
  n :=0;
  size:=20;
  World.PitchAngle:=90;

  //Создание кубов
  for ix:=-size to size do
  for iy:=-size to size do
  for iz:=-size to size do
  begin
    GLCube[n]:=TGLCube.Create(Form1);
    GLCube[n].Parent:=FRoom;
    GLCube[n].Position.SetPoint(2*ix,2*iy,2*iz);
    GLCube[n].Material.FrontProperties.Diffuse.SetColor(random(100)/100,random(100)/100,random(100)/100);
    inc(n);
  end;
end;

end.
Аналогичный проект на FMX - адски тормозит.
GLScene работает быстрее, но все равно тормозит сильно.

Имею ввиду работу программы именно после того, как созданы все объекты (разворот, перемещение сцены, отдаление и приближение камеры).
При этом нагрузка на CPU и GPU - минимальна.

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

П.с.
Я понимаю конечно, что сравнивать глупо, но так, просто ради примера.
В программе у меня есть экспорт всей сцены в один общий *.obj файл для последующего импорта в 3Ds Max.

И вот если полученный файл открыть, в том же 3D Builder (маленькая, стандартная прога для просмотра 3D объектов в Win10), то там никаких тормозов и подавно нет, собственно как и в самом 3Ds Max.
Но если взять эту же модельку и загрузить обратно в программу и разместить на сцене только ее, то тормозит еще сильнее, чем до экспорта.

Если есть у кого возможность, то залейте аналог этой демки "куб из кубов (40 х 40 х 40 = 64 000 объектов)" с возможностью поворота сцены, собранной на каком-нибудь С++ движке.
Сравнить производительность.

Последний раз редактировалось ZBEP; 13.01.2017 в 18:15.
ZBEP вне форума Ответить с цитированием
Старый 13.01.2017, 18:20   #4
Croessmah
Вредный кошак
Участник клуба
 
Аватар для Croessmah
 
Регистрация: 14.10.2012
Сообщений: 1,159
По умолчанию

Может попробовать какой-нибудь Ogre3D?
Но на счет производительности ничего не скажу.
Croessmah вне форума Ответить с цитированием
Старый 13.01.2017, 19:35   #5
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Цитата:
Сообщение от Croessmah Посмотреть сообщение
Может попробовать какой-нибудь Ogre3D?
Но на счет производительности ничего не скажу.
Спасибо!
На первый взгляд, судя по описанию подходит и глядя вот на это видео: https://www.youtube.com/watch?v=FnVuuNqKDfE
Производительность должна быть повыше, чем у GLScene.

Правда он старенький.
Последний релиз 24 ноября 2013г.
И если верить сайту только 32-bit и для Visual C++2012

П.с.
Есть кто-нибудь, у кого он установлен?
Проверить, как себя демка поведет..

Последний раз редактировалось ZBEP; 13.01.2017 в 19:50.
ZBEP вне форума Ответить с цитированием
Старый 21.01.2017, 01:48   #6
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

Наткнулся на то, что Unity, вроде как можно подружить с Visual Studio.
Подскажите (кто в курсе), это позволит только более удобно редактировать код "скриптов" Unity, или будет доступен полный функционал C# с возможностью создавать обычные Win формы, формировать отчеты и т.д.?
ZBEP вне форума Ответить с цитированием
Старый 21.01.2017, 07:08   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

С чего бы от интеграции с студией в движке появится новый функционал? Логика где? Студия движок не дописывает.
p51x вне форума Ответить с цитированием
Старый 24.01.2017, 00:05   #8
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

Цитата:
Сообщение от ZBEP Посмотреть сообщение
Наткнулся на то, что Unity, вроде как можно подружить с Visual Studio.
Unity автоматически при установке подключит VS в качестве среды разработки.


Цитата:
Сообщение от ZBEP Посмотреть сообщение
Подскажите (кто в курсе), это позволит только более удобно редактировать код "скриптов" Unity, или будет доступен полный функционал C# с возможностью создавать обычные Win формы, формировать отчеты и т.д.?
Нет, в Unity функционал .NET далеко неполный и Win формы не поддерживает. Отсчёты формировать можно, если вы сами напишите код для этого в виде скриптов на C#. У Unity свои классы для UI и визуальный редактор для UI (графического интерфейса пользователя). По поводу производительности, а именно, отображения такого большого количество объектов на сцене одновременно, ничего сказать не могу.

У Unity есть магазин Asset Store, где можно найти подходящие бесплатные и платные пакеты, типа этого: Cubiquity for Unity (Voxel Engine)

Последний раз редактировалось 8Observer8; 24.01.2017 в 00:14.
8Observer8 вне форума Ответить с цитированием
Старый 26.01.2017, 12:43   #9
ZBEP
Форумчанин
 
Аватар для ZBEP
 
Регистрация: 23.03.2009
Сообщений: 334
По умолчанию

8Observer8, спс.
Собрал на юнити демку куба из 40х40х40 кубов - тоже тормозит ужасно, при обзоре всей конструкции
Так что Unity отпадает..
ZBEP вне форума Ответить с цитированием
Старый 26.01.2017, 13:03   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Если вам именно подобные сцены нужны, то заюзайте инстансинг. А если каждый куб попиксильно отрисовывать, то любой движок будет тормозить.
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Посоветуйте движок для 2D игр на java ПК Ромашка2002 Общие вопросы по Java, Java SE, Kotlin 1 01.04.2015 21:22
Посоветуйте хороший 3Д игровой движок для создания игры с элементами RPG. MaratZahidyl Gamedev - cоздание игр: Unity, OpenGL, DirectX 8 10.12.2011 23:51
Посоветуйте 3д движок для .mesh ALKOrobot C++ Builder 0 28.07.2011 15:32
Посоветуйте 3D движок для Qt iukash Qt и кроссплатформенное программирование С/С++ 0 08.01.2011 16:44
Выбираю БД движок для Delphi-программы pvasya БД в Delphi 13 06.12.2009 13:48