'2024/06'에 해당되는 글 2건

  1. 2024.06.22 언리얼 리플렉션 TFieldIterator
  2. 2024.06.10 URP - 6-Way Lighting in VFX Graph
728x90

언리얼에서 TFieldIterator을 사용하여 리플렉션으로 속성과 함수들의 검색이 가능하다.

멤버 변수에는 UPROPERTY, 멤버 함수에는 UFUNCTION 매크로를 지정해주어야 가능하다.

 

TFieldIterator<UProperty>타입을 사용하면 속성을 가져올수 있다.

for (TFieldIterator<UProperty> It(ClassInfo1); It; ++It)
{
    AB_LOG(Warning, TEXT("Field : %s, Type : %s"), *It->GetName(), *It->GetClass()->GetName());
    UStrProperty* StrProp = FindField<UStrProperty>(ClassInfo1, *It->GetName());
    if (StrProp)
    {
       AB_LOG(Warning, TEXT("Value = %s"), *StrProp->GetPropertyValue_InContainer(WebConnection));
    }
 }

 

TFieldIterator< UFunction >타입을 사용하면 함수을 가져올수 있다.

for ( TFieldIterator<UFunction> FunctionIterator( MyObjectsClass ); FunctionIterator; ++FunctionIterator )
{
    UFunction* Func = *FunctionIterator;
    
    UE_LOG( LogTemp, Log, TEXT( "%s" ), *FunctionIterator->GetName() ); 
}

 

함수의 경우 NativeFunctionLookupTable 배열을 사용해 현재 클래스에 어떤 함수가 있는지 알수 있다.

함수의 이름을 사용하여 FindFunctionByName함수를 사용해 가져올수 있다.

for (const auto& Entry : ClassInfo1->NativeFunctionLookupTable)
{
    AB_LOG(Warning, TEXT("Function=%s"), *Entry.Name.ToString());
 
    UFunction* Func1 = ClassInfo1->FindFunctionByName(Entry.Name);
    if (Func1->ParmsSize == 0)
    {
        WebConnection->ProcessEvent(Func1, NULL);
    }
}

 

728x90
Posted by 정망스
,
728x90

이펙트에 입체적으로 라이팅을 적용하는 기술이다.

기존에 이펙트 시스템에서는 라이팅에 자연스럽게 반응하지 않는 미스 매치가 되는 상황이 종종 발생할수 밖에 없었다고 한다.
이번에 6-way lighting을 적용하면 환경에 자연스럽게 반응하는 이펙트를 제작할수 있게 됬다고 한다.

6-way lighting의 구조는 노말맵을 6방향(위, 아래, 앞, 뒤, 좌, 우)으로 2장의 텍스쳐를 사용해서 6면을 커버하는 방식이라고 한다.

출처 : Unity Korea Youtube

텍스쳐 2장을 사용하여 각각의 RGB 채널에서 6방향을 담당하고
한장의 알파채널에서는 투명값 알파값을 담당하고
다른 한장의 텍스쳐에서는 emissive나 기타 여러가지등을 담당하는 구조로 되어있다고 한다.

Ouput Particle 영역을 선택하고 인스펙터 창을 보면 Lighting 영역의 Material Type에 Six Way라는 옵션이 있다.
이 옵션을 선택하게 되면 앞서 말한대로 2장의 텍스쳐를 이용해 6면을 담당하기 때문에 Positive, Negative의 텍스쳐 2장을 세팅할수 있게 된다.

그리고 2개의 텍스쳐중 하나의 텍스쳐 알파채널에서는 emissive와 같은 처리를 담당한다고 했다 옵션을 보면 Emissive Mode를 Single Channel을 통해서 적용할수 있다.

여러 빛에 반응해서 이펙트가 발생하는 만큼 퀄리티는 확실히 더 좋아질수 있지만 그만큼 고려하고 계산해야 되어지는 양이 많아지기 때문에 모든 이펙트를 6-way lighting 방식으로 적용하기에는 성능 이슈가 있을수 있다.

그래서 이 방식을 사용할때는 개발 과정에 있어서 이펙트의 중요도 혹은 환경에 따라 잘 고려해서 사용해야 할 필요성이 있다.

라이팅의 색깔, 카메라가 보고 있는 방향등의 변화에 따라 잘 적용되어 표현해주는걸 볼수 있다.

728x90
Posted by 정망스
,


맨 위로
홈으로 ▲위로 ▼아래로 ♥댓글쓰기 새로고침