DX11 - 수퍼 샘플링 수퍼 샘플링의 이론은 해당 지점에 도달한 레이 픽셀을 다시 N개로 나누어 쏴준다 해당 픽셀의 N개의 레이를 다시 쏴맞추는 효과로 인해 그 하나의 픽셀 안에서 N개의 평균을 낸 뒤 해당 픽셀 값을 도출해내는 샘플링이다. 슈퍼 샘플링이란 샘플링할 때 즉, 하나만 샘플링만 하는 것이 아니라 추가로 샘플링을 하여 평균을 낸다라는 아이디어는 기본적으로 동일하나, 방법은 여러가지 방법이 있다. 그래픽스/DX11 2024.04.17
DX11 - 텍스춰링 적용 전 Point Texturing Linear Texturing 이론 선형 보간법(Linear Interpolation) 이용해서 값 구함 해당 값을 적용해서 최종적으로 찾고싶은 컬러 값을 샘플링하는 것이 가능하다. 이를 Linear Sampling 한다라고 말한다. 2차원 공간에서 1차원의 선형 보간법(Linear Interpolation) 을 두번 반복하는 것을 BiLinear Interpolation 이라고 한다. Linear Texturing 적용 높은 해상도 이미지를 적용한 예시 텍스춰링은 단순히 이미지를 3D 모델에 씌워주는 것 뿐만 아니라 마치 그래픽스를 다루는 개발자가 아주 자세하고 복잡한 3D 모델을 렌더링한 것 같은 결과를 매우 효율적으로 만들어준다. 이는 언리얼에서 고해상도 그래픽.. 그래픽스/DX11 2024.04.03
DX11 보간 벡터를 이용한 선형보간 이것 역시 레이트레이싱을 통해서 그릴 영역을 구하는 것이다 개인적인 생각으로는 dx12 레이트레이싱 예제와 비슷했다. 그래픽스/DX11 2024.03.27
게임 객체와 컴포넌트의 관계 게임 객체란? 게임 객체는 게임 세계에서 자신을 갱신하거나 그리거나 또는 갱신과 그리기 둘 다 수행하는 모든 오브젝트를 가리킨다. 게임 객체를 표현하는 데는 몇 가지 방법이 있다. 일부 게임에서는 객체 계층 구조를 사용하고, 다른 게임에서는 합성을 사용하며, 또 다른 게임에서는 매우 복잡한 방법을 활용한다. 구현 방법에 상관없이 게임은 이러한 게임 객체를 추적하고 갱신하는 방법이 필요하다. 게임 객체의 타입 일반적인 타입의 게임 객체는 루프의 '게임 세계 갱신' 단계 동안 갱신되며, '출력 생성' 단계에서는 그려진다. 모든 캐릭터나 생명체 또는 움직일 수 있는 오브젝트는 이 범주에서 벗어나지 않는다. 예를 들어 슈퍼 마리오 브라더스에서 마리오나 적들 그리고 모든 동적인 블록은 게임이 갱신하거나 그리는 게.. 그래픽스/OpenGL 2024.03.26
DX11 구와 삼각형 그리기 삼각형 그리기 원리는 벡터 계산으로 내적과 외적 그리고 노멀벡터를 이용해서 레이트레이싱을 이용한다. 위 과정의 방향과 순서를 정해주어 그릴 영역을 정해주는 것이다. 드럽지만 대충 필기한 내용이다. 해당 내용의 최적화된 코드는 인터넷에도 많고 엔진 내부 코드를 뜯어보면 나와있기 때문에 참고하면 좋을 것이다. 그래픽스/DX11 2024.03.26
D3D12 3D 프로그래밍 입문 - 기본 지식 (3) 다중표본화의 이론 모니터의 픽셀들이 무한히 작지는 않기 때문에, 모니터 화면에 임의의 선을 완벽하게 나타내는 것은 불가능하다. 흔히 이 때, 나타나는 현상이 앨리어싱 효과, 다른 말로는 계단현상을 보여준다. 선을 픽셀들의 배열로 "근사"치에 가깝게 연산하더라도 완벽히 일치할 수 없기에 나타나는 현상이다. 삼각형의 변에서도 이와 비슷한 앨리어싱 효과가 나타난다. 근래의 모니터는 모니터의 해상도가 높아, 픽셀 크기를 줄이면 문제가 크게 완화되었기에 계단 현상이 거의 눈에 띄지 않을 정도가 되었다. 그러나 모니터 해상도를 키우는 것이 불가능하거나 키워도 충분하지 않을 경우에는 antialiasing 안티엘리어싱 혹은 앨리어싱 제거 기법을 적용할 수 있다. 그런 기법 중 하나가 초과표본화(supersamplin.. 그래픽스/DX12 2023.12.22
D3D11 원근 투영과 거리 비교 이번 수업 목표는 1열로 나열된 구들을 가지고 3D 입체 공간에서, 여러개의 물체의 원근감을 표현하는 것이다. 홍정모 교수님께서 단순히 여러 개의 물체 뿐만이 아니고, 여러 가지의 물체로 확장해주신 엔진 덕분에 기반부터 구현하지 않고 해당 원근감 원리에 대해서만 집중할 수 있게끔 해주셨다. 처음에는 구인 물체로 원근감을 표현하고, 이후에는 구가 아닌 물체로 원근감을 표현하신다. 이번 수업에서 원근법을 표현하려고 쓰는 기법은, 가상의 레이를 쏘고 구가 충돌하는 순서에 따라 거리를 구하는 방법이다. 그래픽스/DX11 2023.12.21
D3D12 3D 프로그래밍 입문 - 기본 지식 (2) 교환 사슬과 페이지 전환 애니메이션이 껌벅이는 현상을 피하려면 다음과 같은 방법을 사용하는 것이 최선이다. 우선, 애니메이션의 한 프레임을 전체 화면 바깥(off-screen) 텍스처에 그린다. 그런 텍스처를 후면 버퍼(back buffer)라고 부른다. 그 후면 버퍼를 하나의 완전한 프레임으로서 화면에 표시한다. 이렇게 하면 화면을 보는 사용자에게는 프레임이 그려지는 과정이 나타나지 않는다. 이중 버퍼링을 효율적으로 구현하려면 하드웨어로 관리되는 두 개의 텍스처 버퍼가 필요한데, 하나는 전면 버퍼(front buffer)이고 다른 하나는 앞에서 언급한 후면 버퍼이다. 화면에는 전면 버퍼에 담긴 이미지 자료가 표시된다. 전면 버퍼가 화면에 표시된 동안 애니메이션의 다음 프레임을 후면 버퍼에 그리고, 다 .. 그래픽스/DX12 2023.12.21
밉맵(Mipmap) 밉맵이란? 3차원 그래픽스의 텍스처 매핑 분야에서, 밉맵(mipmap)은 렌더링 속도를 향상시키기 위한 목적으로 기본 텍스처와 이를 연속적으로 미리 축소시킨 텍스처로 이루어진 비트맵 이미지의 집합이다. 밉맵은 일반적으로 3D 씬에서 오브젝트를 렌더링하는 데 사용되며 여기서 텍스처된 오브젝트는 카메라로부터 거리에 따라 달라질 수 있다. 더 높은 밉 레벨은 카메라에 가까운 오브젝트에 사용되며 더 낮은 밉 레벨은 더 먼 오브젝트에 사용된다. 밉맵은 GPU가 전체 해상도보다 낮은 해상도로 텍스처를 렌더링하는 상황에서 렌더링 작업 속도를 높이고 렌더링이 아티팩트를 줄일 수 있다. 효과적으로 캐시된 밉은 원본 텍스처의 다운샘플링된 버전이다. GPU는 원본 전체 해상도 텍스처에서 더 많은 샘플링 작업을 하는 대신에 .. 그래픽스 2023.12.21
D3D12 게임 프로그래밍 입문 - 기본 지식 (1) Direct3D 12의 개요 응용 프로그램과 그래픽 하드웨어 사이에 Direct3D라는 간접층과 하드웨어 드라이버가 Direct3D 명령들을 시스템의 GPU가 직접 이해하는 고유한 기계어 명령들로 번역해 주므로, 해당 GPU가 Direct3D 12를 지원하는 한, 응용 프로그램 개발자는 GPU의 세부사항을 걱정할 필요가 없다. 단, 이를 위해서는 GPU 제조사들이 Direct3D 명세를 준수하는 드라이버를 제공해야 한다. 이전 버전들에 비한 주된 개선점은 CPU 부담을 크게 줄이고 다중 스레드 지원을 개선하기 위해서 설계를 다시 했다는 점이다. D3D11보다 D3D12가 보다 헐씬 낮은 (즉, GPU 쪽에 더 가까운) 수준의 API가 되었다. D3D12는 이전보다 추상화가 줄었고, 개발자가 손수 관리해야.. 그래픽스/DX12 2023.12.20