전체글 48

FABRIK

FABRIK(Forward And Backward Reaching Inverse Kinematics) IK(Inverse Kinematics, 역운동학)은 FK(Foward Kinematics, 순운동학)의 반대되는 개념이다. 예를 들어 팔 관절을 이용해 타겟에 손을 뻗는 것이 순운동학, 손을 타겟에 먼저 위치시키고, 팔 관절들을 그에 맞게 조절하는 것을 역운동학이라고 볼 수 있다. 무기마다 제 각기 크기가 있으니 총을 잡는 손의 위치를 다르게 만들 것이다. 애니메이션 에셋의 스켈레탈 메시를 일일이 수정한 후 Key를 추가하는 방법도 있지만 힘들 뿐더러 캐릭터를 회전시키거나 움직임이 있을 때 해당 Bone의 위치가 고정되지 않고 계속 움직이게 된다. 그럴 때 FABRIK 노드를 사용하면 Bone의 Tra..

Unreal Engine 2023.07.28

재장전 애니메이션

재장전을 할 때 탄창을 쥐고 주머니에서 교체하는 듯한 애니메이션을 만들고 싶다. 그러기 위해 쥐는 시점에 탄창의 위치가 손의 위치로 변하고 새 탄창을 끼워넣으면 탄창의 위치는 다시 총에 부착되면 된다. 크게 두 가지가 필요하다. 1. 손의 위치(Transform) 2. 떼어낼 Actor(무기)의 Bone(탄창) 먼저 애니메이션 몽타주를 생성하고 구간을 정해줬다. 손의 위치는 GetWorldTransform으로 구해준다. GrabClip 노티파이가 호출된 시점에서 탄창의 Transform을 왼손의 Transform에 Attach한다. https://docs.unrealengine.com/5.2/en-US/API/Runtime/Engine/Engine/FAttachmentTransformRules/ FAtt..

Unreal Engine 2023.07.21

프레넬 효과

https://dandydot.tistory.com/39 조명(Lighting) Lighting 조명은 기본적으로 아래 세 가지 요소로 이루어진다. Ambient Diffuse Specular 그리고 이 조명을 적용하는 셰이더 방식은 두 가지가 있다. Forward Lighting: 메쉬마다 조명 적용. Deffered Lighting: MRT에 dandydot.tistory.com DirectX 조명에서 다뤘던 프레넬 효과를 언리얼에서 적용해보려 한다. 간단히 요약하면 인데.. 언리얼은 아예 Fresnel 노드가 있다! 값만 채워주면 된다.

Unreal Engine 2023.07.13

외곽선 하이라이트

Post Process Volume을 Level에 배치하고 해당 레벨에서 사용할 Material 을 Array에 추가한다. PP_Highlight는 외곽선을 표시할 Material이다. 그 다음 무기나 캐릭터 등 외곽선을 표시하고 싶은 오브젝트의 Rendering - Render CustomDepth Pass를 체크해주면 해당 액터는 PP_Highlight 효과를 받을 수 있다. PP_Highlight 나는 아이템이 캐릭터의 Aim LineTrace에 충돌했을 때 외곽선 효과를 넣을 것이다. 그러기 위한 외곽선 효과 Material을 만들어주면 된다. Material 선택 후 PP_Higlight 로 작명해준다. 그리고 픽셀에서 외곽과 내부를 구분하는 노드들을 연결해주면 된다. 경계 텍셀(Border T..

Unreal Engine 2023.07.13

총 쏘기

좌클릭을 누르면 총을 쏘는 함수 FireWeapon()을 호출한다. 이 함수에서는 총 소리, 발사 이펙트, 충돌을 처리한다. 총 소리 우선 사운드 큐를 만들어 비슷한 총 소리를 랜덤하게 재생시킨다. // FireWeapon() UGameplayStatics::PlaySound2D(this, FireSound); 발사 이펙트 총구에 소켓을 하나 만들어 해당 소켓의 Transform에서 파티클을 터뜨려준다. // FireWeapon() const USkeletalMeshSocket* BarrelSocket = GetMesh()->GetSocketByName("BarrelSocket"); if(MuzzleFlash) { UGameplayStatics::SpawnEmitterAtLocation(GetWorld(..

Unreal Engine 2023.07.06

카메라 회전(+ 캐릭터 이동 수정)

Frame: 모니터에 출력되는 이미지. DeltaTime: 프레임 한개를 넘기는 데 걸리는 수행시간(1초에 60개의 프레임을 넘긴다면 DeltaTime은 1/60초가 된다). Frame Rate(FPS): 1초에 넘겨지는 프레임 수(1초에 모니터가 깜빡대는 수. 프레임이 높을 수록 부드럽게 보인다). Tick: 보통은 한 프레임에 한 번 코드 조각이나 블루프린트를 실행시키는 것을 의미한다. 화면 회전 만약 1초에 90˚ 회전한다고 가정하면 1Tick에는 90˚ / DeltaTime 만큼 회전해야 할 것이다. 만약 매 틱마다 90˚ 회전한다고 하면 1초 60프레임인 게임에서 5400˚(15바퀴)를 회전하게 되니 주의해야 된다. Rate: 회전 입력 값 BaseTurnRate: 회전 감도 GetWorld()..

Unreal Engine 2023.07.06

캐릭터 이동

컨트롤러는 Pawn 클래스에서 가지고 있다. 언리얼 에디터 프로젝트 세팅에서 WASD를 바인딩 해준 후 설정한 키(or 마우스)의 입력이 발생했을때 실행할 함수를 지정해주는 코드이다. // Called to bind functionality to input void ACharacterBase::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); PlayerInputComponent->BindAxis("MoveForward", this, &ACharacterBase::MoveForward); PlayerInputComponent->BindA..

Unreal Engine 2023.07.06

카메라 세팅

버전: 4.26.2 프로젝트 생성 Games -> Blank -> C++, Maximum Quility, Raytacing Enable, Desktop/Console, No Starter Content 프로젝트를 생성하면 컨텐츠 브라우저에 위와 같이 GameModeBase 하나가 생긴다. 게임모드는 게임의 전반적인 형식과 룰을 담는 클래스다. 캐릭터를 따라다니는 카메라 // CharacterBase.h private: /** 캐릭터와 카메라 사이에 배치할 SpringArm */ UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = "Camera") USpringArmComponent* SpringArm; /** 캐릭터를 따라다니는 카메라 */ UPROPER..

Unreal Engine 2023.07.06

0. UE4 시작

언리얼은 기본적으로 상속된 클래스들을 다룬다. Unreal 계층 구조 리플렉션(Reflection) 리플렉션(Reflection)은 프로그램이 실행시간에 자기 자신을 조사하는 기능이다. C++에는 리플렉션을 지원하지 않아 언리얼에서 자체적으로 C++클래스, 구조체, 함수, 변수 등 관련 정보를 수집, 질의, 조작하는 별도의 시스템이 구축되어 있다. 이러한 리플렉션은 '프로퍼티 시스템'이라고 부른다. UENUM() UCLASS() USTRUCT() UFUNCTION() UPROPERTY() UInterface() https://www.unrealengine.com/ko/blog/unreal-property-system-reflection 언리얼 프로퍼티 시스템 (리플렉션) 리플렉션(Reflection)은 ..

Unreal Engine 2023.07.06