DynamicMaterial - 충돌반응

 

  1. 언리얼 기본설정
    1. [Hit] event시, 대상오브젝트의 hit UV값 받아오는 설정 체크
  2. Material 구성
    1. 충돌지점, 충돌시간 받을 parameter 포함
  3. 충돌받을 Object의 material에 Dynamic Material instance로 생성
  4. 충돌 이벤트 관리
    1. [1.]에서 설정한 UV는 "Line Trace ( ray tracing )"을 통한 hit에만 해당하는것으로 보임
    2. 그래서 hit event 발생 시, hit location과 normal을 통해 line trace를 다시 쏴줘야 함
       
        1.  

 

FXS_tip of weapon 궤적

M_panner / FXS_ribborn
NM_parameter 전달

  1. M _ panner
    1. panner 효과 ( textrue 제작시 tiling 고려 _ 포토샵 offset )
  2. FXS _ ribbon
    1. ribbon(niagara)의 경우, spawn rate와 연동되는것으로 보임
    2. particle velocity값을 기반으로 length update
  3. BP _ parameter 전달
    1. Inherit [TimedNiagaraEffect] class
    2. Override Recieved Notify Tick
    3. Get [Socket] as name in mesh(skt), set [Param] as name in FXS
    4. Location (flaot3) 전달
  4. AM _ notifier
    1. Add [notify state] in montage ( 3. BP _ parameter )
    2. Set select 2. FXS _ ribbon

 

Mesh Distance Field

기능개요

  • https://velog.io/@cey_adda/Unreal-Engine-Distance-Field
  • 공간 샘플링 하여 인접유닛까지의 거리를 베이킹 혹은 캐싱하는 기법
    • 기본적으로는 섀도잉 표면 블러 및 오클루젼 용도?
    • SDF(signed distance field)는 사전에 베이킹
    • Global Distance Field는 runtime에 캐싱, 각 update에 수정된 부분의 값만 변경

 

사전작업

  • project setting - generate mesh distance field

 

작업

  • shader에서 distance 키워드의 object들 사용 ( nearest to distance 등 )
  • object에 적용 후, 해당 object의 affect distance field lighting 체크 해제

 

 

ref

 

젖은 머티리얼

Lerp MA

  • Base Color = Saturate( Desaurate ( DefaultColor, -0.5 ) ) * 0.5
  • Specular = 0.3
  • Roughness = 0.07

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

노드  (0) 2024.05.21

기본 개념

 

AnimBP 링크 시스템 ( Anim Layer )

  • ref : https://docs.unrealengine.com/5.0/ko/animation-blueprint-linking-in-unreal-engine/

추상 애님BP를 만들고, 클래스처럼 활용하기 ( in[] → out ) ( 무기별 모션 구현 등 )

  1. 추상용 ABP를 만들고, Input들을 Input Pose로 만든다. ( 변수도 만든다. )
  2. 목표 ABP에서 Linked Anim Graph를 통해 Input을 넣고 Output을 받는다.

 

AnimLayerInterface를 통해 anim 내 method 구성을 모듈화 하기

  1. AnimLayerInterface 에셋을 만든다.
    1. Interface들을 만들고, 그 안에 input parameter들을 추가한다.
  2. 목표 ABP에서 class setting - interface에 implement한다.
    1. 해당 interface들을 사용하여 비어있는 구조를 설계한다.
  3. 케이스별 ABP에서 class setting - interface에 implement한다.
    1. 파라미터 하이어라키의 animation layers에서 드래그해서 쓴다
    2. 목표 ABP에서 animation layers(Interface)의 기능을 정의한다.
  4. BP에서 mesh - link anim class layers 함수를 통해, 오버라이드 한다. ( target anim class에서 정의되어있는 interface method만 override되는듯. out에 연결된 애님이 없으면 아얘 override 하지 않는듯 )
  5. ex)
    1. ABP_총잡이를 만들고 AnimInterface_파지 ( 지향사격, 조준사격 interface )를 바인딩, 두개의 인터페이스를 로직 중간에 껴넣는다
    2. ABP_샷건을 만들고 AnimInterface_파지를 바인딩, 두 interface 내부 로직을 구현한다.
    3. ABP_총잡이를 기본 animbp로 가지고있는 character BP에서 샷건장착 시, Link Anim Class Layer - ABP_샷건을 통해 interface들을 override한다.

 

EventGraph에서 Link Anim Class Layer를 통해 BP 로직 오버라이드 ( 혹은 호출 )

 

기존 ABP를 상속받은 ABP는 anim graph logic은 수정하지 못함

  • BP로직은 super 및 추가 가능
  • Asset Override탭을 통해 Asset은 override 가능
  • function, variable등은 override, edit 가능

 

* 추상용 ABP에 Skeleton을 할당하는 대신 Template으로 만들면, 내부 anim sequence는 관리하기 어려워지지만 대신 할당 skeleton 상관없이 어느 ABP에서도 Link 가능

 

AnimSequence <-> Niagara 상호작용

BP_timedNiagaraEffect → (function)Override notify Tick → Get spawn effect → Set Param ( input data from anim bone or socket )

 

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

Skeletal Mesh 모듈화 기능 ( Set Leader Pose Component )  (0) 2024.05.16
Anim Asset 구조  (0) 2024.05.16

참조 : https://www.youtube.com/watch?v=EFXIm4TmMKI&list=PLyNtvXvNIFMMHnW1_-hXO3RNPp_Z5CExF&index=6

Import 세팅

  • Enable Edit Layers 체크
  • 파티션 적용
    • Project Setting에서 Enable World Partition 체크 필요
  • Resolution은 Export할때 Unreal용 ( 1009 x 1009 등 ) 확인 -> 매칭
  • Scale 계산식
    • x, y값 : 100 x 기준넓이(m, gaea에서 설정된사이즈) / 헤이트맵해상도
    • z값 : 100 x 기준높이(m, gaea에서 설정된사이즈) / 512 ( 언리얼 디폴트 height )
  • Material에 미리 blend layer로 소켓뚫어든 머티리얼을 심음
    • layer에 각 지형별 mask map을 할당

 

머티리얼

  • LandScapeCoords를 받아서 Coord값으로 사용
    • Mapping Scale은 1009 ( 헤이트맵 해상도 ) 
  • Albedo맵, normal맵
  • 레이어드 노드를 포함한 머티리얼을 Import옵션에 넣어서
    • 각 레이어드 마스크에, 각 헤이트맵들을 넣으면
    • 레이어마다 별도 머티리얼 사용 가능
  • Water Body Lake 등

UE5 Guid Page : https://docs.unrealengine.com/4.27/ko/RenderingAndGraphics/Niagara/Overview/

기본 구성

  • 나이아가라 시스템 
    [1] Attribute(Parameter) → [5] Detail(argument) 직접 대응 가능 ( 드래그 ) 나
  • 나이아가라 그룹 모듈

 

기본 구조

Niagara System

  • Overview Node ( system manager )
  • Emitter ( include [Items] )
    • Properties
    • Render
    • Stages ( Emt Sapwn / Emt update / Ptc Spawn / Ptc Update )
      • Module 
        • Parameter
          • Owner : Engine / System / Emitter / Particles / Stage transient / module output
          • Type
            • Primitive : 일반 변수타입
            • Enum
            • Struct
            • Data Interface : 외부 데이터소스 ( api, datatable등 )
      • Additional Stage
        • Events ( → Event Handler )
        • Simulation Stage

 

Niagara Module Flow

  • GetMap(get Params value) → Adjust Action → SetMap(set Params value)
    • module node based on bool / basic math / trigonometric / etc

 

Event and Event Handler

  • Concept : interaction between [Niagara Emitters] ( UE _ 이벤트 및 이벤트 핸들러 개요 )
  • Note
    • 이벤트는 현재 GPU 시뮬레이션과는 함께 작동하지 않고 CPU 시뮬레이션과만 함께 작동합니다.
    • 이벤트를 사용하려면 해당 이미터의 Emitter Properties(이미터 프로퍼티)에서 Requires Persistent IDs(퍼시스턴트 ID 필요)를 활성화해줘야 합니다.
    • 우선 콜리전(Collision) 모듈을 이미터에 추가해야 콜리전 이벤트 생성(Generate Collision Event) 을 해당 이미터에 추가할 수 있습니다. 이렇게 하면 이미터의 파티클이 월드의 오브젝트와 충돌할 수 있게 됩니다.
  • Flow
    EventHandler

     

    • in receive emitter
    • select specific [generate module] in detail pannel
    EventHandler
    • same type with [generated event]
  • Event
    • Particle Spawn/Update에서 Event module 추가
      • input param
  • MechanismNiagara System
    • Overview Node ( system manager )
    • Emitter ( include [Items] )
      • Properties
      • Render
      • Stages ( Emt Sapwn / Emt update / Ptc Spawn / Ptc Update )
        • Module 
          • Parameter
            • Owner : Engine / System / Emitter / Particles / Stage transient / module output
            • Type
              • Primitive : 일반 변수타입
              • Enum
              • Struct
              • Data Interface : 외부 데이터소스 ( api, datatable등 )
        • Additional Stage
          • Events ( → Event Handler )
          • Simulation Stage

    • GetMap(get Params value) → Adjust Action → SetMap(set Params value)
      • module node based on bool / basic math / trigonometric / etc

    • Concept : interaction between [Niagara Emitters] ( UE _ 이벤트 및 이벤트 핸들러 개요 )
    • Note
      • 이벤트는 현재 GPU 시뮬레이션과는 함께 작동하지 않고 CPU 시뮬레이션과만 함께 작동합니다.
      • 이벤트를 사용하려면 해당 이미터의 Emitter Properties(이미터 프로퍼티)에서 Requires Persistent IDs(퍼시스턴트 ID 필요)를 활성화해줘야 합니다.
      • 우선 콜리전(Collision) 모듈을 이미터에 추가해야 콜리전 이벤트 생성(Generate Collision Event) 을 해당 이미터에 추가할 수 있습니다. 이렇게 하면 이미터의 파티클이 월드의 오브젝트와 충돌할 수 있게 됩니다.
    • Flow
      EventHandler
      • in receive emitter
      • select specific [generate module] in detail pannel
      EventHandler
      • same type with [generated event]
    • Event
      • Particle Spawn/Update에서 Event module 추가
        • input param
    • MechanismNiagara System
      • Overview Node ( system manager )
      • Emitter ( include [Items] )
        • Properties
        • Render
        • Stages ( Emt Sapwn / Emt update / Ptc Spawn / Ptc Update )
          • Module 
            • Parameter
              • Owner : Engine / System / Emitter / Particles / Stage transient / module output
              • Type
                • Primitive : 일반 변수타입
                • Enum
                • Struct
                • Data Interface : 외부 데이터소스 ( api, datatable등 )
          • Additional Stage
            • Events ( → Event Handler )
            • Simulation Stage

      • GetMap(get Params value) → Adjust Action → SetMap(set Params value)
        • module node based on bool / basic math / trigonometric / etc

      • Concept : interaction between [Niagara Emitters] ( UE _ 이벤트 및 이벤트 핸들러 개요 )
      • Note
        • 이벤트는 현재 GPU 시뮬레이션과는 함께 작동하지 않고 CPU 시뮬레이션과만 함께 작동합니다.
        • 이벤트를 사용하려면 해당 이미터의 Emitter Properties(이미터 프로퍼티)에서 Requires Persistent IDs(퍼시스턴트 ID 필요)를 활성화해줘야 합니다.
        • 우선 콜리전(Collision) 모듈을 이미터에 추가해야 콜리전 이벤트 생성(Generate Collision Event) 을 해당 이미터에 추가할 수 있습니다. 이렇게 하면 이미터의 파티클이 월드의 오브젝트와 충돌할 수 있게 됩니다.
      • Flow
        EventHandler
        • in receive emitter
        • select specific [generate module] in detail pannel
        EventHandler
        • same type with [generated event]
      • Event
        • Particle Spawn/Update에서 Event module 추가
          • input param
      • MechanismNiagara System
        • Overview Node ( system manager )
        • Emitter ( include [Items] )
          • Properties
          • Render
          • Stages ( Emt Sapwn / Emt update / Ptc Spawn / Ptc Update )
            • Module 
              • Parameter
                • Owner : Engine / System / Emitter / Particles / Stage transient / module output
                • Type
                  • Primitive : 일반 변수타입
                  • Enum
                  • Struct
                  • Data Interface : 외부 데이터소스 ( api, datatable등 )
            • Additional Stage
              • Events ( → Event Handler )
              • Simulation Stage

        • GetMap(get Params value) → Adjust Action → SetMap(set Params value)
          • module node based on bool / basic math / trigonometric / etc

        • Concept : interaction between [Niagara Emitters] ( UE _ 이벤트 및 이벤트 핸들러 개요 )
        • Note
          • 이벤트는 현재 GPU 시뮬레이션과는 함께 작동하지 않고 CPU 시뮬레이션과만 함께 작동합니다.
          • 이벤트를 사용하려면 해당 이미터의 Emitter Properties(이미터 프로퍼티)에서 Requires Persistent IDs(퍼시스턴트 ID 필요)를 활성화해줘야 합니다.
          • 우선 콜리전(Collision) 모듈을 이미터에 추가해야 콜리전 이벤트 생성(Generate Collision Event) 을 해당 이미터에 추가할 수 있습니다. 이렇게 하면 이미터의 파티클이 월드의 오브젝트와 충돌할 수 있게 됩니다.
        • Flow
          EventHandler
          • in receive emitter
          • select specific [generate module] in detail pannel
          EventHandler
          • same type with [generated event]
        • Event
          • Particle Spawn/Update에서 Event module 추가
            • input param
        • Mechanism
      • Event and Event Handler
      • Niagara Module Flow
    • Event and Event Handler
    • Niagara Module Flow
  • Event and Event Handler
  • Niagara Module Flow

 

나이아가라 파라미터

  • 시각화

 

  • 파라미터 리스트
    1. System Attributes
      1. System : 해당 [나이아가라 시스템]의 attribute ( set active시 초기화 )
        1. Age ( float ) : 생성 후 경과 시간
        2. bCompoleteOnInactive ( bool ) : ?
        3. CurrentLoopDuration ( float ) : 설정된 루프 길이
        4. ExecutionState ( enum )
          1. awaken
          2. sleep and let particles finish
          3. sleep and clear particles
          4. kill immediately
          5. kill after particles fisnish
        5. ExecutionStateSource ( enum )
        6. LoopCount ( int ) : 총 루프 횟수
        7. LoopedAge ( float ) : 이번루프 경과 시간
        8. NormalizedLoopAge ( float ) : 이번루프 경과시간 백분위
      2. Emitter
        1. Age ( float )
        2. CurrentLoopDelay ( float ) : 루프사이 딜레이
        3. CurrentLoopDuration ( float )
        4. DistanceTraveled ( float )
        5. ExecutionState ( enum )
        6. ExecutionStateSource ( enum )
        7. LocalSpace ( bool )
        8. LoopCount ( int )
        9. LoopedAge  ( float )
        10. NormalizedLoopAge  ( float )
        11. DistanceFraction  ( float )
        12. SpawnOutputInfo ( structure )
        13. SpawnRemainder ( float )
      3. Particle
        1. Particles.Age
        2. Color
        3. DistanceTraveled
        4. Initial Color

 

Niagara Fluid ( Grid )

  • Runtime에 BP에서 flaot4 array 받아서 render target에 그리는 플로우
  • https://www.youtube.com/watch?v=3fW5xjiDm-A
    • - Manager BP에서 VectorArray를 Niagara에 보냄
      - Niagara에서 받은 VectorArray를 RenderTarget에 Override ( 빈 에미터에서 GPU 계산으로 바꿀 것 )
      - NiagaraFluids 플러그인 활성화
      - 빈 Emitter에서 Grid2D하고 RenderTarget2D 파라미터를 생성, 받음
          -> Grid2D는 2차원 데이터배열
      - Emitter Spawn phase에서 Set grid, 
        <- RenderTarget(256x256 size, rendertarget user parameter에 user rendertargetparameter 넣기)
        - Grid 2D Set Resolution ( data format을 half float ), Emiiter의 grid 연결 256, 256Scratch에 들어가는 parameter는 접두에 In / Out이 붙어야 함
    • + stage ( generic simulation stage ) 3개, initialize / write to grid / write to texture
        - iteration source = data interface, execute = always, 


커스텀 모듈 : write to grid / write to texture

 

커스텀 HLSL

int Out_Num;
InLocationsAndSizes.Length(Out_Num);
 
float NewGridValue = 0;
 
for(int Index = 0; Index <= Out_Num; Index++)
{
    float4 Out_Value;
    InLocationsAndSizes.Get(Index, Out_Value);
    OutRGBA = Out_Value.z;
    const float Distance = length(Out_Value - InGridLocation);
 
    if(Distance < (Out_Value.w * InRadiusScale))
    {
        const float Falloff = (1 - (Distance/(Out_Value.w * InRadiusScale)));
        NewGridValue = NewGridValue + Falloff;
    }
}
 
 
OutRGBA = lerp(InRGBA, NewGridValue, InDeltaTime * 5);

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

Projectile & Spline  (0) 2024.05.17
AI  (0) 2024.05.17
Texture  (0) 2024.05.17
Modeling  (0) 2024.05.17
Physics  (0) 2024.05.16

Projectile

  • 기본적으로 root component가 static mesh면 제어
  • physics simul이 켜져있으면 초기속도만 제어
  • 안켜져있으면, 포물선 프로젝타일 운동을 모사함

 

Spline

  • Spline
    • 3차 베지어곡선에 기반하여, 위치/회전/법선등의 값을 유연하게 [그리기] 위한 기능
    • Get [Location/Rotation/Tangent] at distance along spline : spline의 특정 지점(start point로부터의 거리)의 값을 가져옴
    • Get [Location/Rotation/Tangent] at spline point : spline의 특정 지점(양자화된 노드 번호)의 값을 가져옴
  • SplineMeshComponent
    • Add spline mesh component : 새로운 메쉬컴포넌트 추가
    • start 와 end의 pos/tangent값을 설정하면, 그에맞춰 메쉬를 왜곡시켜주는 mesh ( mesh의 각 face에 대해 양측과의 거리비 기반의 weight로 pos/tangent 적용 하는것으로 보임 )

 

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

Niagara  (0) 2024.05.17
AI  (0) 2024.05.17
Texture  (0) 2024.05.17
Modeling  (0) 2024.05.17
Physics  (0) 2024.05.16

  • P : nav mesh visuallize

 

Character - (pawn_socket_aicontroller)AIController - (blueprint node_run behaviorTree) BehaviorTree - (taskNode)BTTask_blueprint(event_recieve_AI)

 

  • BehaviorTree
    • composite
      • Sequence
        • false return받을 시 즉시 false 반환하고 종료
        • 전부 true return시 true 반환하고 종료
        • 왼쪽부터 실행, False 반환받을 경우, 하위노드 처음부터 다시 실행
      • Selector
        • true return받을 시 즉시 true 반환하고 종료 
        • 전부 false return시 false 반환하고 종료
    • task
      • BTTask 상속된 BP 참조
      • BTTask로부터 return값을 받음
  • BTTask
    • return을 명시적으로 선언해줘야함 ( finish execute node )
      • success(bool) = 반환값

 

  • AI controller가 개입하기 위해서는, pawn이 movemtment component를 포함해야 함

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

Niagara  (0) 2024.05.17
Projectile & Spline  (0) 2024.05.17
Texture  (0) 2024.05.17
Modeling  (0) 2024.05.17
Physics  (0) 2024.05.16

UV

uv coord 기준

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

Projectile & Spline  (0) 2024.05.17
AI  (0) 2024.05.17
Modeling  (0) 2024.05.17
Physics  (0) 2024.05.16
(Character) Movement  (0) 2024.05.16

LandScape

  • 기본 단축키
    • 클릭/드래그 : 융기
    • shift + 클릭/드래그 : 침강

 

Modeling Tool

view port 활성화 → shift 5 혹은 모드 선택창에서 Modeling 선택

 

Shape : 도형을 그림

  • Modeling Pannel
  • Out Type : 메쉬 형태 ( Static / Volume / Dynamic )
  • Shape : 모델링의 형태 조절
    • "기본 크기" 설정(width, depth, height) : complete 시 현재 크기가 world scale에서는 1.f, 1.f, 1.f로 됨
    • subdivisions 설정 : 각 면을 몇개의 폴리곤으로 나눌 것인가
      • 폴리곤의 갯수는 품질, 퀄리티와 관련
      • 단순하게는 PolyModel에서 조절가능한 자유도에 해당 ( 버텍스와 폴리곤의 갯수 조절 )
      • material의 offset도 vertex 단위로 움직임 ( 아마 LOD 같은것들도 )
      • 곡선포함의 경우, 그냥 subdivision이라고 적힌건 "곡선부분을 몇개의 폴리곤(삼각형)으로 나눌지
    • Polygroup Mode : 아마 PolyModel에서 변형할 때, 어디까지 디테일하게 관리할지 인듯 ( quad : 폴리곤단위 / face : 면 단위 ( rotation.xy값을 공유하는 폴리곤 집단 ) / shape : 통짜로만 조작 )
  • Asset
    • Instance if possible : 기본적으로 modeling 하나 만들때마다, Contents내 Generate 파일에 블루프린트가 하나 생성되는데, 설정 똑같은걸로 여러개 설치할 경우, 하나의 블루프린트로 나눠쓸것인지 선택 여부
      • 기본 로케이션 ( autogen folder _ world relative ) 기준 path%BP_Level%/_Generated/컴퓨터이름/파일생성위치

 

  • Positioning : view port에 설치할 때 도움주는 항목
    • Target surface : 마우스기준으로 설치하는데, 마우스가 object위에 있으면, object의 면에 설치할 것인지(On scene) vs 관통하고 ground(아마 z축값 0 인듯) 에 설치할 것인지
    • Snap to Grid : 설치 시 그리드(양자화) 적용 여부
    • Pivot Location : 피봇 위치
    • Rotation : 회전값
    • Align to Normal : 설치면의 법선벡터 반영 여부 ( target surface가 object=onscene일 경우, 기울어져 있을 수 있는데, 그럴 경우 대상을 기울어지게 설정할 것인지
  • Material
    • material : 적용할 마테리얼
    • UV Scale : 텍스쳐의 스케일 배율 ( 1, 1 = 모델링의 면과 텍스쳐의 크기가 1:1로 대응 )
    • World Space  : 텍스쳐를 고정크기로 적용할지, Object 크기로 적용할 지 ( 설치 전 Width/Depth/Heigth를 통한 크기변화에만 적용 됨 )
    • show wireframe : 버텍스를 와이어프레임으로 보여줌

 

Create : 자유도형을 그림

  • PolyExt : 다각도형 그린 다음 높이 조절
  • Path Ext : 경로 그린다음 넓이, 높이 조절 ( 경사 생성 가능 )
  • PathRev : 면 그린다음 회전시킴revolve ( 도자기 굽기, 높이에 델타값 줘서 나선도 가능 )
  • BdryRev : 설치한 오브젝트의 "한 면"을 기반으로 회전시킴revolve
  • MshMrg : 설치된 오브젝트중 두 개 이상을 하나로 합침
  • MshDup : 오브젝트를 복사하는데, 상태를 바꿀 수있음 ( 또 뭔가 기능 있었는데 )
  • 디테일
    • Freehand / Interactive : 설치할 때 마우스 조절해가며 설치

PolyModel : 설치된 모델링 변형

  • PolyEd : 설치된 모델링의 버텍스들 위치 수정
  • PolyDef : Ed보다 덜 구체적, 빠르게?
  • CubeGr : 지면 기준으로 대상 자르기 좋음

Transform

  • XForm
  • Pivot
  • Split

Deform

  • 텍스쳐 기반으로 모델링 변형

MeshOps

remesh : 폴리곤 갯수 재조정

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

Projectile & Spline  (0) 2024.05.17
AI  (0) 2024.05.17
Texture  (0) 2024.05.17
Physics  (0) 2024.05.16
(Character) Movement  (0) 2024.05.16

+ Recent posts