오보에블로그
[Unreal] Unreal Fest 2024 정리 본문
728x90
언리얼 엔진 에코시스템과 크리에이터의 미래
unreal engine 5.5 추가 사항
- 나나이트, 루멘 개선..
- ue 모바일 프리뷰 ( ue mobile engineering focus )
- 스켈레탈 에디터
- 캐릭터 코스메틱 시스템
데디케이티드 서버 최적화와 비용 절감의 사례 (드래곤소드)
AWS 비용 및 분석 전략
- EC2 인스턴스 요금 옵션
- 온디맨드 인스턴스
- 중단 없는 인스턴스
- 스팟 인스턴스 대비 높은 비용
- 스팟 인스턴스 (권장)
- 이게 더 낫다.
- 온디맨드 인스턴스
- EC2 인스턴스 운영 체제
- Windows
- 익숙하지만 높은 비용
- Linux (권장)
- 50 % 낮은 비용
- Windows
- 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 로 관리하면 트래픽 절감 가능
- 무조건 Serialize 를 해주는 대신
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
'GameEngine & CG > Unreal' 카테고리의 다른 글
[UE5] VSC 에서 UE5 빌드 환경 구성하기 (0) | 2023.03.08 |
---|---|
[UE5] Live Code Build Error ( Unable to build While Live Coding is .. ) (0) | 2022.11.06 |
[UE5] 프로젝트 생성시 오류 (0) | 2022.10.02 |
[UE4] Error: CDO Constructor : Failed to find 오류 해결 방법 (0) | 2022.03.23 |
[UE4] VS 재빌드 (0) | 2022.03.23 |