오보에블로그

[Unreal] Unreal Fest 2024 정리 본문

GameEngine & CG/Unreal

[Unreal] Unreal Fest 2024 정리

(OBO) 2024. 9. 30. 09:32
728x90

언리얼 엔진 에코시스템과 크리에이터의 미래

unreal engine 5.5 추가 사항

  • 나나이트, 루멘 개선..
  • ue 모바일 프리뷰 ( ue mobile engineering focus )
  • 스켈레탈 에디터
  • 캐릭터 코스메틱 시스템

데디케이티드 서버 최적화와 비용 절감의 사례 (드래곤소드)

AWS 비용 및 분석 전략

  • EC2 인스턴스 요금 옵션
    • 온디맨드 인스턴스
      • 중단 없는 인스턴스
      • 스팟 인스턴스 대비 높은 비용
    • 스팟 인스턴스 (권장)
      • 이게 더 낫다.
  • EC2 인스턴스 운영 체제
    • Windows
      • 익숙하지만 높은 비용
    • Linux (권장)
      • 50 % 낮은 비용
  • EC2 인스턴스 유형
    • 필요 스펙에 따라 적절한 인스턴스 타입 결정
    • 데디 서버에 적합한건 C 시리즈 정도
  • EC2 Auto Scaling (필수 사항)
    • 접속 유저수에 따른 동적 인스턴스 관리
    • GAmeLiftFleetIQ
    • 온디맨드 or 스팟 선택 가능
  • EC2 Traffic
    • 수신 비용 무료

데디케이티드 서버 최적화 우선 순위

  • 성능 최적화
    • 서버당 유저 수 증가
  • 메모리 최적화
    • 메모리 사용량을 2^N 이하로 줄이기

Animation 최적화

  • AnimNotify 의존적 액션 시스템
    • Tick 에 의존
  • 해결법 : Action Instance
    • Action Instance Tick 에서 직접 호출
    • 이벤트 시간이 도달하면 AnimNotify Tick 끔
    • Action Instance ON 시에 Bone 독립적으로 충돌 판정으로 변경 필요
  • Collision 최적화
    • OverlapTest 대신 World2DGrid 활용

Net broadcast 최적화

  • 액터 순환비용
    • 클라인트 연결마다 액터를 순화하며 relevant 검사
    • net serialize
  • 해결 법 : Replication Graph
    • 네트우ㅓ크 액터를 Cell 단위의 그리드로 구조화하여 노드로 관리
    • 전체 Replication Actor 순회하는 방식이 아닌 클라이언트 연결마다 Cell 단위로 Relevant 검사
    • SetRepNodePolicy
    • 액터간의 종속 관계를 설정할 수있어 순환 비용을 감소시킬 수 있다.
    • 무기 클래스를 캐릭터 클래스의 종속 관계로 설정
    • 클라이언트 Viewer 방향 /거리에 따라 상대적 NetFerquency 적용
    • UReplicationGraphNode_DynamicSpatialFrequency::DefaultSettings.ZonSettings_NonFastSharedActors[Rear].MinRepPeriod = 7;
    • Tick 최적화
    • FActorTickFunction FActorComponentTickFunction bCanEverTick = false // 틱처리가 필요없는 액터일시에 bAllowTickOnDedicatedServer = false // 클라이언트에만 틱 처리 필요할 시에 bStartWithTickEnabled = false // 액터나 컴포넌트가 생성되자마자 틱처리가 필요한게 아니라면 false 처리 SetTickFunctionEnable(false) // 필요할때만 Tick ON/OFF 처리 TickInterval = 1 // 초당 틱 처리 횟수

Client 이동 패킷 전송 주기 제어

  • GameNetworkManager.h 변수 조정
    // 통상적으로 이동 패킷 전송 주기 설정
    float ClientNetSendMoveDeltaTime;
    // 플레이어가 이동하지 않거나 변화가 없을 때 이동 패킷 전송 주기를 조정
    float ClentNetSendMoveThrottleOverPlayerCount;
    ...

NetSerialization

  • 언리얼 구조체에 커스텀트레잇 적용
  • 아래의 두 플래그를 True 로 설정하면 NetSerializatio 을 커스텀하게 설정 가능하다.
TStructOpsTypeTraitsBase2
{
    WithNetSerializer = True;
    WithNetDeltaSerializer = True;
}
  • 구조체 Serialization 최적화 코드 예시
USTRUCT()
struct FDsHitEffectInfo
{
    ...
    UPROPERTY()
    FVector_NetQuantize StartPoint;

    ...

    bool NetSeriaiize(FArchive& ... );
}

struct TStructOpsTypeTraits<FDsHitEffectInfo> : public TStructOpsTypeTraitsBase2<FDsHitEffectInfo>
{
    enum
    {
        WithNetSerializer = true
    }
}
  • NetSerialize 함수 구현을 통해 최적화 가능
    • 무조건 Serialize 를 해주는 대신 NetSerizliaeOptionalValue 을 디폴트 값으로 지정하면, 동기화 해야하는 값이 디폴트 값과 일치하면 1 비트 만 사용. 만약 다르다면, 1비트를 추가로 더사용하므로 보통 디폴트 값일 경우에 사용하면 좋다.
    • FName , Fstirng 이 정적으로 변경되지 않는 경우 TableId 로 관리하면 트래픽 절감 가능

Net Delta Serialization

  • TArray 보다는 FFastArraySerializer 사용 하면 성능 최적화에 유리
    • Array 를 빠르게 Serialize 해주는 클래스
  • RecentBuffer 조회/ 비교 없이 Dirty 된 항목만 OutBunch 에 Serialization
  • 추가 : MarkItemDiry / 삭제 : MarkArrayDirty

Cinematic Prestreaming

  • 사전에 어떤 오브젝트가 로드 될지 저장.
  • 버츄얼 텍스처, 지오메트리 의 지연을 없앨 수 있음

서브스트레이트

사용하는 이유

  • 기존 머테리얼 시스템 한계
    • 메탈릭을 기반으로 한 물리기반 렌더링 모든 물질을 메탈릭 & 논메탈릭 두가지로 구별이 불가능하다.
    • 스페큘러 : 비금속의 반사율
      • 언리얼 도큐먼트 중 언리얼 엔진이 사용하는 기본 스페큘러 값 0.5 는 약 4% 의 스페큘러 리플렉션을 나타냅니다.
      • 메탈릭이 0 일 때 스페큘러 값이 1 이어도 반사욜은 8% 이기 때문에
      • 역산 시 IOR 값이 1.78 로 제한되는데, 물질 IOR 값이 그 이상 인 값도 존재하긴함.
  • 다른 툴과의 호환성

서브스트레이트 개념

  • 창의성에 제한 없이 작업 효율을 높일 수 있는 멀티 BSDF 프레임워크

슬랩 (slab)

  • 물리적인 단위를 쓰는 원칙적인 BSDF
  • 인터페이스와 매체로 이로어져있고, 인터페이스에 반사되는지 매체에 흡수되는지 통과되는지를 결정하는 개념
  • F0 & F90
    • F0 : 표면에 빛이 수직으로 입사할 때 반사되는 빛의 비율
    • F90 : 표면에 빛이 수평으로 입사할 때 반사되는 빛의 비율
    • 보통 금속은 F0 이 1에 가깝고 비금속은 F0이 0.08 이하로 낮다.
      • 이걸 기준으로 메탈릭이냐 아니냐로 나눈다.
  • 러프니스 & 애니소트로피
    • 러프니스 : 표면의 거칠기
    • 애니소트로피 : -1 ~ 1 의 값을 가지며 양수일때는 탄젠트 벡터를 따라서 스페큘러가 늘어나고, 음수일때는 탄젠트 벡터의 수직방향을 따라서 스페큘러가 늘어난다.
  • 세컨더리 러프니스
    • 좀더 꼬리가 긴 스페큘러를 표현하고자 할때 사용한다.
  • 디퓨즈 러프니스
    • SecondRoughness Weight 가 1 일 때 기존 러프니스는 디퓨즈에만 영향을 끼침
  • 퍼즈
    • 표면이 매우 미세하고 부드러운 재질 표현
  • 글린트
    • 자동차 페인트, 눈 같이 반짝이는 효과에 사용
  • 디퓨즈 알베도
    • 다중 산란 이후 전체적인 반사율
  • MFP (Mean Free Path)
    • 광자가 매체의 입자에 도달하기 전까지의 자유 이동 거리
    • 유리 표현 (투명) 할 때도 사용

서브스트레이트 성능 & 디버깅

  • 서브스트레이트 트리 = 클로저 리스트
  • Closure : 라이트 계산에 사용될 파라미터 묶음
  • 슬랩에서 투과 하고 클로저에서 평가해서 루미넌스 컬러라는 결과 값이 나오는 듯.

GAS 사용한 프로토타입 제작 사례

GAS 의 기본 개념과 적용 사례

728x90