SlideShare a Scribd company logo
1 of 54
프린이를 위하여
(게임을 움직이는 기술 리뷰)
참고 자료
• 일본 반다이 남코 프로그래머
저자
• 8bit 시절 게임 부터 현재까지
• 게임에서 개발 허들을 넘는
• 여러 기술들을 설명하고 있음
• 하드웨어도 간단히 알아보자
• 스터디 보다는 책 리뷰
게임 개발이 하고
싶어요…
oh my google
I love Git Hub
Thank you overstack
Youtube
=> 공부가 필요해
• 게임 기능만을 위한 전용 게임기 => PC , MOBILE
• 하드웨어 기능이 더욱 더 향상 되었다
게임기의 구성
메모리가 하는 일
디스크
메모리
디스크 메모리
필요한 정보를 읽는다
불필요한 것을 삭제
CPU가 하는 일
CPU (Central Processing Unit)
프로그램의 연산처리를 한다
메모리에 있는 값을 참조하여 연산하고
다시 메모리로 전달 한다
메모리1. 플레이어의 좌표를 읽어온다CPU
제어기
입력신호를 전달
ex) 캐릭터 이동
2. 제어기의 입력값 만큼 연산하여
플레이어 좌표를 갱신한다
디스플레이에
표시한다
메모리
메모리 구성 단위 메모리 크기 단위
메모리는 주소값(어드레스)를 가지고 있다
메모리는 유한 하며 그에 맞게
적절하게 사용해야 한다
메모리 단편화
플레이어 정보
게임 레벨 정보
몬스터 정보
메모리를 할당과 해제를 하다보면 메모리의 단편화(파편화)로 인하여
다른 메모리를 적재할 수 없는 경우가 생길수 있음
원치 않는 실행이 야기 될수 있음
플레이어 정보
게임 레벨 정보
메모리 단편화 해결
카테고리를 나눠
관리한다
플레이어 정보
게임 레벨 정보
몬스터 정보
UI 정보
소용량 전용 영역과
대용량 전용 영역을
따로 관리한다
소용량 전용 영역
대용량 전용 영역
일정 시간마다 재배치
컴팩션(GC)를 한다
재배치 하는데 자원이 소요됨
이러한 문제 말고도 메모리 누수 문제도 있기에 사용이 끝난 데이터는 해제를 잘 해주자
디스크
HDD 디스크 헤드를 움직여 데이터를 읽어온다
(용량 대비 가격 쌈)
SSD 페이지 기법을 이용하여 데이터를 저장
(용량 대비 가격 비쌈)
헤드가 디스크를 읽는데 물리적 시간이 소요되므로
디스크 트랙에 데이터 배치를 효율적으로 해야
빠르게 프로그램이 수행 될 수 있다
디스크 데이터 배치
3 1 2 1 2 3데이터를 읽는 순으로 잘 배치해줘서
헤드 방향을 바꾸는 일을 줄이도록 한다
자주 쓰이는 정보
자주 쓰이지 않는 정보
자주 쓰이는 정보를 내부에 배치하여
더 빠르게 읽어오게 한다(CLV 방식)
플레이어 정보
게임 레벨 정보
게임 레벨 정보
하나의 파일로 정리해서
한번에 읽어온다
하지만 메모리를 많이 확보해야한다
압축과 복원
데이터를 그대로 적재하지 않고
데이터를 압축하여 배치하면
효율적으로 디스크를 사용할 수 있다
압축된 데이
터
압축된 데이터
해제된 데이터
데이터를 사용할 때는 압축된 데이터를 복원 해줘야한다
복원된 데이터는 압축된 데이터보다 크기가 더 크기 때문에
이점을 고려해줘야한다
안 쓰는 데이터는 되도록 넣지 않는게 가장 좋다
프레임
제어기 처리
제어기 처리 게임은 메인 루프 안에서 계속 처리를
통하여 게임이 진행된다
제어기 입력을 가장 우선 처리하여
로직을 짜는게 도움이 된다
일정한 시간의 간격이 필요하다
수직 동기의 시간 1/60 초를 한 프레임으로 쓴다
게임 한 프레임 처리 시간이 1/60 초를 넘을 경우 지연 현상이
생길 수 있으므로 게임에 적합한 프레임을 이용하도록한다
더블 버퍼
프레임 버퍼가 하나 일 때
버퍼를 더 준비하여 미리 그려놓고 교체해준다
쓰레드 , 멀티 코어
블록 구성도
VRAM 과 eDRAM , 코프로세서를 주로 알아보겠습니다
VRAM , EDRAM
VRAM
GPU에서 작성과 불러오기를 실행하기
쉬운 메모리를 말합니다.
GPU에 VRAM존재시에 프레임 버퍼는
VRAM에서만 존재하게 된다
GPU의 그림은 VRAM에서 표시
eDRAM
메모리가 VRAM에 비해 용량이 작지만
읽고 쓰기를 더욱더 빠르게 실행시킬 수
있다. GPU는 eDRAM에만 그림을 저장
할 수 있다. 메모리 사용의 유연성을 가질
수 있다 좀 더 빠른 처리가 가능
하지만 용량이 작아 작업을 여러번 반복
해야함
코프로세서
코프로세서
보조프로세서 또는 보조 처리기라고 부른다
병렬로 처리가 가능하며
코프로세서는 부동소수점 , 그래픽 , 신호처리,
문자열 연산 등의 기능을 수행한다.
곱셉 , 나눗셈의 속도를 높이자
이전에 연산 능력이 느렸을때는 곱셈 나눗셈을
비트시프트 << , >> 를 이용하여 연산을
해주었다.
고정소수점 vs 부동소수점
고정 소수점 부동 소수점
정수부분(24비트) 소수부분(8비트)
실수 연산을 할 때 원하는 정확한
얻을 수 있음
대략적으로 정한 수치를
가까워지도록 설정
부호부 지수부 가수부
FPU(부동 소수점 장치)
FPUCPU
부동 소수점 연산 전용을 위한 장치
를 장착하여 연산속도를 높였다
좌표계 , 매트릭스
쿼터니언
짐벌락 회피 뿐 아니라 , 메모리
, 연산 속도에도 영향을 줌
애니메이션
3D 오브젝트는 수 많은 정점(vertex)로 이루어져있다
60fps의 전제로 애니메이션을 더 효율적으로 사용하는 과정을 알아봅시다
애니메이션 정점
한 정점은 16바이트가 필요하고
한 프레임마다 그 크기가 필요하다
좀 더 효율적으로 만들 수 있는 방법은 없을까?
X Y Z W
합계 16바이트
ex) 15000개의 정점을 가진
오브젝트 60fps
애니메이션 파일의 크기
16 x 15000 x 60
=14,400,4000 ≒ 14MB
관절
관절 정보는 위치 뿐만 아니라 회전 정보까지 필요하다
4x4 행렬 데이터가 필요하므로 총 64바이트의 데이터가 필요하다
14MB => 0.1MB
ex) 15000개의 정점을 가진
오브젝트를 30개의 관절로
구성한 애니메이션 파일의 크기
64 x 30 x 60
= 115,200 ≒ 0.1MB
관절
관절 정보는 위치 뿐만 아니라 회전 정보까지 필요하다
4x4 행렬 데이터가 필요하므로 총 64바이트의 데이터가 필요하다
14MB => 0.1MB
뿐만 아니라 애니메이션을 다른 캐릭터에도 적용 시킬 수 있다
ex) 15000개의 정점을 가진
오브젝트를 30개의 관절로
구성한 애니메이션 파일의 크기
64 x 30 x 60
= 115,200 ≒ 0.1MB
애니메이션 레이어 , 계층 구조
중복되지 않게 나눈다
탈부착 하기에도 용이
계층 구조를 두고
관절을 움직인다
자식 => 부모 순으로
회전 평행이동을 한다
FK
상위 계층이 하위 계층에 영향을 주는 것
ex) 어깨가 움직이는 위치에 따라 팔꿈치 손의 위치를 결정한다
특정 위치로 하위 오브젝트를 옮기는 것이 어렵다
ex) 울퉁불퉁한 땅에서 발의 위치를 조정하기 어렵다
IK(inverse kinematic)
역운동학 처리 약자이다 FK와 상반된 개념이며
기존에 상위 오브젝트에 따라 하위 오브젝트가
영향을 받던 것을 반대로 영향을 준다
ex) 발의 위치가 골반의 위치에 영향을 준다
반복을 통해 목표점에 도달하게한다
과부하 처리와 자연스럽게 보이지 않을
가능성이 있다
좀 더 줄여보자
대부분 애니메이션은 관절 간의 거리가 바뀌지 않는다
이 점을 이용하여 회전 정보만사용하자
ex) 4 x 30 x 60
= 28,800 ≒ 0.28KB
before) 112KB
회전 값을 나타내기 때문에
w요소가 필요없음
w요소 제거
ex) 3 * 30 * 60
= 21,600 ≒ 21KB
0~ 360도 까지 회전을 제한하면
부동 소수점을 다 쓸 필요 없음
ex) 1 * 30 * 60
= 7,200 ≒ 7KB
관절이 변경되면요?
관절이 변경되는 데이터를
넣어주면 된다
x(10bit) y(10bit) z(10bit)
키프레임
변화가 있는 부분에 키프레임을
설정하여 용량을 줄인다
프레임간에 보간을 하여 처리
ex) 4 * 30 * 10
=1,200 ≒ 1KB
4바이트 X 16요소 X 30관절 X 60 프레임 = 115,200바이트
4바이트 X 4요소 X 30관절 X 60 프레임 = 28,800바이트
4바이트 X 3요소 X 30관절 X 60 프레임 = 21,600바이트
4바이트 X 1요소 X 30관절 X 60 프레임 = 7,200바이트
4바이트 X 1요소 X 30관절 X 10 프레임 = 3,600바이트
위치정보를 골격 데이터에 분리 & 회전 정보를 쿼터니언화
위치정보를 X축, Y축 , Z축 각각에 저장한다
회전정보 3요소를 4바이트에 저장한다
데이터가 저장되어 있는 프레임을 줄인다
RGBA
R(8bit) G(8bit) A(8bit)B(8bit)
모니터에 색이 표현 되는 한 점을 픽셀이라한다
픽셀을 Red , Green , Blue 의 값을 조합하여 색을 표현하는 RGB에
불투명도(Alpha)를 추가하여 색을 표현한다
정점 정보
요소 내역 크기
좌표 XYZW 4요소이고, 각각 부동소수점 소수 4 X 4 바이트 = 16 바이트
정점컬러 RGBA 4요소이고 , 각각 1바이트 4 바이트
텍스처좌표 ST 좌표에 따른 2요소이고, 각각 부동소수점 소수 2 X 4 바이트 = 8 바이트
법선 XYZW 4요소이고 , 각각 부동소수점 소수
4 바이트 X 4 바이트 = 16 바이
트
ex) 15000개의 정점이 있는 오브젝트 16 + 4 + 8 + 16 = 44바이트
= 660,000바이트 ≒ 645KB
정점 좌표
정점은 컴퓨터 그래픽스에서 오브젝트를 이루는 기본 단위(점)이다
3D에서 정점좌표는 (x,y,z)의 정보를 가지고 있다
그러나 벡터와 사용할 때 방향과 좌표를 구분해주기 위해
w성분을 사용하여 0은 방향을 나타내는 성분 1은 좌표를 나타내는 성분
으로 표현한다
요소 내역 크기
좌표 XYZW 4요소이고, 각각 부동소수점 소수 4 X 4 바이트 = 16 바이트
정점 컬러
각 정점마다 색의 정보가 포함 되어있다
각 정점간의 색의 값을 보간하여 그 사이에 있는
픽셀에 색을 표현한다
요소 내역 크기
정점컬러 RGBA 4요소이고 , 각각 1바이트 4 바이트
텍스쳐 좌표
요소 내역 크기
텍스처좌표 ST 좌표에 따른 2요소이고, 각각 부동소수점 소수 2 X 4 바이트 = 8 바이트
정점에 그려질 픽셀에 텍스쳐 정보를 담는다
텍스쳐의 정보를 x,y로 안 하는 이유는 좌표와 구분하기 위해서이고
대부분 0.0~1.0 사이의 값을 이용하는데 이 이유는
정점의 위치가 바뀔때 텍스쳐의 좌표를 바꾸는 수고를 없애기 위하여
0~1의 값을 사용
ex) u = 0.5 x축으로 반정도의 텍스쳐 정보를 읽어온다
법선
요소 내역 크기
법선 XYZW 4요소이고 , 각각 부동소수점 소수
4 바이트 X 4 바이트 = 16 바이
트
디스플레이에서 빛의 값과 오브젝트를 연산 하여 화면에 표현하는 것을
라이팅이라하며 라이팅을 표현하기 위해서 반사 벡터를 구해야한다
이를 구하기 위해서는 면에 평면에 수직방향을 나타내는 벡터 법선벡터가 필요
플랫 , 고라우드 , 퐁 등의 쉐이딩이 있다
Static Mesh
빛의 방향이 바뀌지 않는다는 조건에서
움직이지 않는 물체와 움직이는 물체를
나눠서 정점 정보를 저장한다
https://www.slideshare.net/KooKyeongWon/5-8853384
좌표 정점컬러 텍스쳐 좌표 법선
DYNAMIC O X O O
STATIC O O O X
움직이는 오브젝트는 라이팅 처리를 해줘야하기 때문에
법선이 필요하다 정점 컬러는 라이팅으로 인해 동적으로 생성되서 정점컬러가 필요 없음
ex) 40 X 15,000 = 600,000 바이트 ≒ 586KB
움직이지 않는 오브젝트는 라이팅 처리를 안 하므로 정점컬러가 필요
정점 컬러 정보를 가지고 있기 때문에 법선 정보가 필요없음
ex) 28 X 15,000 = 420,000 바이트 ≒ 410KB
정점 정보를 줄여보자
요소 내역 크기
좌표 XYZW 4요소이고, 각각 부동소수점 소수 4 X 4 바이트 = 16 바이트
정점컬러 RGBA 4요소이고 , 각각 1바이트 4 바이트
텍스처좌표 ST 좌표에 따른 2요소이고, 각각 부동소수점 소수 2 X 4 바이트 = 8 바이트
법선 XYZW 4요소이고 , 각각 부동소수점 소수
4 바이트 X 4 바이트 = 16 바이
트
좌표
W요소는 반드시 1이 되므로 생략가능 => 16 바이트 => 12바이트
정점컬러
정밀도를 줄여서 사용이 가능하다 => 4바이트 => 2바이트
텍스쳐 좌표
0.0~1.0 사이에 대부분 쓰므로 정밀도를 줄인다 => 4바이트 => 2바
이트
법선
W요소는 항상 0이므로 생략가능 또한 정규화된 벡터이므로
1바이트 정도의 고정 소수점 소수로 사용 가능
16 바이트 => 12바이트 => 3바이트
ex)12+ 2 + 2 + 3 = 21
21바이트 X 15,000 = 315,000
≒ 308KB
트라이앵글 스트립
중복 되는 정점을 제거하여 GPU에 전달한다
GPU에 전달하는 양을 줄여 부담을 줄인다
그리기 명령
그리기 명령
…
정점 데이터
정점 데이터
…
GPU
뎁스버퍼
Z-버퍼라고도 한다
디스플레이에 화면을 표현 할때 같은 픽셀에 다른 물체가 그려지면
보내준 버퍼 값의 따라 어느것을 그릴지 결정을 한다
스텐실버퍼
뎁스 버퍼에서 좀 더 확장된 개념으로
스텐실 버퍼의 옵션 값을 이용하여
통과 할 스텐실 버퍼값을 통해 그려질 순서를 결정한다
빌보드
항상 카메라 정면을 바라보게 그리는 것이다
주로 파티클에 많이 쓰인다
Y축 빌보드 , 전체화면 빌보드 등이 있다
압축 픽셀 , 마하밴드 , 디더링
R G B A
R G B
R G B A
압축
용량은 줄어드나
띠가 보이는 현상이 생긴다
디더링을 이용하여
주변 픽셀의 색깔을 섞어
마하밴드 현상을 피한다
색 정밀도를 낮춰 압축된 픽셀로 표현 가능
HDR
색 ,명암 대비를 좀 더 주기위해 색의 값의 정밀도를 높여 표현한다
기존에 0~1외에 범위를 허용하는 것을 원칙으로 한다
팔렛트 텍스쳐
텍스쳐에 있는 필요한 색 정보를 따로 저장하여 저장해둔다
대부분 256색을 저장하며 2d게임에서 주로 이용한다
텍스쳐 픽셀에 참조하는 색을 바꿈으로써 다양한 색의 캐릭터를
만들 수 있는 장점도 있다
DXT 압축
압축률이 뛰어난 압축이다 DXT_N 숫자가 올라 갈수록 압축률이 높아진다
픽셀을 묶어서 색과 알파값의 정보를 압축한다
압축을 하면 색 정밀도가 흐려질수도 있어서 적절한 압축을 사용을 권장
LOD(level of detail)
정점으로 이뤄지는 삼각형이 많아 질수록 GPU연산이
많이 소모된다 멀리 있는 물체를 자세히 그리는 것은
유저들에게 크게 의미가 없는 일이다
그래서 멀리 있는 오브젝트는 좀 더 단순화한
오브젝트로 대체해줘서 연산의 이점을 채운다
MIPMAP
오브젝트가 그려질때 텍스쳐가 GPU 버퍼에 들어간다
카메라 거리에 따라 모니터 픽셀에 그려지는 값이 다르다
가까운 거리는 크기가 큰 텍스쳐로 정확하게 그려주고
멀리 거리에 있는 것은 크기가 작은 텍스쳐로 그려주므로
버퍼에 들어가는 텍스쳐 용량을 작게한다
mipmap을 아틀라스 텍스쳐로 사용하면 1.5배의 용량을 사용한다
POST FILTER
포스트필터는 GPU에 렌더링 텍스쳐를 이용하여 효과를 주는거다
포스트필터 효과 중 하나인 Glour를 보면
GPU에 텍스쳐를 전송하고 GPU에 전송된 렌더링 텍스쳐에
Alpha값을 조정하여 기존 텍스쳐와 합쳐 렌더링을 한다
이때 렌더링 텍스쳐가 정밀도를 크게 줄 필요가 없으면 기존에 텍스쳐 크기보다
크기를 줄여서 전송하면 연산에 이점을 줄 수 있다
강체(RigidBody)
물리학에서 형태가 고정되어 변하지 않는 물체를 가리킨다.
강체는 외력이 가해져도 모양이나 크기가 변형되지 않는다.
힘이 적용되는 물체에 기본단위
힘 , 중력등을 통하여 운동 상태를 변화시킨다
Collider
오브젝트가 다른 오브젝트와 상호작용을 하는
충돌 영역을 설정 해둔 것
기본적으로 오브젝트에 메쉬는 충돌과 연관이 없다
예전에 하드웨어가 좋지 않을 시절에는 간단한 원과 사각형 등으로
콜라이더를 이뤘지만 AAA게임에서는 메쉬와 유사한 콜라이더를 적용한다
충돌 감지
실제로 콜라이더를 가진 오브젝트끼리 충돌하면
충돌된 점과 충돌 벡터를 이용하여 물리연산을 한다
다양한 알고리즘을 통하여 연산을 하는데
Contact point 감지 , AABB , BVH , SAP 등이 있다
빙산의 일각…
공부는 꾸준히
발표를 들어주셔서 감사합니다

More Related Content

What's hot

Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기JP Jung
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환Yggdrasil610
 
유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석SangYun Yi
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)포프 김
 
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전Sukwoo Lee
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술Ki Hyunwoo
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희changehee lee
 
Game Visual Art Technologies
Game Visual Art TechnologiesGame Visual Art Technologies
Game Visual Art TechnologiesSangYun Yi
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례SangYun Yi
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2Kyoung Seok(경석) Ko(고)
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shadingMinGeun Park
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술henjeon
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Dae Hyek KIM
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화 tartist
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)Sukwoo Lee
 
Ndc2012 최지호 텍스쳐 압축 기법 소개
Ndc2012 최지호 텍스쳐 압축 기법 소개Ndc2012 최지호 텍스쳐 압축 기법 소개
Ndc2012 최지호 텍스쳐 압축 기법 소개Jiho Choi
 
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개진현 조
 

What's hot (20)

Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기Unity3D로 풀3D web mmorpg 만들기
Unity3D로 풀3D web mmorpg 만들기
 
게임 개발을 위한 렌더링 기법 한성환
게임 개발을 위한 렌더링 기법   한성환게임 개발을 위한 렌더링 기법   한성환
게임 개발을 위한 렌더링 기법 한성환
 
유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석유니티 게임 그래픽스 아트 개발 사례 분석
유니티 게임 그래픽스 아트 개발 사례 분석
 
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
스크린 스페이스 데칼에 대해 자세히 알아보자(워햄머 40,000: 스페이스 마린)
 
Gametech2015
Gametech2015Gametech2015
Gametech2015
 
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
진화하는 컴퓨터 하드웨어와 게임 개발 기술의 발전
 
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
NDC2016 프로젝트 A1의 AAA급 캐릭터 렌더링 기술
 
[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희[Kgc2012] deferred forward 이창희
[Kgc2012] deferred forward 이창희
 
Game Visual Art Technologies
Game Visual Art TechnologiesGame Visual Art Technologies
Game Visual Art Technologies
 
Motion blur
Motion blurMotion blur
Motion blur
 
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
Unity3D 엔진을 활용한 게임환경 분석 및 3D 그래픽스 기술 /제작 사례
 
구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2구세대 엔진 신데렐라 만들기 최종본 유트브2
구세대 엔진 신데렐라 만들기 최종본 유트브2
 
gv004 ver0.1
gv004 ver0.1gv004 ver0.1
gv004 ver0.1
 
[0326 박민근] deferred shading
[0326 박민근] deferred shading[0326 박민근] deferred shading
[0326 박민근] deferred shading
 
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술Ndc2010 전형규   마비노기2 캐릭터 렌더링 기술
Ndc2010 전형규 마비노기2 캐릭터 렌더링 기술
 
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
Ndc17 - 차세대 게임이펙트를 위해 알야아할 기법들
 
모바일 게임 최적화
모바일 게임 최적화 모바일 게임 최적화
모바일 게임 최적화
 
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
2017 12 09_데브루키_리얼타임 렌더링_입문편(3차원 그래픽스[저자 : 한정현] 참조)
 
Ndc2012 최지호 텍스쳐 압축 기법 소개
Ndc2012 최지호 텍스쳐 압축 기법 소개Ndc2012 최지호 텍스쳐 압축 기법 소개
Ndc2012 최지호 텍스쳐 압축 기법 소개
 
[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개[1002 조진현]unity3d 소개
[1002 조진현]unity3d 소개
 

Similar to [데브루키]노대영_프린이를 위하여(프로그래밍 어린이)

내 손에 픽셀을 쥐어다오
내 손에 픽셀을 쥐어다오내 손에 픽셀을 쥐어다오
내 손에 픽셀을 쥐어다오KwangSam Kim
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기changehee lee
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)민웅 이
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기강 민우
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬현찬 양
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)해강
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링Sukwoo Lee
 
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blogozlael ozlael
 
Landscape 구축, Unreal Engine 3 의 차세대 terrain system
Landscape 구축, Unreal Engine 3 의 차세대 terrain systemLandscape 구축, Unreal Engine 3 의 차세대 terrain system
Landscape 구축, Unreal Engine 3 의 차세대 terrain systemdrandom
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기YEONG-CHEON YOU
 
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원강 민우
 
[1106 조진현] if you( batch rendering )
[1106 조진현] if you( batch rendering )[1106 조진현] if you( batch rendering )
[1106 조진현] if you( batch rendering )진현 조
 
2015.12.10 defferd renderring_
2015.12.10 defferd renderring_2015.12.10 defferd renderring_
2015.12.10 defferd renderring_재현 최
 
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템2D RPG 개발 이론 + 티뮤리티 개발 포스트모템
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템WooSung Jeon
 
글꼴 렌더링 이야기
글꼴 렌더링 이야기글꼴 렌더링 이야기
글꼴 렌더링 이야기Young-jun Jeong
 
아일렛 온라인에서 사용한 블럭 렌더링 소개
아일렛 온라인에서 사용한 블럭 렌더링 소개아일렛 온라인에서 사용한 블럭 렌더링 소개
아일렛 온라인에서 사용한 블럭 렌더링 소개정만 김
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCHo Gyu Lee
 

Similar to [데브루키]노대영_프린이를 위하여(프로그래밍 어린이) (20)

내 손에 픽셀을 쥐어다오
내 손에 픽셀을 쥐어다오내 손에 픽셀을 쥐어다오
내 손에 픽셀을 쥐어다오
 
[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기[Kgc2013] 모바일 엔진 개발기
[Kgc2013] 모바일 엔진 개발기
 
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
크게, 아름답게,빠르게, 일관되게 만들기: Just Cause 2 개발에서 배운 교훈들 (GPU Pro)
 
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
[IGC 2016] 넷게임즈 김영희 - Unreal4를 사용해 모바일 프로젝트 제작하기
 
실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬실전프로젝트 정서경 양현찬
실전프로젝트 정서경 양현찬
 
[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)[14.10.21] Far Cry and DX9 번역(shaderstudy)
[14.10.21] Far Cry and DX9 번역(shaderstudy)
 
2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링2018.02.03 이미지 텍스처링
2018.02.03 이미지 텍스처링
 
Modern gpu optimize blog
Modern gpu optimize blogModern gpu optimize blog
Modern gpu optimize blog
 
Modern gpu optimize
Modern gpu optimizeModern gpu optimize
Modern gpu optimize
 
Landscape 구축, Unreal Engine 3 의 차세대 terrain system
Landscape 구축, Unreal Engine 3 의 차세대 terrain systemLandscape 구축, Unreal Engine 3 의 차세대 terrain system
Landscape 구축, Unreal Engine 3 의 차세대 terrain system
 
나만의 엔진 개발하기
나만의 엔진 개발하기나만의 엔진 개발하기
나만의 엔진 개발하기
 
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
[IGC2018] 에픽게임즈 신광섭 - 언리얼엔진4 포트나이트 멀티플랫폼 개발 지원
 
Devtree illu
Devtree illuDevtree illu
Devtree illu
 
[1106 조진현] if you( batch rendering )
[1106 조진현] if you( batch rendering )[1106 조진현] if you( batch rendering )
[1106 조진현] if you( batch rendering )
 
2015.12.10 defferd renderring_
2015.12.10 defferd renderring_2015.12.10 defferd renderring_
2015.12.10 defferd renderring_
 
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템2D RPG 개발 이론 + 티뮤리티 개발 포스트모템
2D RPG 개발 이론 + 티뮤리티 개발 포스트모템
 
Color Control
Color ControlColor Control
Color Control
 
글꼴 렌더링 이야기
글꼴 렌더링 이야기글꼴 렌더링 이야기
글꼴 렌더링 이야기
 
아일렛 온라인에서 사용한 블럭 렌더링 소개
아일렛 온라인에서 사용한 블럭 렌더링 소개아일렛 온라인에서 사용한 블럭 렌더링 소개
아일렛 온라인에서 사용한 블럭 렌더링 소개
 
Ndc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABCNdc14 분산 서버 구축의 ABC
Ndc14 분산 서버 구축의 ABC
 

More from 대영 노

Dev rookie codecomplete-1
Dev rookie codecomplete-1Dev rookie codecomplete-1
Dev rookie codecomplete-1대영 노
 
Google c++codingconvention
Google c++codingconventionGoogle c++codingconvention
Google c++codingconvention대영 노
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box대영 노
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern대영 노
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디대영 노
 

More from 대영 노 (7)

Dev rookie codecomplete-1
Dev rookie codecomplete-1Dev rookie codecomplete-1
Dev rookie codecomplete-1
 
Unrealjs
UnrealjsUnrealjs
Unrealjs
 
Google c++codingconvention
Google c++codingconventionGoogle c++codingconvention
Google c++codingconvention
 
Umg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation BoxUmg ,이벤트 바인딩, Invaidation Box
Umg ,이벤트 바인딩, Invaidation Box
 
[Dev rookie]designpattern
[Dev rookie]designpattern[Dev rookie]designpattern
[Dev rookie]designpattern
 
Start unreal
Start unrealStart unreal
Start unreal
 
[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디[데브루키]노대영_알고리즘 스터디
[데브루키]노대영_알고리즘 스터디
 

[데브루키]노대영_프린이를 위하여(프로그래밍 어린이)

  • 2. 참고 자료 • 일본 반다이 남코 프로그래머 저자 • 8bit 시절 게임 부터 현재까지 • 게임에서 개발 허들을 넘는 • 여러 기술들을 설명하고 있음 • 하드웨어도 간단히 알아보자 • 스터디 보다는 책 리뷰
  • 3. 게임 개발이 하고 싶어요… oh my google I love Git Hub Thank you overstack Youtube => 공부가 필요해
  • 4. • 게임 기능만을 위한 전용 게임기 => PC , MOBILE • 하드웨어 기능이 더욱 더 향상 되었다 게임기의 구성
  • 5. 메모리가 하는 일 디스크 메모리 디스크 메모리 필요한 정보를 읽는다 불필요한 것을 삭제
  • 6. CPU가 하는 일 CPU (Central Processing Unit) 프로그램의 연산처리를 한다 메모리에 있는 값을 참조하여 연산하고 다시 메모리로 전달 한다 메모리1. 플레이어의 좌표를 읽어온다CPU 제어기 입력신호를 전달 ex) 캐릭터 이동 2. 제어기의 입력값 만큼 연산하여 플레이어 좌표를 갱신한다 디스플레이에 표시한다
  • 7. 메모리 메모리 구성 단위 메모리 크기 단위 메모리는 주소값(어드레스)를 가지고 있다 메모리는 유한 하며 그에 맞게 적절하게 사용해야 한다
  • 8. 메모리 단편화 플레이어 정보 게임 레벨 정보 몬스터 정보 메모리를 할당과 해제를 하다보면 메모리의 단편화(파편화)로 인하여 다른 메모리를 적재할 수 없는 경우가 생길수 있음 원치 않는 실행이 야기 될수 있음 플레이어 정보 게임 레벨 정보
  • 9. 메모리 단편화 해결 카테고리를 나눠 관리한다 플레이어 정보 게임 레벨 정보 몬스터 정보 UI 정보 소용량 전용 영역과 대용량 전용 영역을 따로 관리한다 소용량 전용 영역 대용량 전용 영역 일정 시간마다 재배치 컴팩션(GC)를 한다 재배치 하는데 자원이 소요됨 이러한 문제 말고도 메모리 누수 문제도 있기에 사용이 끝난 데이터는 해제를 잘 해주자
  • 10. 디스크 HDD 디스크 헤드를 움직여 데이터를 읽어온다 (용량 대비 가격 쌈) SSD 페이지 기법을 이용하여 데이터를 저장 (용량 대비 가격 비쌈) 헤드가 디스크를 읽는데 물리적 시간이 소요되므로 디스크 트랙에 데이터 배치를 효율적으로 해야 빠르게 프로그램이 수행 될 수 있다
  • 11. 디스크 데이터 배치 3 1 2 1 2 3데이터를 읽는 순으로 잘 배치해줘서 헤드 방향을 바꾸는 일을 줄이도록 한다 자주 쓰이는 정보 자주 쓰이지 않는 정보 자주 쓰이는 정보를 내부에 배치하여 더 빠르게 읽어오게 한다(CLV 방식) 플레이어 정보 게임 레벨 정보 게임 레벨 정보 하나의 파일로 정리해서 한번에 읽어온다 하지만 메모리를 많이 확보해야한다
  • 12. 압축과 복원 데이터를 그대로 적재하지 않고 데이터를 압축하여 배치하면 효율적으로 디스크를 사용할 수 있다 압축된 데이 터 압축된 데이터 해제된 데이터 데이터를 사용할 때는 압축된 데이터를 복원 해줘야한다 복원된 데이터는 압축된 데이터보다 크기가 더 크기 때문에 이점을 고려해줘야한다 안 쓰는 데이터는 되도록 넣지 않는게 가장 좋다
  • 13. 프레임 제어기 처리 제어기 처리 게임은 메인 루프 안에서 계속 처리를 통하여 게임이 진행된다 제어기 입력을 가장 우선 처리하여 로직을 짜는게 도움이 된다 일정한 시간의 간격이 필요하다 수직 동기의 시간 1/60 초를 한 프레임으로 쓴다 게임 한 프레임 처리 시간이 1/60 초를 넘을 경우 지연 현상이 생길 수 있으므로 게임에 적합한 프레임을 이용하도록한다
  • 14. 더블 버퍼 프레임 버퍼가 하나 일 때 버퍼를 더 준비하여 미리 그려놓고 교체해준다
  • 16. 블록 구성도 VRAM 과 eDRAM , 코프로세서를 주로 알아보겠습니다
  • 17. VRAM , EDRAM VRAM GPU에서 작성과 불러오기를 실행하기 쉬운 메모리를 말합니다. GPU에 VRAM존재시에 프레임 버퍼는 VRAM에서만 존재하게 된다 GPU의 그림은 VRAM에서 표시 eDRAM 메모리가 VRAM에 비해 용량이 작지만 읽고 쓰기를 더욱더 빠르게 실행시킬 수 있다. GPU는 eDRAM에만 그림을 저장 할 수 있다. 메모리 사용의 유연성을 가질 수 있다 좀 더 빠른 처리가 가능 하지만 용량이 작아 작업을 여러번 반복 해야함
  • 18. 코프로세서 코프로세서 보조프로세서 또는 보조 처리기라고 부른다 병렬로 처리가 가능하며 코프로세서는 부동소수점 , 그래픽 , 신호처리, 문자열 연산 등의 기능을 수행한다.
  • 19. 곱셉 , 나눗셈의 속도를 높이자 이전에 연산 능력이 느렸을때는 곱셈 나눗셈을 비트시프트 << , >> 를 이용하여 연산을 해주었다.
  • 20. 고정소수점 vs 부동소수점 고정 소수점 부동 소수점 정수부분(24비트) 소수부분(8비트) 실수 연산을 할 때 원하는 정확한 얻을 수 있음 대략적으로 정한 수치를 가까워지도록 설정 부호부 지수부 가수부 FPU(부동 소수점 장치) FPUCPU 부동 소수점 연산 전용을 위한 장치 를 장착하여 연산속도를 높였다
  • 22. 쿼터니언 짐벌락 회피 뿐 아니라 , 메모리 , 연산 속도에도 영향을 줌
  • 23. 애니메이션 3D 오브젝트는 수 많은 정점(vertex)로 이루어져있다 60fps의 전제로 애니메이션을 더 효율적으로 사용하는 과정을 알아봅시다
  • 24. 애니메이션 정점 한 정점은 16바이트가 필요하고 한 프레임마다 그 크기가 필요하다 좀 더 효율적으로 만들 수 있는 방법은 없을까? X Y Z W 합계 16바이트 ex) 15000개의 정점을 가진 오브젝트 60fps 애니메이션 파일의 크기 16 x 15000 x 60 =14,400,4000 ≒ 14MB
  • 25. 관절 관절 정보는 위치 뿐만 아니라 회전 정보까지 필요하다 4x4 행렬 데이터가 필요하므로 총 64바이트의 데이터가 필요하다 14MB => 0.1MB ex) 15000개의 정점을 가진 오브젝트를 30개의 관절로 구성한 애니메이션 파일의 크기 64 x 30 x 60 = 115,200 ≒ 0.1MB
  • 26. 관절 관절 정보는 위치 뿐만 아니라 회전 정보까지 필요하다 4x4 행렬 데이터가 필요하므로 총 64바이트의 데이터가 필요하다 14MB => 0.1MB 뿐만 아니라 애니메이션을 다른 캐릭터에도 적용 시킬 수 있다 ex) 15000개의 정점을 가진 오브젝트를 30개의 관절로 구성한 애니메이션 파일의 크기 64 x 30 x 60 = 115,200 ≒ 0.1MB
  • 27. 애니메이션 레이어 , 계층 구조 중복되지 않게 나눈다 탈부착 하기에도 용이 계층 구조를 두고 관절을 움직인다 자식 => 부모 순으로 회전 평행이동을 한다
  • 28. FK 상위 계층이 하위 계층에 영향을 주는 것 ex) 어깨가 움직이는 위치에 따라 팔꿈치 손의 위치를 결정한다 특정 위치로 하위 오브젝트를 옮기는 것이 어렵다 ex) 울퉁불퉁한 땅에서 발의 위치를 조정하기 어렵다
  • 29. IK(inverse kinematic) 역운동학 처리 약자이다 FK와 상반된 개념이며 기존에 상위 오브젝트에 따라 하위 오브젝트가 영향을 받던 것을 반대로 영향을 준다 ex) 발의 위치가 골반의 위치에 영향을 준다 반복을 통해 목표점에 도달하게한다 과부하 처리와 자연스럽게 보이지 않을 가능성이 있다
  • 30. 좀 더 줄여보자 대부분 애니메이션은 관절 간의 거리가 바뀌지 않는다 이 점을 이용하여 회전 정보만사용하자 ex) 4 x 30 x 60 = 28,800 ≒ 0.28KB before) 112KB 회전 값을 나타내기 때문에 w요소가 필요없음 w요소 제거 ex) 3 * 30 * 60 = 21,600 ≒ 21KB 0~ 360도 까지 회전을 제한하면 부동 소수점을 다 쓸 필요 없음 ex) 1 * 30 * 60 = 7,200 ≒ 7KB 관절이 변경되면요? 관절이 변경되는 데이터를 넣어주면 된다 x(10bit) y(10bit) z(10bit)
  • 31. 키프레임 변화가 있는 부분에 키프레임을 설정하여 용량을 줄인다 프레임간에 보간을 하여 처리 ex) 4 * 30 * 10 =1,200 ≒ 1KB 4바이트 X 16요소 X 30관절 X 60 프레임 = 115,200바이트 4바이트 X 4요소 X 30관절 X 60 프레임 = 28,800바이트 4바이트 X 3요소 X 30관절 X 60 프레임 = 21,600바이트 4바이트 X 1요소 X 30관절 X 60 프레임 = 7,200바이트 4바이트 X 1요소 X 30관절 X 10 프레임 = 3,600바이트 위치정보를 골격 데이터에 분리 & 회전 정보를 쿼터니언화 위치정보를 X축, Y축 , Z축 각각에 저장한다 회전정보 3요소를 4바이트에 저장한다 데이터가 저장되어 있는 프레임을 줄인다
  • 32. RGBA R(8bit) G(8bit) A(8bit)B(8bit) 모니터에 색이 표현 되는 한 점을 픽셀이라한다 픽셀을 Red , Green , Blue 의 값을 조합하여 색을 표현하는 RGB에 불투명도(Alpha)를 추가하여 색을 표현한다
  • 33. 정점 정보 요소 내역 크기 좌표 XYZW 4요소이고, 각각 부동소수점 소수 4 X 4 바이트 = 16 바이트 정점컬러 RGBA 4요소이고 , 각각 1바이트 4 바이트 텍스처좌표 ST 좌표에 따른 2요소이고, 각각 부동소수점 소수 2 X 4 바이트 = 8 바이트 법선 XYZW 4요소이고 , 각각 부동소수점 소수 4 바이트 X 4 바이트 = 16 바이 트 ex) 15000개의 정점이 있는 오브젝트 16 + 4 + 8 + 16 = 44바이트 = 660,000바이트 ≒ 645KB
  • 34. 정점 좌표 정점은 컴퓨터 그래픽스에서 오브젝트를 이루는 기본 단위(점)이다 3D에서 정점좌표는 (x,y,z)의 정보를 가지고 있다 그러나 벡터와 사용할 때 방향과 좌표를 구분해주기 위해 w성분을 사용하여 0은 방향을 나타내는 성분 1은 좌표를 나타내는 성분 으로 표현한다 요소 내역 크기 좌표 XYZW 4요소이고, 각각 부동소수점 소수 4 X 4 바이트 = 16 바이트
  • 35. 정점 컬러 각 정점마다 색의 정보가 포함 되어있다 각 정점간의 색의 값을 보간하여 그 사이에 있는 픽셀에 색을 표현한다 요소 내역 크기 정점컬러 RGBA 4요소이고 , 각각 1바이트 4 바이트
  • 36. 텍스쳐 좌표 요소 내역 크기 텍스처좌표 ST 좌표에 따른 2요소이고, 각각 부동소수점 소수 2 X 4 바이트 = 8 바이트 정점에 그려질 픽셀에 텍스쳐 정보를 담는다 텍스쳐의 정보를 x,y로 안 하는 이유는 좌표와 구분하기 위해서이고 대부분 0.0~1.0 사이의 값을 이용하는데 이 이유는 정점의 위치가 바뀔때 텍스쳐의 좌표를 바꾸는 수고를 없애기 위하여 0~1의 값을 사용 ex) u = 0.5 x축으로 반정도의 텍스쳐 정보를 읽어온다
  • 37. 법선 요소 내역 크기 법선 XYZW 4요소이고 , 각각 부동소수점 소수 4 바이트 X 4 바이트 = 16 바이 트 디스플레이에서 빛의 값과 오브젝트를 연산 하여 화면에 표현하는 것을 라이팅이라하며 라이팅을 표현하기 위해서 반사 벡터를 구해야한다 이를 구하기 위해서는 면에 평면에 수직방향을 나타내는 벡터 법선벡터가 필요 플랫 , 고라우드 , 퐁 등의 쉐이딩이 있다
  • 38. Static Mesh 빛의 방향이 바뀌지 않는다는 조건에서 움직이지 않는 물체와 움직이는 물체를 나눠서 정점 정보를 저장한다 https://www.slideshare.net/KooKyeongWon/5-8853384 좌표 정점컬러 텍스쳐 좌표 법선 DYNAMIC O X O O STATIC O O O X 움직이는 오브젝트는 라이팅 처리를 해줘야하기 때문에 법선이 필요하다 정점 컬러는 라이팅으로 인해 동적으로 생성되서 정점컬러가 필요 없음 ex) 40 X 15,000 = 600,000 바이트 ≒ 586KB 움직이지 않는 오브젝트는 라이팅 처리를 안 하므로 정점컬러가 필요 정점 컬러 정보를 가지고 있기 때문에 법선 정보가 필요없음 ex) 28 X 15,000 = 420,000 바이트 ≒ 410KB
  • 39. 정점 정보를 줄여보자 요소 내역 크기 좌표 XYZW 4요소이고, 각각 부동소수점 소수 4 X 4 바이트 = 16 바이트 정점컬러 RGBA 4요소이고 , 각각 1바이트 4 바이트 텍스처좌표 ST 좌표에 따른 2요소이고, 각각 부동소수점 소수 2 X 4 바이트 = 8 바이트 법선 XYZW 4요소이고 , 각각 부동소수점 소수 4 바이트 X 4 바이트 = 16 바이 트 좌표 W요소는 반드시 1이 되므로 생략가능 => 16 바이트 => 12바이트 정점컬러 정밀도를 줄여서 사용이 가능하다 => 4바이트 => 2바이트 텍스쳐 좌표 0.0~1.0 사이에 대부분 쓰므로 정밀도를 줄인다 => 4바이트 => 2바 이트 법선 W요소는 항상 0이므로 생략가능 또한 정규화된 벡터이므로 1바이트 정도의 고정 소수점 소수로 사용 가능 16 바이트 => 12바이트 => 3바이트 ex)12+ 2 + 2 + 3 = 21 21바이트 X 15,000 = 315,000 ≒ 308KB
  • 40. 트라이앵글 스트립 중복 되는 정점을 제거하여 GPU에 전달한다 GPU에 전달하는 양을 줄여 부담을 줄인다 그리기 명령 그리기 명령 … 정점 데이터 정점 데이터 … GPU
  • 41. 뎁스버퍼 Z-버퍼라고도 한다 디스플레이에 화면을 표현 할때 같은 픽셀에 다른 물체가 그려지면 보내준 버퍼 값의 따라 어느것을 그릴지 결정을 한다
  • 42. 스텐실버퍼 뎁스 버퍼에서 좀 더 확장된 개념으로 스텐실 버퍼의 옵션 값을 이용하여 통과 할 스텐실 버퍼값을 통해 그려질 순서를 결정한다
  • 43. 빌보드 항상 카메라 정면을 바라보게 그리는 것이다 주로 파티클에 많이 쓰인다 Y축 빌보드 , 전체화면 빌보드 등이 있다
  • 44. 압축 픽셀 , 마하밴드 , 디더링 R G B A R G B R G B A 압축 용량은 줄어드나 띠가 보이는 현상이 생긴다 디더링을 이용하여 주변 픽셀의 색깔을 섞어 마하밴드 현상을 피한다 색 정밀도를 낮춰 압축된 픽셀로 표현 가능
  • 45. HDR 색 ,명암 대비를 좀 더 주기위해 색의 값의 정밀도를 높여 표현한다 기존에 0~1외에 범위를 허용하는 것을 원칙으로 한다
  • 46. 팔렛트 텍스쳐 텍스쳐에 있는 필요한 색 정보를 따로 저장하여 저장해둔다 대부분 256색을 저장하며 2d게임에서 주로 이용한다 텍스쳐 픽셀에 참조하는 색을 바꿈으로써 다양한 색의 캐릭터를 만들 수 있는 장점도 있다
  • 47. DXT 압축 압축률이 뛰어난 압축이다 DXT_N 숫자가 올라 갈수록 압축률이 높아진다 픽셀을 묶어서 색과 알파값의 정보를 압축한다 압축을 하면 색 정밀도가 흐려질수도 있어서 적절한 압축을 사용을 권장
  • 48. LOD(level of detail) 정점으로 이뤄지는 삼각형이 많아 질수록 GPU연산이 많이 소모된다 멀리 있는 물체를 자세히 그리는 것은 유저들에게 크게 의미가 없는 일이다 그래서 멀리 있는 오브젝트는 좀 더 단순화한 오브젝트로 대체해줘서 연산의 이점을 채운다
  • 49. MIPMAP 오브젝트가 그려질때 텍스쳐가 GPU 버퍼에 들어간다 카메라 거리에 따라 모니터 픽셀에 그려지는 값이 다르다 가까운 거리는 크기가 큰 텍스쳐로 정확하게 그려주고 멀리 거리에 있는 것은 크기가 작은 텍스쳐로 그려주므로 버퍼에 들어가는 텍스쳐 용량을 작게한다 mipmap을 아틀라스 텍스쳐로 사용하면 1.5배의 용량을 사용한다
  • 50. POST FILTER 포스트필터는 GPU에 렌더링 텍스쳐를 이용하여 효과를 주는거다 포스트필터 효과 중 하나인 Glour를 보면 GPU에 텍스쳐를 전송하고 GPU에 전송된 렌더링 텍스쳐에 Alpha값을 조정하여 기존 텍스쳐와 합쳐 렌더링을 한다 이때 렌더링 텍스쳐가 정밀도를 크게 줄 필요가 없으면 기존에 텍스쳐 크기보다 크기를 줄여서 전송하면 연산에 이점을 줄 수 있다
  • 51. 강체(RigidBody) 물리학에서 형태가 고정되어 변하지 않는 물체를 가리킨다. 강체는 외력이 가해져도 모양이나 크기가 변형되지 않는다. 힘이 적용되는 물체에 기본단위 힘 , 중력등을 통하여 운동 상태를 변화시킨다
  • 52. Collider 오브젝트가 다른 오브젝트와 상호작용을 하는 충돌 영역을 설정 해둔 것 기본적으로 오브젝트에 메쉬는 충돌과 연관이 없다 예전에 하드웨어가 좋지 않을 시절에는 간단한 원과 사각형 등으로 콜라이더를 이뤘지만 AAA게임에서는 메쉬와 유사한 콜라이더를 적용한다
  • 53. 충돌 감지 실제로 콜라이더를 가진 오브젝트끼리 충돌하면 충돌된 점과 충돌 벡터를 이용하여 물리연산을 한다 다양한 알고리즘을 통하여 연산을 하는데 Contact point 감지 , AABB , BVH , SAP 등이 있다
  • 54. 빙산의 일각… 공부는 꾸준히 발표를 들어주셔서 감사합니다