Render.ru

Shake эффект для камеры

Slavenin

Активный участник
Рейтинг
12
#1
Не знаю есть ли подобое для майки, но я не нашел когда искал поэтому написал собственный шэйк эффект для камеры, параметром Power регулируется сила дрожания камеры, параметром Scatter - разброс полета камеры.

if (`window -exists CameraShake`)
{
deleteUI CameraShake;
}
window -rtf 1 CameraShake;
scrollLayout;

columnLayout;
floatSliderGrp -w 400 -value 50 -min 0 -field true -label "Power" PowerT;
floatSliderGrp -w 400 -value 2 -min 0 -field true -label "Scatter" Scat;
button -w 100 -h 30 -command "Mas_Camera_Shake()" -label "Create";
showWindow;

proc float[] Mas_power()
{
float $mas_pow[2];
$mas_pow[0] = `floatSliderGrp -query -v PowerT`;
$mas_pow[1] = `floatSliderGrp -query -v Scat`;
return $mas_pow;
}

proc Mas_Camera_Shake()
{
string $mas_cam_name[] = `ls -sl`;

float $mas_val[] = Mas_power();

string $mas_name_big[] = `polySphere -ch 0 -o on -r $mas_val[1] -n "mas_Big_Coll#"`;
string $mas_name_small[] = `polySphere -ch 0 -o on -r ($mas_val[1]/4) -n "mas_Small_Coll#"`;

select $mas_name_big;
ConvertSelectionToFaces;
polyExtrudeFacet -constructionHistory 1 -keepFacesTogether 1 -pvx -3.576278687e-007 -pvy 0 -pvz -4.768371582e-007 -divisions 1 -twist 0 -taper 1 -off 0 -ltz 0.1 -n "mas_Extra#" -smoothingAngle 30 ($mas_name_big[0] + ".f[0:399]");
select $mas_name_big;
delete -ch;
rigidBody -passive -name "mas_CollBigP#" -m 500 -dp 0 -sf 0 -df 0 -b 1 -l 0 -tf 200 -iv 0 0 0 -iav 0 0 0 -c 0 -pc 1 -i 0 0 0 -imp 0 0 0 -si 0 0 0 -sio none ;

select $mas_name_small;
rigidBody -active -name "mas_CollSmallP#" -m 1 -dp 0 -sf 0 -df 0 -b 1 -l 0 -tf 200 -iv 0 0 0 -iav 0 0 0 -c 0 -pc 1 -i 0 0 0 -imp 0 0 0 -si 0 0 0 -sio none ;

string $mas_name_Turb[] = `turbulence -pos 0 0 0 -name "mas_CollTurb#" -m $mas_val[0] -att 0 -f 15.602 -phaseX 0 -phaseY 0 -phaseZ 0 -noiseLevel 5 -noiseRatio 0.707 -mxd -1 -vsh none -vex 0 -vof 0 0 0 -vsw 360 -tsr 0.5`;
connectDynamic -f $mas_name_Turb $mas_name_small;

select -r $mas_name_big;
select -add $mas_name_small;
orientConstraint -offset 0 0 0 -weight 1;

select -r $mas_name_big;
select -add $mas_name_small;
select -add $mas_name_Turb;
string $mas_group = `group -n "mas_Cam_Shake#"`;
xform -cp;

select -r $mas_cam_name;
select -add $mas_group;
string $mas_name_point[] = `pointConstraint -offset 0 0 0 -weight 1 -n "mas_point1"`;
select -r $mas_name_point;
doDelete;

select -r $mas_name_small;
select -add $mas_cam_name;
pointConstraint -offset 0 0 0 -weight 1 -n mas_point1;

select -r $mas_group;
HideSelectedObjects;
}

пользуйтесь люди :) , если вдруг кто-то захочет сказать спасибо материально, яндекс кошелек: 41001164992634
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#2
Круто, конечно, но чем этот код лучше, чем, например, это:
Код:
...
float $phase = $speed * time;
group1.tx = noise( $phase + $xa);
group1.ty = noise( $phase + $ya);
group1.tz = noise( $phase + $za);
или то, что просто любую анимированную процедурную текстуру можно приконнектить к перемещению - и больше контроля будет.
 

Slavenin

Активный участник
Рейтинг
12
#3
не знаю чем он лучше, я по 4 строчкам не понял, что именно имется в виду, а прежде чем написать это пробовал поковыряться с функцией нойза(да и не только нойза, внимательно почитал про все функции используемые майкой, правда не все понял), но путного так ничего и не вышло, камера постоянно скакала из точки в точку, что меня никак не устраивало, необходимо было добиться хаотичного, но вместе с тем плавного перемещения камеры в определенном объеме, и чтобы при этом можно было контролировать зону и скорость ее пермещения. Чего и достиг. Результат меня более чем устраивает.

Если не сложно поясни про то, как можно приконнектить процедурную текстуру к перемещению :) и почему будет больше контроля? никогда не пробовал...

PS совсем забыл, если кто будет запускать скрипт через Source Script, необходимо перед процедурой дописать global , просто стараюсь всегда избегать глобальных переменных и процедур, а тут без этого не работает
 

Slavenin

Активный участник
Рейтинг
12
#6
хм..., использовать его так же как и любой другой скрипт, есть несколько способов, я предпочитаю скопировать в ScriptEditor и оттуда запускать, чтобы он работал надо выделить камеру запустить скрипт и нажать кнопочку Create.

Служит он для создания Shake эффекта, то бишь для создания эффекта хаотичного перемещения и дрожания камеры, допустим при врыве
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#7
Ну, например, самое простое - приконнектить outAlpha к любому из транслейтов. Насчет контроля: у процедурной текстуры много параметров, можно составить любой рисунок тряски камеры =)
 

Slavenin

Активный участник
Рейтинг
12
#8
понятно, а контролировать перемещение так, чтобы камера не телепортировалась из одного места в другое, а перелетала можно? :)
 

Dark™

Модератор форума
Команда форума
Рейтинг
431
#9
Все зависит от текстуры и настроек, например, анимированная текстуры воды плавно перемещает группу камеры.
 
Сверху