본문 바로가기

분류 전체보기

(11)
[게임수학] 미적분 미적분은 수학의 모든 분야에 걸쳐있는 복잡한 계산 체계이다. 모두들 고등학교 때 열심히 배워봐서 알겠지만 미적분은 굉장히 광범위하고 복잡한 계산 체계이다.하지만 다행히 게임에서의 미적분은 그 광범위한 부분에서 극히 일부분만을 필요로 한다.게임에서 미적분은 흔히 어떠한 힘에 의해 움직이는 물체의 위치, 스프링의 힘, 회전 속도 등등이 시간에 따라 어떻게 변화하는지 알기 위해 사용된다.여기서는 미분과 적분이 무엇을 의미하는지 알아보고 게임안 3D 공간상에서 어떻게 사용되는지 간단한 예제까지만 만들어볼 예정이다. 1. 미분미분이라고 하면 극한이니, 미분계수니, 도함수니 아주 복잡한 식과 정의들 그리고 트라우마를 불러일으키는 모의고사 문제들이 떠오를 텐데일단은 간단하게만 정의해 보겠다. 간단하게 미분은 어떤 양..
Gradient Shader (그라디언트 셰이더) 그라디언트 셰이더 만들기 1. 기본 그라디언트일단 사진처럼 왼쪽에서 오른쪽으로 가로방향으로 진행하는 간단한 그라디언트 효과를 셰이더로 만들어보려고 한다.해당 효과는 아래 코드처럼 lerp함수와 smoothstep 함수를 이용해서 그라디언트를 구성하는 두 개의 색을 부드럽게 보간 해주면 간단하게 만들어낼 수 있다.float4 GetGradientColor(float4 color1, float4 color2, float2 UV){ return lerp(color1, color2, smoothstep(0.0, 1.0, UV.x));}2. 다양하게 변형 가능한 그라디언트 위의 그라디언트 효과는 간단하게 제작 가능하지만 그라디언트 효과가 가로방향으로만 가능하고또 그라디언트가 퍼지는 범위를 자유롭게 설정 불가능..
SDFFont 사용하기 (5) 이전에는 SDF를 이용해서 간단한 폰트 출력을 해보았으니 이번에는 셰이더를 이용해서 글자에 다양한 효과들을 적용시켜 보려고 한다.물론 그냥 만들어진 텍스쳐 그대로 출력해도 되긴 하지만기왕이면 글자의 두께와 색상 등등도 커스텀 가능하게 하고 다양한 효과들도 적용되는것이 좋으니 한번 만들어 보려고 한다.  1. SoftEdge 우선 첫번째는 기본적인 폰트 출력이다.PS_OUTPUT SoftEdge(VS_OUTPUT In){ PS_OUTPUT Out; float4 color = float4(0, 0, 0, 0); float alpha = tex2D(_FontSampler, In.TexCoord0).a; float Thickness = clamp(1 - _FontWidth, 0,..
SDFFont 사용하기 (4) 드디어 SDFFont를 출력하기 위한 모든 준비가 끝났다.우선 VS 프로젝트를 하나 생성해서 DirectX9을 사용할 세팅을 해주자 특별한 건 없고 그냥 SDK를 설치하면 같이 설치되는 샘플코드 중 하나를 가져와서 정말 간단하게 출력만 해줄 것이다.출력 방법은 간단하다 글자를 출력할 BaseLine만 잡아놓고 그 라인을 따라가면서 그려주기만 하면 된다.void DrawFont(WCHAR* str, D3DXVECTOR2 drawPos){ //출력할 문자열의 길이 int strsize = wcslen(str); Glyph curGlyph; //현재 글자가 그려질 위치 D3DXVECTOR2 curPenPos = startPos; //한글자 한글자씩 출력한다. for (in..
SDFFont 사용하기 (3) 지금까지 꽤 많은 우여곡절을 통해 결국 폰트를 SDF Texture로 만들어 내는 데 성공하였고 또한 글자를 똑바로 출력하기 위한 기본 정보들까지 얻어내는 데 성공했다! (블로그에서는 2편 만에 얻어냈지만 실제로는 꽤 많은 시간 동안 노력했다 ㅠㅠ) 이제 간단한 DirectX 프로젝트를 하나 생성해서 간단하게 폰트를 출력해 보려고 한다. 일단 SDF.png 와 SDF.png와 함께 생성된 SDF.txt의 내용들을 한번 살펴보자 SDF.png 우선 PNG를 보면 투명색 배경에 이렇게 글자들이 줄 맞춰서 쭉 나열되어 있다. 여기에서 한 글자를 확대해서 보면 이런 모습이다. 이것이 SDF (Signed Distance Field)로 외곽선을 중심으로 안쪽은 + 로 점점 진한 흰색으로 보이고 바깥쪽은 - 로 점..
SDFFont 사용하기 (2) 이전에는 간단하게 SDF가 무엇인지 SDF를 이용한 Font 출력이 어떤 이점이 있는지 등을 정말 간단하게만 찾아보고 정리해 보았다. 실제로 SDF는 2D 폰트에만 사용되는 것이 아니라 3D 물체의 렌더링, 그림자 표현 등에도 다양하게 사용되고 있는것 같지만 당장 나의 문제는 SDFFont가 무엇인지 알아보고 이것을 실제 게임에 적용 시킬수 있도록 하는것이기 때문에 당장은 그런 부분까지 깊게 알아보지는 않을 생각이다. ​ 일단 가장 첫번째 문제는 내가 사용할 폰트를 어떻게 SDF Texture로 만들 것이냐 이다. 물론 내가 직접 ttf를 SDF Texture로 만들어 주는 툴을 제작할 수 있으면 좋겠지만. 미래의 나면 몰라도 현재의 나에게는 아쉽게도 그런 능력은 존재하지 않는다... 그래서 생각한 첫번..
SDFFont 사용하기 (1) DirectX9 기반의 게임에서 폰트를 출력하는 방법은 여러가지가 있다. WinAPI에 포함되어 있는 TextOut함수를 이용할 수도 있고 D3DXFont 객체를 이용하거나 다른 외부 라이브러리를 이용하는 방법 등등 다양한 방법들이 있을것이다. 나는 그 중에 SDFFont라는것을 이용해서 폰트 출력을 해보려고 한다. 아래는 내 나름대로 조금 조사를 해서 정리한 내용들을 한번 적어보겠다. 그리고 앞으로 계속 공부 하면서 새롭게 알아내는 것들고 추가 하면서 기록해 나갈 예정이다. 일단 구글에서 막 퍼온것들이라서 최대한 출처를 적어놓을 생각이지만 원문이 영어로 되어있어서 원 출처를 알 수 없다거나 원 출처가 없어진 경우들이 있어서... 만약 문제가 생긴다면 글을 삭제 하겠습니다. https://github.c..
팀 프로젝트로 여름방학동안 제작한 던그리드 모작 학교에서 같은 반 프로그래머들 6명이서 모여서 제작한 던그리드 모작 입니다. 해당 작품으로 교내 프로젝트 경진대회 에서 최우수상을 받았습니다. 작업한 기간도 2달 남짓한 기간으로 짧았고 다들 처음 해보는 팀 프로젝트여서 부족한 부분도 많이 있었지만 그래도 좋은 성적을 받아서 뿌듯했던 팀 프로젝트 였습니다. ​ 해당 프로젝트에서 제가 작업한 내용은 Unity 타일맵을 이용한 시작 마을맵과 던전 맵 제작, 맵에 있는 모든 상호작용 (NPC와 대화, 빠른이동, Tab을 이용해 던전 지도 보기)제작, 던전 생성 알고리즘을 이용한 던전 생성, 미니맵 제작 등의 작업을 했습니다. 그중 직접 제작한 던전 생성 방식과 던전 생성 알고리즘에 대해 기술해 보겠습니다. ​ 일단 던전의 각 방은 Unity 2D Tilemap..