본문 바로가기

전체 글

(152)
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 6 - OpenGL ES와 쉐이더 GPU 파이프 라인에 입력되는 정점 배열은 정점 위치와 노멀 등의 데이터를 저장하는데, 정점 쉐이더는 한 번에 한 정점을 처리한다. GPU는 수많은 코어(core)로 구성된 병렬 처리 구조를 가지고 있다. (다수의 정점을 동시에 처리하는데 적합하다.) 6.1 OpenGL ES와 쉐이딩 언어 OpenmGL ES는 정점 쉐이더(vertex shader) 와 프래그먼트 쉐이더라는 두 가지 프로그램을 필요로 한다. OpenGL ES의 쉐이더는 GPU에 특화된 언어로 작성하는데, 이를 OpenGL ES Shading Language라고 한다. 6.2 정점 쉐이더 GLSL은 C와 비슷한 언어이다. 하지만, GPU에서 작동하는 GLSL은 CPU에서 작동하는 C와는 분명하게 구분되는 자신만의 특징을 가진다. GLSL은..
[Unity] Addressable Asset System 에셋 번들(Asset Bundle)어드레서블 에셋 시스템(Addressable Asset System)을 알기 위해서는 에셋 번들에 대해서 이해를 하고 있어야 한다.   에셋(Asset)들을 묶은 파일 (모델, 텍스처, 프리펩, 씬 등 모든게 될 수 있다.)그래서 보통은 DLC용으로 많이 사용한다. 패치용/업데이트라던지 등등  특히나 모바일에서 에셋 번들을 사용하는 것은 필수적인 기능이라고 할 수 있다.하지만 에셋 번들의 경우 메모리에서 문제가 종종 발생하곤한다.코드도 많이 복잡해진다.   Ienumerator Start() { var bundleUrl = Path.Combine(remoteUrl, carBundleName); var webReq = UnityWebRequest.GetAssetBu..
[Open GL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 5 - 정점 처리 이 그림에서 파란색으로 보이는 쉐이더 부분은 프로그램과 동의어이다. 즉, 우리는 GPU 렌더링을 위해서 정점 쉐이더(vertex shader)와 프래그먼트 쉐이더(fragment shader)라는 두 가지 프로그램을 작성해야 한다. 반면, 래스터라이저(rasterizer)와 출력 병합기(output merger)는 하드웨어로 고정된 단계로, 정해진 연산과 기능만을 수행한다. 정점 쉐이더는 정점 배열에 저장된 모든 정점에 대해서 변환(transform)을 비롯한 다양한 연산을 수행한다. 래스터라이저는 변환된 정점들로 삼각형들을 조립한 후, 각 삼각형 내부를 차지하는 프래그먼트(fragment)를 생성한다. 프래그먼트는 컬러 버퍼의 한 픽셀을 갱신하는 데 필요한 데이터를 총칭하는 것이다. 래스터라이저가 출력..
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 4 - 좌표계와 변환 게임과 같은 3차원 가상 공간은 많은 물체들로 구성되어 있는데, 각 물체의 위치는 이동(translation)에 의해, 방향은 회전(rotation)에 의해 결정된다. 또한 각 물체는 축소확대(scaling)될 수도 있다. 이러한 이동, 회전, 축소확대를 총칭하여 변환(transform)이라고 한다. 4.1 2차원 변환의 행렬 표현 4.1.1 축소 확대 4.1.2 회전 시계방향으로의 회전 행렬을 얻으려면 R(∂)에 ∂대신 -∂를 넣으면 된다. -∂만큼 회전은 2π-∂만큼 회전하는 것과 동일하다. 4.1.3 이동과 동차 좌표 축소확대와 회전은 이른바 선형 변환(linear transform)이라는 범주에 속한다. 축소확대와 회전 말고도 컴퓨터 그래픽스에서 자주 사용되는 또 다른 변환은 이동(translat..
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 3 - 모델링 3차원 물체를 표현하는 다양한 기법이 존재하지만, 실시간 그래픽스 영역에서는 폴리곤 메시를 압도적으로 많이 사용한다. 3.1 폴리곤 메시 오른쪽 그림, 폴리곤 메시와 같이 정점(vertex) 및 폴리곤과 같은 요소들을 명시적으로 정의하여 구를 표현할 수 있다. 게임을 비롯한 실시간 응용에서는 폴리곤 메시를 선호하는데, 그 이유는 GPU가 폴리곤 메시 처리에 최적화되어 있기 때문이다. 하지만, 폴리곤 메시는 정확한 표현법이 아닌 근사적 표현법이라는 사실을 염두해 두자. 가장 간단한 폴리곤은 삼각형이다. 폴리곤 메시 중 가장 널리 쓰이는 것은 삼각형으로만 구성된 메시, 즉 삼각형 메시(triangle mesh)이다. 하지만 모델링 작업을 위해서는 사각형 메시(quad mesh)가 선호된다. 사각형 메시가 주..
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 2 - 수학 기초 2.1 행렬과 벡터 행렬은 말 그대로 행(row)과 열(column)로 구성되는데, m개의 행과 n개의 열을 가진 행렬은 다음 그림과 같이 표현된다. 행렬의 곱은 다음과 같이 곱해질 수 있다. A의 크기가 l*m이고, B의 크기가 m*n이라면, AB의 크기는 l*n이 된다. - (x, y), (x, y, z)는 행벡터(row vector)라고 부른다. 어떤 행렬 M이 주어졌을 때, 그것의 행과 열을 바꿔 놓은 것을 전치행렬(transpose)이라고 하며 다음과 같이 표기한다. Mv의 행렬-벡터의 곱셈은 다음과 같이 표현할 수 있다. OpenGL은 열벡터를 사용하고 Mv와 같이 행렬-벡터 곱셈을 표현하는 반면, Direct3D는 행벡터를 사용하고 v^TM^T와 같은 방식을 사용한다. 단위 행렬은 정사각행렬..
[OpenGL ES를 이용한 3차원 컴퓨터 그래픽스 입문] 챕터 1 - 서론 컴퓨터 그래픽스 컴퓨터를 이용하여 영상(Image)을 생성하는 작업 실시간 그래픽스 게임. 실시간 그래픽스 시스템의 성능은 1초당 몇 프레임을 만들어낼 수 있느냐, 즉 FPS로 측정된다. 비실시간 그래픽스 영화 특수효과 등에서는 실사와 구분하기 어려운 정교한 영상을 만들어내기 위해서 프레임당 몇 분에서 몇 시간을 투여하기도 한다. 1.1 컴퓨터 그래픽스 제작 단계 가상의 그래픽스 환경을 구성하는 각각의 물체를 컴퓨터가 처리할 수 있는 방식으로 표현한 것을 모델(Model)이라고 한다. 이러한 모델들은 폴리곤(Polygon; 다각형)들로 구성된다. 이렇게 폴리곤으로 구성된 물체는 폴리곤 메시(Polygon mesh)라 부른다. 3차원 물체에 입혀져서 시각적 사실성을 높여주는 **텍스처(texture)**의..
[게임 프로그래밍 패턴] 1장 - 구조, 성능, 게임 구조, 성능, 게임 좋은 소프트 웨어 구조란? 뭔가를 변경 또는 고쳐야 할 때 그럴 줄 알았다는 듯이 코드가 준비되어 있는 걸 의미 구조는 변경과 관련이 있다. 누군가는 코드를 고쳐야 한다. 얼마나 쉽게 변경할 수 있냐가 코드 설계를 평가하는 척도 커플링과 디커플링 양쪽 코드 중 한쪽이 없으면 코드를 이해할 수 없을 때 두 코드는 커플링 되어 있다고 말할 수 있다. (작업에 들어가기 전에 알아야 할 지식의 양을 줄여야 한다. 그렇기 때문에 커플링이 많이 되어 있으면 그만큼 알아야 할 지식 및 코드가 많아지기 때문에 커플링은 좋지 않다 !) 어느 한 코드를 변경했을 때 다른 코드를 변경하지 않아도 되는 걸 디커플링이라고 한다. 기능 추가나 코드 변경을 할 때마다 나머지 코드와 깔끔하게 통합될 수 있도록 노..