피직스 필드 시스템 퀵 스타트

카오스 디스트럭션에 영향을 미치고 나이아가라 및 머티리얼과 상호작용하는 피직스 필드를 만듭니다.

목표

이 퀵 스타트 가이드에서는 카오스 디스트럭션(Chaos Destruction) 에 영향을 미치며 나이아가라 시스템(Niagara System)머티리얼 과 상호작용하는 여러 피직스 필드(Physics Field) 를 만드는 방법을 알아봅니다.

세부 목표

  • 레벨에 단순한 디스트럭션 가능한 지오메트리 컬렉션(Geometry Collection)을 생성합니다.

  • 지오메트리 컬렉션의 디스트럭션에 영향을 미치는 여러 피직스 필드를 생성합니다.

  • 필드를 샘플링할 수 있는 나이아가라 시스템을 생성합니다.

  • 필드를 샘플링할 수 있는 머티리얼을 생성합니다.

1 - 필수 구성

피직스 필드를 만들기 전에, 카오스 디스트럭션을 사용해 프랙처할 수 있는 지오메트리 컬렉션 부터 만들어야 합니다.

기본 지오메트리 컬렉션 만들기

지오메트리 컬렉션 생성 및 프랙처에 관한 자세한 설명은 카오스 디스트럭션 개요(Chaos Destruction Overview)를 참조하세요.

  1. 툴바에서 생성(Create) 버튼을 누르고 셰이프(Shapes) > 큐브(Cube) 를 선택해 레벨에 큐브를 배치합니다. 큐브를 선택한 상태로 디테일(Details) 패널로 이동해 스케일(Scale) 을 X=2, Y=2, Z=6으로 설정합니다.

    큐브 생성

    스케일 파라미터 설정

  2. 모드(Modes) 패널에서 프랙처 편집 모드(Fracture Editing Mode) 버튼을 눌러 프랙처 모드 패널(Fracture Mode Panel) 을 엽니다.

    프랙처 모드 패널 열기

  3. 생성(Generate) 섹션에서 신규(New) 버튼을 누릅니다. 위치를 선택한 뒤, 지오메트리 컬렉션의 이름을 GC_Column 으로 설정합니다. 지오메트리 컬렉션 생성(Create Geometry Collection) 버튼을 누릅니다.

    신규 클릭

    새 지오메트리 컬렉션 이름 지정

  4. 콘텐츠 브라우저(Content Browser) 에서 GC_Column 지오메트리 컬렉션 을 찾아 더블클릭해서 엽니다. 콜리전(Collision) 섹션에서 콜리전 유형(Collision Type)파티클-묵시적(Particle-Implicit) 으로, 묵시적 유형(Implicit Type)레벨 세트(Level Set) 로 설정합니다. 저장(Save) 버튼을 누르고 창을 닫습니다.

    새 지오메트리 컬렉션 열기

    콜리전 유형 설정

  5. 프랙처 모드(Fracture Mode) 패널로 이동한 뒤 선택(Select) 카테고리에서 모두 선택(All) 을 클릭해 지오메트리 컬렉션을 선택합니다. 프랙처(Fracture) 카테고리에서 균등(Uniform) 을 클릭해 균등 프랙처(Uniform Fracture) 하위 패널을 엽니다.

    모두 선택

    균등 프랙처 패널 열기

  6. 뷰 세팅(View Settings) 섹션으로 이동해 본 컬러 표시(Show Bone Colors) 체크박스를 선택합니다. 스크롤을 내려서 프랙처(Fracture) 버튼을 클릭합니다. 이제 프랙처가 적용된 지오메트리 컬렉션이 뷰포트에 보일 것입니다.

    image alt text

    image alt text

    image alt text

  7. 선택(Select) 카테고리로 이동해 모두 선택(All) 을 클릭하여 모든 프랙처 조각을 선택합니다. 프랙처(Fracture) 패널에서 최소 보로노이 사이트(Minimum Voronoi Sites)최대 보로노이 사이트(Maximum Voronoi Sites) 를 60으로 설정하고 프랙처(Fracture) 버튼을 누릅니다.

    image alt text

    image alt text

    image alt text

  8. 아웃라이너(Outliner) 섹션을 접어두면 지오메트리 컬렉션에 3개의 프랙처 레벨이 생성되었음을 확인할 수 있습니다.

    image alt text

  9. 모드(Modes) 패널에서 선택 편집 모드(Select Editing Mode) 버튼을 눌러 프랙처 모드 패널(Fracture Mode Panel) 을 닫습니다.

    image alt text

  10. GC_Column 지오메트리 컬렉션을 선택한 상태에서 디테일(Details) 패널로 이동해 대미지 한계치(Damage Threshold) 옆의 더하기 표시(+) 를 두 번 눌러 새 항목을 추가합니다. 인덱스 [0] 에는 800 을, 인덱스 [1] 에는 200 을, 인덱스 [2] 에는 50 을 입력합니다. 이 항목은 지오메트리 컬렉션의 프랙처 레벨 수와 일치합니다.

    image alt text

  11. GC_Column 지오메트리 컬렉션을 지면에서 들어올린 다음 시뮬레이트(Simulate) 를 클릭합니다. 기둥이 지면으로 쓰러지고 예상대로 프랙처되어야 합니다.

    image alt text

섹션 결과

이 섹션에서는 스태틱 메시를 바탕으로 지오메트리 컬렉션을 만드는 법을 알아봤습니다. 지오메트리 컬렉션을 프랙처하고 대미지 한계치를 설정하는 법도 알아봤습니다. 이제 런타임에서 시뮬레이션에 영향을 미치기 위해 피직스 필드를 만들 차례입니다.

2 - 카오스 필드 만들기

더 많은 피직스 필드의 예시를 보려면 에픽게임즈 런처의 학습(Learn) 탭에서 이용할 수 있는 카오스 디스트럭션 데모(Chaos Destruction Demo)를 다운로드하세요.

클러스터 스트레인 필드

클러스터 스트레인 필드(Cluster Strain Field) 를 사용하면 값이 지오메트리 컬렉션의 대미지 한계치 를 초과하는 경우 지오메트리 컬렉션의 일부분을 붕괴하고 무너지게 할 수 있습니다.

  1. 콘텐츠 브라우저(Content Browser) 에서 우클릭한 다음 기본 에셋 생성(Create Basic Asset) 섹션에서 블루프린트 클래스(Blueprint Class) 를 선택합니다. 부모 클래스 선택(Pick Parent Class) 창에서 모든 클래스(All Classes) 섹션으로 이동한 다음 필드 시스템 액터(Field System Actor) 클래스를 검색해 선택합니다. 블루프린트의 이름을 BP_StrainField 로 지정합니다.

    image alt text

    image alt text

  2. BP_StrainField 블루프린트를 더블클릭해 엽니다. 필드 시스템 컴포넌트(Field System Component) 를 선택한 상태로 +추가(+Add) 버튼을 클릭하고 구체 콜리전(Sphere Collision) 을 검색해 선택합니다. 디테일(Details) 패널에서 구체 반경(Sphere Radius)150 으로 설정합니다. 렌더링(Rendering) 카테고리로 내려가 게임에서 숨김(Hidden in Game) 체크박스를 선택 해제합니다.

    image alt text

    image alt text

    image alt text

  3. +추가(+Add) 버튼을 클릭하고 방사상 감쇠(Radial Falloff) 를 검색해 선택합니다.

    image alt text

  4. 필드 시스템 컴포넌트(Field System Component) 를 선택한 뒤 이벤트 그래프(Event Graph) 로 드래그해 노드를 만듭니다. Field System Component 노드에서 드래그하여 트랜션트 필드 추가(Add Transient Field) 를 선택합니다. 피직스 유형(Physics Type)외부 스트레인(External Strain) 으로 설정합니다. 활성화 필드(Enable Field) 체크박스를 선택합니다.

    image alt text

    image alt text

  5. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 이벤트 BeginPlay(Event Begin Play) 를 검색해 선택합니다. BeginPlay 이벤트(Event Begin Play) 노드에서 드래그해 Delay 를 검색합니다. 아래와 같이 Delay 노드를 트랜션트 필드 추가(Add Transient Field) 노드와 연결합니다.

    image alt text

    image alt text

    image alt text

  6. 방사상 감쇠(RadialFalloff) 컴포넌트를 이벤트 그래프(Event Graph) 로 드래그해 레퍼런스 노드를 만듭니다. RadialFalloff 노드에서 드래그하여 Set Radial Falloff 를 검색해 선택합니다.

    image alt text

  7. Set Radial Falloff 노드의 반환값(Return Value) 핀을 트랜션트 필드 추가(Add Transient Field) 노드의 필드 노드(Field Node) 핀에 연결합니다.

    image alt text

  8. Set Radial Falloff 노드의 필드 세기(Field Magnitude) 핀을 우클릭한 다음 변수로 승격(Promote to Variable) 을 선택합니다. 디테일(Details) 패널에서 기본값(Default Value)10,000 으로 설정합니다.

    image alt text

    image alt text

  9. 구체 콜리전(Sphere Collision) 컴포넌트를 선택한 뒤 이벤트 그래프(Event Graph) 로 드래그해 노드를 만듭니다. Sphere 노드에서 드래그한 다음 Get Scaled Sphere Radius 를 검색해 선택합니다. Sphere 노드에서 드래그한 다음 GetWorldLocation 을 검색해 선택합니다.

    image alt text

    image alt text

  10. Get Scaled Sphere Radius 노드의 반환값(Return Value) 핀을 Set Radial Falloff 노드의 구체 반경(Sphere Radius) 핀에 연결합니다. GetWorldLocation 노드의 반환값(Return Value) 핀을 Set Radial Falloff 노드의 중심 위치(Center Position) 핀에 연결합니다.

    image alt text

  11. 블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다. 완성된 블루프린트는 아래 이미지와 같습니다.

    image alt text

  12. BP_StrainField 블루프린트를 레벨로 드래그해 아래와 같이 GC_Column 지오메트리 컬렉션 안에 배치합니다. 시뮬레이트(Simulate) 버튼을 누르면 스트레인 필드(Strain Field)가 기둥에 외부 스트레인을 적용해 무너뜨리는 모습을 볼 수 있습니다. 필드 세기(Field Magnitude)구체 반경(Sphere Radius) 값을 조절하면 결과를 수정할 수 있습니다.

    image alt text

    image alt text

섹션 결과

이 섹션에서는 지오메트리 컬렉션에 외부 스트레인을 적용해 프랙처를 발생시키는 스트레인 필드를 만드는 법을 배웠습니다.

앵커 필드

앵커 필드(Anchor Field) 를 사용하면 지오메트리 컬렉션의 일부를 잠그고, 나머지는 무너지게 할 수 있습니다. 앵커 필드의 경우, 시뮬레이션 전에도 연결 그래프를 만들어야 하므로 컨스트럭션(Construction) 단계 중에 반드시 앵커 필드를 만들어야 한다는 점에서 대부분의 필드 시스템 노드와 다릅니다.

따라서 앵커 필드의 로직은 필드 시스템 액터(Field System Actor) 블루프린트의 컨스트럭션 스크립트(Construction Script) 에서 정의되며, 생성 필드 추가 (Add Construction Field) 노드를 사용해 적용됩니다. 시뮬레이션에 앞서, 앵커 필드와 겹치는 지오메트리 컬렉션 클러스터는 스테이트가 스태틱(Static) 또는 슬립(Sleeping) 으로 설정되어 있을 것입니다. 이 클러스터는 시뮬레이션되지 않으며, 제자리에 고정된 모습으로 표시됩니다.

  1. 콘텐츠 브라우저(Content Browser) 에서 우클릭한 다음 기본 에셋 생성(Create Basic Asset) 섹션에서 블루프린트 클래스(Blueprint Class) 를 선택합니다. 부모 클래스 선택(Pick Parent Class) 창에서 모든 클래스(All Classes) 항목으로 이동한 다음 필드 시스템 액터(Field System Actor) 클래스를 검색해 선택합니다. 블루프린트의 이름을 BP_SimpleAnchorField 로 지정합니다.

    ![image alt text](image_40.png)(w:232 h:148 convert:false)

    ![image alt text](image_41.png)(w:624 h:218 convert:false)

  2. BP_SimpleAnchorField 블루프린트를 더블클릭해 엽니다. 필드 시스템 컴포넌트(Field System Component) 를 선택한 상태로 +추가(+Add) 버튼을 클릭하고 Box Collision 을 검색해 선택합니다. 디테일(Details) 패널에서 박스 익스텐트(Box Extent)X = 128, Y= 128, Z = 32 로 설정합니다. 렌더링(Rendering) 카테고리로 내려가 게임에서 숨김(Hidden in Game) 체크박스를 선택 해제합니다.

    image alt text

    image alt text

    ![image alt text](image_44.png)(w:200 h:96 convert:false)

  3. +추가(+Add) 버튼을 클릭하고 컬링 필드(Culling Field) 를 검색해 선택합니다. 이 프로세스를 반복한 뒤, 아래와 같이 BoxFalloff유니폼 Integer 컴포넌트를 추가합니다.

    image alt text

  4. 필드 시스템 컴포넌트(Field System Component) 를 선택한 뒤 컨스트럭션 스크립트(Construction Script) 로 드래그해 노드를 만듭니다. Field System Component 노드에서 드래그한 다음 생성 필드 제거(Remove Construction Fields) 를 검색해 선택합니다. 아래와 같이 생성 필드 제거(Remove Construction Fields) 노드를 Construction Script 노드에 연결합니다.

    image alt text image alt text

  5. 필드 시스템 컴포넌트(Field System Component) 를 선택한 뒤 컨스트럭션 스크립트(Construction Script) 로 드래그해 노드를 만듭니다. Field System Component 노드에서 드래그한 다음 생성 필드 추가(Add Construction Field) 를 검색해 선택합니다. 활성화 필드(Enable Field) 체크박스를 활성화한 다음, 피직스 유형(Physics Type) 드롭다운에서 다이내믹 스테이트(Dynamic State)** 를 선택합니다.

    image alt text

    image alt text

  6. 컬링 필드(CullingField) 컴포넌트를 선택한 뒤 컨스트럭션 스크립트(Construction Script) 로 드래그해 노드를 만듭니다. CullingField 노드에서 드래그한 다음 Set Culling Field 를 검색해 선택합니다. Set Culling Field 노드의 반환값(Return Value) 핀을 생성 필드 추가(Add Construction Field) 노드의 필드 노드(Field Node) 핀에 연결합니다. Set Culling Field 노드의 컬링 작업(Culling Operation)외부(Outside) 로 설정합니다.

    image alt text

    image alt text

  7. Box Falloff 컴포넌트를 선택한 뒤 컨스트럭션 스크립트(Construction Script) 로 드래그해 노드를 만듭니다. Box Falloff 노드에서 드래그하여 Set Box Falloff 를 검색해 선택합니다. Set Box Falloff 노드의 반환값(Return Value) 핀을 Set Culling Field 노드의 컬링 필드(Culling Field) 핀에 연결합니다.

    image alt text

  8. 박스 콜리전(Box Collision) 컴포넌트를 선택한 뒤 컨스트럭션 스크립트(Construction Script) 로 드래그해 노드를 만듭니다. Box 노드에서 드래그한 다음 GetWorldTransform 을 검색해 선택합니다. GetWorldTransform 노드의 반환값(Return Value) 핀을 Set Box Falloff 노드의 박스 트랜스폼(Box Transform) 핀에 연결합니다.

    image alt text

    image alt text

  9. 유니폼 Integer(Uniform Integer) 컴포넌트를 선택한 뒤 컨스트럭션 스크립트(Construction Script) 로 드래그해 노드를 만듭니다. Uniform Integer 노드에서 드래그하여 Set Uniform Integer 를 검색해 선택합니다. Set Uniform Integer 노드의 반환값(Return Value) 핀을 Set Culling Field 노드의 입력 필드(Input Field) 핀에 연결합니다.

    image alt text

    image alt text

  10. 내 블루프린트(My Blueprint) 섹션으로 이동한 뒤 변수(Variables) 옆의 더하기 표시(+) 를 클릭하여 새 변수를 만듭니다. 변수의 이름을 Static 으로 지정합니다. 디테일(Details) 패널로 이동해 변수 유형(Variable Type) 드롭다운을 클릭한 다음 EObject State Type Enum 을 검색해 선택합니다.

    image alt text

    image alt text

  11. 블루프린트를 컴파일(Compile) 한 다음 Static 변수의 기본값(Default Value)스태틱(Static) 으로 설정합니다.

    image alt text

  12. Static 변수를 컨스트럭션 스크립트(Construction Script) 로 드래그한 다음 Get static 을 선택해 노드를 만듭니다. Static 노드에서 드래그한 다음 ToInt (byte) 를 검색해 선택합니다. ToInt 노드를 Set Uniform Integer 노드의 필드 세기(Field Magnitude) 핀에 연결합니다.

    image alt text

    image alt text

  13. 생성 필드 제거(Remove Construction Fields) 노드를 생성 필드 추가(Add Construction Field) 노드에 연결합니다. 최종 블루프린트는 아래 이미지와 같습니다.

    image alt text

  14. BP_SimpleAnchorField 블루프린트를 레벨로 드래그해 아래와 같이 GC_Column 지오메트리 컬렉션 맨 위에 배치합니다. GC_Column 지오메트리 컬렉션을 선택한 다음 디테일(Details) 패널로 이동합니다. 초기화 필드(Initialization Fields) 옆의 더하기 표시(+) 를 클릭해 BP_SimpleAnchorField 를 항목으로 추가합니다.

    image alt text

    image alt text

  15. 시뮬레이트(Simulate) 를 눌러 무너지는 기둥의 윗부분이 앵커 필드로 고정된 것을 확인합니다.

    image alt text

섹션 결과

이 섹션에서는 프랙처되는 지오메트리 컬렉션의 일부를 제자리에 고정하는 앵커 필드를 만드는 법을 알아봤습니다.

슬립 필드 및 비활성화 필드

슬립 필드(Sleep Field)비활성화 필드(Disable Field) 는 지정된 볼륨에 들어가는 리지드 바디를 휴식 상태로 만듭니다. 비활성화 필드의 경우, 비활성화된 노드가 더는 콜리전에 의해 재활성화될 수 없으므로 시뮬레이션 중 부담이 매우 적다는 점에서 8슬립 필드와 다릅니다. 하지만 다른 필드에 의해서는 재활성화될 수 있습니다.

한계치 비활성화(Disable Threshold), 한계치 슬립(Sleep Threshold), 킬 필드(Kill Field)를 사용할 때에는 외부에 컬링을 적용해야 합니다. 컬링을 적용하지 않으면 맵의 다른 필드를 오버라이드해 현재 지정된 것 외의 다른 한계치 설정을 모두 무시하게 할 수 있습니다. |

이제 비활성화 필드(Disable Field)를 만들고, 어떻게 필드가 지오메트리 컬렉션과 상호작용하는지 알아보겠습니다.

  1. 콘텐츠 브라우저(Content Browser) 에서 우클릭한 다음 기본 에셋 생성(Create Basic Asset) 섹션에서 블루프린트 클래스(Blueprint Class) 를 선택합니다. 부모 클래스 선택(Pick Parent Class) 창에서 모든 클래스(All Classes) 항목으로 이동한 다음 필드 시스템 액터(Field System Actor) 클래스를 검색해 선택합니다. 블루프린트의 이름을 BP_SimpleDisableField 로 지정합니다.

    ![image alt text](image_66.png)(w:232 h:148 convert:false)

    ![image alt text](image_67.png)(w:624 h:218 convert:false)

  2. BP_SimpleDisableField 블루프린트를 더블클릭해 엽니다. 필드 시스템 컴포넌트(Field System Component) 를 선택한 상태로 +추가(+Add) 버튼을 클릭하고 박스 콜리전(Box Collision) 을 검색해 선택합니다. 디테일(Details) 패널에서 렌더링(Rendering) 카테고리로 내려가 게임에서 숨김(Hidden in Game) 체크박스를 선택 해제합니다.

    ![image alt text](image_68.png)(w:376 h:90 convert:false)

    ![image alt text](image_69.png)(w:200 h:96 convert:false)

  3. +추가(+Add) 버튼을 클릭하고 박스 감쇠(Box Falloff) 를 검색해 선택합니다. 이 프로세스를 반복한 뒤 새로운 BoxFalloff 를 추가하고 이름을 BoxFalloff-Culling 으로 지정합니다. 같은 방법으로 컬링 필드(Culling Field) 컴포넌트를 추가합니다.

    image alt text

  4. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 이벤트 BeginPlay(Event Begin Play) 를 검색해 선택합니다.

    image alt text

  5. 필드 시스템 컴포넌트(Field System Component) 를 선택한 뒤 이벤트 그래프(Event Graph) 로 드래그해 노드를 만듭니다. Field System Component 노드에서 드래그한 다음 퍼시스턴트 필드 제거(Remove Persistent Fields) 를 검색해 선택합니다. BeginPlay 이벤트(Event Begin Play) 노드를 퍼시스턴트 필드 제거(Remove Persistent Fields) 노드에 연결합니다.

    image alt text

    image alt text

  6. 필드 시스템 컴포넌트(Field System Component) 를 선택한 뒤 이벤트 그래프(Event Graph) 로 드래그해 노드를 만듭니다. Field System Component 노드에서 드래그한 다음 퍼시스턴트 필드 추가(Add Persistent Field) 를 검색해 선택합니다. 피직스 유형(Physics Type)한계치 비활성화(Disable Threshold) 로 설정한 다음 활성화 필드(Enable Field)** 체크박스를 선택합니다.

    image alt text

    image alt text

  7. 컬링 필드(CullingField) 컴포넌트를 선택한 뒤 이벤트 그래프(Event Graph) 로 드래그해 노드를 만듭니다. CullingField 노드에서 드래그한 다음 Set Culling Field 를 검색해 선택합니다. Set Culling Field 노드의 반환값(Return Value) 핀을 퍼시스턴트 필드 추가(Add Persistent Field) 노드의 필드 노드(Field Node) 핀에 연결합니다. Set Culling Field 노드의 컬링 작업(Culling Operation)외부(Outside) 로 설정합니다.

    ![image alt text](image_76.png)(w:570 h:202 convert:false)

    image alt text

  8. 박스 감쇠(BoxFalloff) 컴포넌트를 선택한 뒤 이벤트 그래프(Event Graph) 로 드래그해 노드를 만듭니다. BoxFalloff 노드에서 드래그하여 Set Box Falloff 를 검색해 선택합니다. Set Box Falloff 노드의 반환값(Return Value) 핀을 Set Culling Field 노드의 입력 필드(Input Field) 핀에 연결합니다.

    ![image alt text](image_78.png)(w:568 h:198 convert:false)

  9. 박스 콜리전(Box Collision) 컴포넌트를 선택한 뒤 이벤트 그래프(Event Graph) 로 드래그해 노드를 만듭니다. Box 노드에서 드래그한 다음 GetWorldTransform 을 검색해 선택합니다. GetWorldTransform 노드의 반환값(Return Value) 핀을 Set Box Falloff 노드의 박스 트랜스폼(Box Transform) 핀에 연결합니다.

    ![image alt text](image_79.png)(w:569 h:312 convert:false)

    ![image alt text](image_80.png)(w:624 h:246 convert:false)

  10. BoxFalloff-Culling 컴포넌트를 선택한 뒤 이벤트 그래프(Event Graph) 로 드래그해 노드를 만듭니다. 마지막 두 단계를 반복해 Set Box Falloff 노드와 GetWorldTransform 노드를 만듭니다. Set Box Falloff 노드의 반환값(Return Value) 핀을 Set Culling Field 노드의 컬링 필드(Culling Field) 핀에 연결합니다.

    image alt text

  11. 하단 Set Box Falloff 노드의 필드 세기(Field Magnitude) 핀을 우클릭한 다음 변수로 승격(Promote to Variable) 을 선택합니다. 블루프린트를 컴파일(Compile) 한 다음 필드 세기(Field Magnitude) 의 기본값을 500,000 으로 설정합니다.

    image alt text

    image alt text

  12. 퍼시스턴트 필드 제거(Remove Persistent Fields) 노드를 퍼시스턴트 필드 추가(Add Persistent Field) 노드에 연결합니다. 블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다. 최종 블루프린트는 아래 이미지와 같습니다.

    image alt text

  13. 레벨로 돌아가 BP_SimpleAnchorFieldBP_StrainField 블루프린트를 레벨에서 삭제합니다. GC_Column 지오메트리 컬렉션을 지면 위로 드래그한 다음 시뮬레이트(Simulate) 를 누릅니다. 프랙처가 땅에 부딪힌 후에도 계속 시뮬레이션되는 것을 확인합니다.

    image alt text

    image alt text

  14. BP_SimpleDisableField 블루프린트를 레벨로 드래그해 아래와 같이 GC_Column 지오메트리 컬렉션 아래에 배치합니다. 디테일(Details) 패널에서 스케일(Scale)X=20, Y=20, Z=1 로 설정합니다.

    image alt text

    image alt text

  15. 시뮬레이트(Simulate) 를 누르고 GC_Column 지오메트리 컬렉션의 프랙처가 필드와 겹치는 순간 비활성화되는 것을 확인합니다.

    image alt text

섹션 결과

이 항목에서는 지오메트리 컬렉션의 프랙처가 땅에 부딪히는 순간 비활성화되도록 비활성화 필드를 만드는 법을 배웠습니다.

3 - 월드 필드 만들기

피직스 필드 는 피직스 시뮬레이션에 영향을 미칠 수도 있지만, 머티리얼 에디터(Material Editor)를 통해 나이아가라 파티클 시스템과 머티리얼에 의해 샘플링될 수도 있습니다.

단순한 비활성화 필드 만들기

먼저 머티리얼과 나이아가라 시스템에서 샘플링할 수 있는 비활성화 필드를 만듭니다.

  1. 콘텐츠 브라우저(Content Browser) 에서 BP_StrainField 블루프린트를 우클릭한 다음 복제(Duplicate) 를 선택합니다. 블루프린트의 이름을 BP_FieldMaterial 로 지정합니다.

    image alt text

    image alt text

  2. 이벤트 그래프(Event Graph) 에서 우클릭한 뒤 이벤트 Tick(Event Tick) 을 검색해 선택합니다.

    image alt text

  3. BeginPlay 이벤트(Event Begin Play) 노드와 Delay 노드를 삭제합니다. 아래와 같이 Tick 이벤트(Event Tick) 노드를 트랜션트 필드 추가(Add Transient Field) 노드와 연결합니다.

    image alt text

  4. 트랜션트 필드 추가(Add Transient Field) 노드의 피직스 유형(Physics Type) 드롭다운을 클릭한 다음 한계치 비활성화(Disable Threshold) 를 선택합니다.

    image alt text

  5. 필드 시스템 컴포넌트(Field System Component) 를 선택한 뒤 디테일(Details) 패널로 이동합니다. 필드(Field) 섹션에서 월드 필드(Is World Field) 체크박스를 선택합니다. 블루프린트를 컴파일(Compile) 하고 저장(Save) 합니다.

    image alt text

  6. BP_FieldMaterial 블루프린트를 선택하고 레벨로 드래그합니다.

    image alt text

섹션 결과

이 섹션에서는 머티리얼과 나이아가라 시스템에서 샘플링할 수 있는 비활성화 필드를 만들었습니다.

머티리얼에서 피직스 필드 샘플 만들기

이 예시에서는 피직스 필드와 겹치는 경우 감지가 가능하고, 이에 따라 색이 바뀌는 머티리얼을 만듭니다.

  1. 콘텐츠 브라우저(Content Browser) 에서 우클릭한 다음 기본 에셋 생성(Create Basic Asset) 섹션에서 머티리얼(Material) 을 클릭합니다. 새 머티리얼의 이름을 M_DetectPhysicsField 로 지정합니다.

    image alt text

    image alt text

  2. 콘텐츠 브라우저(Content Browser) 에서 M_DetectPhysicsField 를 더블클릭해 엽니다. 숫자 3 키를 누른 상태로 머티리얼 그래프(Material Graph) 안을 클릭해 머티리얼 표현식 상수 3 벡터(Constant 3 Vector) 노드를 만듭니다.

    image alt text

  3. 노드를 선택한 상태로 디테일(Details) 패널로 이동해 R = 1, G = 1, B = 0 을 입력하여 색을 노란색으로 설정합니다.

    image alt text

  4. 위 과정을 반복해 다른 머티리얼 표현식 상수 3 벡터(Constant 3 Vector) 노드를 만들고 값을 R = 1, G = 0, B = 0 으로 설정합니다.

    image alt text

  5. 머티리얼 그래프(Material Graph) 에서 우클릭한 뒤 Linear Interpolate 를 검색해 선택합니다. 두 색을 Lerp 노드의 AB 핀에 연결합니다. Lerp 노드를 Material 노드의 베이스 컬러(Base Color) 핀에 아래와 같이 연결합니다.

    image alt text

    image alt text

  6. 머티리얼 그래프(Material Graph) 에서 우클릭한 뒤 WorldPosition 을 검색해 선택합니다.

    image alt text

  7. 머티리얼 그래프(Material Graph) 에서 우클릭한 뒤 SamplePhysicsScalarField 를 검색해 선택합니다. 노드를 선택한 상태로 디테일(Details) 패널로 이동해 타깃 유형(Target Type) 드롭다운에서 한계치 비활성화(Disable Threshold) 를 선택합니다.

    image alt text image alt text

  8. 절대 월드 포지션(Absolute World Position) 노드를 SamplePhysicsScalarField 노드에 연결합니다. SamplePhysicsScala Field 노드를 Lerp 노드의 알파(Alpha) 핀에 연결합니다. 최종 머티리얼 구성은 아래 이미지와 같습니다.

    image alt text

  9. 레벨로 돌아가 툴바의 생성(Create) 버튼을 누릅니다. 셰이프(Shapes) > 구체(Sphere) 를 선택해 레벨에 구체를 배치합니다. 구체를 선택한 상태로 디테일(Details) 패널로 이동해 모빌리티(Mobility)무버블(Movable) 로 설정합니다. 머티리얼(Materials) 섹션으로 내려가 엘리먼트 0(Element 0) 머티리얼 슬롯에 M_DetectPhysicsField 을 추가합니다.

    image alt text

    image alt text

    image alt text

  10. 시뮬레이트(Simulate) 를 누르고 구체를 비활성화 필드(Disable Field) 의 한 쪽에서 다른 쪽으로 드래그해 머티리얼이 필드와 겹치면 어떻게 반응하는지 확인합니다.

    image alt text

    image alt text

섹션 결과

이 섹션에서는 월드에서 피직스 필드를 샘플링하고 이에 따라 색을 바꾸는 머티리얼을 만들었습니다.

나이아가라 시스템에서 피직스 필드 샘플링하기

나이아가라 시스템이 피직스 필드와 올바르게 상호작용하도록 카오스 나이아가라 플러그인(Chaos Niagara plugin) 이 활성화 상태인지 확인합니다.

  1. 메뉴 바 에서 세팅(Settings) > 플러그인(Plugins) 을 선택해 플러그인(Plugins) 창을 엽니다.

    image alt text

  2. 카오스 나이아가라(Chaos Niagara) 를 검색한 뒤, 필요한 경우 활성화됨(Enabled) 체크박스를 선택해 플러그인을 활성화합니다. 재시작하라는 메시지가 뜨면 에디터를 재시작합니다.

    image alt text

    이제 카오스 나이아가라 플러그인이 활성화 상태인 것을 확인했으니, 파티클이 피직스 필드와 겹치면 이를 감지하고 색이 바뀌는 나이아가라 시스템을 만들 차례입니다.

  3. 콘텐츠 브라우저(Content Browser) 에서 우클릭해 FX > 나이아가라 시스템(Niagara System) 을 선택합니다.

    image alt text

  4. 선택된 이미터에서 나온 새 시스템(New system from selected emitter(s)) 옵션을 선택하고 다음(Next) 을 클릭합니다.

    image alt text

  5. 라이브러리에서 분수(Fountain) 를 선택한 다음 더하기 표시(+) 를 누릅니다. 완료(Finish) 버튼을 누르고, 나이아가라 시스템의 이름을 NS_DetectPhysicsField 로 지정합니다.

    image alt text

    image alt text

  6. NS_DetectPhysicsField 나이아가라 시스템을 더블클릭해 엽니다. Fountain 이미터를 선택한 뒤 스폰 속도(Spawn Rate) 모듈을 엽니다. 선택(Selection) 패널에서 스폰 속도(Spawn Rate)5000 으로 설정합니다

    image alt text

    image alt text

  7. 파티클 업데이트(Particle Update) 옆의 더하기 표시(+) 를 클릭하고 새 스크래치 패드 모듈(New Scratch Pad Module) 을 선택합니다. 모듈 이름을 DetectField 로 지정합니다. DetectField 모듈을 더블클릭해 엽니다.

    image alt text

    image alt text

    image alt text

  8. 맵 가져오기(Map Get) 노드의 더하기 표시(+) 를 클릭한 뒤 New 피직스 필드(New Physics Field) 를 검색해 선택합니다. 다시 더하기 표시(+) 를 클릭한 뒤 Position 를 검색해 선택합니다.

    image alt text

    image alt text

  9. 맵 가져오기(Map Get) 노드의 New 피직스 필드(New Physics Field) 핀에서 드래그한 뒤 SamplePhysicsScalarField 를 검색해 선택합니다. 맵 가져오기(Map Get) 노드의 위치(Position) 핀을 Sample Physics Scalar Field 노드의 월드 위치(World Position) 핀에 연결합니다. 타깃 유형(Target Type) 드롭다운에서 한계치 비활성화(Disable Threshold) 를 선택합니다.

    image alt text

    image alt text

  10. 스크래치 패드(Scratch Pad) 에서 우클릭한 뒤 Linear Color 를 검색해 선택합니다. 같은 방법으로 Linear Color 만들기(Make Linear Color) 노드를 하나 더 만듭니다. 첫 번째 노드는 R = 1, G = 1, B = 0, A = 1 로 설정합니다. 두 번째 노드는 아래와 같이 R = 1, G = 0, B = 0, A = 1 로 설정합니다.

    image alt text

    image alt text

  11. 스크래치 패드 에서 우클릭한 뒤 숫자(Numeric) 카테고리에서 선형보간(Lerp) 을 검색해 선택합니다. Linear Color 만들기(Make Linear Color) 노드의 출력 1(Output 1) 핀을 Lerp 노드의 A 핀 및 B 핀에 연결합니다. 아래와 같이 Sample Physics Scalar Field 노드의 스칼라 값(Scalar Value) 핀을 Lerp 노드의 C 핀에 연결합니다.

    image alt text

    image alt text

  12. 맵 설정(Map Set) 노드의 더하기 표시(+) 를 클릭한 뒤 Color 를 검색해 선택합니다. Lerp 노드의 결과(Result) 핀을 맵 설정(Map Set) 노드의 색(Color) 핀에 연결합니다. 적용(Apply) 버튼을 눌러 모듈을 완료합니다.

    image alt text

    image alt text

  13. DetectField 모듈은 아래 이미지와 같아야 합니다.

    image alt text

  14. NS_DetectPhysicsField 시스템을 선택하고 레벨로 드래그해 앞서 사용했던 비활성화 필드(Disable Field) 위에 배치합니다.

    image alt text

  15. 시뮬레이트(Simulate) 를 누르고 파티클이 비활성화 필드와 겹치면 색이 변하는 것을 확인합니다.

    image alt text

섹션 결과

이 섹션에서는 월드에서 피직스 필드를 샘플링할 수 있는 나이아가라 시스템을 만들었습니다. 파티클은 자신의 위치를 감시하다가 필드를 샘플링하면 이에 따라 색을 바꿉니다.

태그