Comments 40
А можно где-то посмотреть видео всей этой красоты? А то у меня ось не поддерживает запуск exe файлов.
Готово. На весь экран лучше не разворачивать, youtube его изрядно так сжал, хоть я и заливал несжатое видео в разрешении 1280x1024.
Благодарю.
Думаю, через пару лет, когда процессоры еще немного подрастут, такую красоту можно будет ставить в качестве скринсейвера.
Непонятен смысл такой конструкции:

float r = (top.r < 0.5)? (bottom.r + 2*(top.r - 0.5)) : (bottom.r + 2*top.r - 1);

или на мне уже сказывается усталость и я туплю, или действительно оба выражения равны.
К тому же, использовать такие конструкции (как и другие булевы операции) следует весьма осторожно, т.к. в отличие от С / С++, в HLSL выражение вычисляется полностью (т.е. обе его части).
Это формула смешивания Linear Light. Комбинация Linear Burn и Linear Dodge.

Может вам будет понятна формула в таком виде:
if (Blend >= ½) R = Target + 2 x (Blend-½)
if (Blend < ½) R = Target + 2 x Blend -1
Случайно отправил…

>>К тому же, использовать такие конструкции (как и другие булевы операции) следует весьма осторожно
Смотрел дизасемблированный вариант шейдера, когда занимался профилированием (Nvidia Perf HUD), все выглядело достаточно оптимально. Особо не вчитывался конечно, но ничего подозрительного не увидел.
Вполне возможно, что компилятор просто выпилил дублирующее выражение.
dotsquid имел в виду, что 2 x (Blend-½) = 2 x Blend -1 если банально раскрыть скобки.
Действительно. Моя невнимательность мне точно когда-то выйдет боком.
Правильная формула:
if (Blend >= ½) R = Target + 2 x Blend — 1
if (Blend < ½) R = Target + Blend


Как получить похожий эффект без дополнительной текстуры: pastebin.com/sErK2Lsa
В первом комментарии к первой части статьи верно написали, что неплохо бы вообще все расчеты на ГПУ перенести. Да и ДХ10+ не нужен, можно все считать в вершинном шейдере, взаимодействия между частицами то нет.
>Как получить похожий эффект без дополнительной текстуры: pastebin.com/sErK2Lsa
Спасибо. Как-то даже не подумал о генерации градиента.

>Да и ДХ10+ не нужен, можно все считать в вершинном шейдере, взаимодействия между частицами то нет.
Да, взаимодействия между частицами нет, но каждый раз нужно обновлять координаты частиц для дальнейших расчетов. Если вы знаете о том, как это можно сделать в DX9 — напишите пожалуйста.
Эх, жаль. Stream-Output фича DirectX 10 и выше. Придется по старинке — писать координаты в 2D текстуры.
Данные о скорости в шейдер не передаются. Хотя конечно можно и передавать.
Если честно, то демонстрацию я начал делать вдохновившись одним видео на youtube, и в итоге сделал почти как там.
Со скоростью визуализация нагляднее будет. Бывает еще делают зависимость цвета от возраста частицы, но в данном случае частицы не «умирают».
Имхо изучать DX9 сейчас точно так же как к примеру PHP 3. Про него пора забывать как про страшный сон, он пожил и так очень долго. При условии, что видяхи с поддержкой DX11 сейчас можно купить за 50-70$, не такие это уж и большие деньги.
Да, я с вами согласен. Скажу только, что выбрал DX9 из-за того, что ничего, что предлагает DX10\11 не требуется для системы частиц. Ну и конечно же переписать код под новую версию API не составит большого труда.
«Для разработки эффектов существует замечательная программа от NVIDIA, называется она Fx Composer.»
Любопытно, системные требования для этой среды весьма скромные. У NVIDIA есть еще nsight, так вот там для отладки шейдеров нужно две машины (или машина с двумя гпу и виртуалкой). Правда там указано, что отладка происходит непосредственно в процессе их выполнения на GPU (т.е. на одном GPU шейдер выполняется, с другого мы за ним наблюдаем). Интересно, как работает «Fx Composer»? Скорее всего шейдеры отлаживаются на CPU.
А можете для тех кто не в теме DX и прочих шейдеров, в двух словах сказать, можно ли такие эффекты делать на простом canvas'e? DX я так понимаю, дает просто доступ к железу видюхи, которая намного быстрее всё это просчитывает и отрисовывает?
Немного не в тему вопрос, но все же интересно — а что, собственно моделировалось и визуализировалось?
Ньютоновская гравитация. Курсор мыши выступает в качестве сверх-тяжелого тела, масса частиц не учитывается и принимается за 1 у.е. Соответственно и взаимодействие между частицами не вычисляется.
Прикольно, особенно учитывая, что нет взаимодействия между частицами.
Если кому интересно, написал еще один вариант. Подробнее написано в конце поста, после UPD.
По-моему с 5 миллионами частиц по дефолту в бат-файле Вы переборщили, они безбожно тормозят даже на достаточно мощной машине. Вот 500000 в самый раз, и по-прежнему красиво)
500000 нормально и на CPU просчитывается, хотелось чего-то больше)
Круто, только стоит наверно включить v-sync, так как экран жутко мерцает.
Only those users with full accounts are able to leave comments. Log in, please.