Render.ru
Поддержать

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

amtech

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

diwian diwian

Мастер
Рейтинг
82
А каким способом распределялись "плейны" по горам?Дело в том,что в PF(частицы) есть такая возможность ориентировать геометрию по отношению к камере.

Leonidych

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

amtech

Активный участник
Рейтинг
17
Тогда объясните как сделать так, чтобы плейны не крутились по другим осям когда используешь LookAt Constraint. Деревья начинают наклонятся т.к. они находятся на разной высоте относительно точки в которую они должны смотреть. Этого мне как раз не нужно. Ещё раз повторюсь, мне нужно повернуть объекты вокруг своих осей (одной, в моём случае Z) чему-либо. В движке мы используем SpeedTree, и да там есть лоды, и да они через настраиваемое расстояние превращаются в такие же плейны, но как показала практика, когда количество деревьев переваливает за 3000 идет резкое сокращение фпс, а 3000 поликов экспортнутых из макса, сами понимаете, одна модель персонажа например 🙂

amtech

Активный участник
Рейтинг
17
igorznag, попробую как предлогают в посте, спасибо 🙂

Royal Ghost

Мастер
Рейтинг
229
Тогда объясните как сделать так, чтобы плейны не крутились по другим осям когда используешь LookAt Constraint.
- Создаем dummy для каждого объекта (дерева).
- Дерево - Link Constraint к dummy.
- В параметрах дерева Hierarchy -> Link info -> Inherit - убираем галки с XY осей.
- LookAt constraint на dummy.


diwian diwian

Мастер
Рейтинг
82
И так оставшиеся 2999 раз(судя по посту №8).Правда если только копировать "кучками"!?Да вроде должны быть в максе ограничители по осям так чтобы менее затратно было.Здесь хорошо бы попробовать как это всё будет распределяться по поверхности.

Royal Ghost

Мастер
Рейтинг
229
И так оставшиеся 2999 раз(судя по посту №8).
Для автоматизации есть maxscript.

diwian diwian

Мастер
Рейтинг
82
В комплекте с максом присутствуют файлы примеров в частности 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. Все получившиеся объекты наследуют свойства "стартового" объекта и их количество практически не ограниченно.

Вложения