Render.ru

Вращение относительно объекта

amtech

Активный участник
Рейтинг
17
#1
Суть такова: делаю сцену игровую там будут горы на заднем плане а на них куча плейнов с альфой (типа деревья), так вот эти плейны(деревья) разных размеров, с разными координатами в пространстве. И нужно эти все деревья повернуть по оси Z (у каждого дерева разумеется свой центр, т.е. каждый плейн крутиться относительно своей точки отсчета) чтобы деревья мои смотрели ну скажем на какой-то другой объект (например бокс, камеру, дамми или что-то ещё). Целый день бьюсь, но ничего не выходит, думал тулза Align сможет так сделать, но увы не выходит. Подскажите пожалуйста :)
 
Рейтинг
82
#5
А каким способом распределялись "плейны" по горам?Дело в том,что в PF(частицы) есть такая возможность ориентировать геометрию по отношению к камере.
 

Leonidych

Мастер
Рейтинг
82
#6
Если сцена игровая так может лучше в движке всю эту зелень вставить и настроить?
 

amtech

Активный участник
Рейтинг
17
#8
Тогда объясните как сделать так, чтобы плейны не крутились по другим осям когда используешь LookAt Constraint. Деревья начинают наклонятся т.к. они находятся на разной высоте относительно точки в которую они должны смотреть. Этого мне как раз не нужно. Ещё раз повторюсь, мне нужно повернуть объекты вокруг своих осей (одной, в моём случае Z) чему-либо. В движке мы используем SpeedTree, и да там есть лоды, и да они через настраиваемое расстояние превращаются в такие же плейны, но как показала практика, когда количество деревьев переваливает за 3000 идет резкое сокращение фпс, а 3000 поликов экспортнутых из макса, сами понимаете, одна модель персонажа например :)
 
Рейтинг
229
#10
Тогда объясните как сделать так, чтобы плейны не крутились по другим осям когда используешь LookAt Constraint.
- Создаем dummy для каждого объекта (дерева).
- Дерево - Link Constraint к dummy.
- В параметрах дерева Hierarchy -> Link info -> Inherit - убираем галки с XY осей.
- LookAt constraint на dummy.


 
Рейтинг
82
#11
И так оставшиеся 2999 раз(судя по посту №8).Правда если только копировать "кучками"!?Да вроде должны быть в максе ограничители по осям так чтобы менее затратно было.Здесь хорошо бы попробовать как это всё будет распределяться по поверхности.
 
Рейтинг
82
#14
В комплекте с максом присутствуют файлы примеров в частности tut_billboard_facing в папке scripting_fx рис 1.
Последовательность работы такова:

Рис 2.
1.Создаём плоскость(и)(образец(ы) для растительности или чего либо другого).
2.Создаём камеру.
3.Назначаем плоскости Rotation Script.
4.В окне редактора нажимаем (два щелчка мыши) Rotation :Rotation Script.
Рис 3.
5 и 6 .В появившемся Script Controller в водим в Expression скрипт(ниже):


try(
dependsOn $'Camera01'.pos.controller
local d, dz, z_rot, len, ctrl
-- Get difference vector of obj and targ.
d=
try ($'Billboard01'.pos-$'Camera01'.pos)
catch [0,0,0]
dz=d.z -- Store z value.
d.z=0 -- Set z to zero.
len=length d -- Vector length.
-- Calculate the z rotation (in degrees).
-- Note: len==0 => obj and targ are at same position!
z_rot=
if len!=0
then -90+acos(d.x/len)*(if d.y!=0 then d.y/(abs d.y) else 1)
else -90
(eulerAngles 90 0 z_rot) as quat
)catch ((eulerAngles 90 0 0) as quat)


РИС 4.ВНИМАНИЕ ИМЕНА (Billboard01 и Camera01-или какие хотите)ДОЛЖНЫ БЫТЬ УКАЗАННЫ ТОЧНО НА ТАКИЕ ЖЕ КАК В СЦЕНЕ.

Рис.5 Для распределения объекта по сцене(объекту) я использовал Object Paint. Все получившиеся объекты наследуют свойства "стартового" объекта и их количество практически не ограниченно.
 

Вложения

Сверху