601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1

3d рендеринг на cpu

09.09.2014, 21:50. Показов 1218. Ответов 4

Author24 — интернет-сервис помощи студентам
Здравствуйте.
Существуют ли какие-то графические библиотеки для рендеринга 3д моделей на cpu? Вопрос, в первую очередь, касается даже не самого рендеринга, а скорее преобразования из формата X в Y, где X -- некий 3д формат, а Y -- некий 2д формат (в идеале вектор, или набор инструкций для рисования на каком-нибудь cairo/skia-бэкенде, или что-то в этом роде), отрендеренный с известной позицией камеры и вектором ее направления.
Более частная задача, которая меня интересует (если вдруг такой либы нет): отображение front, side и top-view некой 3д-модельки. Моделек несколько (не очень много, но и не 5-10 штук, иначе бы все эти виды проще было бы нарисовать непосредственно в svg, и я это понимаю), но различаются они текстурами, возможно, прозрачностью и другими параметрами, т.е. все это можно задать в шаблоне того же x3d, и, я думаю, любого другого формата. После подобного преобразования в 2д front, side и top-views кешируются, запоминаются, ибо модельки эти меняются нечасто, поэтому вопрос в производительности не стоит. Кроме того, сами эти модельки не очень сложные. Но для соблюдения принципа единого источника хотелось бы получать эти картинки именно из 3д, если это возможно.

ПС. сам я пользуюсь Qt, и у QPainter-а такой возможности нет. По cairo погуглил, но, насколько я понял, гораздо чаще людям наоборот нужно ускорить 2д графику на gpu. Со skia просто не работал, да и не так она распространена как отдельная библиотека, потому, если у нее есть какой-то подобный функционал, прошу подсказать. Знаю еще библиотеку fog (сейчас вроде в blend переименовали, и офф релиза пока еще нет), она тоже таким не занимается.
Нестрашно, если либа будет написана на си/плюсах (в т.ч. с qt), или на делфях, на хаскеле, луа или джаваскрипте. куда важнее, чтобы она не использовала какие-то жутко специфичные для платформы штуки, от которых сложно будет избавиться при портировании на плюсы, или при использовании ее ABI.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.09.2014, 21:50
Ответы с готовыми решениями:

3д моделирование и рендеринг одно и тоже?Что такое рендеринг?
3д моделирование и рендеринг одно и тоже?Что такое рендеринг?

CPU-Z показывает частоту CPU в 2 раза меньше, чем должно быть
Ребят, хелп! Недавно проапгрейдил ПК, заменил материнку на ASRock b450m steel legend, процессор на AMD Athlon 200GE, и оперативку на...

CPU греется до 75 градусов , проц : Intel Pentium(R) 4 CPU 3.00GHz
У меня проблема, CPU греется до 75 градусов , проц : Intel Pentium(R) 4 CPU 3.00GHz материнка : ASRock P4VM890. Минимум 65, не знаю что...

4
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
10.09.2014, 17:55
А что не так рендеринг на gpu? Он может совсем отсутствовать на целевой машинке?
В общем и целом можно завести opengl на cpu через llvmpipe, например. Ещё есть куча разных рендеров, используемых в 3д-редакторах, часть из них можно использовать самостоятельно.
0
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
10.09.2014, 23:35  [ТС]
Цитата Сообщение от NoMasters Посмотреть сообщение
Он может совсем отсутствовать на целевой машинке?
та да.. или настроен неправильно, или комп старый... да и просто раз уж если на gpu-то сделали, то на cpu и подавно что-то должно ж быть
возможно, конечно, я и ошибаюсь, но думаю, что gpu, в первую очередь, важен для real-time рендеринга. но для качественных оффлайн расчетов что-то делается проще и на cpu. тем более, всякие рекурсии при рейтрейсинге, расчет каких-то сложных моделей освещения... тут как-то gpu уже теряет такой паралеллизм по данным, основное свое преимущество, разве нет?
а у меня реально эти модельки практически не изменяются. я в общем-то могу отрендерить, например, и у себя на компе, а потом все в базу занести. но база получится просто громадная. в программе сам пользователь выбирает, с какими моделями ему работать, и зачастую ему нужно всего 20-30 штук, не более. и работает он с ними исключительно в 2д, 3д -- это уже просто для просмотра конечного результата.
да и делали ж раньше демо-сценки, как-то а у меня тут задача попроще: не нужно рассчитывать взаимодействие с другими объектами, никаких поворотов и преобразований в реальном времени не нужно, просто одну поверхность (вернее, тело) отрендерить в картинку. Правда, потом эту картинку нужно будет масштабировать, поэтому желателен все же вектор или что-то в этом роде.
Цитата Сообщение от NoMasters Посмотреть сообщение
В общем и целом можно завести opengl на cpu через llvmpipe
пока смотрел только с сторону OSmesa, или как ее там. судя по всему, не так-то просто ее еще скомпилить. Да и потом, много ли даст реализация OpenGL 1ой версии, пока под вопросом. но в сторону llvmpipe посмотрю, если найду хорошую небольшую встраиваемую библиотеку только лишь под OpenGL.
Цитата Сообщение от NoMasters Посмотреть сообщение
Ещё есть куча разных рендеров, используемых в 3д-редакторах, часть из них можно использовать самостоятельно.
во-во, вот это самое интересное какие, например?
нашел я совтвеерный рендерер в irrlicht, вроде разбирался, по туториалу №13, что можно рендерить в текстуру, а затем экспортировать в картинку ее можно с помощью driver->createImageFromData

Не по теме:

пишу, если вдруг кто-то сюда наткнется с похожим вопросом

. Одна печаль, что все же он не поддерживает NURBS (хотя, может, ну и хрен с ними), и пока не понятно, чем он помогает при ray-tracing-е (преломление учитывать было бы совсем классно, модельки бывают "стеклянные"). да и как я понимаю, все же это больше движок для игр, чем для рендеринга как такового, и подсознание говорит, что это не совсем то, что мне нужно но посмотрим.
0
Псевдослучайный
1946 / 1145 / 98
Регистрация: 13.09.2011
Сообщений: 3,215
11.09.2014, 19:46
Цитата Сообщение от NEbO Посмотреть сообщение
какие, например?
Если нужна крутая рендилка, можно взять LuxRender. Но он околофизический и потому весьма неспешный.
1
601 / 468 / 73
Регистрация: 22.01.2009
Сообщений: 1,180
Записей в блоге: 1
12.09.2014, 05:23  [ТС]
уже, конечно, нагрепал http://en.wikipedia.org/wiki/L... g_software, но все равно спасибо, что помогаете

Не по теме:

как обычно, задаешь вопрос, и тут же приходят правильные идеи для поискового запроса:)

правда, сам я смотрю больше в сторону LGPL-ных, типа pixie, мне они больше, по лицензии, подойдут.
осталось таки разобраться, как они работают и подобрать нужные параметры по качеству/производительности (надеюсь, что это возможно, хотя бы ограничить трассировку лучей до выхода из предмета -- за ним ведь ничего нет, и количество источников света постоянное, и всегда находятся в одних и тех же точках, как и камера). Параллельно сам разбираюсь с алгоритмами, мало ли что там понадобится соптимизировать(убрать), ну и с блендером. Вообщем, полный хелло, 3д-ворлд

Добавлено через 5 часов 20 минут
вообщем, пожалуй, я определился.
пишу опять же для тех, кто столкнется с чем-то подобным.
в результате сравнения всех этих библиотек, пожалуй, самой простой мне показалась pixie. замечательно то, что можно вполне себе спокойно сделать свою длл-ку для дисплея, то есть рендерить напрямую в какой-нибудь массив в памяти, или же в QImage, или в wxBitmap, или во что кому нужно. как это сделать, написано тут. таким образом ее можно встроить в свое приложение.
Качество рендеринга и все параметры задаются в RIB-файле описания сцены, о котором, в первом приближении, можно узнать из примеров в гугле, а полная документация находится на сайте renderman-а: http://renderman.pixar.com/res... ckref.html . Но нужно учитывать, что pixie может что-то не поддерживать или поддерживать, но чуть по-другому.
RIB-файл не обязательно должен быть в текстовом виде, можно и напрямую вызывать апи-функции из си-шного файла.
Пример
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include "ri.h"
 
RtPoint Square[4] = { { .5,.5,.5} ,{.5,-.5,.5} , {-.5,.5,.5} , {-.5, -.5 , .5}};
static RtColor Color = {.2,.4,.6};
 
int main(){
    RiBegin("#");
    RiDisplay("square.tif" , "framebuffer" ,"rgba" , RI_NULL);
    RiWorldBegin();
    RiSurface("constant" , RI_NULL);
    RiColor((RtColor){.2, .3, .9});
    RiPatch(RI_BILINEAR,RI_P,(RtPointer)Square,RI_NULL);
    //RiPatch (RI_BICUBIC,RI_P,(RtPointer)Square,RI_NULL);
    RiWorldEnd();
    RiEnd();
    return 0;
}

то есть внешние файлы можно вообще не создавать, что удобно, когда речь идет именно о встраиваемом решении.
из недостатков: "официальных" примеров очень мало и они не работают. Но с помощью гугля мне удалось добиться работоспособности, по крайней мере некоторых.
Ну и еще, лично для меня, как не специалиста по графике, серьезным недостатком послужило и то, что не смог найти каких-то простых примеров этих файлов, так сказать, какого-то dummy's guide-а: как описывать простые сцены, позицию камеры, источники света, а потом уже только включать глобальные освещения и рейтрейсинги всякие... Но, подозреваю, что для человека, который в 3д графике разбирается, не составит труда извлечь нужную информацию из документации.
Лицензия LGPL. Вообщем, штука неплохая.
Также можно взглянуть на G3D, он под BSD-лицензией. По крайней мере, по описанию проекта, он позволяет осуществить рендеринг всякий разный, на cpu. И документация у него мне показалась поприятнее. Но это монстр, из которого, судя по всему, придется выпиливать конкретный кусочек.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.09.2014, 05:23
Помогаю со студенческими работами здесь

M2N68 AM SE2. This CPU is not supported by this model. Please check CPU QVL on ASUS website
При загрузке БИОС выдает ошибку "This CPU is not supported by this model. Please check CPU QVL on ASUS website." и нажмите f1, нажимаю f1 и...

This kernel requires an x86-64 CPU but only detected on i686 CPU при установке Kali
Не могу установить kali на виртуалку - this kernel requires an x86-64 CPU but only detected on i686 CPU.

Warning! CPU has been changed. Please re-enter CPU settings in the CMOS setup and remember to save before quit!
Warning! CPU has been changed. Please re-enter CPU settings in the CMOS setup and remember to save before quit! выдаёт компьютер при...

Материнская плата M5A78L-M LE (БИОС) БИОС выдает "This CPU is not supported by this model. Please check CPU QV
Здравствуйте! Материнская плата M5A78L-M LE, процессор AMD Phenom II X4 965 Black. Сегодня обновил БИОС с версии 1102 до 1601 – от сюда...

Выбор между системы на базе CPU Intel Core 2 Quad и CPU AMD Athlon(tm) 7750 Dual-Core Processor 3.2
вот две кофеварки 1) CPU Intel Core 2 Quad Q6600 2.4МГц/4*2МБ/1066МГц Zalman CNPS8000T Gigabyte GA-X48-DS4 HDD...


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

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

Новые блоги и статьи
Исследование рантаймов контейнеров Docker, containerd и rkt
Mr. Docker 11.05.2025
Когда мы говорим о контейнерных рантаймах, мы обсуждаем программные компоненты, отвечающие за исполнение контейнеризованных приложений. Это тот слой, который берет образ контейнера и превращает его в. . .
Micronaut и GraalVM - будущее микросервисов на Java?
Javaican 11.05.2025
Облачные вычисления безжалостно обнажили ахиллесову пяту Java — прожорливость к ресурсам и медлительный старт приложений. Традиционные фреймворки, годами радовавшие корпоративных разработчиков своей. . .
Инфраструктура как код на C#
stackOverflow 11.05.2025
IaC — это управление и развертывание инфраструктуры через машиночитаемые файлы определений, а не через физическую настройку оборудования или интерактивные инструменты. Представьте: все ваши серверы,. . .
Инъекция зависимостей в ASP.NET Core - Практический подход
UnmanagedCoder 11.05.2025
Инъекция зависимостей (Dependency Injection, DI) — это техника программирования, которая кардинально меняет подход к управлению зависимостями в приложениях. Представьте модульный дом, где каждая. . .
Битва за скорость: может ли Java догнать Rust и C++?
Javaican 11.05.2025
Java, с её мантрой "напиши один раз, запускай где угодно", десятилетиями остаётся в тени своих "быстрых" собратьев, когда речь заходит о сырой вычислительной мощи. Rust и C++ традиционно занимают. . .
Упрощение разработки облачной инфраструктуры с Golang
golander 11.05.2025
Причины популярности Go в облачной инфраструктуре просты и одновременно глубоки. Прежде всего — поразительная конкурентность, реализованная через горутины, которые дешевле традиционных потоков в. . .
Создание конвейеров данных ETL с помощью Pandas
AI_Generated 10.05.2025
Помню свой первый опыт работы с большим датасетом — это была катастрофа из неотформатированных CSV-файлов, странных значений NULL и дубликатов, от которых ехала крыша. Тогда я потратил три дня на. . .
C++ и OpenCV - Гайд по продвинутому компьютерному зрению
bytestream 10.05.2025
Компьютерное зрение — одна из тех технологий, которые буквально меняют мир на наших глазах. Если оглянуться на несколько лет назад, то сложно представить, что алгоритмы смогут не просто распознавать. . .
Создаем Web API с Flask и SQLAlchemy
py-thonny 10.05.2025
В веб-разработке Flask и SQLAlchemy — настоящие рок-звезды бэкенда, особенно когда речь заходит о создании масштабируемых API. Эта комбинация инструментов прочно закрепилась в арсенале разработчиков. . .
Квантовое будущее для разработчиков: Что необходимо знать сегодня
EggHead 10.05.2025
Квантовые вычисления больше не являются чем-то из области научной фантастики. Пока большинство разработчиков погружены в осваивание очередного JavaScript-фреймворка или изучение новых возможностей. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru