전체 글 403

[UE4] IK 기본 개념 (Bone 행렬, 애니메이션 행렬, 루트 모션, IK 개념/종류)

2023.02.10 - [🎮Unreal4/BluePrint] - [UE4] IK란?(Inverse Kinematic), Bone 구조, Two Bone IK 솔버(IK+FK), 애니메이션 공간(Mesh/Local/Component) 해당 게시글은 위 게시글에서 Bone들의 Transform 값이 도출되는 원리에 대해 좀 더 부가적인 설명을 정리해둔 글이다. ✔️ Bone 행렬 (월드행렬, 지역행렬) A ㄴ B (월드행렬) A라는 본(Bone)과, B라는 본이 있을 때 A는 부모 본이고, B가 자식 본이다. 이때 B의 월드행렬을 구하고 싶다면 B의 지역행렬 x A의 월드행렬을 연산하면 된다. B(지역) x A(월드) = B(월드) 여기서 x (곱하기)는 산술 곱하기가 아니라, 행렬곱을 수행하는 것이다. 행..

🎮Unreal4/Basic 2023.06.27

[UE4] Parkour System -4 : Short, Normal, Wall Obstacle, Slide

Parkour 종류 중 짧은 장애물(Short), 보통 크기의 장애물(Normal), 벽 장애물(Wall)을 넘을 수 있는 통합된 기능, ObstacleMode를 구현해보았다. 🕺🏻 Short, Normal, Wall Parkour 구현하기 Check_ObstacleMode 함수는 Parkour 종류 별 ParkourData를 불러와서, Parkour 가능한 최소/최대 거리와 넓이를 판별하는 과정을 구현했다. 💡 직접참조/간접참조 이때 TArray 데이터에 접근하는 방법으로 평소와 다른 직접참조 연산자를 사용해보았다. 직접참조와 간접참조의 차이점은 자기자신이 직접 소유하고 있는지, 아닌지로 구분한다. 포인터(*)를 사용하면 주소를 가르킬 뿐만 아니라 해당 주소에 있는 공간에 접근하는 것이므로, (*dat..

🎮Unreal4/C++ 2023.06.27

[DX] Animator 작업 : Create Texture (Texture2D)

Texture의 Format은 일반적으로 R,G,B,A (각각 1비트, 총 4바이트 = R8G8B8A8)를 사용한다. DX11부터는 R32G32B32A21 - Float 자료형을 사용할 수 있다. 각각 RGBA 값이 4바이트를 가져 총 16바이트로 구성된다. UNORM이 붙으면 0~1까지 값을 사용하고, NORM 이 붙으면 -1~1 까지의 값을 사용한다. 그러나 해당 자료형을 사용하면 만들고자했던 Texture에 문제가 생긴다. 만들고자했던 Texture의 행에는 keyframe에 해당하는 Bone의 행렬을 적고, 열에는 Bone의 정보를 써서 행과 열에 들어가는 값이 Bone이 된다. 이때 Bone 행렬 하나는 64바이트인데, Texture의 픽셀 하나가 쓸 수 있는 값은 16바이트라서 문제가 생긴다...

🎨DirectX 2023.06.27

[DX] Animator 작업 : Create Clip Transform (bones 연산)

Model에서 Bone 정보를 넘기기 위해선 Cbuffer를 사용했지만, Animation에서는 Cbuffer를 사용할 수 없다. Tranfrom이 250개이고, Frame이 500개라고 한다면 125,000개의 데이터가 필요한데, CBuffer에서 넘겨줄 수 있는 최댓값은 4996개이다. 따라서 Animation을 CBuffer로 넘기는 것은 불가능하기 때문에 Texture로 만들어서 보내야 한다. Texture는 GB급 Texture가 아닌 이상, 데이터가 얼마나 커지든 상관없다. Texture의 행에는 Keyframe 정보를 넣고, 열에는 Bone 정보를 넣는다. 면에는 Clip 정보를 넣어둔다. ModelAnimator에서 bone 정보를 저장하는 과정을 이해하기 위해선 Converter 클래스 ..

🎨DirectX 2023.06.27

[UE4] Parkour System -3 : Falling, Landed

높은 위치에서 캐릭터가 떨어질 때 떨어지는 Jump 모션과, 바닥에 착지 시 구르기 낙법을 수행하는 파쿠르 기능을 구현해보았다. ✔️ 바닥 방향 충돌체 검사하기 : CheckTrace_Land 먼저, CheckTrace_Land 함수를 통해 캐릭터가 높은 곳에서 떨어지고 있는지를 검사한다. CharacterMovement를 통해 Falling 인지를 1차적으로 검사한 뒤, 바닥을 향하는 Parkour Arrow Land를 이용한 LineTrace를 진행하였다. CheckTrace_Land 함수는 Tick 함수에서 계속 호출된다. 높은 곳에서 떨어진다면 무조건적으로 실행하기 위해 별다른 조건은 두지 않았다. 🕺🏻 Fall Parkour 호출 : DoParkour Player 클래스는 ACharacter를 ..

🎮Unreal4/C++ 2023.06.26

[백준/C++] 9663번 : N-Queen (백트래킹 연습)

N-Queen 문제 N-Queen 문제는 크기가 N × N인 체스판 위에 퀸 N개를 서로 공격할 수 없게 놓는 문제이다. N이 주어졌을 때, 퀸을 놓는 방법의 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (1 ≤ N < 15) 출력 첫째 줄에 퀸 N개를 서로 공격할 수 없게 놓는 경우의 수를 출력한다. 예제 입력 1 8 예제 출력 1 92 백트래킹에 대해 공부하면서 소문이 자자한 N-Queen 문제를 풀어봤다. 백준 골드로 표시된 문제는 처음 풀어봐서 약간 긴장했는데, 아니나 다를까 체스의 ㅊ도 모르는데 무작정 퀸 배치한다고 문제 던져줘서 너무 난감했다..^^ 퀸이 어떻게 배치되는지 체스에 대한 룰을 전혀 몰라서 아래 블로그를 통해 퀸이 어떻게 배치될 수 있는지에 대해서만 읽었다!..

[백준/C++] 15649번 : N과 M(1) (백트래킹 연습)

N과 M (1) 문제 자연수 N과 M이 주어졌을 때, 아래 조건을 만족하는 길이가 M인 수열을 모두 구하는 프로그램을 작성하시오. 1부터 N까지 자연수 중에서 중복 없이 M개를 고른 수열 입력 첫째 줄에 자연수 N과 M이 주어진다. (1 ≤ M ≤ N ≤ 8) 출력 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. 수열은 사전 순으로 증가하는 순서로 출력해야 한다. 예제 입력 1 3 1 예제 출력 1 1 2 3 예제 입력 2 4 2 예제 출력 2 1 2 1 3 1 4 2 1 2 3 2 4 3 1 3 2 3 4 4 1 4 2 4 3 예제 입력 3 4 4 예제 출력 3 1 2 3 4 1 2 4 3 1 3 2 4 1..

[UE4] Parkour System -2 : Climb, Do Parkour, Check Obstacle

이전 학습때 Parkour Component를 제작하고, LineTrace 함수를 작성하여 플레이어의 Forward 방향으로 LineTraceSingle 충돌 검사를 수행하였다. 이번에는 충돌된 객체들의 정보를 저장하여 Parkour Object를 올라갈 수 있는 Climb 기능을 만들어보았다. 💥 CheckTrace_Center 충돌 결과 저장하기 : Hit Result ParkourComponent 클래스의 CheckTrace_Center 함수에서 LineTrace 함수를 호출하고 난 뒤, 충돌 객체가 저장된 HitResult 배열을 불러왔다. 하나라도 충돌된 객체가 있다면 해당 Actor를 HitObstacle 변수에 저장해놓았다. 충돌된 객체(HitObstacle)의 폭을 판단하여 Climb 할 ..

🎮Unreal4/C++ 2023.06.22

[UE4] CSV 파일 읽어서 DataTable로 만들기 : ParkourData

Parkour를 구현하는 과정에서 Parkour Data를 만들고 DataTable로 변환하는 과정이 필요해서 정리해보았다. 먼저, 행과 열을 만들어서 데이터를 전부 채운 csv 파일을 준비한다. 데이터가 필요한 Parkour Component 클래스에는 해당 데이터 열과 똑같은 속성들을 FParkourData라는 구조체로 저장하였고, 해당 구조체는 FTableRowBase를 상속받아야 한다. 구조체를 전부 작성한 뒤, 컴파일을 해야 csv 파일을 읽어서 데이터 테이블로 저장할 때 열 정보로 FParkourData를 사용할 수 있다. C++ 컴파일 후 데이터 테이블을 저장할 폴더에서 CSV 파일을 임포트한다. FTableRowBase를 상속받았다면 데이터 테이블 행 타입을 ParkourData로 선택할 ..

🎮Unreal4/C++ 2023.06.22

[UE4] Parkour System -1 : CheckTrace_Center

블루프린트로 구현했던 Parkour 기능을 C++클래스로 구현해보았다. 2023.02.15 - [🎮Unreal4/BluePrint] - [UE4] Parkour 기능 -1 (파쿠르가 가능한지 검증, Trace Channels) [UE4] Parkour 기능 -1 (파쿠르가 가능한지 검증, Trace Channels) 🏃‍♂️ Parkour 플레이어가 자유롭게 높은 담벽을 넘고, 슬라이드하고, 벽을 짚고 기어올라가는 등의 파쿠르 동작을 구현해보았다. 파쿠르 동작을 구현하는데 가장 중요한 요소는 파쿠르가 가 cse-child.tistory.com 2023.02.16 - [🎮Unreal4/BluePrint] - [UE4] Parkour 기능 -2 (Climb, Set Movement Mode, 루트 모션) [..

🎮Unreal4/C++ 2023.06.21

[백준/C++] 2839번 : 설탕 배달 (Greedy 연습)

설탕 배달 문제 상근이는 요즘 설탕공장에서 설탕을 배달하고 있다. 상근이는 지금 사탕가게에 설탕을 정확하게 N킬로그램을 배달해야 한다. 설탕공장에서 만드는 설탕은 봉지에 담겨져 있다. 봉지는 3킬로그램 봉지와 5킬로그램 봉지가 있다. 상근이는 귀찮기 때문에, 최대한 적은 봉지를 들고 가려고 한다. 예를 들어, 18킬로그램 설탕을 배달해야 할 때, 3킬로그램 봉지 6개를 가져가도 되지만, 5킬로그램 3개와 3킬로그램 1개를 배달하면, 더 적은 개수의 봉지를 배달할 수 있다. 상근이가 설탕을 정확하게 N킬로그램 배달해야 할 때, 봉지 몇 개를 가져가면 되는지 그 수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (3 ≤ N ≤ 5000) 출력 상근이가 배달하는 봉지의 최소 개수를 출력한다...

[백준/C++] 1436번 : 영화감독 숌 (브루트 포스)

영화감독 숌 문제 666은 종말을 나타내는 수라고 한다. 따라서, 많은 블록버스터 영화에서는 666이 들어간 제목을 많이 사용한다. 영화감독 숌은 세상의 종말 이라는 시리즈 영화의 감독이다. 조지 루카스는 스타워즈를 만들 때, 스타워즈 1, 스타워즈 2, 스타워즈 3, 스타워즈 4, 스타워즈 5, 스타워즈 6과 같이 이름을 지었고, 피터 잭슨은 반지의 제왕을 만들 때, 반지의 제왕 1, 반지의 제왕 2, 반지의 제왕 3과 같이 영화 제목을 지었다. 하지만 숌은 자신이 조지 루카스와 피터 잭슨을 뛰어넘는다는 것을 보여주기 위해서 영화 제목을 좀 다르게 만들기로 했다. 종말의 수란 어떤 수에 6이 적어도 3개 이상 연속으로 들어가는 수를 말한다. 제일 작은 종말의 수는 666이고, 그 다음으로 큰 수는 16..

728x90