У последних поколений видеокарт NVIDIA и AMD есть фича, которая позволяет одному GPU перекидывать память в другой минуя системную память. Если собрать ящик из 6-8 таких GPU, то фреймрейты будут что надо, и картинка будет хорошей. Вопрос только зачем это? Для студии анимации это имеет смысл, чтобы сократить время на настройку сцен. Для игр — не понять. Установка слишком дорога, чтобы найти масс-маркет.
да, это движок Brigade. Подразумевается, что он будет игровым. Наша разработка тоже в эту сторону движется, но лишь как очень-очень ранний прототип. До игр еще далеко.
для игр multi-GPU используют через SLI или Cross-Fire, когда устройства логически объединяются в одно. Чтобы делать рендеринг на нескольких картах, надо значительно перерабатывать игровой движок и тратить много сил на коммуникацию между GPU. На старых поколениях это был гемор. На новых намного легче, но мало кто это будет делать в ближайшее время, рынка нет для этого.
Думаю, нет. Создание плагина под редактор – огромная работа. Над этим проектом всего 2.5 человека работает :) Если есть желание им заняться, присоединяйтесь!
Поясните пожалуйста, что такое рантайм? Работать в 3ds Max'е, и получать моментальный отклик рендера, который рассчитывается в облаке? Не совсем понял.
Тут возникает несколько проблем:
1) Precompute. Создание качественного BVH или Kd-дерева для сцены с большим количеством полигонов – не быстрый процесс. У нас на создание BVH для сцены с 2млн полигонов уходит 300-600 ms. А что если сцена намного больше и меняется каждый фрейм, что и происходит в играх? Тут с фреймрейтом все плохо. А ведь мы еще и до рендеринга не добрались. Мы сейчас работаем над распределением построения BVH на все ядра CPU. Это должно ускорить процесс, но не так значительно, как хочется.
2) Rendering. Можно очень быстро отрендерить несколько самплов и получить шумную картинку. Если хочется лучшего качества, нужно увеличивать количество самплов рендеринга. Это линейно увеличивает время. Тут можно применять умные техники фильтрации, которые, к слову, тоже не самые быстрые.
Если грамотно распределить эти задачи между устройствами, то можно добиться хороших результатов. Тут важно, чтобы устройства в облаке были очень близко или имели быстрый доступ друг к другу. Но передача изображения по узкому каналу пользователя сведет на нет работу даже очень близко расположенных сильных устройств. В этом можно убедиться на примере сервиса OnLive.
>У нас на создание BVH для сцены с 2млн полигонов уходит 300-600 ms. А что если сцена намного больше и меняется каждый фрейм, что и происходит в играх?
в играх сцена между фреймами меняется далеко не полностью, поэтому BVH не нужно строить с нуля каждый раз, достаточно обновлять
Если карта слабая или сцена очень тяжела, то Watchdog ругается и сбрасывает рендер. В таком случае Timeout Detection and Recovery можно отключить. При установке плагина сделаем опцию отключения. Но вообще не рекомендуют это делать. Хотя ничего страшного в этом нет, карта не сгорит :)
По факту, финальный рендер лучше осуществлять без интерактивного отображения в окно. Для этого можно отключить timeout и поставить карту работать. Проверено, что рендер в таком случае может быть до 2-2.5х раз быстрее.
Есть ли сейчас возможность запустить распределенный рендер на нескольких машинах? Есть зоо-парк из почти 100 машин Core i7+GTX 570 и свободное время по ночам. Уже запускали рендер на 20 в течении недели, не очень удобно в установке и настройке, но быстрее на порядок.
Ого) 100 Core i7 + GTX 570 звучит… дорого :)
Очень интересная возможность, но на разных машинах пока проблематично. Мы только проверили концепт, что так можно сделать, но до хорошего автоматизированного решения руки еще не дошли. Можно запустить рендер на всех машинах машинах, но результат пока придется собирать руками. Вот если у вас много GPU+CPU в одной машине, то тут без проблем.
Это рабочие станции, пробовали делать обычный SLI, но он просто не поддерживается большинством программ. Несколько CPU (2 Xeon W5580) есть только на одном компьютере, но там только одна GPU (Quadro 5800). Когда посчитали время рендера получилось около месяца, собственно для этого и развернули распределенный вариант.
А Linux фермы, linux суперкомпьютеры? ARM и MIPS это весьма дешевые процессоры и из них можно весьма дешево насобирать очень мощный кластер, куда с D3D дороги никакой нет!
На ARM без проблем, про мирсы речи не было. Так C++ AMP работает, берет GPU код и транслирует его на каждую поддерживаемую платформу (x86, x64, ARM). Эта фича WARP, заложенная в DirectX 11.
OpenGL, в том числе ES, можно использовать только для простых алгоритмов рендеринга. Они просто не были созданы для такой производительности, которая требуется для unbiased рендеринга.
>> Они просто не были созданы для такой производительности, которая требуется для unbiased рендеринга.
О какой производительности идёт речь? Отрисовать 1 треугольник?
Анимацию пока нет. У нас со статикой-то проблемы возникают. Код Autodesk — такой кусок говна. 3ds Max SDK и создание плагина вызвало у нас больше проблем, чем создание самого рендера.
Под «гибридными» имел ввиду не unbiased. Почему выбор пал на unbiased? Из-за простоты реализации? Какие конечные цели проекта?
Насчет физкорректности: можно осветить синим цветом оранжевый шарик? :)
Недопонял Вас значит. Под гибридом я подразумевал метод трассировки, а не сам рендер (когда GPU лишь помогают найти пересечения лучей, но не отвечают за шейдинг). Unbiased хорошо подходит для архитектуры GPU. Простота – довольно спорный момент. Качественная реализация Bi-Directional Path Tracing или Metropolis Light Transport на GPU не так проста.
Конечная цель – рендер, наилучшим образом работающий на широком классе GPU.
>Насчет физкорректности: можно осветить синим цветом оранжевый шарик? :)
Можно. Взять например голубоватое небо с теплотой цвета 7000 Кельвинов и выше.
Не хотел нисколько принизить сложность реализации вашей работы, с вопросом про гибридность, просто думал это промежуточный этап. По ссылке что я привел — рендер с предварительными фильтрациями и трэйсингом. Он позволяет достичь очень высокой скорости на широком спектре аппаратных устройств.
Формулировка конечной цели все равно ускальзывает от меня — какова область применения? Архитектура, анимация или прокачка своих скилов?
>Можно. Взять например голубоватое небо с теплотой цвета 7000 Кельвинов и выше.
Тут вопрос с подвохом был. если взять источник синего цвета (0,0,1) и оранжевый шарик (1, 1, 0) то при при просчете диффуза он станет черным, т.к. в подавляющем большинстве даже «физкорректно» названные рендеры работают с RGB пространством покомпонентно. т.е. (0*1, 0*1, 1*0) что дает 0.
Но вообще вы молодцы что взялись за такое — буду наблюдать с интересом.
Unbiased DirectX Рендеринг на GPU, CPU и в облаке