게임 개발 7

Screen Space Light Shaft - 화면 공간 라이트 섀프트 (2)

저번에 이어서 오늘은 3번 렌더 타겟에 기록되는 마스킹 데이터를 렌더링하는 SunLightShader 를 볼 계획이다. 내가 사용하는 방식에서는 현재 픽셀 위치에서 광원의 방향으로 이동하며 샘플링을 하되, 이 샘플링이 원본 텍스쳐에서 이루어지면 안 된다. 그렇게 하게 되면 라이트 섀프트라기 보다는 블러 효과에 가까운 모양새가 된다. 이것도 결국 주변 텍셀을 샘플링하여 적절한 가중치를 더해 픽셀을 바꾸는 것이기에 블러와 그 궤가 같다. 그래서 렌더 타겟을 따로 만들어 해당 렌더 타겟에 어느 부분이 광원인지나 어느 부분은 차폐가 되는 지 등의 여부를 기록하고 이렇게 만든 텍스쳐에서 샘플링을 진행한다. 이를 위한 첫번째 단계가 SunLigthShader가 되겠다. 선언부는 위와 같은데, 다른 쉐이더 클래스랑 ..

Rampage 2023.08.22

Detail Object Map - 지형 위에 풀숲 (2)

이전 포스트에서 디테일 오브젝트를 위한 클래스를 선언했다. 이제 정의를 작성해야하는데, 해야할 코딩은 렌더링 부분과 디테일 맵과 텍스쳐를 읽어 리소스를 준비하는 것이 되겠다. 우선 바이너리로 저장한 디테일 맵을 읽는 것과 텍스쳐를 로드하는 것은 생성자에서 하기로 한다. 생성자의 시그니쳐는 다음과 같다. CDetailObject(ID3D12Device* pd3dDevice, ID3D12GraphicsCommandList* pd3dCommandList, std::shared_ptr pShader, void* pContext) 생성자는 다이렉트12 디바이스와 커맨드 리스트, 그리고 셰이더에 대한 포인터와 void* 형의 pContext를 받는다. 여기서 pContext로는 터레인의 포인터를 넘겨줄 것이다. 터..

Rampage 2023.07.29

Detail Object Map - 지형 위에 풀숲 (1)

저번에 이어서 오늘의 주제는 저 오른쪽 위에 보이는 풀숲을 그리는 것이다. 지금까지 만든 지형은 단순히 땅만 있는 상태인데, 실제 지형은 그렇게 단순하지 않기에 여러 디테일을 추가해줄 필요가 있다. 이런 디테일의 대표적인 것 중 하나가 풀숲이다. 풀숲 이외에도 나무나 돌맹이 등도 포함될 수 있으나 이번에는 풀숲만을 추가해볼 것이다.(위 스크린 샷에는 돌멩이도 보이긴 하는데, 이는 오브젝트가 아니고 텍스쳐에 포함된 녀석이다.) 그러면 어떻게 풀숲을 구성하느냐가 이제 관건인데, 상용 엔진에 경우 디테일과 관련된 여러 툴을 제공하여 이 툴을 이용해 터레인 위에 마우스 클릭 앤 드래그를 하면 원하는 위치에 풀이나 나무, 돌 등을 그릴 수 있다. 하지만 당연히 풀숲 몇개 그리기 위해 이런 툴을 만들기엔 작업량도 ..

Rampage 2023.07.24

Terrain - 지형 (2)

올해 1월에 글을 쓴 이후로 오랫동안 적지 않았었는데 정신없이 구현만 하다보니 7월이 되서야 다음 글을 적게 되었다. 터레인은 지금 기준으로는 구현한지 너무 오래된 옜날 작업물이다보니 당시 어떻게 만들었는지 긴가만가 하지만 최대한 기억을 짜네 적어볼 수 밖에... 아무튼 이전 글에서 유니티를 통하여 터레인 객체의 알파 텍스쳐 맵을 얻어내는 것까지는 성공했다. 이번 프로젝트에서 구성되는 터레인은 총 4개의 레이어를 활용할 계획이다. 위 텍스쳐에서 각각의 색깔이 각 레이어가 어느 부분에 칠해져야 하는지를 알려준다. 이제 내가 할 일은 기존 터레인 클래스를 수정하여 알파 블렌딩과 타일링을 할 수 있는 터레인 클래스를 만들면 끝이다. class CSplatTerrain : public CHeightMapTerr..

Rampage 2023.07.07

Terrain - 지형 (1)

어떤 게임이든 기본적으로 반드시 필요한 요소를 말하자면 그중에서도 지형을 빼놓을 수 없을 것이다. 실제 사용자가 조작하게 될 캐릭터나 사용자 인터페이스 등 사실 중요한 것들은 차고 넘치는 것이 현실이지만 그래도 발 디딜 땅 정도는 있어야 하지 않을까? 그래서 이번에 만들 것은 Terrain(지형)이다. 고로 Terrain 구현을 진행해 볼 것인데....... 사실 저번 학기 동안에 만들었던 터레인이 이미 있다. 보는 것처럼 대충 산봉우리 몇 개 보이고, 물도 있고, 저 멀리 보면 잔디도 보이고, 스카이 박스도 돼있고, 이상한 헬기들도 보이고.... 아무튼 이것저것 보인다. 이것 자체로도 어느정도 써먹을 수 있는 지형이라 말할 수는 있겠으나 엄연히 말하자면 이걸론 부족하다. 게임 월드라 부르기엔 아무래도 ..

Rampage 2023.01.28

Rampage - 소개 및 개요 (2)

이전 글에서 게임 소개까지의 내용을 다뤘다. 이제부터는 상세한 연구 중점에 관해서 이야기해볼까 한다. 중점 연구 분야 이번 프로젝트에서 가장 메인이 되는 부분은 당연 타격감 시뮬레이터가 될 것이다. 타격감 시뮬레이터는 이름에서부터 유추해 볼 수 있듯 임의로 설정한 타격감을 시뮬레이션하며 테스트해 볼 수 있는 인터페이스이다. 그리고 시뮬레이션을 위해서는 당연히 변수를 설정할 수 있어야 하는데, 우리는 이 변수를 전 글에서 언급한 연구에서 사용한 표현기법을 가능한 그대로 이용하는 것으로 결정했다. 선행 연구에서 시뮬레이터를 구성하는데 사용한 표현기법은 총 15가지로 다름과 같다. 1. 카메라 흔들림 2. 카메라 이동 3. 카메라 줌인 4. 충격 이펙트 5. 파티클 이펙트 6. 잔상 이펙트 7. 데미지 애니메..

Rampage 2023.01.21

Rampage - 소개 및 개요 (1)

본 게시물은 대학 졸업과제로 진행 중인 프로젝트 Rampage에 대한 개발 기록이다. 상세한 개발 과정을 게시하기에 앞서 프로젝트 진행에 대한 배경, 연구 목적, 게임 소개 등에 대해 기록부터 시작하고자 한다. 배경 이번 프로젝트의 주요한 키워드는 '타격감'이다. 우리는 흔히들 어떤 게임이 타격감이 좋다고 말하거나 반대로 나쁘다고 말해본 적이 있거나 혹은 들어본 적이 있을 것이다. 필자 또한 게임에서의 타격감을 중요하게 생각하고 게임에서 얻을 수 있는 이른바 손맛을 즐기는 것을 매우 좋아하는 편이다. 다만 게임 개발이란 분야를 공부하는 예비 전문가로서 말하자면 필자는 타격감을 명쾌하게 설명하지 못하고 있지 않나 생각한다. 타격감 자체가 개인의 주관적인 감각적 요소이기 때문에 그럴 수 있으나 이 부분은 제..

Rampage 2023.01.14