썸네일 하늘에 보내는 편지(Letter To Sky) | DirectX11 / 팀 프로젝트 장르   |   3D 퍼즐언어   |   C / C++엔진   |   DirectX11 자체엔진(+FMOD)기간   |   21. 08. 02 ~ 21. 08. 27 (4주)인원   |   기획 1명, 아트 2명, 프로그래머 1명(본인)맡은 역할   |   엔진, 클라이언트 메인 프로그래머설명   |   하늘에 있는 분을 그리워하는 마음이 간절하여 만들어진 편지를 천사우체부가 배달하는 게임입니다.GitHub   |   https://github.com/hajineys/Letter-To-Sky GitHub - hajineys/Letter-To-Sky: DirectX 11 자체엔진으로 만든 게임DirectX 11 자체엔진으로 만든 게임. Contribute to hajineys/Letter-To-Sky de..
썸네일 당신의 안녕을 위하여(For Your Tranquility) | Direct2D / 팀 프로젝트 게임인재원 2기 프로그래밍 2학기 미니 팀 프로젝트입니다. 이 프로젝트는 2021 부산 인디커텍트 페스티벌(BIC) 루키부문에서 라이징스타상(대상), 게임디자인상을 수상하였습니다. 장르 | 2D 추리, 시뮬레이션 언어 | C / C++ 엔진 | Direct2D 자체엔진(+FMOD) 기간 | 21. 02. 08 ~ 21. 02. 26 (3주) 인원 | 기획 2명, 아트 3명, 프로그래머 4명 맡은 역할 | 프로그래밍 팀장(타팀과 의사소통 및 일정조율), 클라이언트 메인 프로그래머 설명 | 사인이 불분명한 사체를 부검하여 사건의 진상과 사체가 사망한 이유를 추리해야한다. GitHub | https://github.com/hajineys/For-Your-Tranquility GitHub - hajineys/F..
썸네일 플랫포머 세계 수호대(Platform World Savior) | WinAPI / 팀 프로젝트 게임인재원 2기 프로그래밍 1학기 C, C++, WinAPI 수업을 받은 뒤 타학과 학생들과 같이 처음으로 작업한 팀 프로젝트입니다. 장르 | 2D 퍼즐, 시뮬레이션 언어 | C / C++ 엔진 | WinAPI 자체엔진 기간 | 20. 11. 16 ~ 20. 11. 27 (2주) 인원 | 기획 2명, 아트 2명, 프로그래머 3명 맡은 역할 | 프로그래밍 팀장(타팀과 의사소통 및 일정조율이 주 업무), 클라이언트 서브 프로그래머 설명 | 플랫포머 세계가 원인 모를 공격을 받아 맵이 파괴되었다. 자동으로 움직이는 캐릭터를 위해 수호대(플레이어)가 파괴된 맵을 다시 복구해야한다. 프로젝트 내 본인 작업 1. 2차원 맵 설계 block의 type과 화면에 그려줄 박스데이터로 이루어진 클래스형으로 2차원 배열 맵..
썸네일 지뢰찾기(Minesweeper) | Windows Console / GDI / 개인 프로젝트 2020년 9월, 처음 C를 배우기 시작한뒤 2개월이 지나 배열을 이용하여평소 좋아하던 '지뢰찾기' 게임을 콘솔로 만들어봤습니다. 장르   |   2D 퍼즐언어   |   C기간   |   20. 10. 26 ~ 20. 11. 04 (7일)GitHub   |  https://github.com/hajineys/Minesweeper GitHub - hajineys/Minesweeper: 콘솔기능만으로 구현한 지뢰찾기콘솔기능만으로 구현한 지뢰찾기. Contribute to hajineys/Minesweeper development by creating an account on GitHub.github.com 먼저 지뢰찾기를 만들기 위해 이 게임이 어떻게 동작되는 것인지 로직을 파악하고  게임 앱 / 게임 매..
썸네일 DirectX 11 Graphics 자체 엔진 구조 및 게임 프로젝트 구조 작년 여름부터 DirectX 11 Graphics 엔진(정확히 말하자면 Renderer)을 공부하며 만들기 시작했고 개인 포트폴리오로 사용하기 위해 지금까지 다시 만들어보고, 정리하고, 구현을 추가하면서 다듬고 있다. 현재까지 진행된 엔진을 크게 보자면 DirectX와 관련하여 Device 및 여러가지 포인터 변수들을 가지고 있는 InitDirect3D 클래스 3D Object를 위한 부모 Object를 상속받은 쓰임새에 따라 다른 값으로 이루어진 여러 자식 Object 클래스들 이 Object는 MainGame 프로젝트 Scene의 Initialize 함수에서 DXFactory 포인터 변수를 파라미터로 받아 생성되어진다. 그 밖에 3D Camera, Vertex Struct, Effect, Post-P..
썸네일 32비트 컴퓨터와 64비트 컴퓨터의 차이 32비트와 64비트의 차이는 뭘까? 여기서 비트란 뭘까? 비트(bit)는 binary digit의 약자로 컴퓨터에서 사용하는 가장 작은 데이터 단위이다. 하나의 비트는 0이나 1의 값을 가질수 있고, 각각은 참, 거짓 혹은 서로 배타적인 상태를 나타낸다. 32비트는 2의 32승, 64비트는 2의 64승을 나타내는데 32비트 컴퓨터라 하면 CPU(중앙 처리 장치)가 데이터를 처리할 때 사용하는 '레지스터'의 크기가 32비트인 컴퓨터를 말하는 것이라 이해하면 된다. 레지스터는 극히 소량의 데이터나 처리 중인 중간 결과를 일시적으로 기억해 두는 고속의 전용 영역을 말한다. 32비트 컴퓨터는 최대 약 4GB까지의 메모리(RAM)만 인식할 수 있는 반면 64비트 컴퓨터는 16엑사바이트까지 인식이 가능하다. 그 말..
썸네일 논리 게이트란 무엇인가? 논리 게이트를 논하기 전 논리 회로란? 전자공학에서 논리 회로(logic gate)는 불 대수를 물리적 장치에 구현한 것으로, 하나 이상의 논리적 입력값에 대해 논리 연산을 수행하여 하나의 논리적 출력값을 얻는 전자회로를 말한다. 논리 게이트에서는 NOT, OR, AND, XOR, NOR, NAND 논리 연산을 수행한다. NOT 게이트 입력과 출력이 반대 논리 레벨로 작동되는 게이트 x F 1 0 0 1 OR 게이트 2개 이상의 입력에 의해 하나의 출력을 가진 게이트 한 개 이상의 입력 전압이 H일때, H가 출력 x y F 0 0 0 0 1 1 1 0 1 1 1 1 NOR 게이트 OR-NOT 게이트 한 개 이상의 입력 전압이 H라면 출력은 L로 출력 x y F 0 0 1 0 1 0 1 0 0 1 1 0 ..
썸네일 Half Lambert DirectX11 자체엔진을 만들면서 일반적으로 많이 알려진 Diffuse Light모델인 Lambert(N·L)계산을 한 뒤 적용 후 몇가지 문제점을 발견했다. 1. 조명을 받지않는 부분이 너무 어둡다. 2. specular가 쎄다.(인간 캐릭터인데 도자기나 플라스틱 재질같다) 3. 색이 묘하게 칙칙하며 전체적으로 퀄리티가 낮다. 이것을 해결하기 위해 Valve사에서 처음 개발된 Half Lambert Lighting모델을 적용시켜보기로 하였다. Half Lambert란? 명암이 매우 강렬하게 나오는 Lambert의 특성을 보완하기위해 램버트 코사인 법칙의 코사인 곡선이 절반이 되도록 "1/2"을 곱한 다음, "1/2"을 더하고, 다시 이것을 제곱해서 완만한 곡선으로 변환해서 음영처리를 하는 라이팅 기..
썸네일 툰셰이더(1) 만화cartoon처럼 명암을 칼같이 딱딱 끊어서 처리하는 툰셰이더에 대해 알아보도록 하겠다. 완만한 곡선의 기존 난반사광 그래프와 달리 툰 셰이더는 ceil()함수를 사용하여 특정 값을 무조건 올림하여 사용한다. 코드를 작성하기에 앞서 RenderMonkey Workspace에 난반사광 계산을 위한 float4 빛의 위치값 변수를 생성한다. 정점의 법선정보를 위해 Stream Mapping에 float3 Normal 필드를 추가하고 임의의 색을 지정하기 위해 float3 변수 또한 추가해준다. 그리고 기존 작업에서는 float4x4 World행렬, View행렬, Projection행렬을 각각 변수를 따로 만들어 곱했으나 이번에는 행렬들을 미리 합쳐 불필요한 연산을 줄일 수 있도록 하겠다. 이때 한가지 고..
썸네일 디퓨즈/스페큘러 매핑 일반적으로 물체는 특정 한가지 색만 존재하는것이 아니다. 그렇다면 3D상에서 여러 색을 표현하려면 어떻게 해야할까? 이때 사용하는 것이 난반사광에 적용하는 텍스처, 바로 디퓨즈맵diffuse map이다. 정반사광 또한 마찬가지로 스페큘러맵specular map을 사용하여 원하는 부분에 원하는 값으로 표현이 가능하다. 쉽게말해 난반사광 = 빛의 색상 X 난반사광의 양 X 디퓨즈맵의 값 정반사광 = 빛의 색상 X 정반사광의 양 X 스페큘러맵의 값 렌더몽키에서 셰이더 코드를 작성하기 전 필요한 사전 작업이 있다. 정점셰이더 Vertex Shader float4x4 gWorldMatrix; float4x4 gViewMatrix; float4x4 gProjectionMatrix; float4 gWorldLight..
썸네일 기초적인 조명셰이더(2)_정반사광specular light 난반사광diffuse light에 이어 정반사광specular light에 대해 알아보겠다 정반사광specular light란? 난반사광과 달리 한 방향으로만 반사되는 빛으로 입사각이 출사각과 같은 것이 특징이다. 게임업계에서 널리 사용하는 기법인 퐁phong 모델을 사용해보겠다. 퐁 모델은 반사광과 카메라벡터(카메라에서 현재 위치까지 선을 그은 벡터)가 이루는 각도의 코사인 값을 구하고, 그 결과를 여러번 거듭제곱하면 정반사광을 구할 수 있다고 한다. 거듭제곱을 하는 이유는? 거듭제곱수가 늘어남에 따라 코사인 값이 빠르게 줄어드는데 정반사광의 폭은 난반사광에 비해 상당히 타이트하므로 이를 재현하기 위해 코사인 값에 거듭제곱을 한다. 정반사광을 구현하기 위해 반사광 벡터와 카메라 벡터가 필요한데 반사광 ..
썸네일 기초적인 조명셰이더(1)_난반사광diffuse light 대부분의 게임에서 표준으로 사용되는 조명셰이더 기법을 알아보도록 하겠다. 빛을 구성하는 요소로 크게 난반사광diffuse light과 정반사광specular light가 있다. 난반사광diffuse light이란? 발산하는 빛이 물체의 표면에 반사될때 여러방향으로 고르게 반사되는 빛을 가리킨다. 이때문에 어느방향에서 바라봐도 물체의 명암이나 색조가 크게 변하지 않는다. 게임에 주로 사용하는 람베르트lambert 모델을 살펴보겠다. 람베르트 모델은 표면법선과 입사광이 이루는 각의 코사인 값을 구하면 그게 바로 난반사광의 양이라고 한다. 람베르트 모델은 코사인 함수를 내적dot projuct연산으로 대신해 난반사광의 값을 구한다. ※ 두 벡터가 이루는 각의 코사인 값은 그 둘의 내적을 구한 뒤 두 벡터의 길..