2015년 10월 13일 화요일

Unreal Engine 4 : 컴포넌트의 속 사정

당연한 이야기지만, 컴포넌트는 정의 되어 있다고 바로 월드에서

이벤트를 받고 작동하는건 아니다.

컴포넌트가 등록이 되는 경우랑 해지가 되는 경우에 어떠한 일이 일어나는지
조금 더 자세히 정리를 해보았다.


[Register]

ActorComponent::RegisterComponent 는 액터 컴포넌트에 대한
렌더 프록시와 피직스 스테이트를 생성한다.

액터가 스폰이 될때 액터 네에 기본 프로퍼티 내에 컴포넌트가 등록이 되어 있다면
자동으로 등록이 된다.

RegisterComponent 를 직접 호출 할 수도 있지만, 오버헤드가 있는 작업이라
꼭 필요할 때만 해야 한다. (여러번 만드는것들은 캐싱해서 사용 하는게 좋을듯)

<ActorComponent::RegisterComponent 플로우>

0. 이것저것 자잘한 체크 (이미 등록 되었나, 월드는 null 인가 etc..)

1. OnRegister(), CreateRenderState(), CreatePhysicsState(), 호출을 위한 ExecuteRegisterEvents() 콜
이 단계에서 OnRegister 이벤트의 경우, 각 컴포넌트마다 상황이 다르겠지만
SceneComponent 의 경우 AttachTo 가 실행이 되는데 이것저것 하는게 많음.

2. Tick 이벤트를 받기위한 RegisterAllComponentTickFunction 콜

3. Initialize 가 안되어 있다면 InitializeComponent() 콜

4. 블루 프린트에 의해 컴포넌트가 생성이 되는 경우, 자식 컴포넌트가 있는 경우라면
자식들 또한 RegisterComponentWithWorld 를 콜


[Unegister]

ActorComponent::UnregisterComponent 는 업데이트, 시뮬레이션, 렌더링을
중지 할 수 있음

<ActorComponent::UnregisterComponent 플로우>

0. 이것저것 자잘한 체크 (이미 등록 되었나, 월드는 null 인가 etc..)

1. 현재 컴포넌트가 UPrimitiveComponent 이라면 IStreamingManager 에 PrimitiveDetached 한다고 알림

2. Tick 이벤트 해제를 위한 RegisterAllComponentTickFunction 을 호출

3. OnUnRegister(), DestroyRenderState(), DestroyPhysicsState() 호출을 위한
ExecuteUnregisterEvents() 호출



<레퍼런스>
https://docs.unrealengine.com/latest/KOR/Programming/UnrealArchitecture/Actors/Components/index.html

Unreal Engine 4 FVector operator

FVector 에 관련된 코드를 보다 보니 ^ 연산자랑 | 연산자를 발견.

무엇인가 싶었는데 ^ 는 외적 연산, | 는 내적 연산 이더라.

FVector::CrossProduct 도 내부적으론 ^ 를 사용하며,

FVector::DotProduct 또한 내부적으로 | 를 사용하여 처리 함.

아래 코드는 FVector 의 operator 관련 코드를 발췌한 부분.

Unreal Engine 4 주요 액터

[메시 & 제오메트리 액터 유형]
StaticMeshActor
씬에 메시를 표시하는 단순한 액터

Brush
= 씬에 단순한 3D 지오메트를 표현하는건 StaticMeshActor 랑 같으나 편집이 가능함.
   보통은 프로토타이핑에 많이 사용.


SkeketalMeshActor
= 애니메이션이 가능한 스켈레탈 메시를 표현하는 액터. (스키닝이 있는거)

[게임 플레이 액터 유형]
PlayerStart
= 게임 시작시 플레이어 시작 위치를 지정하기 위해 레벨에 배치하는 액터

Trigger
= 레벨의 다른 오브젝트와 상호 작용이 일어났을 때 이벤트가 발생되도록 하는데 사용하는 액터
   BoxTrigger, CapsuleTrigger, SphereTrigger 등이 있음

MatineeActor
= 마티네 애니메이션 툴을 통해 액터의 프로퍼티를 시간에 따라 변화 가능.

[라이트 액터 유형]
PointLight
= 한 점으로 부터 일정 거리로 내뿜는 광원. 이동이 가능하지만 느림.

Spotlight
= 한 지점에서 원뿔 모양으로 내뿜는 광원

DirectionalLight
= 무한히 먼 거리에 있는 광원에서 오는 빛을 흉내 (태양)

[이펙트 액터 유형]
ParticleEmitter
= 스프라이트 또는 메시 형태 파티클을 스폰해 이펙트를 만드는데 사용되는 액터

[사운드]
AmbientSound
= 월드에서 사운드 큐 형태로 소리를 재생하는데 사용.

<레퍼런스>
https://docs.unrealengine.com/latest/KOR/Engine/Actors/Types/index.html
https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/GameFramework/AActor/AActorHierarchy/index.html

Unreal Engine 4 주요 컴포넌트

[Common]
Audio(UAudioComponent)
= 사운드 플레이에 사용

SkeletalMesh(USkeletalMeshComponent)
= 애니메이션 SkeletalMesh 에셋을 만듬

StaticMesh(UStaticMeshComponent)
= UStaticMesh 를 생성. static mesh 는 폴리곤으로 구성된 지형 정보 조각.

[AI]
AIPerception(UAIPerceptionComponent)
AIPerceptionSystem  에 stimuli listener 등록 및 등록된 stimuli 를 수집.

PawnNoiseEmitter(UPawnNoiseEmitterComponent)
= Pawn을 듣고 SensingComponents에서 사용하는 노이즈 이벤트 데이터를 추적. 이 구성 요소는 Pawn또는 Controller 중 하나에 존재하기 위한 것이며, 네트워크 클라이언트에 아무것도하지 않음.

PawnSensing(UPawnSensingComponent)
= 감각 설정을 캡슐화 (시각 이나 듣기) 그리고 월드안에 있는 pawns들을 보거나 듣도록 허락해줍니다. 네트워크 클라이언트에서는 아무것도 하지 않음.

[Camera]
Camera(UCameraComponent)
= 카메라 시점 및 셋팅을 나타내며, 프로젝션 타입, field of view, 그리고 포스트 프로세싱을 오버라이드 함. 카메라 뷰의 대상으로 사용되는 actor 의 기본 동작은 연결된 카메라 구성 요소의 모양과 위치, 회전 및 설정을 사용.

SpringArm(USpringArmComponent)
= 이 컴포넌트는 부모로부터 고정 된 거리에서 자식를 유지 하려고 하지만 충돌이있는 경우 자식를 수축하며, 충돌이 없는 경우 수축은 복구 됨.(주 : 댐핑 같은 느낌?)

[Experimental]
Widget(UWidgetComponent)
= 주의! 이 기능은 실험이고 실질적으로 향후 릴리스에서 변경 또는 제거 할 수 있음. 월드와 상호 작용 할 수있는 위젯 블루프린트의 3D 인스턴스.

[Light]
DirectionalLight(UDirectionalLightComponent)
= 평행 광선 라이트 컴포넌트. 영향을 받는 표면에 균일하게 조명을 제공 (예 : 태양). 정의된 light-mass 볼륨에 있는 모든 개체에 영향을 미침.

PointLight(UPointLightComponent)
= 모든 방향으로 동등하게 한 점으로 부터 light 를 방출함.

SkyLight(USkyLightComponent)
= 레벨에서 정의된 스카이 박스나 큐브맵을 기반으로 설정하는 라이팅?
(주: 자세한 설명은 여기 로)

SpotLight(USpotLightComponent)
= 콘 모양의 방향성 있는 라이트

[Movement]
ProjectileMovement(UProjectileMovementComponent)
= tick 동안 다른 컴포넌트의 위치를 업데이트

RotatingMovement(URotatingMovementComponent)
= 특정 회전 속도 성분의 연속적인 회전 수행. 피봇 점을 중심으로 오프셋 하여 회전 가능. 이동 중 에는 충돌 테스트는 수행 되지 않음.

PawnMovement(UPawnMovementComponent)
= Pawn 과 함께 사용하기 위한 이동 컴포넌트

[Navitagion]
NavModifier(UNavModifierComponent)
= 길찾기에 사용되는 컴포넌트. 해당 지역의 이동에 대한 비용 설정 가능.
(주: 자세한 설명은 여기 로)

[Paper2D]
PaperFlipbook(UPaperFlipbookComponent)
= 스프라이트 프레임 시퀀스를 애니메이션.

PaperSprite(UPaperSpriteComponent)
= 하나의 UPapaerSprite 에셋 인스턴스를 충돌 및 렌더링 하기 위한 기능

PaperTileMapRender
= 하나의 UPapaerTileMap 에셋 인스턴스를 충돌 및 렌더링 하기 위한 기능

[Physics]
Destructible(UDestructibleComponent)
= 파괴 가능한 Actor 를 위한 물리 데이터가 있는 컴포넌트

PhsyicsConstraint(UPhsyicsConstraintComponent)
= 두개의 리지드 바디를 연결 해주는걸 가능하게 해주는 컴포넌트.

PhysicsHandle(UPhysicsHandleComponent)
= 물리적 이동을 위한 기능

PhysicsThruster(UPhysicsThrusterComponent)
= 음의 X 방향, 즉 힘을 적용하는 물리력을 가진 객체로 사용.

RadialForce
= 일정 범위에 힘을 주거나 물리 오브젝트 또는 파괴되는 오브젝트에 충격을 줌.

[Rendering]
AtmosphericFog(UAtmoshericFogComponent)
= 구름 효과의 안개를 생성

Billboard(UBillboardComponent)
= 2d 텍스쳐가 항상 카메라를 바라보도록 렌더링.

Cable(UCableComponent)
= 케이블 생성 할수 있는 컴포넌트. 총 길이, 마디 별 길이 지정이 가능.

CustomMesh(UCustomMeshComponent)
= 사용자 정의 삼각 메시 형태를 지정할 수 있음.

Decal(UDecalComponent)
= 메시 표면에 렌더링 되는 메테리얼. 보통 스티커 같은거에 사용
(주 : 또는 탄환 자국?)

ExponentialHeightFog(UExponentialHeightFogComponent)
= 안개의 높이 밀도와 관련된 흐림 효과를 만드는데 사용

InstancedStaticMesh(UInstancedStaticMeshComponent)
= 같은 StaticMesh 의 여러 인스턴스를 그리는데 사용

MaterialBillboard(UMaterialBillboardComponent)
=  2d 메테리얼이 항상 카메라를 바라보도록 렌더링.

ParticleSystem(UParticleSystemComponent)
= 파티클 이미터

PoseableMesh(UPoseableMeshComponent)
= 블루프린트에 의해 본이 변환되도록 구동

PostProcess(UPostProcessComponent)
= 블루프린트에 포스트 프로세스 컨트롤을 가능하게 함. 가능한 경우 볼륨 데이터를 제공하기 위해 상위 UShapeComponent 를 사용할 것임.

SceneCapture2D(USceneCapture2DComponent)
= 매 프레임마다 씬의 이미지를 생성
(주: 자세한 설명은 여기 로)

SceneCaptureCube(USceneCaptureCubeComponent)
= 매 프레임마다 씬의 큐브맵을 생성
(주: 자세한 설명은 여기 로)

SplineMesh(USplineMeshCompoent)
= 스플라인을 사용하여 변형 할 수 있는 정적 메시 구성 요소를 도출

TextRender(UTextRenderComponent)
= 월드에 폰트를 렌더링 하기 위한 기능. 스케일, 정렬, 컬러 등을 기능 제공.

VectorField(UVectorFieldComponent)
파티클의 운동에 영향을 끼치는 벡터의 균일 그리드
(주: 자세한 설명은 여기 로)

[Shapes]
Arrow(UArrowComponent)
= 라인을 이용한 간단한 화살표를 그림

Box(UBoxComponent)
= 라인을 이용한 간단한 박스를 그림

Capsule(UCapsuleComponent)
= 라인을 이용한 간단한 캡슐을 그림

Sphere(USphereComponent)
= 라인을 이용한 간단한 구체를 그림

Spline(USplineComponent)
= 라인을 이용한 간단한 선을 그림

[Utility]
ApplicationLifeCycle(UApplicationLifeCycleComponent)
= OS 어플리케이션 상태에 관련된 정보를 받아오는 기능 (활성화, 대기, 종료 등등)

ChildActor(UChildActorComponent)
= 액터가 등록이 되면 스폰 되며, 삭제 되면 등록이 해지 됨.

Scene(USceneComponent)
= 변형과 어태치를 가능하게 해주나, 렌더링이나 컬리전 처리는 불가능 함. '더미' 구성 요소로 유용.


<레퍼런스>
https://docs.unrealengine.com/latest/KOR/Engine/Components/index.html

https://docs.unrealengine.com/latest/INT/API/Runtime/Engine/Components/UActorComponent/UActorComponentHierarchy/index.html

2015년 10월 12일 월요일

당신이 몰랏던 Unreal Engine 4 로 할 수 있는 10가지 팁

Unreal Engine 커뮤니티 멤버들의 가장 유용한 기능 중 일부 기술들을 공유한 내용 입니다.
1. Unreal Engine 4 에는, 당신은 여러 에셋 썸네일의 컬러 코드를 알 수 있습니다: 애니메이션은 밝은 녹색, 스켈레탈 메시는 밝은 핑크, 맵은 밝은 오렌지 색, 등등. 당신은 콘텐츠 브라우저에 한 단계 더 색상을 칠 할 수 있습니다. 예로, 당신의 'Blueprints' 폴더에 오른쪽 클릭을 하여, 파란 색으로 색상을 선택 할 수 있습니다.Gavin Milroy, Unreal Engine Community
2. 당신은 단지 몇번의 클릭 만으로 static mesh 를 destructible mesh (파괴되는 메시) 로 만들 수 있습니다. 에디터 내에서 static mesh 를 destructible mesh 로 변환 하고, 깨지는 셋팅 수정 과  쉽고 빠르게 메시를 분열 할 수 있습니다.당신은 파괴되는 조각에 다른 메테리얼을 적용 할 수 있으며 메시가 조각 나는 타이밍에 폭팔 파티클 효과와 사운드를 넣을 수 있습니다.Cam Mason, Unreal Engine Community
3. 네트워크 복제를 테스트하는 경우, 여분의 컴퓨터의 무리 할 필요없이 로컬에서 작업하는 것이 유용 할 수 있습니다. 편집기 (PIE) 함수에서 플레이를 시작하는 게임 인스턴스의 수를 선택하고 선택적으로도 이런 이유로 정확하게 전용 서버를 실행할 수있는 기능을 제공합니다.
Kyle Rocha, Unreal Engine Community

4. Unreal Engine 4 는 2D가 가능합니다. 당신은 콘텐츠 브라우저 내에서 정적 및 애니메이션 스프라이트를 생성하고 설정하고 개별 스프라이트 Asset 을 편집 할 Paper2D 스프라이트 편집기를 사용할 수 있습니다. Flipbook Editor 로 Flipbook asset 을 제작에 사용 할 경우, 스프라이트 플레이 시퀀스를 편집, 스프라이트 표시 시간을 조정, 초당 프레임 옵션을 통해 애니메이션 속도를 결정 할 수 있습니다. forums.unrealengine.com 의 쓰레드에 “Getting Started with Paper2D” 를 참고 하세요 .Dana Cowley, Epic Games
5. 여러 블루프린트 객체 사이의 상호 작용이 많이 있을 때, 블루 프린트와 블루프린트 간의 흐름을 시각화 하기 어려울 수 있습니다. 윈도우를 클릭하고 개발자 툴에서 블루프린트 디버거에는 블루프린트 실행에 대한 전체 콜 스택을 대화형 뷰로 볼 수 있습니다.Kyle Rocha, Unreal Engine Community
6. 엔진과 몇몇 플러그인은 모델, 텍스쳐, 아이콘과 메테리얼들을 디버깅 하거나 빠르게 뭔가를 실행 하는데 유용 할 수 있습니다. 기본적으로이 콘텐츠는 숨겨져 있지만 콘텐츠 브라우저의보기 옵션에 표시 할 수 있습니다.
Kyle Rocha, Unreal Engine Community

7. You can copy-paste node networks, like Blueprints and materials, and share them using text files or Pastebin. 당신은 노드 네트워크나 좋아하는 블루프린트와 메테리얼 등을 text 파일이나 Pastebin 으로 복사 붙여넣기 하거나 공유 할 수 있습니다. 그래프에서 노드를 선택하고 복사하려면 Ctrl+C 를 누릅니다. 그런 다음 텍스트 에디터나 Pastebin 헤드에 가서 Ctrl+V 하여 붙입니다.Tom Shannon, Unreal Engine Community
8. 당신은 움직이는 skylight 와 atmospheric fog (대기 안개) 의 흐린 날씨에서도 균일한 라이팅을 달성 할 수 있습니다. 이렇게 함으로써,  어떠한 조명을 만들거나 다른 효과의 광원을 사용할 필요가 없습니다. ambient occlusion 필드 거리 덕분에, 반쯤 닫힌 인테리어 에서도 아름답게 작동 합니다. Mehmet Güven, Unreal Engine Community
9. 콘텐츠 브라우저에서 많은 asset 을 제작 할 때, 폴더의 하위 폴더 내 이동에 의해 분실하거나 좌절하기 쉽습니다. 만약에 당신이 앞 뒤로 이것을 이동한다면, 컬렉션에서 발견 할수 있습니다. 이들은 당신이 가장 일반적으로 사용되는 asset 을 저장하고 진정으로 당신의 워크 플로우에 도움이 될 수 있습니다. 콘텐츠 브라우저를 향해 보면 콘텐츠 폴더 아래에 당신은 작은 '+' 아이콘을 볼 수 있습니다. 클릭 하면, 새 로컬 모음을 생성하고 현재 작업중인 asset 을 드래그 드롭 합니다.Note: 4.7을 사용하는 경우, 쇼 컬렉션 옵션이 Content Browser 의 보기 옵션에 체크되어 있는지 확인합니다.Gavin Milroy, Unreal Engine Community
10. 당신은 이제 Marketplace 컨텐츠를 평가하고 검색하는걸 웹에서 할 수 있습니다. unrealengine.com/marketplace 을 클릭하세요.
Jon Jones, Epic Games


[출처 & 원문]
http://www.develop-online.net/tools-and-tech/top-tips-10-things-you-didn-t-know-you-can-do-with-unreal-engine-4/0205913