전체 글
-
디바이스 초기화개발/Direct3D 2021. 9. 14. 22:32
DirectX에서 엔진과 디바이스를 설정하고, 반복해서 렌더링을 하는 작업이 어떻게 이루어지는지 설명하겠다. 엔진은 윈도우 정보를 입력받아 실제로 렌더링할 화면의 크기를 정하고, 렌더링을 반복해서 화면을 갱신해 준다. 이 렌더링을 위해 필요한 요소들이 여러가지 있는데 이를 Device, CommandQueue, SwapChain, DescriptorHeap 파트로 나눠 설명하겠다. 각 파트를 클래스로 나눠 구현하였다. Device 파트는 그래픽 카드와 메모리가 소통하도록 도와주는 파트이다. 정확히는 Device 내에 선언된 ID3D12Device가 그래픽 카드를 의미한다. 이후 CommandQueue, SwapChain, DescriptorHeap 파트들을 구현하기 위해 ID3D12Debug, IDXGI..
-
OpenGL Rendering Pipeline개발/OpenGL 2021. 9. 9. 14:59
Vertex Specification: 모든 정점을 ordered list에 정렬하여 다음 파이프라인에 전달한다. Vertex Shader: vertex specification 단계에서 받은 각 정점들을 transformation 해준다. Tessellation: 상위 primitives를 작은 primitives들로 분해한다. (optional) Geometry Shader: primitive를 입력받아 0개 이상의 다른 primitive를 반환한다. (optional) Vertex Post-Processing: 쉐이더 단계의 정점 처리를 끝내고 나서, 또 다른 처리들을 해준다. Primitive Assembly: 정점들을 primitive들로 조립한다. Rasterization: primitive들..
-
애니메이션 리임포트개발/Unreal 2021. 9. 3. 21:21
여러 애니메이션을 사용하다 보면 애니메이션들의 위치나 방향이 맞지 않는 경우가 있다. 예를 들어 아래의 경우는 서 있을때의 애니메이션과 죽었을 때의 애니메이션의 높이가 차이가 나서 죽었을 때 바닥에 가라앉아 버린 경우이다. 이럴 땐 애니메이션 리임포트를 이용해 애니메이션들의 위치나 방향을 맞춰줄 수 있다. 위와 같이 바닥에 가라앉아버린 애니메이션을 왼쪽 아래의 Import Translation을(방향의 경우 Import Rotation) 수정한 후 왼쪽 위의 애니메이션 리임포트 버튼을 누르면 (Import Translation의 Z축을 13으로 수정해 주었다.) 위와 같이 높이가 수정된 애니메이션을 얻을 수 있다.
-
근접 공격 구현 (Melee Attack)개발/Unreal 2021. 9. 3. 21:15
Animation Montage, AnimNotifyState를 이용해 구현한 근접 공격 시스템이다. 먼저 무기를 휘두를 주체인 스켈레탈 메쉬의 본에 부가적인 소켓을 달아 주겠다. 스켈레탈 메쉬에서 오른손에 해당하는 hand_r 본에 소켓을 달고 프리뷰 에셋을 내가 만들 무기의 메쉬로 설정해 소켓의 방향을 만져주었다. 해당 소켓에 Child Actor들을 달면 hand_r 본을 따라 움직일 것이다. 다음은 무기 클래스를 생성할 것이다. 먼저 Actor를 상속해 MeleeWeapon이라는 블루프린트 클래스를 만들었다. StaticMesh와 BoxCollision 컴포넌트를 추가해 주었다. BoxCollision에는 OnBeginOverlap 이벤트가 발생했을 때 겹쳐진 액터에게 데미지를 주도록 블루프린트를..
-
카메라 (Camera Component, Spring Arm Component)개발/Unreal 2021. 9. 3. 15:28
플레이어가 게임을 진행할 때는 게임의 화면을 보는 시점이 필요하다. 이 시점을 정해 주는 것이 바로 카메라이다. 위 화면은 플레이어가 빙의할 캐릭터의 블루프린트이다. 카메라가 캐릭터의 뒤에 있기 때문에 게임을 시작하면 캐릭터의 등이 보일 것이다. 이와 같은 시점은 아마 대부분의 상황에서 불편할 것이다. 따라서 카메라의 위치를 이동시켜 보겠다. 현재 카메라는 Spring Arm Component라는 것에 붙어 있는데, 이는 이름에서 유추할 수 있듯이 스프링처럼 길이가 줄어들 수 있는 일종의 막대이다. 위 화면에 보이는 빨간색 선이 바로 Spring Arm Component이다. 해당 컴포넌트는 부모 컴포넌트에 꼬리와 비슷한 느낌으로 붙어 있는데, 만약 캐릭터를 회전시키다가 스프링 암이 벽에 부딪히거나 하게..
-
세분성 (Granularity)프로그래밍/멀티코어 2021. 3. 26. 18:24
멀티코어 컴퓨팅 수업을 듣던 도중 Granularity 라는 개념이 나왔다. 대략 뉘앙스는 이해했지만 구체적인 내용이 없어 내가 이해했나.. 확신이 안 서서 인터넷에 추가로 검색해 보았고 한국어로는 세분성 이라고 번역이 되어 나왔다. Granularity의 수준은 fine coarse 로 표현하는데 fine은 더 세세하게 나눈 것, coarse는 좀 더 뭉텅이로 나눈 것으로 생각하면 되겠다. 수업에서 나온 Granularity의 뜻은 qualitative measure of the ratio of computation to communication 이었고, 직역하자니 통신에 대한 연산 비율의 질적 측정...? 단어가 너무 어려운 것 같아서 다시 인터넷에 검색해 보니 결국은 한 프로세서가 얼마..
-
Ciphers프로그래밍/정보보호 2021. 3. 18. 01:13
Ciphers Additive Cipher C=암호화된문장(Cipher),P=평문(PlainText),k=키값C = 암호화된 문장 (Cipher), P = 평문 (Plain Text), k = 키 값C=암호화된문장(Cipher),P=평문(PlainText),k=키값 C=(P+k)%26C = (P + k) \% 26 C=(P+k)%26P=(C−k)%26P = (C -k)\%26P=(C−k)%26 One-Time Pad Additive Cipher의 고정된 키를 가변 키로 바꾸는 것 K의 시퀀스를 미리 서로 정해둬야 한다. Ci=(Pi+ki)%26C_i = (P_i + k_i)\%26Ci=(Pi+ki)%26 Multiplicative Cipher C = 암호화된 문장 (Cipher) P = 평문 (Pl..