Я хотел бы немного потрясти камеру во время взрыва, и я попробовал несколько различных функций для ее поворота, и, кажется, ничто не дает такого «вау, что за взрыв!» Типа ощущения, которые я ищу. Я попробовал несколько произвольных относительно высокочастотных синусоидальных паттернов с небольшим линейным затуханием, а также паттерн типа прямоугольной волны. Я попытался переместить только одну ось, две и все три (хотя в этом случае эффект долли был едва заметен).
Кто-нибудь знает хороший шаблон дрожания камеры?
Ответы:
Я получил приличное дрожание камеры, применив шум Перлина к ориентации камеры. Это дает вам приличный большой толчок с встроенным высокочастотным встряхиванием, и может выглядеть действительно хорошо.
http://mrl.nyu.edu/~perlin/doc/oscar.html содержит более подробную информацию и пример кода для генерации шума.
источник
Если вы говорите об этом дрожании экрана от взрыва, я попытался реализовать это в моей игре-прототипе (это 2d, но я ожидаю, что она вполне может быть переведена в 3d). Посмотрите на видео YouTube и посмотрите, действительно ли это то, что вам нужно - дрожание экрана начинается примерно с 1:35.
В любом случае, я достиг этого, создав окно просмотра для сцены и сохранив центральную точку (
centre
).Когда начинается взрыв, я создаю случайный
radius
~ 30px. Затем я сместил окно просмотра изcentre
на столько пикселей в случайном направлении.Для каждого последующего обновления (между рисованием на экран) я уменьшаю
radius
на 10-20% иcentre
снова смещаю область просмотра на столько пикселей . Однако вместо того, чтобы выбрать случайный угол для этого смещения, я вместо этого беру предыдущий угол области просмотра изcentre
и добавил к нему 180 +/- 60 градусов.Таким образом, в основном, при каждом обновлении (или 10-20 мс или около того) я смещаю область просмотра на уменьшающееся число пикселей от
centre
экрана.Вот некоторый псевдокод:
Я обычно останавливаю дрожание экрана, когда радиус становится меньше 2.0, после чего я возвращаю окно просмотра обратно
centre
.источник
randomAngle += (150 + rand()%60)
, чтобы избавиться от любых +/- проблем.Чтобы заставить «дрожать» камеру «чувствовать» правильно, нужно не столько направление движения, сколько кривые ускорения.
Дрожание камеры погружается в сферу анимации, поэтому применяются все правила действия / реакции. Если вы движетесь линейно от точки к точке, это будет выглядеть плавно и равномерно, а не как удар.
Если вы покачиваете головой взад-вперед, вы заметите, что она движется быстрее всего в средней точке между сменой направления и замедляется с каждой стороны, поскольку сначала вам нужно замедлиться, а затем начать движение в новом направлении.
Вот список различных функций замедления, которые можно применить к вашему движению. Возможно, вы захотите сделать EaseOut только первым движением, чтобы оно стало более резким, а затем EaseInOut, чтобы имитировать движение головы / камеры.
источник
wkerslake прав, дрожание камеры кажется более сложным, чем вы думаете.
При эмуляции дрожащей камеры вам нужно подумать о том, какую камеру (оператора) вы хотите имитировать. Вес камеры влияет на инерцию, например. более тяжелые камеры сглаживают небольшие «случайные» движения. Оператор камеры на рельсе или в автомобиле добавляет дополнительный шум.
Использование Perlin или Simplex шума определенно является вариантом, тогда все дело в поиске правильного баланса между различными коэффициентами шума. Но я обнаружил, что использование интерполяции между значениями требует меньше вычислительных ресурсов и может быть столь же эффективным.
Некоторое время назад я нашел скрипт Maya, который, кажется, многое делает правильно. Вы могли бы взглянуть на это .
Кроме того, вы можете взглянуть на Gran Turismo (5) , их команда проделала впечатляющую работу, выполняя различные виды дрожания камеры в режиме реального времени, когда вы смотрите воспроизведение в игре.
источник
Если у вас есть физика динамических объектов [вероятно, не правильное слово, но вроде того, что я имею в виду], где любые нефиксированные объекты будут «сдуты» взрывом, вы можете заставить камеру воздействовать на такой объект.
Единственной разницей было бы просто изменить поворот / шаг / рыскание / крен камеры, а не положение.
Кроме этого, может быть, генерировать последовательность случайных чисел и как-то преобразовать их в ротацию? Подумайте, что карта высот, оттенки серого могут быть примером; они не совсем разные, но случайные.
источник