한번에 Unity로 설정 없이도 가능하면 좋은데 쉬운길로 가지말라는 건지 참… Maya에서 작업한 카메라의 Focal Length의 수치는 Unity로 넘어 갈수는 있지만 고정값만 넘어갑니다. 즉 하나의 카메라로 1번컷에서 35주고 2번컷에서 70을 준 에니메이션을 설정해도 Unity에서는 반응이 없다는 겁니다.
너무나 심각한 문제인데 구글 검색하다가 좋은 글이 있었는데 제대로 적용이 안되어서 Chat GPT의 도움을 받아가며 일단 Maya2023 기준으로 돌아가게는 만든 상황입니다.
저도 파이썬이나 이런 스크립트 지식은 별로 없어서 좀 고생하네요.
Maya에서 Expression을 설정
Maya에서 Focal Animation이 이미 적용된 카메라 여기서는 MayaFocalAnim이라고 이름을 정하겠습니다.
MayaFocalAnim
카메라의 이름을 이렇게 정했습니다.
이 카메라에서 중요한 부분은 스케일 부분입니다. 이 스케일은 거의 쓸일이 없는데 여기에 필요한 수치를 적용시켜서 Unity에서 스크립트 제어로 Focal Animation이 적용되게 하겠습니다.
Scale X에 Expression 설정
카메라의 Near Clip Plane 수치를 MayaFocalAnim카메라의 Scale X에 전송합니다.
float $fcp;
$fcp = MayaFocalAnimShape.nearClipPlane;
MayaFocalAnim.scaleX = $fcp;
Scale Y에 Expression 설정
카메라의Far Clip Plane 수치를 MayaFocalAnim카메라의 Scale Y에 전송합니다.
float $fcp;
$fcp = MayaFocalAnimShape.farClipPlane;
MayaFocalAnim.scaleY = $fcp;
Scale Z에 Expression 설정
카메라의 Focal Length Animation 수치를 MayaFocalAnim카메라의 Scale Z에 전송합니다.
float $fl;
float $vfa;
float $FoV;
$fl = MayaFocalAnimShape.focalLength;
$vfa = MayaFocalAnimShape.verticalFilmAperture;
$FoV = 2.0 * atan((0.5 * $vfa) / ($fl * 0.03937)) * 57.29578;
MayaFocalAnim.scaleZ = $FoV;
Maya에서 Unity로 FBX 내보내기
Unity에서 사용할 수 있게 FBX로 Animation Bake 설정해서 내보내기 합니다.
저는 File – Send to Unity 를 자주 이용합니다.
MayaFocalAnim.fbx
위와 같은 이름으로 내보내기 했습니다.
Unity에서 카메라 설정
Unity로 MayaFocalAnim.fbx를 불러와서 Hierarchy에 추가해주고 Timeline에도 Animation을 추가해서 잘 움직이는지 확인해 주세요.
아마 이 상태로는 카메라를 잘 움직일거라고 생각하지만 Focal Animation은 아직 적용이 안 된 상태입니다.
이제 우리는 여기서 Script를 하나 추가해서 Scale에 넣었던 수치들이 카메라에 적용이 될수 있도록 해줍니다.
Unity에서 카메라에 스크립트 설정
Unity에서 Project폴더에서 오른쪽 클릭으로 C# Script를 새로 만듭니다.
FocalAnimScript
새로 추가 한 스크립트의 파일명은 위와 같이 설정했습니다.
그리고 안의 내용은 밑에 코드를 붙혀넣기 해주세요. Unity 버젼차이로 인한 스크립트 에러 등 Chat GPT를 이용해서 수정하셔도 좋을 것 같습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FocalAnimScript : MonoBehaviour
{
Camera _cam;
void LateUpdate()
{
if (_camera != null)
{
_cam.nearClipPlane = transform.localScale.x;
_cam.farClipPlane = transform.localScale.y;
_cam.fieldOfView = transform.localScale.z;
}
else
{
Debug.LogWarning("Camera component not found.");
}
}
}
이제 이 스크립트 파일을 Hierarchy에 추가하신 카메라에 추가해 주세요.
잘 따라 오셨다면 Timeline에서 Focal Animation가 적용된 모습을 보실 수 있습니다.
답글 남기기