Пока писал этот вопрос на форуме, то сам разобрался как это сделать :)
Так вот, показываю как это делается.
Для примера я сделал такую структуру проекта:
В главной (родительской) композиции находятся моя камера и оранжевая звезда в виде 3Д слоя. Тут же есть дочерняя композиция с синей звездой:
камера и оранжевая звезда в виде 3Д слоя
В композиции с синей звездой звезда тоже находится на 3Д слое. И внутри той композиции тоже есть камера. Потому что 3Д слой без камеры обычно не виден или отображается неправильно.
Проблема такой структуры в том, что когда вы двигаете вашу основную камеру, то вместе с ней двигаются 3Д слои только той композиции в которой находится данная камера. А все вложенные композиции остаются без изменений:
ViC8zATiLR.gif
Ответ напрашивается сам: чтобы решить эту проблему, нам нужно двигать камеру внутри композиции с синей звездой так же как основную камеру. Есть два способа как это можно сделать:
После того как анимация основной камеры закончена, то можно скопировать её в во вложенную композицию;
Привязать камеру вложенной композиции к основной камере, чтобы они двигались синхронно.
Первый способ интуитивный и понятный, но у него есть пара недостатков. Во-первых, каждый раз, при изменении основной камеры, вам нужно будет копировать её во вложенную композицию. А ещё это всё усугбляется если таких композиций много. Во-вторых, может быть такая ситуация, когда вы принимаете решение о том как должна двигаться камера на основе того что вы видите в кадре — на основе положения всех композиций. В таком случае проблема вообще не решаема, потому что вы не можете судить о том правильно ли у вас выставлена камера или нет (так как вложенные композиции не обновляются).
Второй способ решает все перечисленные проблемы. Для того чтобы синхронизировать камеру с камерой в родительской композиции нужно через скрипт привязать координаты камеры и её углы поворота к камере в родительской композиции.
Чтобы привязать координаты через скрипт на слое камеры нажимаете иконку секундомера с зажатой клавишей Alt у параметра Position:
нажимаете иконку секундомера с зажатой клавишей Alt у параметра Position
В поле для скрипта справа пишем код по такому шаблону:
comp('название композиции').layer('название слоя').transform.position
В нашем примере вместо 'название композиции' мы пишем 'Comp 1', потому что так называется наша родительская композиция. А вместо 'название слоя' пишем 'моя-камера', потому что так называется слой с нашей основной камерой. Вот так:
7f495655-c27a-4002-af49-b877030bf2fb-image.png
Теперь, при движении основной камеры, камера внутри композиции с синей звездой будет повторять координаты основной камеры. Но ещё нужно привязать вращения. Для этого в параметре Orientation делаем всё то же самое, что делали для Position, только в конце строчки кода вместо, .position пишем .orientation:
comp('название композиции').layer('название слоя').transform.orientation
И ещё нужно, на всякий случай, привязать параметры X/Y/Z Rotation. Для этого по очереди кликаем иконку секундомера с зажатым Alt напротив X Rotation, Y Rotation и Z Rotation. И по аналогии с параметром Position справа вписываем такие строчки кода:
Для X Rotation:
comp('название композиции').layer('название слоя').transform.xRotation
Для Y Rotation:
comp('название композиции').layer('название слоя').transform.yRotation
Для Z Rotation:
comp('название композиции').layer('название слоя').transform.zRotation
И, соответсвенно, заменяем 'название композиции' и 'название слоя' на те же значения, которые мы вписывали для Position. В результате, все скрипты камеры будут выглядеть вот так:
все скрипты камеры
И готово!
Теперь если вернётесь в родительскую композицию и покрутите камеру, то и синяя звезда внутри вложенной композиции будет вращаться:
9rZk8jzpC0.gif
У этого метода есть два бонуса:
можно иметь любую сложность иерархии в композициях: привязываемая камера не обязательно должна ссылаться именно на родительску композицию (на уровень выше). В скриптах вы задаёте имя композиции и слоя на которую будет ориентироваться камера и структура проекта, при этом, не имеет значения. Главное, чтобы имена композиций и слоёв соответствовали;
можно переименовывать композицию или слой с основной камерой и эти названия автоматически обновятся в скриптах!