그래픽스/공통

    그래픽스 API 정의와 비교 분석

    로우 레벨 그래픽스 API들(Vulkan, DirectX, Metal, WebGPU)은 GPU와 구조 모델이 비슷하다. GPU는 원래 고정적인 코드들을 가졌었으며 수정 또한 불가능에 가까워서 성능이 떨어졌다. 이를 극대화 시키기 위해서 드라이버라는걸 새로 개발했다. 호출 순서 API 초기화 : GPU와 통신하기 위해 틀대를 만듬. 에셋 로딩 : 렌더링에 필요한 데이터 (셰이더) 또는 GPU와 통신하기 위한 명령들. 에셋 업데이트 프레젠테이션 : 커맨드 버퍼를 커맨드 큐에 보낸 후 스왑체인을 활용해서 렌더링. 2 3 4 반복 (프로그램 종료할 때 까지) GPU가 작업이 끝날 때까지 대기하고 사용한 모든 포인터들을 해제하고 데이터를 초기화한다. 비교 분석 라이브러리 파일을 가져올 시 API를 사용하기 위해선..

    멀티 스레드 렌더링 (Multi Thread Rendering)

    왜 해야할까? Direct3D 11 이전의 그래픽스 API는 단일 스레드에서 실행되는 것을 중점으로 두고 설계되었다. 암시적인 동기화 지점이 존재해서 API를 호출하고 난 다음 GPU의 처리가 완료 되었을 때 이후의 코드가 실행된다, 문제는 이렇게 순서를 맞춰서 진행하는 방식은 CPU와 GPU를 최대로 활용하지 못하는 점이다. CPU 계산 중에 GPU는 제출된 명령이 없기 때문에 아무런 일도 하지않고 CPU의 처리를 기다리게 되고 렌더링 중에는 동기화 지점으로 인해서 CPU는 GPU의 처리가 끝날 때 까지 기다리게 된다. 따라서 CPU와 GPU가 비효율적으로 사용되지 않도록 스레드를 분리하여 렌더링과 CPU 계산이 동시에 이뤄지도록 해야한다. GPU가 무언가를 그리도록 요청하기 위해서 그래픽스 API를 ..

    폴리곤 메쉬 (Polygon Mesh)

    1. 폴리곤 메쉬(Polygon Mesh)란? 그래픽스에서 렌더링(표현)할 물체의 표현을 만드는 작업을 "모델링"이라고 한다. 한 예로 구를 표현하려면 좌측 그림처럼 구의 중점과 반지름을 가지고 우리가 아는 구의 방정식을 세울 수 있다 흔히 이런 형태의 함수는 음함수(Implicit Function)라고 하는데, 음함수는 GPU로 표현하기 어렵다. GPU에서 표현하기 어렵다는 이유 때문에 이런 음함수 표현 대신 부드러운 평면의 개수를 샘플링한다. 그러면 일정한 꼭지점이 샘플링 되는데, 그 꼭지점들을 선으로 이어서 다각형으로 만든 것을 대신 표현한다. 이렇게 도형 그 자체를 표현한 것이 아니라, 꼭지점을 샘플링해 선으로 이은 다각형을 폴리곤 메쉬라고한다. (GPU는 이러한 폴리곤 메쉬를 처리하는데 아주 최..

    사원수 (Quaternion : 쿼터니언)

    1. 사원수 (Quternion)이란? 3차원 그래픽에서 회전을 표현할 때, 행렬 대신 사용하는 수학적 개념으로 4개의 값으로 이루어진 복소수(Complex Number) 체계이다. 사원수는 행렬에 비해 연산 속도가 빠르고, 차지하는 메모리의 양도 적으며, 결과의 질에 있어 오류가 날 확률이 적다. 3개의 축에 대한 회전 연산을 동시에 적용하는 경우에 행렬을 사용하면 한 축이 소실되는 짐벌락 현상이 발행할 수 있는데, 사원수를 사용하면 이 현상을 막을 수 있다. 2. 사원수의 정의 사원수는 4차원 복소수 공간(Complex Space)의 벡터로서 다음과 같이 나타낸다. 사원수를 q = s + v 형태로 쓰기도 하는데, 여기서 s 는 q의 w 성분에 해당하는 스칼라(Scalar) 값이고, v는 q의 x, ..

    짐벌락 & 오일러 각 (Gimbal Lock & Euler Angle)

    1. 짐벌이란? 그림에서는 roll pitch yaw 세개가 바로 그 단일축이다. 자세히 보면 각각의 고리는 본인이 가진 축을 기준으로만 회전한다.각각의 고리는 각자의 단일축으로 회전하는데도 불구하고 파란 고리가 축에 관계없이 모든 방향으로 회전하는 것처럼 보이는 이유는 바로 고리들이 서로 연결되어있기 때문이다. 고리가 다른 고리에 자식으로 붙어있는 관계이기 때문에 각 축은 서로 종속적이다. 실제로 이러한 구조물을 선박에서는 자이로스코프, 나침판, 난로, 그리고 컵홀더까지 전후좌우로 흔들리더라도 수평을 이루도록 할 때 많이 쓰인다고 한다. 2. 오일러 각이란 오일러 각이란 오일러가 도입한 강체(rigid body)의 회전 시스템이다. (강체란 평행이동과 회전만 가능한 물체) 어떠한 강체가 3차원 공간 상..

    절두체 컬링 (Frustum Culling)과 클리핑 (Clipping)

    정의 3D 공간에는 다양한 오브젝트가 들어갈 수 있다. 360도로 오브젝트가 배치된 일반적인 상황이라 생각할 때, 시야 안에 있는 오브젝트는 전체 공간에 있는 오브젝트에 비해 굉장히 한정적이므로 절두체 컬링은 시야 밖에 있는, 렌더링 되지 않는 오브젝트를 걸러내기 위한 기법이다. 1. 여섯 개의 평면을 이용한 가장 기본적인 컬링 방식 카메라 시야 상, 하, 좌, 우 방향으로의 경계선이 되는 평면, 카메라 시야에 수직하며 가장 가까운 곳과 먼 곳의 시야 범위를 나타내는 평면으로 총 6개의 평면을 이용해 오브젝트가 절두체에 포함되는지를 계산하는 방식. 이름 정의 근평면(Near Plane) 카메라와 수직하며 제일 가까운 곳의 시야 범위를 나타내는 평면 원평면(Far Plane) 카메라와 수직하며 제일 먼 곳..

    렌더링 파이프라인 순서 및 기본 설명과 기본 지식 (Rendering Pipeline)

    고정 기능 파이프 라인( Fixed Pipeline ) - D3D에 미리 정해진 연산을 수행할 수 있도록 제공되는 기능이 고정기능 파이프라인이다. - 정해진 연산만 수행하므로 프로그래머가 GPU 연산에 관여할 수 없다. 프로그래머블 파이프라인 ( Programmable Pipeline ) - 고정 기능 파이프 라인에서 제공하는 것 이외의 효과를 내기 위해서 생겨난 프로그래머블 파이프 라인이다. - 프로그래머가 GPU의 연산에 직접 관여할 수 있다. - 고정적으로 제공하던 셰이더( Shader )를 프로그래머가 다양한 효과를 낼 수 있게끔 제공하게 되었다. 고정 기능 파이프라인과 프로그래머블 파이프라인의 차이점 - 프로그래머가 GPU 연산에 관여할 수 있냐? 없냐? 차이 < 정확하게 말하면, Fixed -..

    Low-Level Layer (HAL, HEL)

    HAL이란 Hardware Abstraction Layer의 약자로서, 컴퓨터 하드웨어와 소프트웨어 사이의 추상화 계층이다. 다음과 같은 성격을 지닌다. 소프트웨어가 수많은 종류의 하드웨어 상에서 별 차이 없도록 동작할 수 있도록 하는 역할을 하며, OS의 커널 또는 장치 드라이버에서 호출될 수 있다. 추상화 개념을 사용하는데, 추상화는 주어진 문제나 시스템 중에서 중요하고 관계있는 부분만을 분리하여 간결하고 이해하기 쉽게 만드는 과정이라고 할 수 있다. 하드웨어 부품에 따라 해야 할 복잡한 과정을 일관성 있고, 간략한 인터페이스로 제공하기 위해 같은 류의 하드웨어를 공통 명령어 집합으로 묶어두는데, 이를 "하드웨어 추상화"라고 한다. 소프트웨어와 하드웨어 사이에서 소프트웨어가 PC의 시스템 메모리, C..

    레이 트레이싱 (Ray Tracing)

    레이트레이싱은 1980년 'Turner Whitted'가 'An improved illumination model for shaded display' 논문에서 발표한 기법으로 이미지의 픽셀 하나하나를 통과하는 광선들이 있다 가정하고 그 광선(Ray)을 역추적(Trace)하는 방식이다. 쉽게 말해, 계속적으로 반사하는 빛을 최대한 현실처럼 똑같이 흉내내고자 하는 그래픽 작업(랜더링)이다. 레이트레이싱 기술은 장면과 대상이 되는 객체의 조명 환경을 매우 사실적으로 시뮬레이션하는 연산 집약적 렌더링 기술이다. RTX 그래픽카드는 튜링 GPU 기반 레이트레이싱을 통해 물리적으로 정확한 반사(reflections), 굴절(refractions), 그림자 및 간접 조명을 실시간으로 렌더링 할 수 있다. 현재의 엔비..