이 튜토리얼에서는 언리얼 엔진의 스크래치 패드(Scratch Pad) 모듈을 소개합니다. 이 튜토리얼에서는 단일 나이아가라 시스템을 기반으로 스크래치 패드 모듈의 기본 사항을 살펴봅니다. 이 튜토리얼은 최종 결과보다는 이 기능을 사용하는 다양한 방법을 배우는 데 중점을 둡니다.
Scope
스크래치 패드 모듈은 비주얼 스크립팅 그래프를 사용하여 작성할 수 있는 로컬 나이아가라 모듈입니다. 스크래치 패드 모듈 제작을 지원하는 에셋 타입은 두 가지가 있는데 바로 나이아가라 이미터와 나이아가라 시스템입니다. 이 모듈은 해당 모듈이 생성된 시스템 또는 이미터로 범위가 제한되며, 콘텐츠 브라우저에서 독립형 에셋으로 표시되지 않습니다.
이미터 기반 스크래치 패드 모듈
나이아가라 이미터 에셋 내부에 스크래치 패드 모듈을 만들면 해당 이미터가 추가된 모든 나이아가라 시스템에서 해당 이미터를 사용할 때마다 이 모듈이 적용됩니다. 아래 NE_Example 이미터 에셋에서 ScratchModuleInEmitter 모듈이 모듈 목록에 표시되는데, 해당 스택 항목은 이미터 내에서 편집할 수 있습니다.
그러나 이미터에서 만든 스크래치 패드 모듈은 다른 시스템이나 이미터 에셋에서 사용할 수 없으며 나이아가라 시스템의 모듈 목록에 표시되지 않습니다. 아래 예시는 NS_Example 나이아가라 시스템 내에서 사용되는 NE_Example 이미터 에셋을 보여줍니다. 다른 모듈과 마찬가지로 스크래치 패드 모듈도 이미터가 나이아가라 시스템에서 인스턴스화될 때 잠기며, 비활성화는 가능해도 삭제할 수는 없습니다.
시스템 기반 스크래치 패드 모듈
스크래치 패드 모듈이 나이아가라 시스템 에셋 내부에 생성되면, 해당 시스템 내의 모든 이미터에서 사용할 수 있습니다. 모든 스크래치 패드 모듈과 마찬가지로, 다른 나이아가라 시스템에 있는 이미터에서는 사용할 수 없습니다.
나이아가라 모듈 스크립트
스크래치 패드 모듈은 나이아가라 모듈 스크립트 에셋으로 익스포트할 수 있습니다. 익스포트 프로세스에 대해서는 이 튜토리얼의 공백(BLANK) 섹션에서 자세히 다룹니다. 나이아가라 모듈 스크립트는 콘텐츠 브라우저에 표시되는 완전히 별도의 에셋이며, 프로젝트 내의 모든 나이아가라 이미터와 모든 나이아가라 시스템에서 사용할 수 있습니다. 이는 머티리얼 노드를 머티리얼 함수로 변환한 후 프로젝트 전체에서 별도의 머티리얼 에셋에서 사용할 수 있게 만드는 방식과 비슷합니다.
시작하기
스크래치 패드 모듈은 나이아가라 시스템 에셋이나 나이아가라 이미터 에셋 내에서 작업해야 합니다. 이 튜토리얼에서는 간단한 그리드 스폰 나이아가라 시스템을 기반으로 스크래치 패드 모듈을 작업합니다.
나이아가라 시스템 생성하기
이 섹션에서는 신규 사용자와 이 튜토리얼을 처음부터 끝까지 진행하고자 하는 사용자에게 나이아가라 시스템을 생성하는 방법을 설명합니다. 이미 생성한 나이아가라 시스템이 있다면, 그 시스템을 사용하여 튜토리얼의 나머지 단계를 진행할 수 있습니다.
새 나이아가라 시스템을 생성하는 절차는 다음과 같습니다.
콘텐츠 브라우저(Content Browser)에서 우클릭한 다음, 나이아가라 시스템(Niagara System)을 클릭합니다.
템플릿(Template) 메뉴에서 최소(Minimal)를 선택한 다음, 생성(Create)을 클릭합니다.
새 나이아가라 시스템의 이름을 지정합니다(예: NS_Minimal). 에셋을 더블클릭하거나 Enter를 눌러 엽니다.
기본적으로 시스템에는 시스템 노드(파란색)와 하나의 최소(Minimal) 이미터(주황색)가 있습니다.
스폰 파티클
이미터로 파티클을 스폰하게 만드는 절차는 다음과 같습니다.
Minimal 이미터로 이동합니다.
이미터 업데이트(Emitter Update) 섹션에서 추가(+)를 클릭합니다.
Spawn Particles in Grid 옵션을 검색하고 클릭합니다.
새 모듈 추가(Add New Module) 메뉴 상단에 자주 사용하는 모듈을 추가할 수 있습니다. 모듈 이름 위에 마우스를 올려놓고 별(⭐) 아이콘을 클릭합니다. 아이콘이 별의 윤곽선 모양에서 별이 채워진 모양으로 바뀝니다. 메뉴를 닫았다가 다시 열면 추천(Suggested) 섹션에 모듈이 나열된 모습을 볼 수 있습니다. 제거하려면 별 아이콘을 다시 클릭합니다.
종속성 문제 해결하기
새 모듈의 이름 옆에 빨간색 점이 표시되면 오류가 발생했다는 뜻입니다.이 경우에는 그리드에 파티클 스폰(Spawn Particles in Grid) 모듈이 정상적으로 작동하려면 그리드 위치(Grid Location) 모듈도 필요합니다.
이 문제를 해결하려면 해당 모듈을 클릭합니다. 디테일(Details) 패널에서 문제를 검토한 다음 이슈 고침(Fix Issue)을 클릭합니다.
이미터의 파티클 스폰(Particle Spawn) 섹션에 그리드 위치 모듈이 추가됩니다. 모듈이 추가되면 종속성이 충족되어 그리드에 파티클 스폰 모듈의 오류 아이콘이 제거됩니다.
이미터 세팅
이 튜토리얼의 이미터를 환경설정하는 절차는 다음과 같습니다.
Minimal 이미터에서 Spawn Particles in Grid를 선택합니다.
디테일 패널에서 다음을 수행합니다.
X 카운트(X Count)를 10으로 설정합니다.
Y 카운트(Y Count)를 1로 설정합니다.
Z 카운트(Z Count)를 1로 설정합니다.
스폰 시간(Spawn Time)을 0으로 설정합니다.
Minimal 이미터에서 파티클 초기화를 선택합니다.
디테일 패널에서 다음을 설정합니다.
수명 모드(Lifetime Mode)를 직접 설정(Direct Set)으로 설정합니다.
수명(Lifetime)을 5로 설정합니다.
컬러 모드(Color Mode)를 직접 설정(Direct Set)으로 설정합니다.
컬러(Color)를 1, 0, 0으로 설정합니다.
위치 모드(Position Mode)를 시뮬레이션 위치(Simulation Position)로 설정합니다.
위치 오프셋(Position Offset)을 0, 0, 0으로 설정합니다.
질량 모드(Mass Mode)를 설정 취소(Unset)/(질량 1)로 설정합니다.
스프라이트 크기 모드(Sprite Size Mode)를 균등(Uniform)으로 설정합니다.
균등 스프라이트 크기(Uniform Sprite Size)를 10으로 설정합니다.
스프라이트 회전 모드(Sprite Rotation Mode)를 설정 취소로 지정합니다.
스프라이트 UV 모드(Sprite UV Mode)를 설정 취소로 지정합니다.
다른 모든 메시 및 리본 어트리뷰트를 설정 취소로 지정합니다.
이 예제에서는 그리드 위치(Grid Location) 모듈이 디폴트 값 그대로 남겨져 있습니다.
스크래치 패드 모듈 생성하기
Minimal 이미터에서 파티클 스폰(Particle Spawn) 헤더 옆의 추가(+)를 클릭합니다. New Scratch Pad Module을 검색하여 새 스크래치 패드 모듈(New Scratch Pad Module) 옵션을 선택합니다.
원래 시스템 개요(System Overview) 탭 옆에 스크래치 모듈 그래프 탭이 자동으로 열립니다. 로컬 모듈(Local Modules) 탭은 프리뷰(Preview) 창 아래의 파라미터(Parameters) 및 사용자 파라미터(User Parameters) 탭 옆에 나타납니다.
스크래치 모듈의 이름을 ApplyOffset처럼 알아보기 쉬운 이름으로 변경합니다.
모듈 목록에는 모듈 이름이 한 단어(ApplyOffset)로 표시되지만, 검색 메뉴와 스택 항목에서는 대소문자를 기준으로 띄어쓰기가 적용된 단어(Apply Offset)로 표시됩니다.
이제 시스템 개요 그래프에서 오프셋 적용(Apply Offset) 모듈이 Minimal 이미터의 모듈로 나열됩니다. 새로운 스크래치 모듈은 검색 메뉴에도 표시되며 나이아가라가 아닌 스크래치 패드 항목으로 라벨이 지정됩니다.
내비게이션
스크래치 패드 모듈의 그래프를 열려면 다음 중 하나를 수행하면 됩니다.
시스템 개요 탭 옆에 있는 스크래치 모듈의 탭을 클릭합니다.
이미터에서 스크래치 모듈을 선택한 다음, 디테일 패널에서 스크래치 패드 버튼을 클릭합니다.
이미터에서 스크래치 모듈 스택 항목을 더블클릭합니다.
로컬 모듈(Local Modules) > 모듈(Modules) 목록에서 스크래치 모듈을 더블클릭합니다.
데이터플로
언리얼 엔진의 다른 그래프와 마찬가지로 모듈의 데이터는 왼쪽에서 오른쪽으로 흘러갑니다. 데이터는 빨간색 Input Map 노드에서 시작하여 흰색 나이아가라 파라미터 맵(Niagara Parameter Map) 라인을 통과한 후 녹색 Output Module 노드에서 끝납니다.
Map Get 노드를 사용하여 이 나이아가라 파라미터 맵 라인에서 데이터를 추출하고, Map Set 노드를 사용하여 여기에 데이터를 설정할 수 있습니다.
위치 오프셋 추가하기
이제 스크래치 패드 모듈에 몇 가지 기능을 추가할 텐데 위치 오프셋부터 추가하겠습니다.
파티클에서 위치 어트리뷰트 가져오기
Map Get 노드에서 추가(+) 핀을 클릭한 다음 PARTICLES Position 파라미터를 검색하고 클릭합니다. 이 데이터는 각각의 파티클에 저장됩니다.
이러한 파라미터는 네임스페이스와 이름 사이에 마침표를 찍어 한 단어로 작성됩니다( NAMESPACE.Name). 코드나 블루프린트를 사용하여 파라미터(특히 사용자 파라미터)에 액세스하는 경우 공백이 아닌 마침표가 있는 버전을 사용하세요.
벡터 입력 추가하기
Map Get 노드에서 추가(+) 핀을 클릭한 다음, Vector(INPUT.Vector) 옵션을 검색하고 클릭합니다.
데이터 네임스페이스
파라미터 이름의 컬러 블록 안에 있는 텍스트는 데이터의 출처가 되는 네임스페이스를 나타냅니다.
Position은 PARTICLES 네임스페이스에서 오는데, 이는 데이터가 파티클에 보관된다는 뜻입니다. 이 데이터는 파티클의 수명이 다할 때까지 각 프레임을 넘어 지속됩니다.
벡터(Vector)에 사용되는 입력(INPUT) 네임스페이스는 데이터가 해당 모듈에서 왔음을 나타내며, 이는 사용자가 직접 수정할 수 있습니다.
위치 오프셋 계산하기
PARTICLES.Position 핀에서 드래그한 다음 Add 노드를 검색하고 클릭합니다.
기본적으로 Add 노드의 입력은 진한 파란색으로 표시되는데, 이는 나이아가라 숫자(Niagara Numeric)라는 와일드카드 타입에 속함을 뜻합니다. 이 노드는 위치, 벡터, float, integer를 허용합니다. 핀과 연결선을 특정 타입의 다른 노드에 연결하면 해당 핀에 사용된 데이터 타입에 맞춰 변합니다.
INPUT.Vector 핀에서 Add 노드의 두 번째 핀으로 드래그합니다. 그러면 Vector 타입이라는 뜻으로 노란색으로 변합니다.
데이터 업데이트하기
PARTICLES.Position에 오프셋 양(INPUT.Vector)을 추가한 후, Map Set 노드를 사용하여 파티클 데이터를 업데이트해야 합니다.
기존 Map Set 노드에서 추가(+) 핀을 클릭한 다음, PARTICLES.Position을 검색하고 클릭합니다.
Add 노드의 출력을 Map Set 노드의 PARTICLES Position 핀에 연결합니다. 그러면 Map Get 노드에서 액세스하는 PARTICLES.Position 값이 새 값으로 업데이트(덮어쓰기)됩니다.
그래프 변경사항 적용하기
적용(Apply) 또는 적용 및 저장(Apply & Save) 버튼을 클릭하여 그래프의 변경사항을 나이아가라 시스템의 스크래치 모듈과 해당 스택 항목에 커밋합니다.
시스템 개요 그래프의 Minimal 이미터에서 오프셋 적용 스크래치 모듈 스택 항목을 선택합니다. 이전 단계에서 생성한 벡터 입력은 이제 유효한 모듈이 되었습니다.
모듈의 기능을 테스트하려면 벡터 입력에 값을 입력하고 나이아가라 시스템 뷰포트에서 시스템의 시각적 출력이 어떻게 변경되는지 확인합니다. 이 예시에서는 Z 값을 0에서 200으로 변경하면 빨간색 파티클이 200유닛(센티미터) 위로 이동합니다.
모듈 컨텍스트
모듈을 특정 이미터 컨텍스트에만 표시하고 사용하도록 설정할 수 있습니다.
모듈 사용 비트마스크 설정하기
오프셋 적용 모듈 그래프에서 그래프 배경의 아무 곳이나 클릭합니다. 그러면 디테일 패널에 모듈 세팅이 표시됩니다. 목록의 첫 번째 세팅은 모듈 사용 비트마스크(Module Usage Bitmask)인데, 이는 모듈의 생성 위치와 이동 가능 위치를 정의합니다. 드롭다운 메뉴를 클릭하여 다양한 컨텍스트 옵션을 확인하고 검색하고 설정할 수 있습니다.
사용할 수 있는 세팅은 다음과 같습니다.
Function
모듈(Module)(기본적으로 활성화됨)
Dynamic Input
파티클 스폰 스크립트(Particle Spawn Script)(기본적으로 활성화됨)
파티클 업데이트 스크립트(Particle Update Script)(기본적으로 활성화됨)
파티클 이벤트 스크립트(Particle Event Script)(기본적으로 활성화됨)
파티클 시뮬레이션 스테이지 스크립트(Particle Simulation Stage Script)(기본적으로 활성화됨)
Emitter Spawn Script
Emitter Update Script
System Spawn Script
System Update Script
드롭다운 메뉴에서 항목을 선택하거나 선택을 취소하여 모듈을 사용할 수 있는 위치와 방법을 제한할 수 있습니다.
이를 시도하려면 파티클 업데이트 스크립트 옵션을 비활성화한 다음 적용 버튼을 누릅니다.
시스템 개요 그래프 뷰로 이동하여 오프셋 적용 모듈 스택 항목을 파티클 업데이트 섹션으로 드래그합니다. 이미터의 항목 사이에 밝은 파란색 드롭 라인과 함께 '이 모듈은 스택의 이 섹션으로 이동할 수 없습니다. 이 사용법 컨텍스트에 유효하지 않기 때문입니다.'라는 경고 툴팁이 표시됩니다.
또한, 이 컨텍스트 제한은 해당 제한 섹션의 검색 결과에도 적용됩니다. 이 경우 파티클 업데이트 섹션의 검색에 오프셋 적용 모듈이 나타나지 않습니다.
오프셋 적용 모듈은 여전히 파티클 스폰 검색 결과에서 사용할 수 있습니다.
이 튜토리얼을 계속 진행하려면 파티클 업데이트 스크립트 컨텍스트를 활성화합니다.
파티클 스폰 및 파티클 업데이트
이미터의 파티클 스폰(Particle Spawn) 섹션에 있는 모듈은 파티클이 생성(스폰)될 때만 실행됩니다.
이미터의 파티클 업데이트(Particle Update) 섹션에 있는 모듈은 틱마다 실행됩니다.
이를 시연하려면 파티클 스폰에서 파티클 업데이트 섹션 아래의 한 지점으로 오프셋 적용 스택 항목을 드래그합니다. 벡터 입력 Z 값을 1로 변경합니다. 뷰포트에서 빨간색 점들이 위로 이동하는데, 이는 틱마다 1cm 오프셋이 파티클에 적용되기 때문입니다.
완료되면 파티클 스폰 섹션으로 다시 드래그하여 튜토리얼을 계속 진행합니다.
회전 오프셋
사용자(이 경우에는 VFX 아티스트)가 축을 중심으로 오프셋을 회전할 수 있는 몇 가지 방법이 있습니다. 이 섹션에서는 모듈 내부에 회전을 추가합니다. 튜토리얼 후반부에서는 사용자가 입력한 데이터에 다이내믹 입력을 활용하는 방법을 배웁니다.
Add Node
그래프 배경을 우클릭하고 'rotation'을 검색한 다음 XYZRotationToQuaternion을 클릭합니다.
입력 생성하기
다음 단계는 사용자가 액세스하여 값을 입력할 수 있는 입력을 생성하는 것입니다. 가장 쉬운 방법은 원하는 핀(이 예시에서는 X, Y, Z)에서 Map Get 노드의 추가(+) 아이콘으로 드래그하여 연결하는 것입니다. 그러면 같은 이름과 정확한 타입의 해당 입력(INPUT) 파라미터가 생성됩니다. Rotation to Quaternion 노드에서 세 개의 float 값(녹색 핀, XYZ) 모두에 이 작업을 수행합니다.
회전 오프셋 계산하기
Map Get의 INPUT.Vector 핀에서 드래그한 다음, Multiply Vector With Quaternion 노드를 검색하고 클릭합니다. Multiply Vector with Quaternion 노드의 Quaternion 입력 핀에 XYZRotation to Quaternion 노드의 출력 핀을 드래그합니다.
Multiply Vector with Quaternion 노드의 출력 핀을 Add 노드의 두 번째 핀에 연결하고, 기본 INPUT.Vector 값을 새로 곱해진 Vector 및 Quaternion 값으로 대체합니다.
회전 오프셋 변경사항 적용하기
적용 및 저장을 클릭한 다음, 시스템 개요 그래프를 엽니다.
이미터의 파티클 업데이트 섹션에 있는 오프셋 적용 스택 항목을 선택하고 Y 값을 30으로 설정합니다. 이렇게 하면 빨간색 파티클이 위쪽과 오른쪽으로 이동합니다.
파라미터 탭
나이아가라 시스템의 뷰포트 아래에는 두 개의 탭이 있는데, 탭마다 다른 데이터 및 인터랙션 옵션이 있습니다.
파라미터
파라미터 탭에는 나이아가라 시스템에 포함된 모든 파라미터가 나열됩니다. 여기에는 다음이 포함됩니다.
시스템 어트리뷰트(System Attributes)(예: SYSTEM.Age, SYSTEM.LoopCount)
이미터 어트리뷰트(Emitter Attributes)(예: EMITTER.Age, EMITTER.DistanceTraveled)
파티클 어트리뷰트(Particle Attributes)(예: PARTICLES.Position, PARTICLES.SpriteSize)
모듈 출력(Module Outputs)(예: OUTPUT.GRIDLOCATION.GridSpacing, OUTPUT.PARTICLESTATE.FirstFrame)
제공된 엔진(Engine Provided)(예: ENGINE.DeltaTime, ENGINE.EMITTER.NumParticles, ENGINE.OWNER.Velocity)
스테이지 트랜션트(Stage Transients)(예: TRANSIENT.FirstFrame, TRANSIENT.ScalabilityExecutionState)
이 탭에는 기본적으로 비어 있는 제목도 있습니다.
사용자 노출값(User Exposed)(사용자 파라미터 탭에 있는 것과 동일)
민감한 컨텍스트 스택(Stack Context Sensitive)
나이아가라 파라미터 컬렉션(Niagara Parameter Collection)
사용자 파라미터
사용자 파라미터(User Parameters) 탭에는 나이아가라 시스템에서 생성한 모든 사용자 파라미터가 나열됩니다. 이는 기본적으로 비어 있습니다. 여기의 사용자 파라미터는 파라미터(Parameters) 탭의 사용자 노출값 섹션과 동일합니다.
뷰 종속 변경 및 이름 변경
오프셋 적용과 같은 특정 모듈의 그래프를 볼 때 파라미터 목록은 현재 사용할 수 있는 입력으로 필터링됩니다.
이러한 탭에서 입력의 이름을 변경할 수 있습니다(예: INPUT.RotationAngleX). 언리얼 엔진의 다른 기능과 마찬가지로 입력 이름을 더블클릭하거나 F2 키를 눌러 이름을 변경할 수 있습니다.
적용 및 저장을 클릭하면 모듈의 스택 항목에 새 이름이 표시됩니다.
계층구조 편집 툴
계층구조 편집(Edit Hierarchy) 창에서 입력 순서를 정리하고, 툴팁을 추가하고, 종속성을 관리할 수 있습니다.
계층구조 편집 인터페이스에 액세스하려면 편집하려는 스크래치 패드 모듈(이 경우 오프셋 적용 모듈)을 엽니다.
파라미터 탭에서 입력 계층구조 편집(Edit Input Hierarchies)을 클릭합니다.
그러면 계층구조 편집 창이 열립니다.
왼쪽 열에서 관련 입력을 파란색 하이라이트가 표시되는 중앙 열로 드래그합니다.
중앙 열의 입력을 드래그하여 순서를 변경합니다.
디폴트
디테일 패널에서와 마찬가지로 항목의 디폴트 값(Default Value) 및 변수(Variable) 세팅에 액세스할 수 있습니다.
디폴트 모드(Default Mode): 옵션에는 Binding, Custom, Fail if Previously Not Set, 디폴트 값 등이 포함됩니다.
디폴트 값(Default Value): float 또는 벡터와 같은 타입에 따라 달라집니다.
툴팁(Tooltip)(및 현지화 옵션): 유용한 구현 세부 정보, 유닛, 주의 사항 또는 사용자에게 유용한 기타 참고 사항을 추가합니다.
표시 단위(Display Unit): 옵션에는 Centimeters, Lumens, Hours, Gigabytes, Grams, Degrees, 디폴트 값인 Unspecified 등이 포함됩니다.
고급 디스플레이(Advanced Display): 기본적으로 비활성화되어 있습니다.
개요 스택에 표시(Display in Overview Stack): 기본적으로 비활성화되어 있습니다.
인라인 파라미터 정렬 우선순위(Inline Parameter Sort Priority) 및 컬러 오버라이드(Color Override): 기본적으로 비활성화되어 있습니다.
편집 조건(Edit Condition) 및 표시 조건(Visible Condition)(입력 이름 및 타깃 값): 기본적으로 없음 및 0 엘리먼트입니다.
프로퍼티 메타데이터: 기본적으로 0 엘리먼트입니다.
변수를 위한 대체 에일리어스(Alternate Aliases for Variable): 기본적으로 0 엘리먼트입니다.
위젯 타입(Widget Type): 디폴트 값입니다.
최솟값(Min Value): 기본적으로 0입니다.
최댓값(Max Value): 기본적으로 1입니다.
스텝 너비(Step Width): 기본적으로 1입니다.
커밋 시에만 값 변경사항 브로드캐스트(Broadcast Value Change On Commit Only): 비활성화되어 있습니다. 값을 입력할 때가 아니라 커밋할 때만 업데이트하려면 체크합니다.
툴팁
회전 각도 X(Rotation Angle X) 입력의 툴팁 필드에 텍스트를 추가한 다음 적용 또는 적용 및 저장을 클릭합니다.
그런 다음, 시스템 개요 그래프로 이동하여 오프셋 적용 모듈을 선택하고 디테일 패널에서 회전 각도 X 옵션 위로 마우스를 가져갑니다. 툴팁은 팝업의 첫 줄에 표시되며, 그다음에는 마우스 커서가 올라가 있는 입력의 이름 및 타입 정보가 표시됩니다.
유닛 표시
계층구조 편집 창(또는 디테일 패널)에서 값의 표시 단위를 변경합니다. 회전 각도 X 입력을 선택하고 표시 단위를 Unspecified에서 Degrees로 변경합니다.
그런 다음 벡터 입력의 표시 단위를 Centimeters로 변경합니다.
로컬 파라미터
복잡한 모듈을 만들 때 로컬 파라미터를 활용하면 모듈 그래프를 정리하고 읽기 쉽게 유지할 수 있습니다. 그래프를 연산에 따라 분리하는 것이 일반적으로 권장되는 공통적인 접근 방식입니다.
로컬 파라미터는 모듈에만 존재하며 다른 프레임까지 지속되지 않습니다. 이러한 로컬 파라미터는 종종 그래프 내에서 임시 값을 저장하는 데 사용됩니다.
서로 다른 Map Get 및 Map Set 간에 입력 분할
Map Get에서 PARTICLES.Position 핀을 우클릭하고 제거(Remove)를 클릭합니다. 노드 연결을 해제합니다(Alt + 클릭).
Multiply Vector with Quaternion 노드 근처에 Map Set 노드를 추가합니다(우클릭 메뉴에 Parameter Map Set이라고 표시됨). Input 노드와 Map Set 노드 사이의 나이아가라 파라미터 맵(Niagara Parameter Map) 라인에 연결합니다.
Multiply Vector with Quaternion 노드의 출력 핀을 Map Set의 추가(+) 아이콘으로 드래그합니다. 이렇게 하면 드래그한 핀과 이름과 타입이 같은 로컬 파라미터가 생성됩니다. 이 경우에는 LOCAL.Vector가 생성됩니다. 이름을 더 알아보기 쉬운 이름(예: LOCAL.Offset)으로 변경합니다.
Map Set 노드의 오른쪽에 있는 흰색 Dest 핀을 드래그한 다음, Map Get 옵션을 검색하고 클릭합니다.
추가(+)를 클릭한 다음, 이전 단계에서 생성한 LOCAL.Offset을 검색하여 선택합니다.
이제 캐시된 Offset 값을 그래프의 다른 정리된 섹션에서 사용할 수 있습니다.
절단 및 재배열
언리얼 엔진 그래프에서 노드를 재배열하거나 추가할 때 특정 노드를 연결하는 선의 연결을 해제해야 할 수도 있습니다. 핀이나 선에 Alt+좌클릭을 사용하여 연결을 해제합니다.
대신 핀 연결을 잡고 이동하려면 Ctrl+좌클릭을 누른 상태로 선을 선택합니다. 유효한 핀 위에 놓습니다. 마우스 버튼을 빈 그래프 공간 위에 놓으면 연결이 삭제됩니다.
핀을 제거하거나, 이름을 바꾸거나, 순서를 변경하거나, 다른 작업을 수행하려면 우클릭하여 메뉴를 불러온 다음 원하는 작업을 클릭합니다.
트랜스포메이션 스페이스 및 위치 오프셋
트랜스포메이션 스페이스(Transformation Spaces)의 타입은 세 가지입니다.
시뮬레이션(Simulation): 로컬 스페이스(Local Space)가 true 또는 false로 설정된 이미터의 프로퍼티(Properties) 섹션의 컨텍스트에 맞춰 로컬 또는 월드로 계산합니다.
월드(World): 월드 값의 컨텍스트에 맞춰 계산합니다.
로컬(Local): 월드의 어디에 있든 시스템 자체의 컨텍스트에 맞춰 계산합니다.
사용자 설정 트랜스폼 스페이스
이 모듈의 예시에서는 사용자가 트랜스폼 스페이스를 선택할 수 있도록 옵션을 제공하겠습니다.
Transform Vector 노드를 생성합니다. Map Get의 Offset 핀을 Transform Vector 노드의 InVector 핀으로 드래그합니다.
사용자가 소스 스페이스(Source Space)를 입력으로 설정할 수 있게 하려면 Transform Vector의 Source Space 핀을 다시 Map Get 노드의 추가(+) 아이콘으로 드래그합니다. 그러면 이름과 타입이 동일한 입력이 생성됩니다.
다른 Map Set 노드를 추가하고 이 노드를 이전 Map Set와 최종 Map Set 사이에 연결합니다. Map Set 노드에 LOCAL.Offset 항목을 생성하고 Transform Vector의 OutVector 핀으로 드래그합니다.
위치 오프셋 다시 구현하기
새 Map Set 노드에서 Map Get 노드를 생성하고 추가(+) 버튼을 클릭하여 LOCAL.Offset 변수에 액세스합니다.
그런 다음, 추가(+) 버튼을 클릭하여 PARTICLES.Position 파라미터에 액세스합니다.
앞서의 Add 노드를 사용하여 PARTICLES.Position에 LOCAL.Offset을 추가합니다.
노드에서 엘리먼트의 순서를 변경하려면 항목 중 하나를 우클릭하고 핀 위로 이동(Move pin up)을 클릭합니다.
PARTICLES.Position 핀을 사용하여 Add 노드를 Map Set 노드에 연결하고 Dest를 최종 Output Module로 드래그합니다.
Apply Changes
적용 또는 적용 및 저장을 클릭한 다음, 시스템 개요 그래프를 엽니다. Minimal 이미터를 선택한 다음 그 위에 있는 오프셋 적용 스택 항목을 선택합니다. 이제 디테일 패널에 소스 스페이스 입력 옵션이 있습니다.
코멘트 추가하기
코멘트는 노드를 시각적으로 그룹화하며, 종종 그래프의 해당 부분을 설명하는 텍스트나 해당 섹션과 관련된 기타 참고 사항을 포함합니다. 텍스트 기반 코드와 마찬가지로 작업 전반에 걸쳐 코멘트를 남기는 것이 좋습니다. 코멘트를 남기면 다른 개발자가 여러분의 결정을 더 쉽게 이해할 수 있습니다.
Scratch Module 그래프를 엽니다. 그래프에서 노드를 선택하고 C 키를 눌러 코멘트를 생성합니다. 이름을 알아보기 쉬운 이름으로 변경합니다(예: Initial Offset Vector).
코멘트 박스를 선택하면 디테일 패널에 컬러(Color), 폰트 크기(Font Size), 줌할 때 말풍선 표시(Show Bubble When Zoomed), 말풍선 컬러 적용(Color Bubble), 이동 모드(Move Mode), 디테일(Details) 필드 등 사용할 수 있는 설정이 표시됩니다.
코멘트는 그래프의 각 섹션에서 일어나는 일을 시각적 및 텍스트 정보로 전달합니다. 이 예시 그래프의 코멘트에는 Initial Offset Vector, Transform Into Space, Set Position 등이 포함될 수 있습니다. 여기서 각 코멘트 박스에는 초기 Map Get 및 후속 Map Set 노드가 포함되며, 다음 Map Get이 다음 섹션을 시작합니다.
모듈 출력
모듈 출력은 파티클 데이터를 채우지 않고도 사용자에게 추가 데이터를 제공할 수 있습니다. 이미터 스택 항목은 위에서 아래로 실행되므로 모듈 출력 데이터는 그 아래 스택 항목에서만 사용할 수 있습니다. 출력과 출력에 기록된 다른 파라미터를 알면 파티클 시스템의 데이터 작업 방법을 파악하는 데 도움이 될 수 있습니다.
파라미터 쓰기 표시
Minimal 이미터에서 원하는 모듈을 선택합니다. 디테일 패널에서 톱니바퀴(⚙️) 아이콘을 선택하고 파라미터 쓰기 표시(Show Parameter Writes)를 활성화합니다. 파라미터 쓰기(Parameter Writes) 섹션은 기본적으로 접혀 있습니다. 화살표(🔽)를 클릭하여 목록을 펼치고, 스택 항목이 기록하는 모든 출력을 확인합니다.
아래의 오프셋 적용 스크래치 패드 모듈 스택 항목에서 파라미터 쓰기 섹션에는 PARTICLES.Position만 포함되어 있습니다.
모듈 출력 사용하기
Grid Location 모듈 스택 항목을 선택하고 파라미터 쓰기 섹션을 펼칩니다. PARTICLES.Position과 다른 출력(OUTPUT) 파라미터에 기록합니다.
예를 들어, OUTPUT.GRIDLOCATION.GridUVW를 사용하여 파티클의 컬러를 변경해 보겠습니다.
이를 시연하려면 그리드에 파티클 스폰(Spawn Particles in Grid) 스택 항목을 연 다음 X, Y, Z 값을 10으로 변경합니다. 그러면 일렬로 나열된 파티클이 아니라 큐브 모양의 파티클 그룹이 표시될 것입니다.
그런 다음 이미터의 파티클 스폰 섹션에서 추가(+) 버튼을 클릭하여 컬러(Color) 모듈을 생성합니다.
컬러 견본 옆에 있는 드롭다운 메뉴를 사용하여 Make Linear Color from Vector와 Float를 검색하고 둘 다 클릭합니다.
새 벡터(RGB)(Vector (RGB)) 필드 옆의 드롭다운 메뉴를 사용하여 OUTPUT.GRIDLOCATION.GridUVW를 검색하고 클릭합니다.
이제 RGB 값은 OUTPUT.GRIDLOCATION.GridUVW 정보에 의해 결정됩니다.
모듈 출력 생성하기
오프셋 적용 스크래치 패드 모듈 그래프를 엽니다. Set Position 코멘트 섹션(마지막 Map Get 및 Map Set)에서 Map Get의 LOCAL.Offset 핀을 Map Set 노드의 추가(+) 핀으로 드래그합니다.
연결선을 더블클릭하여 Reroute 노드를 생성한 다음, 필요에 따라 이동하여 오버랩을 줄이고 그래프에서의 비저빌리티를 높입니다. 그래프의 우클릭 메뉴를 사용하여 Reroute 노드를 직접 만들 수도 있습니다.
Map Set 노드에서 새 LOCAL.Offset 핀을 우클릭합니다. 네임스페이스 변경(Change Namespace) > 출력(OUTPUT)을 클릭합니다.
이렇게 하면 로컬(LOCAL) 네임스페이스가 OUTPUT으로 변경됩니다. 또한, 네임스페이스 모디파이어(예: MODULE)를 추가하고 모듈 이름(Apply Offset)을 덧붙입니다. 결과는 Map Set 노드에 OUTPUT.MODULE.Offset으로 나타납니다.
적용을 클릭한 다음, 시스템 개요 그래프를 엽니다. Minimal 이미터의 오프셋 적용 스택 항목을 선택하고 디테일 패널에서 파라미터 쓰기 섹션을 펼칩니다. OUTPUT.APPLYOFFSET.Offset 파라미터가 목록에 표시되며 그 아래의 모든 모듈 스택 항목에서 사용할 수 있습니다.
직접 파라미터 설정하기
예를 들어, 오프셋을 쿼리해 보겠습니다. 추가(+) 버튼을 클릭하여 오프셋 적용 스택 항목 아래에 파라미터 설정(Set Parameters) 스택 항목을 생성합니다. 이 모듈은 검색 메뉴에서 직접 신규 또는 기존 파라미터 설정(Set new or existing parameter directly)으로 표시됩니다.
디테일 패널에서 추가(+) 버튼을 클릭하여 목록에 벡터(PARTICLES.Vector) 항목을 생성합니다.
새 항목에서 화살표를 클릭하여 타입 메뉴를 연 다음, OUTPUT.APPLYOFFSET.Offset을 검색하고 클릭합니다.
다이내믹 모듈 입력
모듈 스크립트를 작성할 때, 해당 함수 기능의 설정 위치를 지정하는 몇 가지 옵션이 있습니다. 다양한 다이내믹 입력을 구현함으로써 사용자에게 더 많은 옵션과 기능을 제공할 수 있습니다.
예를 들어, 오프셋 적용 모듈에서 쿼터니언(Quaternion)을 재작업할 수 있습니다. 오프셋 적용 그래프를 열고 그래프에서 첫 번째 Map Get(Quaternion 노드에 연결된 별도의 X, Y, Z Map Get 입력이 있는 그래프)으로 이동합니다.
이러한 방식으로 쿼터니언을 처리하는 데는 몇 가지 한계가 있습니다. 회전 각도는 각각 X, Y, Z로 구분되어 노출되며 각도 타입은 도 단위로 가정합니다. 이것이 사용자에게 제공되는 유일한 옵션입니다.
쿼터니언을 입력으로 노출한 다음 기존의 다이내믹 입력이 작업을 수행하도록 하는 것이 더 강력할 수 있습니다. 이 경우, 첫 번째 Map Get에서 회전 각도 대신 쿼터니언을 직접 사용할 수 있습니다.
다이내믹 입력 설정하기
첫 번째 Map Get 노드에서 각 X, Y, Z 핀을 우클릭하여 제거합니다. 또한, XYZRotation to Quaternion 노드를 삭제합니다.
Map Get에서 추가(+) 핀을 클릭하여 INPUT.Quaternion(Quat)을 검색하고 클릭합니다. 이름을 알아보기 쉽게 변경합니다(예: INPUT.RotationQuaternion). 해당 핀을 Multiply Vector With Quaternion 노드의 쿼터니언(Quaternion) 핀으로 드래그합니다.
적용을 클릭한 다음, 시스템 개요 그래프를 엽니다. 이제 오프셋 적용 모듈의 디테일 패널에서 회전 쿼터니언(Rotation Quaternion)을 사용할 수 있으며, 별도의 X, Y, Z 옵션이 제거되었습니다.
다이내믹 입력 사용하기
이미터의 오프셋 적용 스택 항목에서 회전 쿼터니언 항목에 대한 드롭다운을 연 다음, Make Quaternion을 검색하고 클릭합니다.
이제 사용자는 다이내믹 입력에 의해 사전 정의된 옵션 중 하나를 선택할 수 있습니다. 각도 타입(Angle Type)을 변경하고, 쿼터니언 시작점(Quaternion From)으로 XYZ 회전(XYZ Rotations)을 선택하고, 다른 좌표 공간(Coordinate Space)을 지정할 수 있습니다. 이 모든 옵션은 나이아가라에서 제공하는 기본 옵션입니다.
고려 사항
모듈을 작성하고 제시하는 방법을 결정할 때는 가장 쉬운 관리 방법이 무엇이고 사용자에게 가장 강력하고 유용한 사용 방법은 무엇인지를 고려해야 합니다. 최종 사용자에게 너무 개방적이지 않으면서도 유연하게 선택할 수 있는 옵션으로 균형을 잡아줘야 합니다.
이 경우에 '회전 쿼터니언'은 사용자에게 다소 난해하거나 불분명할 수 있다는 단점이 있습니다.
이런 잠재적 장애물을 해결하려면 입력에 툴팁을 추가하세요. 파라미터 목록에서 입력을 선택하고 디테일 패널의 툴팁(Tooltip) 필드에 툴팁을 입력합니다. 이 입력의 경우, '쿼터니언 다이내믹 입력 만들기(Make Quaternion Dynamic Input) 사용'과 같은 내용을 입력할 수 있습니다. 그러면 사용자가 다음 단계를 명확하게 알 수 있습니다.
적용(Apply)을 클릭합니다. 시스템 개요 그래프를 열고 오프셋 적용 모듈을 선택하고 디테일 패널에서 회전 쿼터니언 항목에 마우스를 가져갑니다. 커스텀 텍스트는 툴팁의 첫 번째 열에 표시됩니다.
모듈 노트
스크래치 패드 모듈을 포함한 모든 모듈에서는 노트(Note) 필드를 사용할 수 있습니다. 이러한 모듈 사용 노트(Module Usage Notes)는 이미터에서 모듈의 스택 항목을 선택했을 때 디테일 패널 상단에 표시됩니다. 모듈 사용 시 알아둘 점, 종속성 노트 등 모듈의 작동 방식에 대한 정보를 여기에 입력할 수 있습니다.
모듈 노트 추가하기
이 옵션을 찾아서 편집하려면 그래프 배경을 클릭하여 모든 노드를 선택 해제합니다. 그러면 디테일 패널이 모듈의 특정 부분이 아닌 모듈 전체에 대한 정보로 채워집니다. 참고 메시지(Note Message) 필드에 모듈 관련 정보를 입력합니다.
오프셋 적용 스크래치 모듈의 경우 유용한 툴팁으로 '이 모듈은 파티클 위치에 오프셋을 적용합니다. 쿼터니언 다이내믹 입력 만들기를 유틸리티로 이용하여 쿼터니언을 제공하세요.'와 같은 문구를 사용할 수 있습니다.
모듈 노트 보기
적용을 클릭한 다음 시스템 개요 그래프를 엽니다. 오프셋 적용 스크래치 모듈 스택 항목을 선택하면 디테일 패널 상단에 모듈 사용 노트가 표시됩니다.
노트 해제 및 표시
디테일 패널 상단의 메모 및 기타 이슈나 경고는 해제(Dismiss)를 클릭하여 숨길 수 있습니다.
모듈 상단의 톱니바퀴(⚙️) 아이콘을 클릭하고 모든 스택 이슈 해제 복원(Undismiss All Stack Issues)을 클릭하여 노트를 다시 표시할 수 있습니다.
하나의 스택 항목에서 해제하면 동일한 모듈 타입의 새로 추가된 스택 항목에 참고(Notes) 섹션이 표시됩니다.
파라미터 관리
모든 파라미터와 입력은 파라미터(Parameters) 탭에 나열되어 있습니다.
이 목록에는 모듈에서 더는 사용하지 않는 파라미터와 입력이 포함되어 있을 수도 있습니다.
파라미터 사용 통계
정리해야 할 파라미터와 입력을 식별하는 가장 쉬운 방법은 각 입력 오른쪽에 있는 필드를 확인하는 것입니다. 이 필드에는 각 입력에 대한 읽기 및 쓰기 레퍼런스가 표시됩니다. 이 경우 INPUT.RotationAngle 파라미터 세 개(X, Y, Z)가 모두 사용되지 않는데, 이는 해당 항목이 모두 읽기 0, 쓰기 0(0|0)으로 나열되어 있기 때문입니다.
사용하지 않는 파라미터 제거하기
모듈 그래프에서 파라미터 사용 내용을 삭제하더라도 파라미터는 파라미터 목록에 남습니다. 파라미터가 더 이상 필요하지 않으면, 수동으로 삭제해야 합니다.
사용하지 않을 파라미터를 제거하려면 파라미터 목록에서 해당 파라미터를 선택하고 Delete 키를 누르거나 파라미터를 우클릭한 다음 삭제(Delete)를 클릭합니다.
데이터 인터페이스
이렇게 특별한 데이터 타입은 일반 에디터에서 정보를 가져와 나이아가라에 전달하므로, 이를 사용하여 파티클을 연출하거나 시뮬레이션에 영향을 줄 수 있습니다.
데이터 인터페이스 액세스하기
데이터 인터페이스에 액세스하려면 스크래치 모듈 그래프를 엽니다. Map Get 노드에서 추가(+) 핀을 클릭하여 새로 만들기(Make New) 드롭다운을 엽니다. 데이터 인터페이스(Data Interface)를 클릭하면 옵션 목록이 표시됩니다.
이러한 데이터 인터페이스의 대부분에는 엔진에 이미 작성된 모듈이 있습니다. 때로는 해당 함수 기능을 스크래치 모듈에 직접 추가해야 할 수도 있습니다.
데이터 인터페이스로 작업하기
이 예시에서는 그래프의 Transform Into Space와 Set Position 사이에 공간을 생성합니다.
Set Position 섹션 앞에 Map Set 노드를 추가하고 핀 경로를 다시 지정합니다. Transform Into Space의 Map Set을 새 Map Set 노드에 연결하고 Map Set의 Dest 핀을 Set Position의 Map Get 노드와 그 뒤에 있는 Map Set 노드에 드래그합니다.
Map Get 노드를 생성하고 INPUT.CameraQuery 입력을 추가합니다.
INPUT.CameraQuery 핀을 그래프의 빈 공간에 드래그하여 소스 필터링(Source Filtering) 메뉴를 엽니다. 첫 번째 항목은 선택한 데이터 인터페이스에 따라 다르며, 이를 펼치면 해당 데이터 인터페이스에서 사용할 수 있는 모든 메서드가 나열됩니다.
이 예시에서는 Get Camera Properties CPU/GPU를 클릭합니다. 이 메서드는 카메라 위치(Camera Position), 전방 벡터(Forward Vector), 업 벡터(Up Vector), 오른쪽 벡터(Right Vector)를 모두 월드 컨텍스트로 제공합니다. 이 데이터를 사용하여 카메라를 향하거나 카메라에서 멀어지는 오프셋을 적용할 수 있습니다.
Map Get에 INPUT.Float를 추가하고 알아보기 쉬운 이름(예: CameraOffsetScale)을 지정합니다.
Multiply 노드를 사용하여 전방 벡터 월드(Forward Vector World)에 새로운 INPUT.CameraOffsetScale float를 곱합니다.
Map Get 노드에 LOCAL.Offset을 추가합니다. Multiply 노드의 결과에 이 오프셋을 추가합니다.
이 새 섹션의 Map Set 노드에 LOCAL.Offset을 추가합니다. 그런 다음, Add 노드의 결과를 이 LOCAL.Offset 핀에 연결합니다.
데이터 인터페이스 사용하기
적용을 클릭한 다음, 시스템 개요 그래프를 엽니다. 오프셋 적용 스크래치 모듈 스택 항목을 선택합니다. 이제 디테일 패널에 카메라 오프셋 스케일(Camera Offset Scale) float 입력을 비롯하여 사용자를 위한 추가 옵션이 포함된 카메라 쿼리(Camera Query) 섹션이 추가되었습니다.
카메라 오프셋 스케일을 -200으로 변경하여 오프셋이 제대로 작동하는지 확인합니다.
필드 숨기기
모듈 작성자는 사용자가 변경할 필요가 없거나 변경하지 않기를 바라는 필드를 숨길 수 있습니다.
이 예시에서는 사용자가 플레이어 컨트롤러 인덱스(Player Controller Index) 또는 현재 프레임 데이터 필요(Require Current Frame Data) 필드는 편집할 필요가 없을 것으로 예상할 수 있습니다. 따라서 이러한 옵션은 숨겨도 됩니다.
오프셋 적용 스크래치 패드 모듈 그래프를 엽니다. 디테일 패널(또는 계층구조 편집 뷰)에서 고급 디스플레이(Advanced Display) 옵션을 활성화합니다. 이 옵션은 사용자가 고급(Advanced) 섹션을 펼칠 경우 이 입력을 표시할지 여부를 결정합니다.
시스템 개요 그래프에서 오프셋 적용 스택 항목을 선택합니다. 이제 디테일 패널에서 데이터 인터페이스 추가 정보가 고급 옵션 섹션 안으로 숨겨집니다. 패널의 고급 섹션을 열면 이 정보를 확인할 수 있습니다. 화살표 버튼을 클릭하면 이 섹션이 펼쳐지고 다시 클릭하면 접힙니다.
이러한 설정 방식은 고급 사용자(예: 분할 화면 게임 작업 중 카메라를 수동으로 설정하려는 경우)에게 설정을 변경하도록 허용하면서, 해당 설정을 변경할 필요가 없는 대부분의 사용자에게는 깔끔한 화면을 보여줍니다.
카메라 쿼리가 고급 섹션에 배치되도록 설정했더라도 계층구조 편집 인터페이스를 사용하여 디테일 패널에서 카메라 오프셋 스케일 입력을 사용할 수 있습니다.
스크래치 패드 모듈 그래프에서 파라미터 탭을 연 다음, 계층구조 편집 패널을 엽니다. 왼쪽 열에서 INPUT.CameraOffsetScale을 중앙 열로 드래그하여 순서를 재정렬합니다.
적용(Apply)을 클릭합니다. 시스템 개요 그래프에서 오프셋 적용 모듈 스택 항목을 선택합니다. 디테일 패널에서 카메라 오프셋 스케일 입력은 고급 패널을 접은 상태에서도 메인 입력 목록에 포함됩니다.
사용자 파라미터
사용자 파라미터를 사용하면 나이아가라 시스템이나 모듈 그래프를 자꾸 열어 편집하지 않고도 나이아가라 세팅을 변경할 수 있습니다. 나이아가라 시스템이 레벨에 추가되면 에셋의 디테일 패널에서 해당 사용자 파라미터를 사용할 수 있습니다. 그러면 사용자가 씬의 컨텍스트 내에서 직접 해당 파라미터를 조정할 수 있어 워크플로 속도가 빨라질 수 있습니다.
사용자 파라미터로 인한 비용이 있습니다. 사용자 파라미터를 조정할 때마다 그 파라미터는 해당 실행 컨텍스트로 푸시되고, 같은 컨텍스트 내의 모든 파라미터가 업데이트됩니다.
시스템 및 이미터 스폰
시스템 및 이미터 업데이트
파티클 스폰 및 파티클 업데이트(이미터별)
시뮬레이션 스테이지
데이터 인터페이스를 사용자 파라미터로 사용하는 것은 일반적으로 퍼포먼스 문제 때문에 권장하지 않습니다. 엔진은 인스턴스별로 데이터 인터페이스의 복사본을 만들며, 이는 UObject이기 때문에 가비지로 컬렉팅됩니다. 데이터 인터페이스의 주요 비용은 인스턴스를 생성할 때 발생합니다. 생성 후, 오버헤드는 스택의 다른 곳에 있을 때와 같습니다.
모듈 입력으로 승격
모듈 입력은 사용자 파라미터로 승격될 수 있습니다. 모듈 입력을 승격하는 단계는 다음과 같습니다.
시스템 개요 그래프의 Minimal 이미터에서 오프셋 적용 스택 항목을 선택합니다.
카메라 오프셋 스케일 입력 옆의 다이내믹 입력(Dynamic Input) 드롭다운을 클릭합니다.
새 사용자 파라미터에서 Read를 검색하고 클릭합니다.
디테일 패널 필드와 같은 이름과 값으로 새 사용자 파라미터가 생성됩니다. 이 파라미터의 표시명은 USER Camera Offset Scale입니다. 코드나 블루프린트에서 이 파라미터나 다른 사용자 파라미터에 액세스하려면, USER.CameraOffsetScale 또는 User.CameraOffsetScale 포맷으로 지정해야 합니다.
사용자 파라미터 편집하기
파라미터 탭에 사용자 파라미터가 표시되기는 하지만, 해당 인터페이스에서 직접 편집할 수는 없습니다. 사용자 파라미터 탭에 값을 편집할 수 있는 필드가 있습니다. 이 튜토리얼에서는 USER Camera Offset Scale을 다시 0으로 변경합니다.
사용자 파라미터 사용하기
레벨을 열고 나이아가라 시스템(이 예시에서는 NS_Minimal)을 씬으로 드래그합니다. 아웃라이너(Outliner)에서 나이아가라 시스템을 선택합니다. 디테일(Details) 패널에서 사용자 파라미터 섹션을 펼칩니다. 그 목록에는 카메라 오프셋 스케일(Camera Offset Scale) 사용자 파라미터가 포함되어 있습니다. 즉, 사용자는 나이아가라 뷰포트가 아닌 월드의 컨텍스트에서 이러한 파라미터를 인터랙티브 방식으로 설정할 수 있습니다.
스태틱 스위치
스태틱 스위치는 스크립트의 흐름을 제어합니다. 특정 상황을 제외하고는, 그래프의 특정 부분을 모듈에서 컴파일하지 않으려 할 때 유용합니다.
스태틱 스위치 구현하기
이 예시에서는 USER.CameraOffsetScale 파라미터를 위한 스위치를 만듭니다. 이 스위치는 최종 사용자가 거의 사용하지 않을 것이므로, 대부분의 경우 이미터에서 코드를 사용할 필요가 없습니다.
오프셋 적용 스크래치 모듈 그래프를 열고 USER.CameraOffsetScale이 있는 섹션으로 이동합니다.
이 섹션에서 우클릭하고 Static Switch 노드를 생성합니다.
Static Switch 노드의 이름을 알아보기 쉬운 이름(예: Use Camera Offset)으로 변경합니다.
Static Switch에는 타입이 필요하며, 대체로 숫자이지만 항상 그런 것은 아닙니다. 추가(+) 핀을 클릭하여 타입을 추가한 다음, 이 예시를 위해 나이아가라 파라미터 맵(Niagara Parameter Map) 타입을 검색하여 선택합니다.
Camera Offset 섹션의 Map Set 출력을 Static Switch 노드로 드래그한 다음, Static Switch 출력을 Set Position 섹션의 Map Get과 Map Set 양쪽에 드래그합니다.
Ctrl+클릭을 사용하여 연결선을 선택하고 선을 다른 핀으로 이동합니다.
그런 다음, Transform Into Space 섹션의 Map Set를 Static Switch 노드의 False 핀에 연결합니다.
Static Switch가 false이면 Camera Offset 섹션을 건너뛰고(컴파일 안 함), Transform Into Space 섹션에서 바로 스위치와 다음 Set Position 섹션으로 이동합니다. true이면 Camera Offset 노드가 사용됩니다.
Static Switch 세팅
기본적으로 스태틱 스위치 타입(Static switch type)은 부울입니다. 다른 옵션도 있지만, 이 예시에서는 기본값인 부울을 사용합니다. 디폴트 값(Default Value)은 true 또는 false로 설정할 수 있지만, 이 예시에서는 false로 설정합니다. 이 튜토리얼에서는 핀으로 노출(Expose as pin)도 false로 남겨둘 수 있습니다. 핀으로 노출을 true로 설정하면 그래프의 노드에 해당 세팅의 핀이 노출되며, 그래프의 데이터를 사용하여 해당 값을 설정할 수 있게 됩니다.
Static Switch 사용하기
시스템 개요 그래프를 열고 오프셋 적용 스크래치 모듈 스택 항목을 선택합니다. 이제 디테일 패널에 카메라 오프셋 사용(Use Camera Offset) 옵션이 추가됩니다. false로 설정하면 다른 카메라 오프셋 옵션이 목록에 나타나지 않으며 건너뛴 노드는 이미터에 영향을 미치지 않습니다. 카메라 데이터 인터페이스(Camera Data Interface) 정보도 고급 옵션 섹션에서 제거되었습니다.
true로 설정하면 Camera Offset 노드가 컴파일되고 디테일 패널에서 고급 섹션 안팎으로 관련 옵션을 모두 사용할 수 있습니다.
스크래치 모듈 공유하기
스크래치 모듈을 다른 나이아가라 시스템이나 다른 팀원들과 공유하려면 스크래치 모듈을 나이아가라 모듈 스크립트 에셋으로 익스포트해야 합니다.
오프셋 적용(Apply Offset) 그래프를 열고 로컬 모듈(Local Modules) 탭을 클릭합니다. 나열된 모듈의 이름을 우클릭한 다음 에셋 생성(Create Asset)을 클릭합니다.
그러면 스크립트를 다음과 같이 생성(Create Script As) 창이 열립니다. 모듈의 이름을 지정하고(예: NMS_ApplyOffset), 이 에셋을 배치할 폴더를 선택합니다. 그런 다음, 저장(Save)을 클릭합니다.
에셋이 생성되면 콘텐츠 브라우저에서 액세스할 수 있습니다.
그러면 엔진이 자동으로 새 나이아가라 모듈 스크립트 에셋을 엽니다.
라이브러리 노출
나이아가라 모듈 스크립트 에셋에서 가장 먼저 변경해야 할 부분은 스크립트 디테일(Script Details) 패널의 라이브러리 비저빌리티(Library Visibility) 플래그입니다.
기본적으로 노출 해제(Unexposed)로 설정되어 있는데, 이는 라이브러리 전용(Library Only) 옵션이 활성화된 상태(기본값)에서는 메뉴와 검색에 나타나지 않는다는 뜻입니다.
이를 시연하기 위해 나이아가라 시스템을 열고 추가(+) 버튼을 사용하여 ApplyOffset을 검색해 봅니다. 검색 결과를 보면 방금 생성한 NMS 에셋(게임으로 표시됨)이 아닌 스크래치 패드만 나타납니다.
이를 처리하는 방법은 두 가지가 있는데, 나이아가라 모듈 스크립트 에셋을 얼마나 검색 가능하게 하고자 하는지에 따라 달라집니다.
노출 해제됨, 라이브러리 전용 끔
한 가지 옵션은 모듈을 노출 해제로 설정하고 워크스테이션에서 라이브러리 전용 필터 옵션을 false로 설정하는 것입니다. 이는 디폴트 필터 세팅으로 사용자가 해당 모듈에 쉽게 액세스할 수 없게 하거나 사용자가 액세스할 필요가 없는 경우에 좋을 수 있습니다. 이 모듈을 사용할 사람이라면 새 모듈 추가 창에서 라이브러리 전용 옵션의 체크를 해제해야 한다는 사실을 알고 있어야 합니다.
노출됨, 라이브러리 전용 켬
다른 옵션은 나이아가라 모듈 스크립트 에셋의 라이브러리 비저빌리티를 노출(Exposed)로 변경하는 것입니다. 이렇게 하면 디폴트 필터링 옵션(라이브러리 전용이 true로 설정)이 적용된 상태에서도 새 모듈 추가 메뉴에 표시되므로 모듈을 훨씬 더 쉽게 검색할 수 있습니다. 팀이나 다른 최종 사용자가 쉽게 액세스할 수 있도록 하려는 모듈에 적합합니다.
나이아가라 모듈 스크립트 에셋을 열고 라이브러리 표시 유형을 노출로 변경한 다음, 컴파일(Compile) 및 저장(Save)을 클릭합니다.
이 기능을 실제로 확인하려면 원하는 나이아가라 시스템을 열고 추가(+) 버튼을 클릭하여 오프셋 적용(Apply Offset)을 검색합니다. 이전과 달리 라이브러리 전용 옵션이 true로 설정된 상태에서도 나이아가라 모듈 스크립트 에셋(Game으로 라벨링됨)이 검색 결과에 포함됩니다.
모듈 사용 비트마스크
새 나이아가라 모듈 스크립트 에셋의 모듈 사용 비트마스크(Module Usage Bitmask)를 체크하여 비저빌리티 세팅이 의도한 모듈 기능에 적합한지 확인합니다.
설명 필드
나이아가라 모듈 스크립트의 설명 필드에 있는 텍스트는 새 모듈 추가 메뉴에서 모듈 위로 마우스를 올리면 표시되는 툴팁에 포함됩니다. 사용자가 이 모듈을 사용할지 여부를 결정하는 데 도움이 되는 모든 정보를 여기에 포함합니다. 예를 들어, 이 모듈의 용도가 무엇이고, 이 모듈을 사용하기에 적합한 상황은 무엇이며, 사용자의 창작 목표나 기술적 목표와 관련이 있을 수 있는 다른 요소는 무엇인지 설명합니다.
참고 메시지
스크래치 모듈에서 나이아가라 스크립트 모듈을 생성한 경우, 스크래치 모듈에 포함된 텍스트가 자동으로 노트(Note) 필드에 채워집니다. 스크래치 모듈에 노트 텍스트가 포함되지 않은 경우, 이 부분은 비어 있습니다. 이 메시지는 이미터 내에서 해당 모듈의 스택 항목을 선택했을 때 디테일 패널 상단에 표시됩니다.
키워드
키워드(Keywords)는 메뉴 검색 시 나이아가라 모듈 스크립트를 더 쉽게 찾을 수 있도록 도와줍니다. 키워드는 공백으로 구분해야 합니다. 오프셋 적용 나이아가라 모듈 스크립트의 키워드(Keywords) 필드에 'offset position camera'를 포함할 수 있습니다. 그러면 최종 사용자가 'camera offset'을 검색했을 때 메뉴에 오프셋 적용이 옵션으로 팝업됩니다.
결론
스크래치 패드 모듈을 사용하면 비주얼 스크립팅을 통해 이미터와 나이아가라 시스템에 새로운 기능을 직접 추가할 수 있습니다.
나이아가라 사용에 대한 자세한 내용은 비주얼 이펙트 생성 및 나이아가라 스크립트 에디터 레퍼런스를 참조하세요.