(рендеринг частиц) Должен ли я изучать шейдер или OpenCL?

Я пытаюсь запустить 100000 и более частиц. Я наблюдал за многими учебниками и другими примерами, демонстрирующими мощь шейдеров и OpenCL.

В одном примере, который я наблюдал, положение частиц вычислялось на основе положения указателя мыши (физического устройства, которое вы держите одной рукой и курсором на экране). Положение каждой частицы хранилось как RGB. R представляет собой x, G y и B, z. И передан в пиксельный шейдер. Затем каждый цветной пиксель был нарисован как положение частицы после этого.

Однако я чувствовал себя абсурдно по отношению к этому подходу.

  • Не следует ли избегать такого подхода или стиля кодирования?
  • Shoudn't Я узнаю, как использовать OpenCL и использовать многопоточность GPU, чтобы напрямую указать и передать мой предназначенный код?

Ответ 1

Не следует ли избегать такого подхода или стиля кодирования?

Почему?

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

Вы никогда не должны бояться переориентировать что-то для другой функциональности. Текстуры не хранят цвета; они хранят данные, которые могут быть цветными, но это может быть и другое. Чем раньше вы перестанете думать о текстурах как изображениях, тем лучше вы будете в качестве графического программиста.

Используются GPU и API. Используйте его, как вы считаете нужным; не позволяйте, как вы думаете, что API должен использоваться для ограничения вас.

Shoudn't Я узнаю, как использовать OpenCL и использовать многопоточность GPU, чтобы напрямую указать и передать мой предназначенный код?

Вчера я бы сказал "да". Однако сегодня это было выпущено: OpenGL вычисляет шейдеры.

Тот факт, что OpenGL ARB и Khronos создали этот тип шейдера и т.д., - это молчаливое признание того, что взаимодействие OpenCL/OpenGL не является наиболее эффективным способом генерации данных для целей рендеринга. В конце концов, если бы это было так, в OpenGL не было бы необходимости иметь обобщенную вычислительную функциональность. Было 3 версии GL 4.x, которые этого не предоставили. Тот факт, что он здесь сейчас, в основном, говорит ARB: "Да, хорошо, нам это нужно".

Если ARB, укомплектованный многими людьми, которые производят аппаратное обеспечение, считает, что CL/GL-взаимодействие не является самым быстрым способом, то довольно ясно, что вы должны использовать вычислительные шейдеры.

Конечно, если вы пытаетесь что-то сделать прямо сейчас, это не поможет; только NVIDIA имеет поддержку шейдера. И даже это только в бета-драйверах. Пройдет много месяцев, прежде чем AMD получит поддержку для них, и еще многое еще до того, как эта поддержка станет достаточно прочной и стабильной для использования.

Тем не менее, вам не нужны вычислительные шейдеры для генерации данных. Люди использовали преобразовать обратную связь и геометрические шейдеры, чтобы делать LOD и отрисовку усечения для инстанционного рендеринга. Не бойтесь думать за пределами "OpenGL draws" материал ".

Ответ 2

Чтобы моделировать частицы в OpenCL, вы должны попробовать "Еще один редактор шейдеров" /http://yase.chnk.us/ - он убирает все хитрые части и позволяет вам перейти к мясу кодирования алгоритмов контроля частиц. В ВАШЕМ БРАУЗЕРЕ. Ничего не загружать, нет учетных записей для создания, просто измените любые примеры, которые вы найдете. Это взрыв.

https://lotsacode.wordpress.com/2013/04/16/fun-with-particles-yet-another-shader-editor/

Я никоим образом не связан с yase.