3D Graphics 10

Geometry Shader

Geometry Shader는 셰이더 파이프라인의 한 단계로, VS(VertexShader) 이후에 실행된다.주 역할은 프리미티브(점, 선, 삼각형, 등)을 입력받아 프리미티브를 추가하거나 변형을 해준다.이 기능은 DirectX10이상에서만 지원된다. Geometry Shader 주요 특징입력과 출력입력 : GS는 하나 이상의 프리미티브를 입력으로 받는다. 예를 들어 VS에서 출력된 삼각형이 GS로 전당된다.출력 : 입력된 프리미티브를 변형하거나 새로운 프리미티브를 추가 생성할 수 있다. 즉, 입력으로 삼각형 하나가 들어와도 여러 개의 삼각형을 출력할 수 있다.프리미티브 증분GS는 입력된 정점 데이터를 기반으로 프리미티브를 새로 생성할 수 있다. 예를 들어, 삼각형이 들어오면 이를 여러 개의 삼각형으로 ..

3D Graphics 2024.09.12

그림자 생성

3D 그래픽스에서 그림자를 구현하려면 어떻게 해야할까? 그림자 생성 이론 그림자 생성 이론은 광원의 시점에서 물체의 깊이 정보를 저장한 후, 이를 바탕으로 그림자가 생길지 여부를 결정하는 방식으로 이루어진다. 이를 Shadow Mapping이라고 하며 Shadow Mapping을 크게 3단계로 이루어 진다. Shadow Mapping 단계광원의 시점에서 장면 렌더링(Depth Map 생성)먼저 광원의 시점에서 장면을 렌더링해서 깊이 정보를 저장한다. 이를 Shadow Map 또는 Depth Map이라고 한다.카메라 시점에서 장면 렌더링그 후 카메라의 시점에서 장면을 렌더링한다. 이때 각 픽셀이 빛에 노출되는지(즉, 그림자가 생기는지)를 결정하기 위해 Shadow Map을 사용한다.그림자 여부 결정각 픽셀..

3D Graphics 2024.09.09

Deferred Render

Deferred Rendering이란?Deferred Rendering은 조명 계산을 효율적으로 처리하기 위해 사용하는 렌더링 기법이다. Forward Rendering의 경우 오브젝트가 100개가 있고 빛이 100개가 있으면 100*100, 총 1만번의 연산이 필요하다.하지만 Deferred Rendering의 경우 모든 오브젝트에 대해 빛 연산을 하지 않는다. 대신 화면에 출력된 렌더타겟에 대해서만 빛처리를 해주는거다.  예시를 들면 선화만 있는 그림에 색, 명암을 넣어주는거다. 오브젝트 100개가 있든 1000개가 있든 화면에 비춰진 도화지(RenderTarget)에 대한 빛처리만 하면되서 빛의 개수만큼만 연산하면 된다. 그럼 카메라에 비춰진 이미지만 있으면 되는거냐? 그것은 아니다.우선 Defer..

3D Graphics 2024.09.09

DirectX11 TEXTURE2D DESC

D3D11_TEXTURE2D_DESC 구조체는 2D 텍스처를 생성할 때 텍스처의 다양한 속성들을 정의하는 설명자(Descriptor)이다. 이 설명자를 통해 DirectX는 텍스처가 어떻게 사용될지를 이해하고, GPU 메모리에 적절한 형식으로 텍스처를 할당할 수 있다. D3D11_TEXTURE2D_DESC 구조체 필드 설명typedef struct D3D11_TEXTURE2D_DESC { UINT Width; // 텍스처의 너비 (픽셀 단위) UINT Height; // 텍스처의 높이 (픽셀 단위) UINT MipLevels; // Mipmap 레벨의 수 UINT ArrayS..

3D Graphics 2024.09.07

DirectX11 RTV, SRV등등 View의 역할

DirectX11에서 변수타입 맨 뒤에 view가 붙은 애들이 종종 보인다.이런 변수명을 가진 애들이 하는 일이 뭘까?이들은 주로 GPU에서 특정 리소스(텍스처나 버퍼)에 접근하는 방법을 정의한다.이러한 View는 GPU가 텍스처나 버퍼에 대한 다양한 읽기/쓰기 접근을 할 수 있게 해준다. DirectX에서 주요 개념 : 리소스와 뷰리소스(resource) : GPU에서 사용할 데이터(텍스처, 버퍼)이다. 리소스는 GPU에서 메모리에 저장된 데이터 자체를 의미한다.뷰(view) : 리소스에 대한 접근 방식을 정의하는 객체이다. 뷰는 리소스를 직접 사용하는 것이 아니라, 리소스를 어떻게 사용할지를 정의한다. 뷰를 통해 GPU가 리소스에 접근 할 수 있게된다.DirectX에서 주요 뷰 타입RenderTarg..

3D Graphics 2024.09.07

Skinning Animation

스키닝 애니메이션에 대해 다루기 전에 먼저 3D모델의 구조에 대해 알아보자.3D모델은 보통 메시와 스켈레톤으로 구성이 되어있다.메시 : 모델의 정점, 면, 그리고 이들로 구성된 폴리곤 정보를 포함한 3D 표면이다.스켈레톤 : 모델을 움직이기 위한 뼈대 구조로, 각 본은 계층적(hierarchical)으로 연결되어 있어 모델의 각 부위를 제어할 수 있다. 예전에는 모델에 애니메이션 작업을 수행하기 위해 각 모델의 부위를 따로 분리하여 관리했다.예) 골반, 허벅지, 종아리, 발...등등이런식으로 분리된 모델들을 조합해서 하나의 모델로 만든뒤, 각 부위에 transform을 줌으로써 애니메이션을 줄 수 있다.하지만 이런식으로 하면 부자연스러울뿐만 아니라 애니메이션 꺾는 동작에서 부위 간의 빈 공간이나 틈이 생..

3D Graphics 2024.08.28

3D Graphics Blend State에 대해 알아보자

BlendState는 3D 그래픽스 파이프라인에서 픽셀 셰이더 출력이 렌더 타겟과 어떻게 결합될지를 결정하는 설정이다. 주로 투명도 처리와 특수 효과 구현에 사용된다. BlendState의 주요 구성 요소와 개념블렌드 인자(Blend Factor)Source : 픽셀 셰이더에 출력된 색상Destination : 현재 렌더 타겟에 있는 색상블렌드 연산(Blend Operation)Source와 Destination 색상을 어떻게 조합할지 결정알파 블렉딩(Alpha Blending)색상 의 알파 채널을 이용한 투명도 처리색상 마스크(Color Write Mask)어떤 색상 채널(R, G, B, A)을 쓸지 결정주요 블렌드 모드불투명(Opaque)기본 설정, 블렌딩 없음알파 블렌딩(Alpha Blending)..

3D Graphics 2024.08.21

3D Graphics RasterizerState에 대해 알아보자

RasterizerState가 무엇인가?RasterizerState는 3D 그래픽스 파이프라인에서 중요한 역할을 하는 설정 객체다. 기본적으로 3D 모델의 폴리곤이 어떻게 2D 화면에 그려질지를 결정한다. RasterizerState의 주요 설정과 역할컬링 모드(Cull Mode)None : 모든 폴리곤을 그린다Front : 전면 폴리곤을 제거한다.Back : 후면 폴리곤을 제거한다(가장 많이 사용)용도 : 렌더링 성능 향상 및 양면 렌더링 제어채우기 모드(Fill Mode)Solid : 폴리곤을 완전히 채운다 (일반적인 렌더링).Wireframe : 폴리곤의 외곽선만 그린다.용도 : 디버깅, 특수 효과깊이 바이어스(Depth Bias)깊이 값에 적용되는 상수 Offset이다용도 : Z-fighting(..

3D Graphics 2024.08.21

3D Graphics Sampler State에 대해 알아보자

Sampler State가 뭔가? Sampler State는 텍스처 데이터를 샘플링할 때, 샘플링 방식과 텍스처 좌표 처리 방식을 제어하기 위해 사용된다.주로 Direct3D나 OpenGL과 같은 그래픽 API에서 사용되며, 렌더링 시 픽셀 셰이더 또는 텍스처 데이터를 사용하는 다른 셰이더가 텍스처를 읽는 방식을 설정하는데 필수적으로 사용된다. Sampler State를 사용하는 상황텍스처 필터링 제어텍스처를 화면에 렌더링할 때, 텍스처 좌표가 픽셀에 정확하게 일치하지 않을수 있다. SamplerState에서 이런 일치하지 않는 픽셀과 텍스처를 어떻게 필터링할지 정한다. 필터링 방식은 포인트 필터, 선형 필터,  비등방성 필터 등 다양하다.아래 그림은 선형 필터, 포인트 필터, 비등방성 필터 적용시 출력..

3D Graphics 2024.08.21

3D Graphics Rendering Pipline

렌더링 파이프라인은 3D 그래픽을 2D 화면에 표시하기 위한 일련의 연산과정이다. DirectX11기준 다음과 같은 주요 렌더링 파이프라인 단계를 갖는다.입력 어셈블러(Input Assembler)정점 셰이더(Vertex Shader)헐 셰이더(Hull Shader) optional테셀레이터(Tessellator) optional도메인 셰이더(Domain Shader) optional기하 셰이더(Geometry Shader) optional스트림 출력(Stream Output) optional래스터라이저(Rasterizer)픽셀 셰이더(Pixel Shader)출력 병합기(Output Merger)위 단계들 중 optional이 붙은것은 DirectX가 버전업이 되면서 추가가 된 파이프라인 단계들이다.오늘..

3D Graphics 2024.08.19