개드립

즐겨찾기
최근 방문 게시판

당신이 보는 게임 화면은 진짜가 아니다...gif

1610848311.jpg

게임 개발은 쉽지 않다.

 

 

실제로 개발자가 의도한 모든 것을 있는 그대로 재현하려면 시간과 예산이 잔뜩 들 뿐더러, 게임이 무거워져 사양을 많이 잡아먹게 된다.

 

 

 

 

 

1610848311.jpg

 

 

 

그래서 게임 개발자들은 언제나 꼼수를 쓴다.

 

쇼벨 나이트​는 사실 2D 도트 그래픽으로 진행되는 게임이 아니라, 3D로 진행되는 게임이다. 눈속임을 썼을 뿐.



 

삽질기사가 정말 있는 그대로의 2D 도트 게임이었다면 엄청난 도트노가다와 물리법칙 적용에 훨씬 긴 개발기간이 필요했을 것이다.


 

 

1610848311.jpg

 

 

이처럼 2D 게임처럼 보였던 게 알고보니 3D 게임이라는 경우는 꽤 흔하다. ​엔터 더 건전​도 이런 경우다.


 

3차원이라 해도 시점을 고정한다면 화면상에는 2차원으로 보이니 꽤 그럴듯하다.





 

그럼 반대의 경우는 어떨까?

 

​3D 게임으로 보였던 게 사실 2D 게임​이었다면?

 

 

1610848312.jpg

1610848312.jpg

 

 

말이 안될 것 같지만 놀랍게도 있다.


 

초창기 FPS의 대표격 게임들인 ​이드 소프트웨어​의 ​울펜슈타인 3D​(1992)와 ​(1993)은 사실 3D 게임이 아니다.

 

 

 

 

 

 

 

"아니, 명백히 3D 공간을 걸어다니는데 이게 3D 게임이 아니라고? 지랄하고 자빠졌네"


 

라는 생각이 들 테지만 정말로 3D가 아니다!

전부 교묘한 눈속임이다.




 

울펜슈타인과 둠이 출시될 당시의 가정용 게임기들은 실시간으로 삼차원 게임환경을 렌더링할 정도로 성능이 좋지 못했다.


 

그래서 실제 Z축을 게임에 집어넣을 수 없으니 당시의 게임들은 모두 꼼수를 썼다.

 

 

 

 

 

 

 

 

비슷한 시기에 ​슈퍼패미콤​으로 나온 ​젤다의 전설: 신들의 트라이포스(1991)​를 예로 들어 설명해보자.



 

짤에서 링크는 절벽에서 뛰어내려 우물 속으로 빨려들어간다.

 

하지만 실제 작동하는 게임 메모리 상에서 절벽은 없다.

 

 

 

 

1610848313.jpg

 

 

 

절벽에서 뛰어내리는 모션도 있고, 진짜 절벽처럼 보이게 음영도 져있지만 모두 같은 높이에 있는 타일이다.

 

절벽 부분이 ​아래로만 내려갈 수 있게 프로그래밍 된 타일​일 뿐.





 

링크가 절벽 '아래'에서 절벽 타일로 걸어올라가려 하면 게임은 링크를 막고,

 

절벽 '위'에서 아래로 내려가려 하면 뛰어내리는 모션을 재생하면서 아래로 내려보내는 것이다.






 

따라서 플레이어는 '절벽 위에서 뛰어내렸다'라고 생각하는 상황이

 

사실 게임기 내부에서는 '평면상에서 아래쪽 위치로 이동했다'고 처리된다.





 

이러한 눈속임으로 플레이어는 실제 높낮이가 있는 공간으로 착각하게 되지만,

 

 

 

 

1610848317.jpg

 

 

게임 속 공간은 전부 평면일 뿐이다.


 

슈퍼패미콤 성능의 한계를 고려한 현명한 최적화인 셈이다.

 

 

 

 

1610848322.jpg

 

똑같이 ​슈퍼패미콤​으로 출시된 ​울펜슈타인 3D​도 마찬가지다.

 

게임기의 메모리 내에서 게임의 모든 공간은 평면으로 처리된다.



 

그리고 이 평면 공간에 입체감을 부여하고자 꼼수를 쓰는데,

 

 

 

 

1610848322.jpg

 

플레이어가 서 있는 위치(초록 화살표)를 기준으로,

 

 

 

 

1610848322.jpg

 

 

매 순간 순간 게임은 직선으로 플레이어의 시야 내에 보이는 타일들과 플레이어의 거리를 스캔한다.

 

 

 

 

 

그리고 그 거리의 길고 짧음에 따라, 플레이어의 화면에 비춰지는 타일들의 크고 작음을 결정한다.

 

 

 

 

1610848322.jpg

 

 

이 과정이 순식간에 이루어져,

 

그 결과물로 플레이어의 눈에는 깊이감 있는 화면이 보이게 되는 것이다.



 

일명 ​레이캐스팅(Raycasting)​이라 불리는 렌더링 기법이다.

 

 

 

 

1610848322.jpg

 

매 순간순간 플레이어를 기준으로 쏜 직선이 닿는 부분만을 화면에 나타냄으로써, 렌더링 하는 데 드는 메모리를 획기적으로 줄일 수 있다.


 

지금처럼 주변의 모든 공간을 3차원 렌더링 하려고 했다가는 슈퍼패미콤이 버티지 못했을 것이다.

 

 

 

 

1610848322.jpg

 

 

 

결국 플레이어가 깊이감이 있는 삼차원 공간을 탐험한다고 생각할 때,

 

실제 게임기의 메모리상에서는 화면과는 상관 없이 ​평면 상의 공간을 프로세싱​하고 있는 것이다.




 

3차원 공간처럼 보여도 ​Z축이 없는 2차원 공간​이기에, 모든 벽들의 높이가 같고 게임 상의 높낮이 변화가 전혀 없다.

 

계단도, 2층도 없다.

 

 

 

 

 

 

 

 

그렇다면 ​둠​은?

 

둠은 울펜슈타인 3D보다 훨씬 진보된 모습을 보여준다.



 

적들이 높은 곳, 낮은 곳에서 보이고 계단도 있다!

아무리 봐도 3차원 공간으로 보인다.




 

하지만 이것도 3차원이 아니다.

 

 

 

 

플레이어가 분명히 적의 머리 너머를 쏘고 있는데,

 

 

아무 문제 없이 총알이 적에게 맞는 것이 보이는가?

 

 

 

 

 

이것 역시 실제 높낮이의 구분 없이 눈속임을 이용하기에 벌어지는 현상이다.

 

 

 

 

 

둠은 울펜슈타인의 레이캐스팅보다 진보된 렌더링 기법으로 ​이진 공간 분할법​(Binary Space Partitioning)을 사용한다.

 

 

 

 

 

 

 

1610848322.jpg

 

개발자가 2차원 맵을 디자인하면

 

 

 

1610848322.jpg

 

둠 엔진은 이 공간을 잘게 잘게 쪼개서

 

 

1610848322.jpg

 

데이터 트리를 형성한다.




 

간단한 작은 공간을 예로 설명해보자.

 

 

 

 

1610848322.jpg

 

이런 네모난 공간을 디자인했다고 해보자.

 

 

 

1610848322.jpg

 

 

게임 엔진은 이 공간을 둘로 나누고,

 

 

1610848322.jpg

 

 

또 그 둘을 다시 둘로 나누고, 계속 나눠서 게임 엔진이 수용할 수 있는 작은 공간들의 집합으로 만든다.

 

 

 

1610848322.jpg

 

 

그리고 이 각각의 공간들을 데이터 트리로 만든다.

 

공간을 둘로 나누고 그 둘을 또 둘로 나눈다고 했던 것에서 볼 수 있듯, 이렇게 하면 서로 제일 가까운 공간들이 자연히 제일 가까운 가지에 배열된다.

 

 

 

 

1610848322.jpg

 

 

플레이어가 이 공간에 들어섰을 때, 프로세서는 그 공간만큼을 렌더링하고 저장한다.

 

 

1610848322.jpg

 

 

그리고 트리의 가장 가까운 다음 가지로 이동해서, 또 그 공간만큼을 렌더링하고 저장한다.

 

 

 

1610848322.jpg

 

 

이렇게 렌더링하고 저장하기를 반복하다가,

 

한 가지가 차지하는 공간이 앞에 가로막혀 화면상에 보이지 않으면 그 공간은 렌더링하지 않고 넘어간다.

 

 

1610848322.jpg

 

 

 

이 절차를 플레이어의 시야 안에 들어오는 공간을 완벽하게 렌더링할 때까지 반복한다.



 

이것도 게임에 들어가는 연산을 최대한 줄여 최적화하기 위한 수단이었다.

 

따로 물체의 위치를 삼차원 정렬하거나 하는 추가적 연산 과정 없이, 데이터 트리를 올바른 순서로 지나는 것 만으로 공간을 정확하게 렌더링할 수 있다.




 

뭔소린지 모르겠으면 그냥 꼼수 써서 효율적으로 화면을 그렸구나 하고 생각하면 된다.

 

 

 

 

 

1610848322.jpg

 

 

레이캐스팅​ 기법을 쓰던 울펜슈타인은 단순한 2차원 게임 시스템을 벗어날 수 없었다.



 

화면은 말 그대로 단순한 2D 타일들을 이어붙인 것 뿐이었기에

 

모든 벽들의 크기가 똑같아야 했으며, 어색한 네모를 기워붙인 형상에서 벗어날 수 없었고, 벽들의 각도가 일정해야만 했다.



 

다른 각도로 배치된 벽을 렌더링하려면 훨씬 많은 연산이 필요했을 것이기 때문이다.

 

 

 

 

 

 

 

 

이와 달리, 둠의 ​이진 공간 분할법​, 일명 ​BSP 기법​은 이러한 제약으로부터 게임을 해방시켜주었다.


 

레이캐스팅처럼 벽의 픽셀들을 일일이 따라 계산하는 대신, 작게 분할된 각각의 공간들을 데이터 트리를 따라 렌더링함으로써

 

프로세서에게 무리를 주지 않고도 벽의 크기와 각도 등을 자유롭게 만들 수 있게 되었고,

 

 

 

1610848322.jpg

 

바닥과 천장을 각기 다른 높이에 배치해 더 다양하고 몰입감 있는 경험을 제공할 수 있게 되었다.



 

혁신적이지만, 아직 3차원에는 도달하지 못했다.

 

 

1610848322.jpg

 

 

깊이감 있는 천장과 바닥으로 보이는 것은 사실 플레이어 시점에서 깊이감 있어보이도록

 

프로세서에게 평소보다 더 멀리 있는 것처럼 렌더링하라고 지정된 타일들일 뿐이고,

 

 

1610848322.jpg

 

실제 메모리 상에서는 전부 2차원 평면이다.



 

둠이 정말 게임을 3차원 공간으로 연산하고 있었다면 공간을 공간 위에 올릴 수 있었을 것이다.

 

 

 

1610848322.jpg

 

하지만 둠을 처음부터 끝까지 플레이해봐도, ​플레이어가 그 아래 설 수 있는 2층 공간​ 같은 건 없다.

 

2층 공간같은 게 있었다면 연산이 꼬였을테니까 말이다.

 

 

 

 

 

 

 

이것이 둠가이가 높낮이에 상관없이 적을 맞출 수 있는 이유다. 적들이 실제로 높은 곳에 있는 게 아니라, 그렇게 보이도록 만들어졌을 뿐이기 때문이다.



 

그리고 시점을 위아래로 올리거나 내릴 수 없는 이유이기도 하다. 진짜 3차원 게임이 아니라 3차원으로 보이도록 만들어진 2차원 게임이기 때문이다.

1610848322.png

 

 

 

우리가 알고 있는 지금 형태의 완전한 3D 게임은 ​퀘이크(1996)​가 나올 때 쯤에야 구현되었다.

 

 

둠에서 최초로 적용된 ​BSP 기법​은 둠 이후에도 수많은 게임들에 활용되었으며, 아직까지도 가끔 활용되고 있다.


 

지금 와서 보면 어설픈 가짜 3D 그래픽이지만, 당시에는 조악한 하드웨어로 3차원의 화면을 구현해낸 혁신 그 자체였다.



 

아마 둠이 없었다면 지금 중붕이들이 즐기는 3D 게임들이 수 년 뒤에나 나왔을 것이다.

 

 

 

 

1610848322.jpg

 

 

그리고 이 혁신의 뒷편에는 조금이라도 더 재밌는 게임을 만들고자 머리를 싸매 가면서 수없이 고민하던 개발자들의 노고가 있었으리라.



 

앞으로 게임 할 때에는 중붕이들도 게임 개발자들에게 감사하는 마음을 갖도록 하자.

 

 

 

1610848322.jpg

 

이새끼는 말고

 

 

 

 

 

 

https://www.youtube.com/watch?v=zb6Eo1D6VW8

 

참고 영상: ​Doom WASN'T 3D! - Digressing and Sidequesting

 

 

퍼온곳: https://gall.dcinside.com/mgallery/board/view/?id=aoegame&no=16490887&exception_mode=recommend&page=1

144개의 댓글

갑분골프

0
2021.01.17

신기하노

0
2021.01.17

다치우고 재미있기만하면돼

1

무슨 말인지 이해못하겠는걸 보니 대단한거네요 추천드립니다

5
2021.01.17
@렙밑으로다친구

ㄹㅇㅋㅋ 울펜슈타인은 대충 그런갑다 넘겼는데 둠 설명은 아무리 봐도 모르겠닼ㅋ

4
@LouisCole

사실 추천안줌

0
2021.01.17

아 야발... 붐업 잘못눌렀어... 미안해 친구...

0
2021.01.17

레이트레이싱은 배그 포트나이트도 씀

0
2021.01.17

이 글이 재미있는 친구들은

같은 개발사에서 만든 퀘이크에서 광원 추적으로 쓰는 고속 역 제곱근 기술도 수학적으로 굉장히 재미잇으니 찾아보도록

 

https://ko.wikipedia.org/wiki/%EA%B3%A0%EC%86%8D_%EC%97%AD_%EC%A0%9C%EA%B3%B1%EA%B7%BC

1
2021.01.17
@어좁멸치할배

코드에 what the fuck 주석처리 해논거 보소 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ

0
2021.01.17
@확률의신

누구라도 저런 코드를 보면 저런 주석을 달 거 같은데

0

이런 거 너무 좋아

0
2021.01.17

아 이해했음

0

게임 그래픽은 이렇지만

 

의료영상이나 유한요소해석결과물로 나온 볼륨데이터 같은걸 표시할땐 여전히 레이케스팅만한게 없지

0
2021.01.17

정보추

0
DE1
2021.01.17

막짤 추

0
2021.01.17

유익한 글

0
2021.01.17

어렵다!

1
2021.01.17

닐 드럭만 사진 있어서 ㅂㅁ. 뇌절 존나 심하네.

0
@찌르르릇

진짜 몰라서 그러는건데 개발자중 오른쪽 두번째 드럭만이랑 똑같이 생겼는데 걔맞음?

0
2021.01.17

2D 도트 게임이었다면 엄청난 도트노가다와 물리법칙 적용에 훨씬 긴 개발기간이 필요했을 것이다.

 

이 문장이 잘 이해가 안가네 설명 좀 해줄 사람

0
@Byte

2d도트면 왼쪽보기 오른쪽보기가 도트 각각 필요함

3d면 회전으로 처리할 수 있지.

물론 좌우비대칭인 몹은 각각 찍어야겠지만.

바람m이 도트를 좌우대칭으로 해서 좌우바꾸면 칼방을 순식간에 스왑하는 문제가 있는데

칼과 방패를 다른 레이어로 잡고 회전하면 작업량을 반으로 줄일 수 있지...

물리적용은 저겜을 몰라서 뭔 얘긴지 모르겠음

0
2021.01.17
@월급받으며개드립하기

물리엔진은 이미 만든거 사용하면 되니까 편하다는 뜻인듯

0
2021.01.17
@월급받으며개드립하기

잘못된 예시같은데, 회전으로 처리한다해도 어차피 뒷면을 가지고있다면 어디선가는 툴로 찍었겠지. 그리고 쇼벨나이트는 흔한 스켈레톤 애니메이션 하나없는 완전도트로 찍은걸로 보이고 좌우대칭이라 3D,2D상관없이 충분히 구현함

0
2021.01.17
@월급받으며개드립하기

도트겜 만드는 사람이라 이해를 못하겟는거임

0

고전게임은 정말 컴퓨터 공학의 발전이 바로바로 적용되고

개발하긴 더럽게 어려웠을 시기..

그래서 존나 낭만이 있을 시기야

 

근데 8bit 프로세서 시절에도 부동소수점이 있었을까?

ieee규격에는 16비트까진 있는데. 8비트 코어로 16비트 부동소수점 연산을 했을까? 3d연산을 정수만으론 못할거 같은데.

0
2021.01.17

아 이해했다~

0
2021.01.17

3D를 고정시켜서 2D로 만드는건 몰랐네 ㄷㄷㄷ

0
2021.01.17

진짜 씨발 존나 뻐킹 지니어스들이네

2
2021.01.17
1

요즘 개발자인데 옛날개발자는 ㄹㅇ 신이내린 천재라고 생각한다..

0
2021.01.17
@둘리콘쓰고싶다

ㄹㅇ 천재 + 개발하는게 너무 좋아 죽을거 같은 사람들..

0
2021.01.17

멋있다

0
2021.01.17

진짜 존나 천재적이다ㄷㄷ...

0

신기하다

0
2021.01.17

별 좆만한 프로세서라도 전기만 들어오면 둠 구동할 수 있는게 이거때문이구나ㅋㅋㅋ

0
2021.01.17

트리구조에 대한 설명이 없으면 이해못할 수 있을거 같아

0
2021.01.17

옛날에는 3D 만들기엔 성능이 후달려서 2D 만들었는데

왜 현대는 반대가 된거야

0
@오케이징

예전에는 인적자원보다 전산자원이 부족했지만

요새는 인적자원이 모자라기 때문이지.

0
0
2021.01.17

둠은 이해를 못하겠다

저게 2차원이라고?

0
2021.01.17

내 FPS 첫 시작이 둠2였음

0
2021.01.17
@로렌

난 카르마

0

재밌다 추천

0

와 당연히 3D일줄알았는데 개쩌네

0
2021.01.17

고렙이라서 이런 유익한 글도 적는구나 했는데 렉카였구나 ㅋㅋㅋ

1
2021.01.17

정말 똑똑하다 본문에서는 꼼수라고 했지만 이게 클라이언트 단의 리소스까지 고려해서 만든 혁신적인 개발이라고 할 수 있지 않을까?

저런 과정이 있었기 때문에 현재의 현실같은 물리엔진이 적용되는 GTA같은 게임이 나올수 있었던거 아닐까 싶음

0
2021.01.17

그니까 둠이 구현되는 그래픽에 우선순위를 둬서 물체 뒤에 있는 그래픽이 안보이도록 처리했다는 말이지?

0
2021.01.17

건전이 3d일줄은 상상도 못 했네 ㄷㄷ

1
무분별한 사용은 차단될 수 있습니다.
제목 글쓴이 추천 수 날짜
네이버 때문에 한국 정부까지 압박하는 일본 46 기여운걸조아하는사람 46 7 분 전
야릇야릇 꼴릿꼴릿 친누나랑 카톡.jpg 33 덕천가강 35 7 분 전
동그랑땡녀의 최후.jpg 48 뭐라해야하냐 77 16 분 전
국가 권력급 찐따 49 황야의마법사 58 20 분 전
디씨 미술 강사 출신에게 극딜 박힌 씹덕 후기 28 뒤틀린아들 47 20 분 전
북 공장기업소 노동자 월급 20배 인상 전면 시행 52 Radian88 36 21 분 전
씨발시발 외국인 한식챌린지.....jpg 37 닉네임변경41 43 21 분 전
도로 무단점거하고 하역장으로 쓴 이마트 26 므르므르므 54 28 분 전
스텔라 블레이드 역대 유저평점 1위 53 헤애네 54 28 분 전
아는 형 트젠 됐는데... 후기 69 등급추천요정여름이 69 31 분 전
레드벨벳 웬디 경멸의 시선 모음 .gif 30 구름이구름 44 31 분 전
파쿠르 달인이 한국에 들어와서 당한 사고 34 열심히사는찐따걸레 68 34 분 전
빠니보틀 : 해외 여행 중 저처럼 극대노는 절대 하지 마세요 27 혜윰 71 35 분 전
실시간) 복싱 슈퍼스타 가르시아 금지약물 적발 ㄷㄷ...JPG 35 아무것도몰라효 43 37 분 전
국뽕) 테일러스위프트를 앨범판매량 제친 k-pop 42 후학히 52 41 분 전
유명 유튜버 운영 카페에 찾아간 팬…계단에서 굴렀다, 누구 ... 58 세기의명작스타워즈 60 47 분 전
싱글벙글 낭만넘치던 시절 한국 군대 일과표.jpg 60 덕천가강 43 49 분 전
좆소고 9급이고 그냥 자기 밥벌이만 해도 대단한거임 55 파랑1 85 54 분 전
군대에서 꿀 빠는 사람들의 역설 76 RTX4090오우너 56 56 분 전
요즘 느끼는 대한민국 25 출근퇴근헬스취침 63 56 분 전