Как стать автором
Обновить

Комментарии 14

Насколько я понимаю, анимация частиц производится все же на CPU. Не слишком ли накладно постоянно лочить буфер? В OpenGL есть расширение TransformFeedback, позволяющее писать вершинному шейдеру сразу в буфер с данными (и даже без него есть возможность реализовать render to vertex buffer). Не пробовали ли сделать то же самое на D3D? Думаю, при большом количестве таких систем частиц все же придется обратить на это внимание.
>>Насколько я понимаю, анимация частиц производится все же на CPU
Да, все расчеты на CPU в несколько потоков.

>>Не слишком ли накладно постоянно лочить буфер?
Накладно, но не настолько. Если верить данным профилировщика, то самое накладное это именно вычисление координат частиц.

>>Не пробовали ли сделать то же самое на D3D?
Уже думаю о том, как переложить все расчеты на GPU. Начиная с DirectX 10 есть возможность изменять буфер напрямую из шейдера, насколько я слышал. Вскоре вполне возможно будет еще одна статья, но уже про D3D10 (11-ый мое оборудование не поддерживает) и вычисление на GPU.
У вас nVidia?
Да, она самая. Хотите предложить CUDA?
Нет, просто уточняю. Radeon'ы то почти все держат DX11 фичи, (т.к. изначально поддерживают полные спеки DX10.1) не аппаратно, так программно.
Просто уточню, моей видеокарте около 4-х лет. Здесь дело не в Nvidia (честно никогда не слышал, чтобы они чем-то уступали графическим процессорам от AMD), а скорее в дате выпуска оборудования.
Если не ошибаюсь, то R600 — 2006-7 года проектирования (видеокарты поколения 2900/3800), уже держал DX 10.1, в nVidia поддержки 10.1 в топовых картах не было до архитектуры Fermi (400 series), которая увидела свет весной 2010. По этомй со старым Radeon'ом вполне могло бы и прокатить использование той фичи, которую вам предлагали.
Если память не изменяет, то это AMD предложила DX 10.1. Не удивительно, что по началу он только у неё и был реализован. Только вот нагуглить ничего не удалось, но я точно помню что где-то читал.
Насчёт таких тонкостей не в курсе.
А зачем извлекать корень, а затем снова возводить в квадрат? Не проще ли с квадратом расстояния и работать? Или отдельно расстояние тоже нужно?
Изначально я взял формулу для расчет в векторной форме, там использовался куб расстояния. Потом я вернулся к обычной формуле, просто исправив 3-ку на 2-ку, и так больше и не заглядывал в формулу. Отдельно расстояние не нужно. Спасибо за замечание.
Для демонстрации неважно… но с точки зрения физического смылса важно. Размерности желательно приводить, чтобы, к примеру, не прибавлять к скорости Ньютоны, как в коде ниже
force = G / distSquare; ... particles[i].vx += xForce;
Размерности сохраняются, просто в первом варианте считалось расстояние как квадратный корень, а затем полученную величину возводили в квадрат — две трудоёмких функции на ровном месте.
Понятно. Я в коде не увидел и неправильные выводы сделал.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации