Pull to refresh

Comments 32

Интересно.
А вот на такой вопрос сможете ответить: в openGL 4 есть трассировка каустики?
Ну, встроенной, наверно нет, но каустику можно нарисовать и средствами более ранних opengl.
Действительно, даже старые версии позволяли это:
http.developer.nvidia.com/GPUGems/gpugems_ch02.html
www.gamedev.ru/code/articles/caustic

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

Вот, кстати отличная иллюстрация построения простой каустики в реальном времени (обычный webGL, каустика, к сожалению, работает лишь в хроме):
madebyevan.com/webgl-water/
А кто-нибудь может мне объяснить, доросли ли современные мощности видеокарт для отрисовки в реальном времени освещения методом трассировки лучей? Или все же там применяются какие-то упрощения и ухищрения?
В Octane точно есть каустика (пр. www.octanerender.com/forum/viewtopic.php?f=6&t=9448 ), но сам с ним не разбирался, так как осх-версии до сих пор нет. Вообще все анбиасы для большинства действительно скорее поиграться, я не знаю ниодного фрилансера, например, который бы на анбиасах считал 3д. В то же время знаю студию, которая мультики в Максвелле рендерит. Интересно, что дальше будет.

ps А Keyshot почему забыли?
Keyshot и Shot используют iRay. Кстати, ускорение от видяшки чувствуется, и вращать вьюпорт в реальном времени тоже возможно. Хорошая программка.
1. Отсутствует интерактивная визуализация (картинку нельзя покрутить в реальном времени), однако при использовании 2-х видеокарт iRay рендерит интерактивно (не знаю, как на счет geforce, но при использовании quadro + tesla работает точно).

Если про ActiveShade — то оно есть, но в Subscription Advanced Pack.
Тук
Cycles после одной минуты на GPU:


Ролик для желающих посмотреть, как работает в реальном времени:
vimeo.com/27409184

Ещё много видеоуроков по Cycles: cgcookie.com/blender/category/tutorials/cycles-tutorials/

Про небо, а что вы понимаете под физ. небом? В Cycles можно организовать освещение по hdr-окружению (пример) или сгенерировать текстуру неба с помощью ноды «Sky texture».

«Cycles: Добавить SSS» — можно сымитировать с помощью разных материалов. Да, это не настоящий SSS, но если никому не говорить, никто не догадается =)

Indigo, Lux рендеры не тестировались, т.к. не являются 100% GPU рендерами.
А вот это зря. 100%-го GPU-рендеринга в природе не существует, это изобретение маркетологов. Всякие расчёты замкнутых пространств, сортировки и процедурные генерации нетривиальных текстур всегда будут на CPU, ибо векторизовать там практически нечего. А вот пустить тысячи лучей во всех направлениях — это как раз задача GPU во всех движках, где GPU используется.

Что касается LuxRender, он вообще стоит на отдельном пьедестале: пока люди разбираются с отключённой каустикой в Octane, LuxRender по умолчанию работает в полном спектре (а не RGB), в воздухе при температуре 25 градусов и имитирует существующие модели камер при цветокоррекции.
Забыл сказать, что моя видеокарта GeForce GTX 275 достаточно старая и современные видеокарты могут выдают картинку выше в разы быстрее.
Physically based sky присутствует почти во всех пакетах, обычно позволяет задавать географические координаты и дату/время, исходя из этого строит освещение: ставит солнце и красит небо. Ести нода Sky texture позволяет это делать, то это и есть физ. небо
как-нибудь потестю :)

Очень жаль, что отсутствуют универсальные стандарты в рендерах.
Вот есть шейдеры для OpenGL, которые можно вставить в любой движок, и материал будет вести себя как надо.
А вот с трассировщиками пути так просто дело не стоит. Созданные в Максвелле материалы — в iRay никак. Каждая организация «гнет свою линию».
а можно в блендоровском формате, а то импортирую в блендер и пусто, я хотел скорость протестировать у меня видеокарта radeon 4870, но слабый проц и оперативки 2гб
Без каустики и SSS (но со всякими там scene-space ambient occlusion), сценеры уже лет пять-шесть как умеют делать такое не только в реалтайме, но и запихивать в 4-килобайтные exe'шники. Например (утуб).
И еще вопрос программистам.
Вот существует madebyevan.com/webgl-path-tracing/ трассировщик пути на web-gl. Выходит, для рендеров вовсе не нужды во всяких там CUDA, OpenCL, достаточно просто писать программу на шейдерах. Я слышал (не могу найти ссылку), что на шейдерах и физику можно писать.
Если язык шейдеров, использует вычислительные ядра GPU, и отлично работает с float, почему существуют CUDA, Firestream, PhysiX и прочие?
Насколько я могу догадываться (а я довольно нуб в теме CUDA-и-пацаны), причины примерно две:
  1. CUDA появилась раньше, чем GL/D3D-биндинги к шейдерам дали возможность делать аналогичное, а железо уже умело
  2. GL/D3D всё же рассчитаногвоздями забито на расчет и вывод графики пользователю в глаза, поэтому там свой собственный конвейер, другие требования к точности и прочая, прочая
Традиционное объяснение — разные технологии с разными возможностями. Например, OpenCL умеет выполнять вычисления одновременно и на CPU и на GPU. Но результатом является крайне сложный для понимания код (на мой взгляд). CUDA имеет красивый си-подобный синтаксис и специальные оптимизации в компиляторе. Все эти технологии в чём-то особенны и удобнее других.

А вот что выходит на практике:
  1. Microsoft-у выгоден DirectX+ HLSL для игр и AMP для вычислений, поскольку привязка приложений к нему означает привязку к продуктам Microsoft
  2. Mac OS, Linux и прочим осям выгодны OpenGL и GLSL, поскольку разрабатываются независимой компанией, которая не станет требовать отчислений
  3. CUDA железно выгоден только NVIDIA
  4. FireStream железно выгоден только AMD
  5. OpenCL не выгоден никому, поскольку разрабатывает его независимая организация, а реализация общедоступного стандарта не даёт возможности производителям привязать программы к своему оборудованию. На практике это выражается в медленном переходе на новые версии стандарта OpenCL по сравнению со скоростью перехода на новые версии CUDA и FireStream.
кстати, да!
Надо сказать, что GLSL возможен практически на любых видеокартах и при любых осях.
Но почему, тогда все кинулись делать трассировщики пути на CUDA, а никак не на шейдерах, которые появились значительно раньше CUDA.
Забавно, что я, например, наоборот о трассировщиках на CUDA не слышал совсем ничего, а на шейдерах — уймищу всего. Да и по ссылкам, которые я привел выше, как раз такие шейдерные трассировщики и есть.
На самом деле для трассировки лучей от шейдеров нужны как минимум две вещи: (а) честная поддержка ветвлений и циклов (они появились, емнип, в GLSL 1.20), (б) довольно большой допустимый размер программы. Все это стало массово доступно где-то в районе 2005 года, хотя, например, мой ноутбук 2007 года напрочь не умеет ветвиться, и инструкций во фрагментном шейдере у него может быть всего 64 штуки — каши особой не сваришь.
ноутбук случайно не с Intel GMA? :)
Не, там что-то вроде ATI rs485, который на самом деле модификация r300.
Предположу обратное: OpenCL более выгоден разработчикам ПО, т.к. не привязывается к конкретному производителю железа. Разработчик ПО на CUDA рискует пострадать, например, от внезапного повышения цен на карты NVIDIA. И спрос на его ПО упадет из-за того, что оно не универсально и не работает на картах других производителей. ИМХО.
Короче, я так думаю, что кардинально этот вопрос может решить открытое аппаратное обеспечение, чтобы производители ПО могли модифицировать железо под свои нужды.
OpenCL спонсируется Apple и впервые как полноценной реализация появился именно в Mac OS X 10.6.

На текущий момент (да и самого начала) openCL был на маке из коробки причем и для gpu и cpu сразу.

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

Я думаю что openCL это будущее, при должной степени старания вендоров
Немного промазал с ответом (см. выше)
Sign up to leave a comment.

Articles