반응형

어드벤스드 로코모션의 가장 큰 특징 중 하나가 언리얼에서 제공하는 기본 카메라가 아닌 유저가 하나부터 열까지 모두 컨트롤 가능한 커스텀 카메라 기능을 사용하고 있다는 것이다.

어드벤스드로코모션 카메라 시스템의 의 장단점

  • 장점
    • 모든 상황에 카메라의 Offset과 Fov등을 원하는데로 변경할 수 있다.
    • 엔진 작업이 서툰 아트작업자들이 게임 카메라 작업을 하는 데 용이하다.
    • 트리플 A의 꽃인 카메라의 아웃풋을 제어할 수 있다.
  • 단점
    • 모두 제어를 해야 하다보니 손이 많이 간다.
    • 아트 작업자들이 최종 카메라를 제어하다보니 디버깅이 힘들 수 있다.
    • 인디게임을 개발한다면 제어해야 하는 코스트가 너무 크다.

 

어드벤스드 로코모션의 카메라 시스템 작동 원리 파악.

게임모드의 컨트롤러에 사용되는 ALS_Player_Controller에서 ALS_PlayerCameraManger 블루프린트를 형변환하여 호출한 뒤 On Poses 이벤트를 활용해 플레이어 카메라에 오버라이드 시켜 주게 되면 메인 Pawn 카메라로서 역할을 감당하게 됩니다.

 

ALS_Player_Controller의 OnPossess 이벤트 처리.

 

ALS_PlayerCameraManger 의 OnPoses 함수.

 

ALS_PlayerCameraManger 분석.

  • 기본 구조 - 스켈레탈 메시로 만들어진 카메라 메시와 이미 제작되어 있는 애님 블루프린트가 등록되어 있습니다.

  • BlueprintUpdateCamera
    • 메인 Pawn의 액터 Tag에 'ALS_Character'라는 이름을 가지고 있을 경우 발동되도록 제작되어 있음. 다른 일반적인 Pawn일 경우는 언리얼에서 제공하는 기본 게임 캐릭터 카메라가 호출됩니다.

 

CustomCameraBehavior 아래 펼쳐서 확인

더보기

 

카메라 Fov, Rotation, Loacation을 제어하여 애님블루프린트에서 카메라 Offset를 컨트롤할 수 있는 변수를 제공하도록 하고, 디버그 오브젝트들을 활성화시켜 주는 역할도 하게 됩니다.

  • Step 1 : 캐릭터BP와 연계된 BPI 인터페이스에 등록된 Pivot과 카메라 타겟 위치와 FOV 값등을 불러와 변수로 설정해 준다.

 

  • Step 2 : 부드러운 카메라 회전을 위해 회전 제어 및 보간을 사용합니다.

AnimBP에서 애님 곡선값을 가져와 맞춤 카메라 동작 계산의 매개변수로 사용합니다.

 

  • Step 3 : 스무드 된 피벗 대상(주황색 구)을 계산합니다. 3P  피벗 대상(녹색 구)을 가져오고 최대 제어를 위해 독립적 지연을 사용하여 보간합니다. 디버그용 볼에 사용될 위치를 계산합니다.

 

  • Step4 : 피벗 위치를 계산합니다(Blue Sphere). Smoothed Pivot Target을 가져와 추가 카메라 제어를 위해 로컬 오프셋을 적용합니다.

플레이어 카메라 동작 AnimBP에서 애님 곡선 값을 가져와 맞춤 카메라 동작 계산의 매개변수로 사용

 

  • Step5 : 대상 카메라 위치를 계산합니다. 피벗 위치를 가져오고 카메라 상대 오프셋을 적용합니다. 이미 등록되어 있는Curve Name을 활용하여 제어합니다.

 

  • Step 6 : 교정된 오프셋을 적용하기 위해 카메라와 캐릭터 사이의 개체를 추적합니다. 추적 원점은 카메라 인터페이스를 통해 캐릭터 BP내에서 설정됩니다. 일반 스프링 암과 같은 기능을 하지만, 피벗에 관계없이 다른 추적 원점을 허용할 수 있습니다.

 

  • Step 7 : 위에서 얻어 온 정보들을 토대로 디버그 쉐잎들을 디스플레이 시켜줍니다.

 

  • Step 8 : 위에서 얻어 온 정보들을 토대로 Weight_FirstPerson의 커브가 들어올 경우 위치를 보간합니다.

 

 

 

카메라 애님 그래프(ALS_PlayerCameraBehavior)에 대한 분석과 사용법.

 

  • Blueprint Update Animation 이벤트 처리
    • 기존 캐릭터BP에서 정의되어있던 BPI 인터페이스를 Movement State 등의 정보들을 얻어와 변수로 지정하는 역할을 한다. 모든 움직임에 대해 카메라를 제어하기 위해 사전에 정의하는 것.

 

  • Anim Graph 처리 - Velocity 모드냐 Looking 모드냐에 따라 카메라를 각각 제어할 수 있도록 분리되어 있는 형태.

한 형태만 분석하면 나머지 형태들을 파악하는데 어려움이 없기 때문에 Velocity Direction에 대한 정의만 분석해 보도록 하자.

  • Gait 의 블렌드 포즈에 의해 Running인지 Spinting 인지등을 얻어와 무브먼트 모드에 해당되는 Camera Offset 값과 Pivot Lag Speed 값을 지정할 수 있도록 설정되어 있다.

 

 

  • 아래 카메라 애님 블루프린트 파일에서 카메라 Offset과 Lag Speed를 조절하여 카메라의 움직임을 조절할 수 있습니다.

  • Lag Speed는 캐릭터가 움직일 때 카메라가 따라 가는 속도인데, 값이 적어질 수록 더욱 빠릿빠릿 하게 해당 방향으로 따라가게 됩니다.
    • Lag Speed 가 100일 경우: 액터와 카메라가 거의 똑같이 움직임.
  • Lag Speed가 5일 경우 : 카메라가 액터를 따라오는 속도가 느려짐.(파란원이 카메라)

  • Camera Offset X : 카메라 X 거리를 조절하여 카메라 x방향성에서 액터와 얼마나 가까운 위치에 배치될지를 정합니다.
    • X OffSet 이 -280값일 경우

    • X OffSet 이 -180값일 경우(위 값보다 캐릭터가 카메라와 가까워짐 )
  • Camera Offset Y : 카메라 Y 거리 값을 조절하여 액터가 화면상의 좌우 배치 위치를 조절할 수 있습니다.
    • Y Off Set 값이 100일 경우(캐릭터가 좌로 배치됨)

    • Y Off Set 값이 0일 경우 (캐릭터가 정면 배치됨)
  • Camera Offset Z : 액터와 카메라 Z 거리값을 조절하여 액터가 화면상의 상하 배치 위치를 조절할 수 있습니다.
    • Z OffSet값이 0일 경우

    • Z Offset 값이 100일 경우
  • Blend 값이 높을 경우 스테이트로 돌아오는 속도가 느려집니다.
                      •  

 

 

 

아래 영상을 통해 어떻게 컨트롤 하는건지 다시 한번 확인해 보도록 하자.

 

 

반응형

+ Recent posts