본문 바로가기

분류 전체보기

(26)
[게임개발] 밉맵(Mipmap)의 마법과 텍스처 블리딩 해결법 (feat. 아틀라스 패딩) 3D 그래픽스나 줌인/아웃이 빈번하게 일어나는 2D 게임을 개발하다 보면 필연적으로 렌더링 최적화 문제에 직면하게 됩니다. 카메라와 멀리 떨어진 오브젝트를 렌더링할 때, 불필요한 연산량을 줄이고 픽셀이 튀는 계단 현상(Aliasing)을 막기 위해 게임 엔진들은 '밉맵(Mipmap)'이라는 기술을 적용합니다.특히, 청크(Chunk) 단위로 맵을 무한히 생성해야 하는 지형 게임을 개발할 때 이 개념을 명확히 이해하지 못하면 화면 테두리에 의도치 않은 줄무늬가 생기는 현상을 겪게 됩니다. 오늘은 밉맵의 원리와 이를 텍스처 아틀라스에 적용할 때 발생하는 문제점, 그리고 그 해결책을 정리해 보았습니다.1. 밉맵(Mipmap)이란 무엇인가? 밉맵이란 렌더링 성능을 극대화하고 이미지 품질을 부드럽게 개선하기 위해 ..
텍스처 아틀라스에 대해 araboza 마인크래프트를 비롯한 오픈월드 보셀(Voxel) 게임이나 방대한 맵을 다루는 2D 타일 게임들을 보면 문득 의문이 생깁니다. 화면에 수천, 수만 개의 블록과 타일이 실시간으로 깔리는데, 어떻게 게임은 멈추지 않고 부드럽게 구동되는 걸까요? 그 핵심 비밀은 바로 메모리 관리와 렌더링 효율을 극대화하는 '텍스처 아틀라스(Texture Atlas)'와 'Draw Call 최적화'에 있습니다. 1. 텍스처 아틀라스(Texture Atlas)란 무엇인가?개념은 아주 직관적입니다. 텍스처 아틀라스는 게임에 사용되는 수많은 작은 이미지(텍스처나 스프라이트)들을 하나의 커다란 이미지 파일로 묶어놓은 것을 말합니다. 2D 레트로 게임 개발에서 자주 쓰이는 '스프라이트 시트(Sprite Sheet)'와 본질적으로 완전히 ..
[게임 개발] 256개의 타일은 필요 없다! 8방향 비트마스킹과 47타일 룰 1. 4방향 마스킹의 한계와 8방향의 등장4방향 비트마스킹은 얇은 길이나 나무 울타리를 만들 때는 훌륭한 해결책입니다. 하지만 끝없이 땅을 파고 내려가는 채굴 게임의 흙 타일이나, 거대한 맵 청크로 이루어진 동굴처럼 넓은 면적을 가진 덩어리 지형을 묘사할 때는 치명적인 단점이 있습니다.바로 '안쪽 모서리(Inner Corner)'를 부드럽게 깎아낼 수 없다는 것입니다. 대각선의 상태를 알지 못하면 지형의 안쪽이 파여 있는 형태를 자연스럽게 표현하지 못하고 억지스러운 직각 모서리를 출력하게 됩니다. 이 문제를 해결하기 위해 대각선 4방향(북서, 북동, 남서, 남동)까지 모두 검사하는 8방향 비트마스킹이 등장했습니다.2. 256가지의 경우의 수계산 원리 자체는 4방향과 완전히 동일합니다. 검사해야 할 방향이..
[게임 개발] 노가다를 줄여주는 마법의 오토 타일링과 비트마스킹 테라리아(Terraria)에서 흙을 캘 때, 블록들이 자연스럽게 연결되는 모습을 기억하시나요? 혹은 스타듀밸리(Stardew Valley)에서 울타리를 칠 때 알아서 모서리가 다듬어지며 연결되는 모습은요? 2D 게임에서 이러한 블록 간의 자연스러운 연결은 시각적 디테일을 위해 매우 중요한 부분입니다. 하지만 개발자가 수많은 연결 경우의 수를 일일이 하드코딩으로 지정할 수는 없었겠죠. 이 문제를 우아하게 해결하기 위해 도입된 시스템이 바로 오토 타일링(Auto-tiling)이며, 그 핵심 원리로 비트마스킹(Bitmasking)이 사용됩니다.비트마스킹(Bitmasking)이란?비트마스킹은 말 그대로 컴퓨터가 처리할 수 있는 가장 작은 데이터 단위인 비트(0과 1)에 마스크를 씌워, 특정 비트만 걸러내거나 조..
game maker studio 2 rpg 튜토리얼 - 2 https://www.youtube.com/watch?v=NB6uYFmTzWU&list=PLhIbBGhnxj5Ier75j1M9jj5xrtAaaL1_4&index=3 이번 글에서는 위의 영상을 따라 game maker studio 2 를 사용해서 rpg를 만드는 과정을 담아봤어요. 중간에 똑같이 했는데도 안되는 부분이 있어 몇일을 붙잡고 gpt 한테도 여러번 물어보고 했었는데, 결국 답이 없어서 강의랑은 조금 다르게 만들었어요. 동작하는 부분에서는 차이가 없지만 코드가 다르니 문제가 생길까 싶었지만 다행이도 그리 크게 차이는 없었어요. 첫번째 영상에서는 캐릭터가 움직이고, 적이 움직이고 캐릭터를 따라올 수 있게 만들었는데 아직 캐릭터와 충돌시 일어나는 일이 없었죠. 저는 충돌시 턴제로 전투가 일..
game maker studio 2 rpg 튜토리얼 - 1 안녕하세요 오늘은 game maker studio 2를 이용해서 rpg를 만드는 튜토리얼을 따라해볼꺼에요 https://www.youtube.com/watch?v=1J5EydrnIPs&list=PLhIbBGhnxj5Ier75j1M9jj5xrtAaaL1_4 오늘은 적을 구현하고 그 적이 플레이어를 따라오는 로직을 만들었어요 또한 60프레임마다 적이 렌덤한 위치로 이동하게 만들었어요그리고 여러 적이 플레이어를 따라올 때 겹쳐져버리는 문제가 있어 적의 충돌에 벽에 더불어 적들도 충돌하도록 만들었어요. if(instance_exists(obj_player) && distance_to_object(obj_player) gamestudio에는 각 코드가 언제 시작하는지를 코드로 안나누고 만들때 부터 나눠진다..
뱀서라이크 따라하기 - 레벨업 구현 두번째 이번 시간에는 레벨업 구현을 추가적으로 해보도록 하겠습니다. 이 글은 아래의 글에서 이어집니다 https://unityfactory.tistory.com/21 뱀서라이크 따라하기 - 레벨 업 구현하기 이번 시간에는 캐릭터가 래벨업을 했을 때 능력을 업그래이드 할 수 있도록 만들어보겠습니다. 먼저 ui를 완성해보도록 하겠습니다. 켄버스에는 이미지를 추가해줍니다. 먼저 앵커를 전체화면 unityfactory.tistory.com 먼저 item 스크립트에서 아래와 같이 코드를 추가해주었습니다. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class Item : M..
뱀서라이크 따라하기 - 레벨 업 구현하기 이번 시간에는 캐릭터가 래벨업을 했을 때 능력을 업그래이드 할 수 있도록 만들어보겠습니다. 먼저 ui를 완성해보도록 하겠습니다. 켄버스에는 이미지를 추가해줍니다. 먼저 앵커를 전체화면으로 해 주어 화면 전체를 가릴 수 있도록 만들어줍니다. 그 뒤 배경색상은 검은색으로 바꿔줍니다. 투명도는 150정도로 해줍니다. 그 뒤 그 하위 오브젝트로 이미지를 하나 더 만들어줍니다. 그 오브젝트의 색을 초록색 계열로 바꿔주고 그 하위 오브젝트에 텍스트를 넣어줍니다. 이제 저 텍스트창을 엥커를 이용해 판넬의 위에 위치시키고, 중앙정렬을 해줍니다. 또한 글씨의 폰트와 크기도 조절해줍니다. 폰트에 컴포넌트로 shadow를 추가하여 글씨에 입체적인 느낌을 줍니다 이제 아이템 그룹계층을 판넬 안에 넣고, 엥커를 이용해 꽉 채워..