Unreal Interface로 생성

Interface에는 추상함수만 추가

- 선언

- virtual [type] name ([params]) = 0;

 

 

ClassName : Parent Class, Interface1, Interface2

- 상속

- TScriptInterface<type> name -> 이렇게하면 사용할때 interface로 cast없이 사용가능 ( 모든Object에 대해 )

 

'Unreal > UE Architecture' 카테고리의 다른 글

Gameplay Ability System  (0) 2024.06.13
Cpp -> BP Pipeline 1  (0) 2024.05.17
문자열 처리  (0) 2024.05.16
UE Macro & Reflection System  (0) 2024.05.16
Smart Pointer & Container & Serialize  (0) 2024.05.16

인프런 : https://www.inflearn.com/course/%EC%9D%B4%EB%93%9D%EC%9A%B0-%EC%96%B8%EB%A6%AC%EC%96%BC-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-part-4/dashboard

Udemy : https://www.udemy.com/course/unreal-engine-5-gas-top-down-rpg/

추가 문서 : https://kkadalg.tistory.com/29

command list

- showdebug abilitysystem

  - PageUp/Down으로 ASC를 가진 객체들을 순환할 수 있음

  -> DefaultGame.ini에서 [/Script/GameplayAbilities/AbilitySystemGlobals] bUseDebugTargetFromHud=True로 해줘야 AI도 보임

 

1. ASC ( AbilitySystemComponent )

- Actor에 interface 설정 : public IAbilitySystemInterface

- ASC . InitAbilityActorInfo( 실 소유자, 시각효과 발현자 ) ( possessed시(server), onrep_playerstate시(client) )

   -> 실 소유자의 owner는 항상 playercontroller야 함 ( playerstate owner는 항상 controller, pawn은 possess시 controller )

- ASC . TryActivateAbility, CancelAbilityHandle ( FGameplayAbilitySpec* . Handle )

- 접근 - UAbilitySystemBlueprintLibrary::GetAbilitySystemComponent( 소유 액터 )

- 외부에서는 GetGameplayAttributeValueChangeDelegate() 같은걸로 attribute change noti delegate를 구독할 수있음

- SetReplicationMode Minimal AI용, Mixed 플레이어용, Full 싱글플레이어용

  Use Case GE Tag, Cue
Full Single o o
Mixed Multi, PlayerControlled owner-only o
Minimal Multi, AI-Controlled x o

 

2. GA ( GamePlayAbility )

- 액션단위

- ASC에선 FGameplayAbilitySpec* 으로 액션에 대한 instance를 제어 ( . handle을 통해 asc에서 내부 function에 접근 )

- FGameplayAbilitySpec* .. = ASC . FindAbilitySpecFromClass ( {GamePlayAction.child}::StaticClass() ) 로 생성

  - InstancingPolicty ( * 꼭 설정해줄것. default가 InstancedPerExecution )

     - NonInstanced : 인스턴싱 없이 CDO에서 일괄 처리, 단순, 상태부여는 어렵

     - InstancedPerActor : 액터마다 인스턴스. 고유스테이트 - 일반적

     - InstancedPerExecution : 어빌리티 발동시마다 인스턴스 발동. 액션마다 스테이트

 - 폰들 ( ASC의 owner 및 avatar )에 대해선 각 메서드 super에서 parameter로 받는 ActorInfo 내에 owner, avatar를 통해 접근 가능

 - GA를 상속받은 BP에서 각 State ( override )에서의 GameplayTag를 정의할 수 있음

 

3. GameplayTag

- #include "GameplayTagContainer.h"

- DefaultGameplayTags.ini에 생성 및 관리

- 계층구조를 가지는 태그 ( ex Actor . Action . Rotate )

- 쿼리검색 -> HasTagExact, HasAny, HasAnyExact, HasAll, HasAllExact 등

- Gameplay Ability System에서 사전정의된 태그리스트가 있음

  - AbilityTags 태그컨테이너

  - CancelAbilitiesWithTag 태그 컨테이너 등 ( BlockAbilitiesWithTag, ActivationOwnedTags, ActivationRequiredTags ... )

- 파라미터로 사용할 Tag의 포인터는 FGameplayTag::RequestGameplayTag(FName("태그이름")) 으로 얻음

   ( FGameplayTagContainer 타입 )

 

4. 기본 Architecture

- GA에 AbilityTags.AddTag로 어빌리티 태그 할당, ActivationOwnedTags로 상태태그 추가

- ASC -> GiveAbility를 통해 ASC에 해당 GA 추가

  ( FGameplayAbilitySpec ..(GA)를 GiveAbility에 박음. FGASpec이 GA 매니저인듯 )

- ASC -> TryActivateAbilititesByTag나 CancelAbilities 를 통해 Tag로 GA 트리거

 

5. GASpec ( Gameplay Ability Spec )

- ASC에서 GA를 관리할때 사용하는 중간매개체 ( 정확히는 GASpec의 Handle을 통해 관리 )

- 추가적인 메타데이터, 설정값을 포함

- GA의 상태 등에 대해 가져올 수 있음

- Handle값은 전역이며, 스펙생성시 1씩증가 ( 기본값 -1 )

- GA의 instance에 in32 InputID를 할당하고 ASC에서 ID를통해 접근할 수 있음 ( FindAbilitySpecFromInputID )

    -> GA가 발동중이면 입력신호전달 ( AbilitySpecInputPressed, 아니라면 발동 TryActivateAbility 하는 등 )

    -> 입력 release시 AbilitySpecInputReleased

 

6. AT ( Ability Task )

- NewAbilityTask < child class > ( owner GA ) 로 생성

- GA는 1frame내 동기처리가 기본

- animation과 타이밍 등 비동기적 요소가 포함된 스펙을 AT에서 관리

  - UAbilityTask_PlayMontageAndWait 등

    - 해당 태스크의 static 변수로 이닛 ( ex. CreatePlayMontageAndWaitProxy )

    - OnComplated 등에 AddDynamic으로 콜백함수 연결하고 ( GA의 ActivateAbility 메서드 시점에서 AT의 델리게이트를 GA 콜백함수에 연결 )

    - FreadyForActivation();으로 실행개시

    - 필요시 콜백함수에서 GA의 EndAbility ( GA종료 ) 호출

    - MontageJumpToSection 등 내장된 편의기능이 많음 ( GA )

 - 시작 : Activate ( override ) , 종료 : OnDestroy ( override )

 - static method에서 NewAbilityTask < AT class(보통자신) > ( GA ) 넣어서 해당 ga용 특정 at 생성 가능

 - 얘넨 그냥 GetAvatarActor 가지고있네 내장함수로

 

예제에서는 EnhancedInputSystem에서 IA에 Callback함수를 binding할 때, 같은 Callback을 바인딩하고 input param에 GA의 Id를 줘서 하나의 callback 함수로 여러 input(IA) -> action(GA)을 바인딩하고있음

 

7. GE ( Gameplay Event )

- ( Anim Notify등에서 ) Actor(보통 캐릭터)의 가상함수에

FGameplayEventData PayloadData;
UAbilitySystemBlueprintLibrary::SendGameplayEventToActor(OwnerActor, TriggerGameplayTag, PayloadData);

  를 보낼 수 있음. TriggerGameplayTag는 블프나 notify detail에서 할당해도되고, 코드에 직접박아도 되고

그리고 액터의 ASC에 GA를 바인딩한 다음, GA의 AbilityTriggers ( TArray<FAbilityTriggerData>)에 해당 TriggerGameplayTag를 등록

  - 등록은 걍 BP에서 하는게 편함

 

8. TA ( GameplayAbilityTargetActor )

- StartTagetting -> ConfirmTargeting(AndContinue), CancelTargeting 등

- 타켓 판정 및 관리 ( line trace, collision trace 등 )

  - Target Data Handle에서 Target Data들을 묶어서 전달

- SpawnActorDeffered로 지연생성하고, 델리게이트 구독 등 초기화 별도로 해줌 ( AT에서 )

   -> FinishSpawning -> StartTargetting(in Ability) -> ConfirmTargeting

- Start에서 SourceActor에 타격판정할 액터 등록 // #If Enable Draw Debug

 

9. Attribute Set

- GameplayAttributeData : 단일 프로퍼티

   - Base Value

   - Current Value : 버프등으로 인한 변동값

- ASC는 등록될 때, Owner에있는 Attribute Set 객체들을 자동으로 등록함 ( ASC variable과 동일한 클래스 내에서 )

   -> 그냥 variable 선언하고, CreateDefaultSubobject로 할당하면됨

   -> ASC->GetSet<class>()

- Attribute Set class 안에있는 매크로 참조하여 사용. 아래쪽에 전처리#def 해서 getter, setter, inniter 자동생성 매크로 있음

#define ATTRIBUTE_ACCESSORS(ClassName, PropertyName) \
    GAMEPLAYATTRIBUTE_PROPERTY_GETTER(ClassName, PropertyName) \
    GAMEPLAYATTRIBUTE_VALUE_GETTER(PropertyName) \
    GAMEPLAYATTRIBUTE_VALUE_SETTER(PropertyName) \
    GAMEPLAYATTRIBUTE_VALUE_INITTER(PropertyName)
ATTRIBUTE_ACCESSORS(UABCharacterAttributeSet, AttackRange);

- PreAttributeChange, PostAttributeChange등의 가상함수를 제공

- MetaAttribute

   - 확장성을 위해 중간단계에 추상성 계산단계를 추가

   - ex. 공격로직을 hp에 직접 적용하지 않고 공격로직 -> Damage attritue -> hp attribute 등 ( 회복, 쉴드 등 추가개념 확장을 위해. 데미지는 음수가된다고 회복처리가 아니어야 함 )

 - PostGameplayEffectExecution 함수에는 Effect에 의해 Modi된 값이 들어옴

 - delegate 선언 시 mutable 선언을 통해서 const를 뺀 get/set에 접근

 - Data.Target.AddLosseGameplayTag로 태그추가가능

 

10. GE ( Gameplay Effect )

- GA에서 MakeOutgoingGameplayEffectSpec(GE클래스) 만들어서 핸들러로 사용

  -> ApplyGameplayEffectSpecToTarget

- 기본타입(DurationPolicy) : instant, duration, infinite

- 모디파이어로 어트리뷰트 변형방법을 지정 ( 혹은 GameplayEffectExecutionCalculation을 통해 커스텀 )

   -> .Attribute, .ModifierOp -> FGameplayEffectModifierMagnitude타입 변수를 생성 -> [Modifier].ModifierManitude = 해당변수

   -> MagnitudeType - Custom Calc Class  : Gameplay Mod Magnitude Calculator를 참조

- 로직보단 세팅위주여서 BP를 권장

- DataTag를 통해서도 호출가능

 ( GE에 DataTag 등록 -> EffectSpecHandle.Data->SetSetbyCallerMagnitude(태그, attribute ), 다음 apply )

- GEContext : 정보를 담은 객체 ( instigator, causer, hit result 등 )

- GESpec : GE관련 정보 ( level, modifier, tag, context handle 등 )

 -> GESpecHandle -> GESpec -> GEContextHandle -> GEContext ( GA없이 ASC가 직접 접근도 가능 )

 -> 그래서 GEContext만들고, handle만든다음, 해당핸들을 param으로 GESpec 생성하고, GESpecHandle 생성

FGameplayEffectContextHandle EffectContextHandle = ASC->MakeEffectContext();
EffectContextHandle.AddSourceObject(this);
FGameplayEffectSpecHandle EffectSpecHandle = ASC->MakeOutgoingSpec(InitStatEffect, Level, EffectContextHandle);
if (EffectSpecHandle.IsValid())
{
    ASC->BP_ApplyGameplayEffectSpecToSelf(EffectSpecHandle);
}

- type이 Instance거나, bisPeriod = true인 경우에는 base value를 바꾸지만, 아닌 경우에는 current value 변경(버프취급)

 

11. GC ( Gameplay Cue )

- VFX나 SFX같이 로직과 상관없는 애들

  - Static GC 순간발생

  - Actor GC 기간발생

- Tag를 통해 발동시킬떄는, GameplayCue로 시작하는 태그를 사용해야 함

- GA에서 GCParam을 만들고, 해당파람.EffectContext에 GEContextHandle을 주입 -> ASC->ExecutecuteGameplayCue()

 

 

 

 

ps.

float 유효범위 정의 : FString::Printf(TEXT("%.0f / %0.f"), float, float)

'Unreal > UE Architecture' 카테고리의 다른 글

Unreal Interface  (0) 2024.06.16
Cpp -> BP Pipeline 1  (0) 2024.05.17
문자열 처리  (0) 2024.05.16
UE Macro & Reflection System  (0) 2024.05.16
Smart Pointer & Container & Serialize  (0) 2024.05.16

Exposure / Local Exposure

Exposure / Local Exposure

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/auto-exposure-in-unreal-engine?application_version=5.3

Showflag.VisualizeHDR 1 이면 왠만한건 이해 됨

  • EV100
  • 파랑 : Screen(Desire) EV100 값
  • 자홍 : Current EV100 값
  • 흰색 : Calculated EV100 값
  • Metering Mask : Screen Exposure값을 계산할 때, Mask를 칠 수 있음

 

Local Exposure

  • 화면의 영역을 적절히 나눠서, 명부분과 암부분에 별도의 exposure값을 적용하는 기능

 

Color Grading 및 Tone Mapper

 

Panini 투영

Panini 투영

https://dev.epicgames.com/documentation/ko-kr/unreal-engine/panini-projection-in-unreal-engine?application_version=5.3

  • 원근투영으로 인한 가장자리 시야왜곡을 PPS 단계에서 역보정 한다는 개념
  • r.Upscale.Panini.D 1 입력하면 적용
  • r.Upscale.Panini.D 0 입력하면 해제

https://wiki.voxelplugin.com/

정점 사이의 곡률에 대한 보간 처리

  • 일반적인 smoothing algorithm ( https://wordsandbuttons.online/interactive_explanation_of_marching_cubes_and_dual_contouring.html )
    • Marching Cube ( 예시 : 원 )
      1. 격자공간으로 샘플링 ( 안 : -, 밖 : + )
      2. 각 격자공간에 대해, 4개의 모서리값에 의해 원을 기반으로하는 선분 적용
      3. 격자공간에 대해 가중치를 주어, 선분의 위치를 보간
        1. 가중치는 원(지점)의 중심으로부터의 거리 - 기준원의 길이
      4. 샘플 파이썬 스니펫
    • Dual Controuring
      • Marching Cube의 일종으로, vertex들을 그리드위에서 판정하는게 아니라, 그리드 내부에 그리는 형태
        • 그리드 내부에 점 하나를 정의하고, 인접한 그리드가 점을 포함할 시 edge를 그리면 될듯
      • Marching에 비해 뾰족한 모서리도 표현할 수 있다는 장점 ( 사각형 등 )

 

Voxel World Plugin

  • 복셀월드 그리드 공간 내부의 각 교점들에 대해 내부적으로 계산된 (int)x, (int)y, (int)z, (FVoxelValue) value값이 있음
    • Data Set에 Bound param을 넣어 특정된 영역안의 교점리스트를 받는 형태
    • 예를들어 구형체의만큼 구멍을 낸다면 bound를 predefine해서 교점리스트를 얻고 아래식을 통해 교점들의 값을 수정 ( VoxelWorld.RemoveSphere() )
       
    •  
const float Distance = FMath::Sqrt(SquaredDistance);
const FVoxelValue NewValue{ FMath::Clamp(Radius - Distance, -2.f, 2.f) / 2 * (bAdd ? -1 : 1) };
VoxelValue = max ( VoxelValue, NewValue ) // marching cube에서 기본적으로 음수가 채워져있음을 의미

 

  • VoxelWorld.SetMaterial(Sphere, Box, 혹은 Int32Vector지정을 기반으로하는 교점 직접지정)으로 특정 material로 painting 가능

새로운 모듈 만들기
모듈 활성화

Engine 경로  : System.IO.Path.GetFullPath(Target.RelativeEnginePath)

  • Plugin은 저 아래 /Plugin붙이면 됨

 

플러그인 설정 / 모듈 기본 구성 ( {project}/Plugins/ )

Type : Runtime / Editor

'Unreal > 툴 에디터' 카테고리의 다른 글

기본 컨셉 및 용어  (0) 2024.05.21

  •  Asset
    • BP 등 컨텐츠 브라우저에 노출되는 대상의 총칭
    • Object Path : /Game/MyFolder/BP_MyBP.BP_MyBP'
    • Package Path : /Game/MyFolder/
    • Asset Name : BP_MyBP
  • Actor
    • World에 배치되는 대상의 총칭

 

기본 세팅

기본 세팅 

module의 build.cs파일 세팅

  • Blutility 추가 ( AssetActionUtility.h 및 ActorActionUtility.h가 해당 모듈에 포함되어 있음 )
    • PrivateIncludePaths.AddRange
      • System.IO.Path.GetFullPath(Target.RelativeEnginePath) + "/Source/Editor/Blutility/Private"
    • PublicDependencyModuleNames.AddRange
      • "Blutility"
  • UFUNCTION(CallInEditor)
  • AssetActionUtility 자식 클래스로 생성
    • plugin폴더 / contents / 우클릭 → editor utility → editor utility blueprints 생성 → 만든 클래스 상속 → 재접속
  • Editor UI Name 활성화 - editor preference - Display UI Extension Points
주요 레퍼런스 헤더

주요 레퍼런스 헤더

<FAssetData>

  • Reflection 통해서 접근가능한 메타데이터 타입?
    • GetClass()
    • isA<UObject>

 

Paths.h

  • Combine(<FString> a, <FString> b) : 경로문자열과 경로문자열을 합침

 

UEditorUtilityLibrary.h

  • TArray<FAssetData> GetSelectedAssetData()
    • <FName> ObjectPath
    • <FName> PackagePath
    • <FName> AssetName

 

UEditorAssetLibrary.h 

  • <bool> DuplicateAsset( {source path}, {target path} )
  • <bool> SaveAsset( {target path}, dirty조건 여부 )
  • <FString> FindPackageReferencersForAsset(에셋경로) : 해당 에셋에 reference가 걸린 대상들 리스트 반환

 

FMessageDialog

  • Open( <EAppMsgType> 메시지 타입, 기타등등 )

 

FSlateNotificationManager::Get()

  • AddNotification : 에디터 우측하단 메시지

 

ObjectTools

  • DeleteAssets ( TArray<FString> )

 

FModuleManager

  • <FContentBrowserModule> (static) LoadModuleChecked<FContentBrowserModule>(TEXT("name"))

FContentBrowserModule

  • <TArray<FContentBrowserMenuExtender_SelectedPaths>> GetAllPathViewContextMenuExtenders();
  • 해당 어레이에 델리게이트 집어넣으면 메뉴에 추가되는 듯?
Tips

  • 블루프린트는 UBlueprint를 상속 
  • EditorUtilityLibrary의 GetSelectedAsset은 <UObject*>를 반환 ( 언리얼 스트럭쳐 최상위 부모 )
  • UObject
    •  GetClass()
      • GetName()
  • FString
    • StartWith()
    • From~~()

 

특정 메뉴에 리스트 추가하기

IModuleInterface 상속

  • virtual void StartupModule() override에서 delegate를 binding 하는 함수 실행
  • 컨텐츠 브라우저 메뉴 ex
    • FModuleManager::LoadModuleChecked<FContentBrowserModule>(TEXT("ContentBrowser"))
        .GetAllPathViewContextMenuExtenders().Add(
          FContentBrowserMenuExtender_SelectedPaths::CreateRaw( this, &함수명 ));
    • 즉, module를 통해 path view context menu array에 content browser menu 타입 델리게이트를 만들어서 추가해야 함 ( 출력되는 영역에 대한 정의 )
    • 함수는 const TArray<FString>& 선택된 경로들을 파라미터로 받음
    • 이 타입을 FMenuBuilder&를 parameter로 받으며, 해당 스트럭쳐에서 .AddMenuEntry함수를 통해 FExecuteAction 델리게이트를 쑤셔넣음 ( 수행에 대한 정의 )

'Unreal > 툴 에디터' 카테고리의 다른 글

플러그인 만들기  (0) 2024.05.21

Directional Light

Categoryproptypedesc
Light
Unreal Doc
Intensity float 빛 강도
  Light Color color 빛 색상
  Source Angle float 태양 크기
  Source Soft Angle float 작동 안하는듯
  Use Temperature bool 온도기반 색상 사용 여부
 
  • Tempuerature
float 온도
  AffectWorld bool 빛 on/off
  • 런타임에는 visibility로만 제어 가능
  Cast Shadow bool 그림자 생성 여부
  Indirect Lighting Intensity float 간접광 강도
  Volumetric Scattering Intensity float Volumetric Fog에 의해 산란되는 강도 → Height Fog . Volumetric
  Advanced    
 
  • Shadow Cascade Bias Distribution
  섀도우 케스케이드 트랜지션 시 섀도우 점 변화 조절
 
  • Forward Shading Priority
  포워드 셰이딩 관련 ( 모바일 )
 
  • Cast Modulated Shadow
  ( 모바일 )
 
  • Modulated Shadow Color
  ( 모바일 )
 
  • Shadow Amount
  그림자 양. 0이면 오클루젼 계산 안함 이라는데 모르겠음..?
 
  • Specular Scale
  스페큘러 하이라이트 강도
 
  • Shadow Resolution Scale
  섀도 맵 해상도라는데 작동을 안함..?
 
  • Shadow Slope Bias
  섀도 바이어스인데 작동안함..
  ...    
 
  • Lighting Channels
enum 1, 2, 3 채널이 있으며, 동일한 채널의 오브젝트에만 라이트가 적용됨
 
  • Transmission
bool 서브서피스 스캐터링 표면 투과 여부
 
  • Cast Volumetric Shadow
bool 볼류매트릭 포그에 섀도우 여부
Light Shaft
Unreal Doc
    빛 기둥 효과 ( 스크린 스페이스 블러 오클루전 ) 
  Occlusion   Fog(Volumetric)에 의존하는 빛기둥 ( 눈밝기 ) → Height Fog . Volumetric
  Bloom   Fog와 독립적으로 생성되는 빛기둥
Lighmass     static / stationary일때만 활성화되는데 작동을 안함
Cascade Shadow Map     추가 공부 필요
Atmosphere and Cloud Atmosphere Sun Light bool atmosphere에 태양이 이 디렉셔널을 참조할지 여부
  Cast Shadows on Clouds bool 구름에 그림자 생성 여부 ( 플래닛용 )
  Cast Shadows on Atmosphere bool 대기에 그림자 생성 여부 ( 플래닛용 )
  Cast Cloud Shadows bool 구름 그림자 생성 여부
  Cloud Scattering Luminance Scale color 클라우드에 비추는 빛 색상
  • SkyLight에 의해 지면에도 전사됨
  Advanced    
 
  • Atmosphere Sun Light Index
int 0번은 태양 ( 모든효과 받음 )
1번은 기타 ( 몇개 안받음 )
2번부터는 적용안됨. 태양은 최대 2개. 동일한 인덱스에 여러개의 태양 불가
 
  • Atmosphere Sun Disk Color Scale
color 천체 색상
 
  • Cloud Shadow 캐스트관련 프로퍼티
float 관련 값들

 

Sky Atmosphere ( https://dev.epicgames.com/documentation/ko-kr/unreal-engine/sky-atmosphere-component-in-unreal-engine )

Categoryproptypedesc
Planet     행성 대기를 가정하고 곡률을 줌
  • 구름
  • 대기
Atmosphere Atmosphere Height km 대기 높이
Rayleigh     레일리 산란 ( 미세 입자 )
대기색 스펙트럼
Mie     미 산란 ( 거시 입자 )
태양 주변 번짐 ( 백색 )
Art Direction Sky Luminance Factor color 전체 하늘색상 변조
  Aerial Perspective View Distance Scale float 대기 두께 두껍게 보임
  • 산란 길이 길게
  Height Fog Contribution float height fog 강도
  Transmittance MinLight Elevation Angle degree 태양이 지면밑으로 내려갔을때 빛 새는 기준각인듯

 

Sky Light

Categoryproptypedesc
Light     기본적인 것들
  Real Time Capture bool 리얼타임캡쳐
( false일시 sky light → recapture, runtime 가능 )
Distance Field Ambient Occlusion      
Atmosphere and Cloud     체감안됨
  Cloud Ambient Occlusion   멀리있는 구름 점차 안보임

 

ExponentialHeightFog ( https://dev.epicgames.com/documentation/ko-kr/unreal-engine/exponential-height-fog-in-unreal-engine )

Categoryproptypedesc
Exponential Height Fog Component Fog Density float 안개 진하기
  Fog Height Falloff float 고도상승할때 안개 진하기 감쇄율
  • 파라미터를 높이(unit)에 대한 지수로 쓰는데
  • 기준점이 sky atmosphere의 planet 크기기준 원점이라 엄청멀리잡히는 느낌
  Second Fog Data   모르겠음
  Fog Inscattering Color color 안개로 인한 산란 색상
  Fog Max Opacity float 색상이 있을 때, 멀어질수록 산란색상이 강하게 들어가는데, 그 강하게 들어가는 최댓값
  Start Distance float 카메라로부터 fog가 적용되기 시작하는 최소거리라는데, 작동안함
  Fog Cutoff Distance float 이 값보다 먼 대상은 fog가 적용되지 않음
  • sky atmos처럼 이미 fog가 별도로 적용되어있는 경우 유용
  • 0이면 비활성화 되는듯? ( 항상 포그 적용 )
Directional Inscattering     디렉셔널 라이트에서 발생하는 산란상호작용 처리
  • 태양에서 카메라를 향해 콘을 쏘면서 생긴 스캐터링을 계산한 느낌
  • 주로 대기색상에 영향
  ... Exponent float 커질수록 태양 근처로만 산란됨 ( 음수 지수 계수 )
  ... Start Distance float 카메라로부터 이 거리 이상의 대기에만 스캐터링
  ... Color color 스캐터링 컬러
Volumetric Fog Volumetric Fog bool 볼류메트릭 포그 사용 여부
  • 일반 헤이트 포그는 단순하게 월드위치와 카메라 뎁스값만 가지고 연산
  • 볼류메트릭으로 전환 시 공간샘플링 혹은 스크린 샘플링 하는듯
  Scattering Distribution float 안개에 의한 산란시 빛 방향성 유지 강도
  • 0 은 무작위 방향 산란
  • 0.9는 빛 기존 방향으로 정렬
  • -0.9는 빛 반대방향으로 정렬? 이건 뭐야 ㄷ
  Albedo flaot 안개 색상 ( sub )
  Emissive float 안개 색상 ( additive )
  Extinction Scale flaot 아마 볼류메트릭이 헤이트 대비 소멸비인듯. 1.0이 default height하고 동률이고
  View Distance float 포그 적용 최대 거리
  Start Distance float 포그 적용 최소 거리
  Near Fade In Distance float Start지점에서 fade in 시작될 거리 ( start + near fade ~ view 사이에서 lerp 하는듯 )
  • blend 시작 지점 ( 상승 ramp )
  Static Light Scattering Intensity float 스태틱 라이트 스캐터링 강도
  Advanced    
 
  • Override Light Colors with
    Fog Inscattering Colors
bool 흠..

 

Volumetric Cloud

 

PostProcess Volume

 

World Setting

 

Common Light

 

Planet Setting

  • Sky Atmosphere
    • Planet
      • *
    • Atmosphere
      • Atmosphere Height
  • Exponential Height Fog
    • Fog Height Falloff
  • VolumetricCloud
    • Layer
      • Layer Bottom Altitude
      • Layer Height

 

Color Temperature

 

'Unreal > Lighting' 카테고리의 다른 글

Mobility  (0) 2024.05.21

Lighting Component

  • Diffuse
  • Direct Lighting
  • Dynamic Shadows
  • Global Illumination
  • ( Ambient Occlusion )
  • ( Specular )

 

Light map

 

Mobility

  • 모빌리티

    설명

    Static 스태틱 - 이 모빌리티는 게임플레이 도중 어떤 식으로든 이동 또는 변할 수 없는 액터에 씁니다.
    • 스태틱 메시 액터의 경우, 그 그림자가 미리계산된 라이트 맵에 반영된다는 뜻이며, 라이트매스 를 사용해서 생성하고 처리합니다. 이 모빌리티는 게임플레이 도중 움직일 일이 절대 없는 구조물이나 장식물 메시에 이상적입니다. 참고로 그 머티리얼은 애니메이션 가능합니다.
    • 라이트 액터의 경우, 라이트매스 를 사용해서 미리계산된 라이트 맵에 반영된다는 뜻입니다. 씬의 스태틱 및 스테이셔너리 액터에 대해 빛을 비추며, 무버블 액터에 대해서도 (간접광 샘플 또는 볼류메트릭 라이트맵 같은) 간접광 메소드로 빛을 비출 수 있습니다.
    Stationary 스테이셔너리 - 이 모빌리티는 게임플레이 도중 이동하지는 못하지만 변할 수는 있는 액터에 씁니다.
    • 스태틱 메시 액터의 경우, 움직일 수는 없지만 변할 수는 있다는 뜻입니다. 라이트매스 를 사용하는 미리계산 라이트맵에 기여하지는 않지만, 스태틱 또는 스테이셔너리 라이트의 빛을 받는 경우 무버블 액터처럼 빛을 받습니다. 그러나 무버블 라이트의 빛을 받을 때는, 캐시에 저장된 섀도 맵 을 통해 라이트가 움직이지 않을 때 다음 프레임에 재사용하는 식으로 다이내믹 라이트를 사용하는 프로젝트의 퍼포먼스를 향상시킵니다.
    • 라이트 액터의 경우, 색이 변한다든가 강도가 세지고 약해지거나 심지어 완전히 꺼진다든가 하는 식으로 변할 수 있다는 뜻입니다. 스테이셔너리 라이트는 여전히 라이트매스 를 사용하는 미리계산 라이트맵에 기여하지만, 움직이는 오브젝트에 동적 그림자를 드리울 수도 있습니다. 참고로 한 액터에 너무 많은 스테이셔너리 라이트가 영향을 주지 않도록 해야 합니다. 자세한 내용은 스테이셔너리 라이트 문서를 참고하세요.
    Movable 무버블 - 이 모빌리티는 게임플레이 도중 추가, 제거, 이동해야 하는 액터에 씁니다.
    • 스태틱 메시 액터의 경우, 라이트맵에 미리계산 그림자를 드리우지 않는 완전 동적 그림자를 드리운다는 뜻입니다. 모빌리티가 스태틱인 라이트의 빛을 받는 경우, (간접광 샘플 또는 볼류메트릭 라이트맵 같은) 간접광 메소드를 사용합니다. 모빌리티가 스테이셔너리 또는 무버블인 라이트의 경우, 동적 그림자만 드리웁니다. 변형이 없는 메시 요소를 씬에서 추가, 제거, 또는 이동해야 할 때 주로 씁니다.
    • 라이트 액터의 경우, 동적 그림자만 드리울 수 있다는 뜻입니다. 게임플레이 도중 라이트 이동뿐 아니라 색과 강도도 변경할 수 있습니다. 그러나 이 라이트가 드리우는 그림자는 퍼포먼스 비용이 높으므로 주의해야 합니다. 참고로 그림자를 드리우지만 않는다면 무버블 라이트는 언리얼 엔진의 디퍼드 렌더링 시스템 덕에 계산 비용이 매우 저렴한 편입니다.

 

  • Mobility Matrix
    • Static Light
    • ObjectDirect LightIndirect LightShadow
      Static Lightmap Lightmap Shadowmap
      Stationary Indirect lighting cache Indirect lighting cache None
      Movable Indirect lighting cache Indirect lighting cache None
    • Stationary Light
    • ObjectDirect LightIndirect LightShadow
      Static RealTime lightmap Shadowmap
      Stationary RealTime Indirect lighting cache RealTime
      Movable RealTime Indirect lighting cache RealTime
    • Movable Light
    • ObjectDirect LightIndirect LightShadow
      Static RealTime None RealTime
      Stationary RealTime None RealTime
      Movable RealTime None RealTime

'Unreal > Lighting' 카테고리의 다른 글

Environment Lighting 구조  (0) 2024.05.21

+ Recent posts