camera freeze
« previous entry | next entry »
Jul. 27th, 2011 | 03:42 pm
Прикольная фишка номер два.
Машина по сюжету должна разбить каше, для чего можно использовать реактор или физикс.
Но тут есть засада, камера едет, машина едет, каше прилинковано к камере, а реактор и физикс линка динамических оъектов в упор не видят.

И вот, чтобы все прошло как надо - не придумал ничего лучше, чем чтобы камера с каше стояла на месте.
А весь мир с дорогой и машиной пусть крутится и ездит вокруг, а вид в камере остается как был в нормальной сцене.
Это оказалось совсем не оптимально, но чисто спортивно интересно :)
Для этого сделаем две копии камеры (initial camera и result camera), с которой будем считывать перемещение и вращение для wire parameters.
Даже если камера, которую мы мучаем была типа target - initial и result camera должны быть типа free.
Запечем ключи initial камеры, отвязав ее от любых родительских объектов каким-нибудь подходящим скриптом.

Например этим
Первым делом привяжем старую камеру, одну из новых камер (result camera), дорогу, машину и прочие объекты сцены к главному дамми сцены (scene dummy).

Желательно его сделать в нуле координат и с нулевыми вращениями относительно мировых осей.
Сначала скомпенсируем перемещение камеры. Для этого сделаем дамми (position dummy) и привяжем его позицию по x,y и z с обратным знаком к соответствующим осям initial камеры.

Если теперь привязать scene dummy к position dummy - result camera будет оставаться на месте, а сцена двигаться вместо нее.

Осталось скомпенсировать тем же приемом вращение камеры. Поскольку она по сценарию вращается только по оси Z - это будет несложно.
Однако придется заморочиться и сделать сначала в центре мира еще один неподвижный пока, промежуточный дамми (intermediate dummy), к которому прилинкуем position dummy.
затем создадим дамми компенсации вращения (rotation dummy) и с помощью Wire Parameters привяжем его вращение по оси Z к такому же вращению initial камеры, но с обратным знаком.

И наконец привяжем линком intermediate dummy к rotation dummy.
Теперь result camera неподвижна, но в нее видно то же что и в изначальной сцене.

Теперь можно выставить 250 fps, и разбить неподвижное каше о движущуюся машину, уронив осколки на движущуюся дорогу.

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

И вот, чтобы все прошло как надо - не придумал ничего лучше, чем чтобы камера с каше стояла на месте.
А весь мир с дорогой и машиной пусть крутится и ездит вокруг, а вид в камере остается как был в нормальной сцене.
Это оказалось совсем не оптимально, но чисто спортивно интересно :)
Для этого сделаем две копии камеры (initial camera и result camera), с которой будем считывать перемещение и вращение для wire parameters.
Даже если камера, которую мы мучаем была типа target - initial и result camera должны быть типа free.
Запечем ключи initial камеры, отвязав ее от любых родительских объектов каким-нибудь подходящим скриптом.

Например этим
Первым делом привяжем старую камеру, одну из новых камер (result camera), дорогу, машину и прочие объекты сцены к главному дамми сцены (scene dummy).

Желательно его сделать в нуле координат и с нулевыми вращениями относительно мировых осей.
Сначала скомпенсируем перемещение камеры. Для этого сделаем дамми (position dummy) и привяжем его позицию по x,y и z с обратным знаком к соответствующим осям initial камеры.

Если теперь привязать scene dummy к position dummy - result camera будет оставаться на месте, а сцена двигаться вместо нее.

Осталось скомпенсировать тем же приемом вращение камеры. Поскольку она по сценарию вращается только по оси Z - это будет несложно.
Однако придется заморочиться и сделать сначала в центре мира еще один неподвижный пока, промежуточный дамми (intermediate dummy), к которому прилинкуем position dummy.
затем создадим дамми компенсации вращения (rotation dummy) и с помощью Wire Parameters привяжем его вращение по оси Z к такому же вращению initial камеры, но с обратным знаком.

И наконец привяжем линком intermediate dummy к rotation dummy.
Теперь result camera неподвижна, но в нее видно то же что и в изначальной сцене.

Теперь можно выставить 250 fps, и разбить неподвижное каше о движущуюся машину, уронив осколки на движущуюся дорогу.

Физиксом разбить проще, правда если хочется иметь изогнутые границы кусков с небольшими промежутками - их надо в композит переводить по одному.
В общем физикс я на тот момент не победил, и бил по старинке, реактором.
(no subject)
from: anonymous
date: Jul. 27th, 2011 11:33 pm (UTC)
Link
Reply | Thread
(no subject)
from:
spartachok
date: Jul. 28th, 2011 09:16 am (UTC)
Link
Reply | Parent | Thread
(no subject)
from:
kinyz
date: Jul. 29th, 2011 10:10 pm (UTC)
Link
Reply | Thread
(no subject)
from:
palmindesert
date: Nov. 19th, 2011 02:02 pm (UTC)
Link
Скажите, очень интересно - а как такой крутой motion-blur на колёсах получился, это честный блюр (на 250fps - НЕ ВЕРЮ!!!) или в Афттере? И, кстати, а водяная пыль из под колёс как сделана? Прилинкованый к колёсам эмиттер?
Reply | Thread
(no subject)
from:
vitsly
date: Nov. 19th, 2011 04:34 pm (UTC)
Link
а водяная пыль сделана dumb частицами в realflow, эмиттеры - поверхность шин, касающаяся дороги
Reply | Parent | Thread
(no subject)
from:
palmindesert
date: Nov. 19th, 2011 04:36 pm (UTC)
Link
Но получилось здорово.
Reply | Parent | Thread
(no subject)
from:
Khariton Kantiev
date: Mar. 11th, 2012 10:47 am (UTC)
Link
"Но тут есть засада, камера едет, машина едет, каше прилинковано к камере, а реактор и физикс линка динамических оъектов в упор не видят."
Знакомая проблема!
Мы в геймдеве для таких целей (взаимодействие RB с кинетическими объектами, которые анимированы вне физической сцены) в версиях physx, которые это не поддерживают, используем joint constrains между кинетическим объектом и и его статичной копией для столкновения. В констрейнах выключаются степени свободы и включается reprojection для компесации быстрых движений кинетического "родителя".
Не опробовано в максе, опробовано в нескольких больших играх, очень сильно выручало.
Reply | Thread