Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
146 / 10 / 5
Регистрация: 02.02.2014
Сообщений: 209
1

Интегрировать UnrealEngine 4 в проект

11.01.2017, 21:59. Показов 524. Ответов 6
Метки нет (Все метки)

Привет всем! Есть большой солюшн VisualStudio (> 90 проектов), большая толстая система обработки данных. Возникла необходимость добавить в него реалистичную визуализацию графики в реальном времени, причем вывод делать не на экран, а в сеть. Пал выбор на UnrealEngine.

Вопрос - как это сделать? Ничего не могу найти, везде рассказывают как на нём с нуля что то сделать. Мне же нужно интегрировать его в существующее решение, пихать в него текстурки @ модели, и получать отрендеренную картинку.

Есть хоть какие-нибудь примеры того, как это делается? Я просто не знаю, с какой стороны подступиться к нему.

Заранее спасибо.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2017, 21:59
Ответы с готовыми решениями:

Интегрировать .swf в проект
Добрый день, форумчане! Подскажите, пожалуйста, как встроить .swf в проект, чтобы он не висел...

Как интегрировать в проект свой шрифт?
Как подвязать к проекту свой шрифт или как исправить замену текста на "????" при переносе программы...

Интегрировать jump point search в проект
Здравствуйте, подскажи пожалуйста как можно сделать следующее: Есть готовый прототип игры, в...

Стоит ли начать изучение разработки игр с каких-нибудь продвинутых игровых движков (CryEngine UnrealEngine)
Стоит так делать или нет?

6
Эксперт .NET
9438 / 6806 / 1094
Регистрация: 21.01.2016
Сообщений: 25,844
12.01.2017, 06:28 2
VBDUnit, этот движок заточен под создание игр. Если визуализация нужна в виде больших блестящих роботов стреляющих из плазмоганов по инопланетянам бегающим в реалистичного вида джунглях Амазонки, тогда выбор сделан верный.

Ещё настораживает фраза "вывод в сеть". Что под этим подразумевается? Стримминг?

В любом случае, тут нужно что-то по проще. Если речь идёт о красивых графиках, то гугление должно дать ссылки на готовые библиотеки, ибо задача не уникальная.
1
146 / 10 / 5
Регистрация: 02.02.2014
Сообщений: 209
12.01.2017, 11:01  [ТС] 3
Если визуализация нужна в виде больших блестящих роботов стреляющих из плазмоганов по инопланетянам бегающим в реалистичного вида джунглях Амазонки, тогда выбор сделан верный.
Как это ни странно, но нужно примерно это насыщенная детализированная реалистичная графика. Не диаграммы со схемотичными моделями, а именно так называемый "графоний", под который будет соответствующее железо. По этой причине выбор пал на большие игровые движки.

"вывод в сеть". Что под этим подразумевается? Стримминг?
Да. Это уже есть, смысл в том, чтобы результат рендеринга не выводить на экран, а в виде буфера RGB или YUV скормить модулю стримминга.

Хочу отметить, что задача стоит именно интеграционная, то есть подключить UE существующим системам. Изначально была идея взять что-то типа Corona/iRay и запустить на хорошем железе, типа iRay VCA, но, т.к. рендеры могут только визуализировать, (т.е. ни физики, ничего такого), а так же требуют совсем мощное железо, выбор пал на игровые движки, которые хоть и менее реалистичные, но зато кушают гораздо меньше.
0
Эксперт .NET
9438 / 6806 / 1094
Регистрация: 21.01.2016
Сообщений: 25,844
12.01.2017, 11:38 4
VBDUnit, хм.

Мне кажется, что правильным решением было бы не встраивание UE в текущий солюшн, а создание отдельного, стороннего проекта (на базе UE) и "соединение" проектов по средствам IPC или иных механизмов обмена данными (WCF, например). Так ты и проект не загадишь совершенно неуместным там игровым движком и оставишь простор для возможности тестирования\расширения\замены движка визуализации.

Да и реализовать такое должно быть проще. Что со стороны системы обработки данных, что со стороны UE будет только канал обмена данными и ничего лишнего.
1
146 / 10 / 5
Регистрация: 02.02.2014
Сообщений: 209
12.01.2017, 12:15  [ТС] 5
То есть, если я правильно понял, вынести весь UE в отдельный процесс и работать с ним как с сервисом? Интересная идея, спасибо!

Но тогда возникает еще один вопрос - есть ли способы передавать GPU-буферы между процессами? В рамках поставленной задачи, нужно взять текстуру, поместить её в UE, там отрендерить в другую текстуру, и взять обратно. Таких потоков может быть 1, несколько и даже много. Если я делаю кроспроцессоное взаимодействие, то мне придется каждый раз копировать GPU-буфер в ОЗУ, дальше перемещать в другой процесс, там опять закачивать в память GPU, рендерить и потом всё в обратном порядке. Есть опасения, что это может перегрузить шину видеокарты при большом количестве таких буферов. У процессов для таких дел, помимо всяких NamedPipes, есть еще SharedMemory и анонимные потоки как абстракция над ней. Есть ли какая-нибудь аналогичная штука для GPU-памяти?

Ну то есть весь сыр-бор из-за того, что через UE надо пропускать информацию, которая изначально в GPU (как Direct2D Bitmap). Если мы выносим UE в отдельный процесс, то у нас возникает проблема передачи этих самых GPU-буферов в него, и традиционный путь выглядит не очень-то быстрым. Вот.

Но за идею спасибо, сейчас хоть какое то представление архитектуры появилось
0
Эксперт .NET
9438 / 6806 / 1094
Регистрация: 21.01.2016
Сообщений: 25,844
12.01.2017, 12:41 6
VBDUnit, если твоя система обработки данных работает с GPU то, как мне кажется, тебе так или иначе придётся терпеть оверхед и вытаскивать текстурку, чтобы передать её в UE, буде он отдельным процессом или в составе текущего. Я сомневаюсь, что UE на такое рассчитан. Но я тут не специалист ни разу.

Добавлено через 1 минуту
Более того, если GPU занят твоим приложением, то я хз как в таких условиях будет работать UE. Может быть никак. Тогда без разделения этих двух вещей между двумя (и более) машинами вообще не обойтись.

Добавлено через 1 минуту
Кстати, если разделять систему обработки и систему рендеринга, то появляется возможность люто, бешено параллелить рендеринг, раскидывая "кадры" разным сервисам. Но это уже отдельная лирическая песня.
1
146 / 10 / 5
Регистрация: 02.02.2014
Сообщений: 209
12.01.2017, 14:28  [ТС] 7
Проброс текстуры можно сделать скорее всего через подмену указателей - так мы вытаскивали одно время текстуру отрендеренной графики на WPF в Direct2D. GPU может работать параллельно, сам UE запускали параллельно с нашим ПО, тут ось всё делает, но вот идея с распараллеливание по сервисам мне очень нравится! Можно даже каждый сервис заставить со своим физическим GPU.

В любом случае, спасибо, теперь я хотя бы ориентируюсь
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.01.2017, 14:28

Как интегрировать с 1с
Кто имеет опыт интеграции 1с с дотнет библиотеками. Юзать Elisy или писать com-компонент? есть ли...

Интегрировать программу в проводник
необходимо интегрировать программу в проводник. необходимо, чтобы как к примеру каспер или...

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

Интегрировать DateTimePicker в ValueListEditor
Здравствуйте! Ребята, подскажите, можно ли Интегрировать DateTimePicker в ValueListEditor. Если...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru