Комментарии 14
Насколько я понимаю, анимация частиц производится все же на CPU. Не слишком ли накладно постоянно лочить буфер? В OpenGL есть расширение TransformFeedback, позволяющее писать вершинному шейдеру сразу в буфер с данными (и даже без него есть возможность реализовать render to vertex buffer). Не пробовали ли сделать то же самое на D3D? Думаю, при большом количестве таких систем частиц все же придется обратить на это внимание.
>>Насколько я понимаю, анимация частиц производится все же на CPU
Да, все расчеты на CPU в несколько потоков.
>>Не слишком ли накладно постоянно лочить буфер?
Накладно, но не настолько. Если верить данным профилировщика, то самое накладное это именно вычисление координат частиц.
>>Не пробовали ли сделать то же самое на D3D?
Уже думаю о том, как переложить все расчеты на GPU. Начиная с DirectX 10 есть возможность изменять буфер напрямую из шейдера, насколько я слышал. Вскоре вполне возможно будет еще одна статья, но уже про D3D10 (11-ый мое оборудование не поддерживает) и вычисление на GPU.
Да, все расчеты на 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'ом вполне могло бы и прокатить использование той фичи, которую вам предлагали.
А зачем извлекать корень, а затем снова возводить в квадрат? Не проще ли с квадратом расстояния и работать? Или отдельно расстояние тоже нужно?
Изначально я взял формулу для расчет в векторной форме, там использовался куб расстояния. Потом я вернулся к обычной формуле, просто исправив 3-ку на 2-ку, и так больше и не заглядывал в формулу. Отдельно расстояние не нужно. Спасибо за замечание.
Для демонстрации неважно… но с точки зрения физического смылса важно. Размерности желательно приводить, чтобы, к примеру, не прибавлять к скорости Ньютоны, как в коде ниже
force = G / distSquare;
...
particles[i].vx += xForce;
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Разработка системы частиц на платформе DirectX 9. Часть I