Суть такова: делаю сцену игровую там будут горы на заднем плане а на них куча плейнов с альфой (типа деревья), так вот эти плейны(деревья) разных размеров, с разными координатами в пространстве. И нужно эти все деревья повернуть по оси Z (у каждого дерева разумеется свой центр, т.е. каждый плейн крутиться относительно своей точки отсчета) чтобы деревья мои смотрели ну скажем на какой-то другой объект (например бокс, камеру, дамми или что-то ещё). Целый день бьюсь, но ничего не выходит, думал тулза Align сможет так сделать, но увы не выходит. Подскажите пожалуйста 🙂
Тогда объясните как сделать так, чтобы плейны не крутились по другим осям когда используешь LookAt Constraint. Деревья начинают наклонятся т.к. они находятся на разной высоте относительно точки в которую они должны смотреть. Этого мне как раз не нужно. Ещё раз повторюсь, мне нужно повернуть объекты вокруг своих осей (одной, в моём случае Z) чему-либо. В движке мы используем SpeedTree, и да там есть лоды, и да они через настраиваемое расстояние превращаются в такие же плейны, но как показала практика, когда количество деревьев переваливает за 3000 идет резкое сокращение фпс, а 3000 поликов экспортнутых из макса, сами понимаете, одна модель персонажа например 🙂
Тогда объясните как сделать так, чтобы плейны не крутились по другим осям когда используешь LookAt Constraint.
- Создаем dummy для каждого объекта (дерева).
- Дерево - Link Constraint к dummy.
- В параметрах дерева Hierarchy -> Link info -> Inherit - убираем галки с XY осей.
- LookAt constraint на dummy.
И так оставшиеся 2999 раз(судя по посту №8).Правда если только копировать "кучками"!?Да вроде должны быть в максе ограничители по осям так чтобы менее затратно было.Здесь хорошо бы попробовать как это всё будет распределяться по поверхности.
В комплекте с максом присутствуют файлы примеров в частности 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. Все получившиеся объекты наследуют свойства "стартового" объекта и их количество практически не ограниченно.
Доступ к резюме доступен только по пакетному доступу HR менеджерам зарегистрированных компаний. Узнать о вариантах корпоративных пакетов можно по ссылке.
amtech
Royal Ghost
amtech
igorznag
LookAt Constraint Сообщение 7.
diwian diwian
Leonidych
вадим соболев (maiden666)
amtech
amtech
Royal Ghost
- Дерево - Link Constraint к dummy.
- В параметрах дерева Hierarchy -> Link info -> Inherit - убираем галки с XY осей.
- LookAt constraint на dummy.
diwian diwian
Royal Ghost
Артур Крайц (Арт.К)
diwian diwian
Последовательность работы такова:
Рис 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. Все получившиеся объекты наследуют свойства "стартового" объекта и их количество практически не ограниченно.
Вложения