카테고리 없음

[TIL_250206] 그래픽스 기초 2

raindrovvv 2025. 2. 6. 21:21

💭회고

오늘은 그래픽스 기초(메쉬, LOD)와 어택 콤보 시스템(블루프린트) 에 대해 학습했다.특히 LOD(Level of Detail)와 스켈레탈 메쉬 애니메이션을 배웠으며,캐릭터의 연속 공격(콤보) 시스템을 블루프린트로 구현하는 방법을 익혔다.

이번 학습을 통해 언리얼에서 그래픽 최적화 및 애니메이션 시스템을 다루는 방법을 살짝이나마 이해할 수 있었다.
실제 프로젝트에서 어떻게 활용할지 고민해볼 수 있는 기회였다.

🗺️마인드맵

📒학습 내용


1️⃣ 그래픽스 기초 (메쉬, LOD)

3D 모델을 활용할 때, 최적화와 퍼포먼스를 고려한 관리가 필수적이다.
특히 LOD 시스템을 활용하면 멀리 있는 오브젝트의 디테일을 줄여 최적화할 수 있다.

✅ 메쉬 데이터 구조

FBX 외부 툴(Maya, Blender 등)에서 제작된 데이터를 Unreal Engine으로 임포트할 때 사용 캐릭터 모델, 애니메이션 데이터
OBJ 정적인 3D 모델(스태틱 메쉬) 저장 건물, 배경 오브젝트
GLTF/GLB 웹 및 AR/VR 환경 최적화 모바일, 웹 기반 3D 콘텐츠
ABC(Alembic) 캐시된 애니메이션 데이터 포함 복잡한 시뮬레이션(예: 머리카락, 유체)

💡 FBX가 가장 널리 쓰이지만, 프로젝트 특성에 맞는 포맷을 선택하는 것이 중요하다!


✅ LOD(Level of Detail) 시스템

LOD는 카메라 거리별로 다른 디테일 수준의 모델을 적용해 퍼포먼스를 최적화하는 시스템이다.

  1. LOD0 (가장 상세한 모델)
  2. LOD1, LOD2... (거리가 멀어질수록 폴리곤 수 감소)
  3. 멀리 있는 오브젝트는 단순화된 모델 사용하여 최적화

🔹 언리얼에서 LOD 설정 방법

  • LOD 기본 설정
    1. 메쉬 에디터에서 LOD Settings 섹션 열기
    2. Custom 체크박스 활성화하여 LOD0, LOD1 수동 설정 가능
    3. LOD 임포트 옵션을 통해 각 레벨별 메쉬 설정
  • 수동 LOD 설정
    1. Auto Compute LOD Distances 옵션 비활성화(활성화 하면 자동으로 LOD 전환 거리 계산)
    2. 수동으로 거리와 디테일 조절
  • 머터리얼 설정
    • LOD 섹션에서 각 레벨별 다른 머터리얼 적용 가능
    • 멀리 있는 오브젝트는 단순화된 머터리얼 사용 가능

📌 LOD를 활용하면 성능이 개선되고, 오픈월드 게임에서 필수적으로 사용된다.


스켈레탈 메쉬와 애니메이션

스켈레탈 메쉬는 본(Bone) 구조를 포함하여 캐릭터나 움직이는 객체에 사용된다.

📌 스켈레톤(Skeleton)

  • 본(Bone) 계층 구조를 가지고 있으며, 캐릭터 애니메이션을 제어하는 역할
  • 소켓(Socket) 기능을 활용해 무기, 액세서리 등을 부착 가능
// 무기 부착 예제
AttachToComponent(
    SkeletalMeshComponent, // 부착 컴포넌트 ➡️ 즉, 무기 스켈레탈 메시
    FAttachmentTransformRules::SnapToTargetNotIncludingScale, // 부착 규칙을 정의...
    "HandSocket" // 무기가 부착될 소켓의 이름
);

💡 소켓을 활용하면 캐릭터가 무기를 교체하거나 장비를 장착하는 시스템을 쉽게 구현 가능!


📌 피직스 애셋(Physics Asset)

  • 본(Bone)에 충돌 영역을 추가하여 피격 판정물리 효과 적용 가능
  • 물리 기반 애니메이션(래그돌) 구현 가능

블루프린트 구현 방법:
1. 입력 설정:

    - R 키 입력 이벤트 생성
    - Pressed 이벤트 활용

2. 물리 시뮬레이션 설정:
    - Set Simulate Physics 노드 연결
    - Target을 Skeletal Mesh 컴포넌트로 설정
    - Simulate 옵션 활성화

  • 콜리전 설정 방법 : (충돌 영역이 제대로 설정되지 않으면 캐릭터가 땅을 뚫고 떨어질 수 있음)
    • 프리셋 설정:
          - Collision Preset에서 'Ragdoll' 선택

cpp 구현 방법

// 물리 시뮬레이션 활성화 (래그돌 적용)
SkeletalMeshComponent->SetSimulatePhysics(true);

📌 즉, 피직스 애셋을 활용하면 자연스러운 캐릭터 충돌 및 사망 애니메이션을 구현할 수 있다.


개발 시 주의사항
컨스트레인트 관리 ➡️ 삭제 시 복구 불가능, 수정 전 반드시 백업!

✅ 외부 스켈레탈 메시 적용하기

외부에서 가져온 스켈레탈 메쉬를 언리얼 엔진에서 활용하는 과정

📌 Mixamo 활용

  1. Mixamo 사이트에서 원하는 캐릭터 선택
  2. FBX Binary, T-Pose 선택 후 다운로드
  3. 언리얼 엔진으로 임포트
  4. 애니메이션 가져올 때, 스켈레톤을 매칭해줘야 한다.

📌 임포트 시 유의 사항

  • 메시가 다 분리되어 들어올 때: 스태틱 메시 결합 체크 필요!
  • 애니메이션 가져올 때 임포트하고 기존 스켈레톤과 매칭해야 정상적으로 동작

📌 리타깃 애니메이션

  • 서로 다른 스켈레톤을 사용하는 캐릭터 간 애니메이션 데이터를 매핑하는 과정
  • 애니메이션 공유를 위해 리타깃 설정 필요

2️⃣ 어택 콤보 시스템(블루프린트)

게임 내 캐릭터의 연속 공격(콤보) 시스템을 블루프린트로 구현하는 방법을 학습했다.
이 시스템은 사용자 입력에 따라 애니메이션이 순차적으로 재생되도록 설계되었다.

✅ 블루프린트 주요 요소

  1. 입력 처리 시스템
    • Pressed 노드로 공격 키 입력 감지
    • Branch 노드를 활용해 isAttack 변수를 체크하여 공격 가능 상태인지 확인
    • Switch on Int 노드를 활용해 현재 콤보 상태에 따라 다른 애니메이션 실행
  2. 애니메이션 몽타주 시스템

    • Play Montage 노드를 활용해 애니메이션 실행
    • Play Rate 조정으로 애니메이션 속도 제어
    • 섹션(Section) 기반 재생으로 공격 단계를 조절
  3. 타이머 시스템
    • Set Timer by Event를 활용해 콤보 입력 가능 시간을 설정 (예: 3초)
    • 일정 시간이 지나면 콤보가 초기화되도록 설정

✅ 콤보 시스템 블루프린트 흐름

1️⃣ 공격 키 입력 (Pressed)
2️⃣ 현재 콤보 상태 확인 (Switch on Int)
3️⃣ 해당하는 공격 애니메이션 실행 (Play Montage)
4️⃣ 타이머 시작 (Set Timer by Event)
5️⃣ 일정 시간 내 입력이 없으면 초기화 (Reset 이벤트 호출)


3️⃣최적화 팁

📌 리소스 사용량 확인하는 법

  • Tool - 리소스 사용량

  • Stat GPU → GPU 사용량 확인
  • Stat FPS → 프레임 속도(FPS) 확인

// 콘솔 명령어로 리소스 사용량 확인
stat GPU
stat FPS
  • GPU 프로파일링 활용
    • ProfileGPU 명령어를 사용하면, 각 오브젝트 및 쉐이더의 성능 부하 분석 가능
    • stat unit → CPU, GPU, Draw Calls 등 실시간 성능 체크

📌 LOD 설정 최적화

멀리 있는 오브젝트가 사라지는 문제 해결

LOD 및 나나이트 설정을 조정하여 멀리 있는 오브젝트도 보이게 수정 가능

foliage.ForceLOD 0 명령어 cmd 입력하여 최적화 해제 가능

// 멀리서도 잘 보이게 하기, 값을 0으로 설정하면 모든 거리에서 최대 디테일을 강제할 수 있다.
foliage.ForceLOD 0

// 거리 조절하기, 0.1로 설정하면 더 멀리서도 디테일을 유지할 수 있으나 성능 부담이 있을 수 있습니다.
foliage.LODDistanceScale 0.1

📌 LOD 및 최적화 설정을 조정하여 성능을 유지하면서도 시각적 품질을 극대화할 수 있다.


✨배운 점 및 다음 목표(응용 방안 생각해보기)

배운 점

  • LOD 시스템을 활용하면 그래픽 성능 최적화가 가능하다.
  • 스켈레톤과 소켓을 활용하면 장비 교체 시스템을 쉽게 구현할 수 있다.
  • 어택 콤보 시스템은 타이머와 몽타주를 조합하면 효율적으로 구현할 수 있다.

📌 다음 목표 or 활용 방안

  • 콤보 공격에 따라 적이 넉백(Knockback)되도록 물리 반응 추가
  • 다른 캐릭터에도 같은 콤보 시스템을 적용할 수 있도록 블루프린트 최적화

🟣오늘의 옵시디언 현황