XNA - Имитированный снег

Это больше вопрос о том, чтобы запросить некоторые рекомендации, какие шаблоны/подходы я должен использовать. Я провел несколько исследований по этой проблеме - с плохими результатами.

По сути, у меня есть идея для игры, в которой ключевой механик геймплея основан на падении снега - или, в случае этой идеи игры - падающие частицы.

Снег/частицы должны падать на экран, но накапливаться в сваях. Проблема в том, что мне нужно, чтобы снег «стекал» по сторонам свай, когда они были под определенным углом, и продолжают накапливаться. Возможно, что отверстия открыты под грудами снега, и снег должен выпасть - подумайте, как песок падает через песочные часы.

Я пробовал это Box2d - ясно, что Box2d не является правильным выбором для 10 000-х крошечных частиц, которые длится долгое время. Box 2D довольно быстро догонял до смерти.

Я попробовал рисовать 1px растровые изображения на экране, но обработка 100 000 столкновений при каждом обновлении оказалась плохой.

Любые идеи были бы хорошы.

ура

8
nl ja de
Я делаю платформу на платформе 2d на основе плитки, и когда я рисую 200'000 спрайтов на полном hd, она дает мне 60 кадров в секунду на среднем рабочем столе 2008 года, поэтому я не думаю, что 10 000 спрайтов должны вызывать беспокойство , Логика столкновения может быть ошибочной, что дает плохие результаты, например, например, OP может запускать проверки между всеми снежинками, когда некоторые из них слишком далеко, чтобы получить квалификацию для проверок.
добавлено автор user1306322, источник
Вероятно, вы в конечном итоге столкнетесь с конкурентом 3dMark ... 10000s постоянных частиц звучат как работа для CUDA в любом случае
добавлено автор Alex, источник
вы можете уточнить - это 2d или 3d, только снег только накапливается, падая сверху и какой размер, если вы играете в зону?
добавлено автор Stuart, источник
Можете ли вы разместить ссылку на свой проект? Это звучит интересно =)
добавлено автор Kevin, источник
@Stuart Игровая площадка идеально подойдет полноэкранному режиму, но игровой процесс по-прежнему будет работать с большим «снегом», чтобы снизить количество спрайтов ...
добавлено автор Dave Bish, источник

3 ответы

Возможно ли контролировать, какие частицы на самом деле обрабатываются физическим движком? Если да, есть ли способ, с помощью которого вы можете прекратить обработку своей физики или строго ограничить обрабатываемую, если их скорость меньше 0,01 или что-то подобное?

Если вы обрабатываете только частицы, которые нуждаются в обработке, тогда вы можете иметь столько, сколько хотите, считая, что они не все движутся сразу!

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

Вот некоторая интересная информация о двумерной динамике жидкости:

http://www.ibiblio.org/e-notes/webgl/gpu /fluid.htm

Ваш физический движок может уже содержать то, что вам нужно.

1
добавлено
Хорошо, я обновил свой ответ соответственно.
добавлено автор rhughes, источник
@DaveBish Как вы/вы продолжаете?
добавлено автор rhughes, источник
К сожалению - снег является интерактивным пользователем - спасибо за ваш ответ :)
добавлено автор Dave Bish, источник

Take a lot at this Cool Effects (for XNA & MonoGame) http://www.int6.org/development/cool-effects-for-xna-monogame/

Эффекта снега нет, но есть некоторый эффект интереса, который вы можете использовать для модификации.

1
добавлено

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

Поэтому вам нужно будет много работать самостоятельно. Прежде всего вам нужно подумать обо всех возможностях, которые вы можете сделать. Как говорится в комментарии, вы не должны запускать проверки между всеми частицами в каждом кадре. Вы должны использовать точечную проверку столкновений вместо привычных вещей, которые обычно используются физическими двигателями. Вы должны убедиться, что частицы всегда имеют одинаковый размер (в данном случае (относительно системы координат, которая не означает, что вы не можете увеличить). И, конечно же, вам нужно пропустить как можно больше проверок столкновения - частицы, которые, как вы знаете, находятся в покое, никогда не должны проверяться, как те, которые имеют смежные частицы со всех сторон, что заставляет меня думать о сетках. Возможно, вы могли бы представить весь «мир» как сетку и упростить логику с этой точки зрения - в значительной степени то же, что и Minecraft, не согласны ли вы?

Во всяком случае, я понимаю, что я немного путаюсь, но это такая открытая тема ... :)

1
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot

Physics Pub
Physics Pub
229 участник(ов)

Физика, школьная физика Книги: @physpublib Оффтоп: @phystalks Вышмат: @higher_math Infernal Math: @matheden Вычмат: @comput_math Латех: @pro_latex Описание стикеров: http://telegra.ph/Perevod-paka-stikerov-Keyne-Physic-07-01

Physics Talks
Physics Talks
37 участник(ов)

Всё дозволено, но школьникам сюда нельзя! (Разве что школьницам и Pythoner-у)