
길찾기 알고리즘 중 하나인 A* 알고리즘에 대해 알아보자. 단순히 2D 타일맵에만 적용할 수 있다고 생각했는데 원리를 알고보니 가중치로 연결된 그래프에 모두 적용할 수 있는 방법이었다. 복잡한 공간도 다각형으로 분할한다면 A* 알고리즘을 적용시켜서 길을 찾을 수 있다. A* 알고리즘은 닫힌 목록과 열린 목록이 있고, 이 두 목록을 갱신하면서 길을 찾아간다. 현재 위치에서 갈 수 있는 위치에 대해 G, F, Parent를계산해서 열린 목록에 넣고, 열린 목록에서 최소 F값을 가지고있는 위치를 닫힌 목록에 넣은 후 반복한다. G : 해당 위치로 이동하기 위해 필요한 비용 F : G + 해당 위치에서 목표지점까지의 예상거리 Parent : 해당 위치로 오기 직전 위치 간단한 2D 길찾기 예제를 통해서 원리를 ..

SwiftUI의 철학 거창하게 철학이라고 제목을 짓긴했지만 SwiftUI를 앞으로 어떻게 접근해야할지 감을 잡기 위해 문법과 동작원리를 간단하게 알아보자. 먼저 기본적으로 생성되는 코드를 보면 AppDelegate, SceneDelegate, ContentView이렇게 3개의 파일이 생성되는것을 볼 수 있다. SceneDelegate를 열어보면 ContentView의 인스턴스를 생성해서 UIWindowScene에 등록하는것을 볼 수 있다. 그리고 ContentView를 열어보면 구조체가 정의되어있는데 이 구조체를 생성해서 등록하면 화면에 해당 view가 그려지는것이다. 구조체는 body라는 변수를 가지고있는데, 모든 View는 이 변수를 가지고있어서 꼭 정의해주어야한다. struct ContentView..

C++ 문법중에 const라는 키워드가 있다. 무언가를 상수화시킬 때 사용하는 키워드인데 공부하는 단계에서는 딱히 어떤 변수를 상수화시킬 필요성이 없기 때문에 잘 사용하지 않는 키워드이고 실제로 어떤 규모가 큰 제품을 만드는게 아닌 이상 어떤 변수를 변경시면 안되는지 알고있기 때문에 더욱 안쓰고있었다. 하지만 오픈소스 코드나 엔진 등을 열어보니 const를 적지않게 사용하는것을 볼 수 있었는데, 이번 기회에 명확하게 다시 기능을 배우고 넘어가보도록 하자. 일단 이것만 기억하자. const는 자신과 가장 가까운 것을 상수화한다. 일반 변수 변수를 상수화한다. const로 선언된 변수는 그 값을 변경할 수 없다. const int A = 10; // same expression : int const A = ..

Masking Material에 대해 알아보자. 원하는 결과물을 정하고 그 결과가 나오도록 공부하면 이해하기가 쉬운데, 서서히 화면에서 사라지는 효과를 만들면서 기본적인 원리와 사용법에 대해 알아볼 수 있다. 기본적으로 제공되는 Material 종류중에 Traslucent를 사용하면 Opacity값을 조정해서 서서히 안보이게 할 수 있지만 이렇게 할 경우 Normal Map도 쓸 수 없고 Emissive Color밖에 못쓰기떄문에 별로인것 같다. 그래서 Masked Material을 사용하는데, 이 material을 선택하면 Opacity Mask라는 입력이 활성화되는것을 알 수 있다. 이건 어떤 값을 입력해야할까? 먼저 상수값을 입력해서 어떻게 보이는지 테스트해보자. 아 0.3부터는 안보이고 그보다 작..

타일 위에서 자연스럽게 움직이는 Movement를 구현해보도록 하자. 엔진에서 제공하는 NavigationMesh를 사용해서 만들 수도 있지만 더 세밀한 개성을 주기 위해서 먼저 간단한 움직임을 직접 구현해본다. 타일 이동이기 때문에 상하좌우 4방향으로 움직일 수 있고, 한 칸씩 이동한다. 이 떄 입력이 연속적으로 발생해도 모두 기억하고 순차적으로 이동할 수 있도록한다. BlockMovement를 바로 구현하기 위해 기본적인 준비물이 몇가지 필요한데, 캐릭터 Mesh와 속도에따라 애니메이션을 재생하는 Blueprint, 그리고 기본적인 맵을 구성한다. 1. Queue 먼저 Controller에서 입력을 받으면 MovementComponent가 입력을 수신하고 Queue에 저장한다. 매 프레임 Queue를..

Actor가 배치될 수 있는 최상위 오브젝트이다. World보다 하위 개념이지만 world에 최소한 1개의 Level이 존대하기 때문에 해당 world에 하나의 level만 있다면 같은 의미로 사용될 수도 있다. 새로운 world를 생성하는게 new world가 아니라 new level인것도 이 때문이다. world에 처음 생성된, 가장 상위 level을 Persistent Level이라고 한다. 항상 유지되기 때문에 전역으로 보여지는 환경을 배치하기에 적합하다. 예를들면 태양광원이나 대기효과 등이 Persistent Level에 추가하기에 적합한 actor들이라고 할 수 있다. world에는 여러개의 level이 존재할 수 있는데 각 level은 자기자신만의 Level Blueprint를 가지고 있기 ..
Linear Interpolation의 약자로 두 값을 선형보간한다. 두 값을 섞는다는 것이라고 생각하면 된다. 원리 입력받은 A, B를 보간하는데 Alpha 비율로 섞어서 계산한다. 수식은 아래와 같다. 예를들어 A = 10, B = 5, Alpha = 0.3 이라면 Lerp(A, B, Alpha)는 위 계산에 의해 8.5가 된다. 예제 float Lerp를 C++ 함수로 작성하면 아래와같이 작성할 수 있다. float Lerp(float A, float B, float Alpha) { return A * (1 - Alpha) + B * Alpha; } 활용 Material 계산에서 가장 많이 사용되는 것으로 보이는데 두 image를 blend해서 하나의 material로 만들어서 사용하기 때문이다. ..

z-depth fog는 높이에 따라 안개를 생성하는 것으로 높은 건물, 깊은 지하를 표현할 때 사용할 수 있는 기법이다. 사진처럼 사선으로 바라보는 깊은 지하를 그리기 위해서는 생각보다 오브젝트의 크기가 커야되는데, 짧은 오브젝트의 바닥면이 보인다면 깊이감이 줄어들 것이다. z-depth fog를 적용시키면 오브젝트의 크기도 크지않게 만들고 깊이감도 줄 수 있다. 과정 Post Process Volume 사용한다. 에디터에서 월드에 Post Process Volume을 추가하고 unbound를 체크한다. volume의 크기에 상관없이 모든 world에 해당 process가 적용되도록 하는 옵션이다. content browser에서 material을 만든다. Material Domain을 Post Proc..
- Total
- Today
- Yesterday
- 수학
- rxswift
- 알고리즘
- SOCKET
- 드라마
- SHADER
- JSP
- Cocos2d-x
- swift
- Git
- 데이터베이스
- Java
- C/C++
- C++
- ios
- SwiftUI
- DesignPattern
- C
- 국내여행
- scala
- database
- machine learing
- 자료구조
- mongoDB
- game
- winsock
- OS
- Spring
- 운영체제
- ue4
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |