공부/Graphics, DirectX, 포트폴리오 구조 18

Picking을 위한 Screen 공간 -> 뷰 공간으로 역변환

Reference https://mycom333.blogspot.com/2013/07/picking.html?m=0 Picking 마우스 혹은 기타 입력 장치로 모니터 화면의 좌표를 지정하면 3D 세계에 있는 오브젝트를 선택할때 사용된다. 화면의 좌표는 2D, 세계는 3D인 경우 오브젝트의 선택 방법을 만들어야 한다. 먼저 mycom333.blogspot.com 6.6 Picking - Essential Mathematics for Games & Interactive Applications Second Edition https://www.slideshare.net/QooJuice/picking-129456487 Picking Picking 쿠재아이 김재경 www.slideshare.net https://..

포워드 렌더링(Forward Rendering) vs 디퍼드 렌더링(Deferred Rendering)

포워드 렌더링 물체를 그리고 그 물체에 대한 라이팅을 적용하는 순서로 렌더링. N개의 광원과 M개의 물체가 있는 씬에서 NxM번의 드로우 콜이 필요하다. 그래서 물체가 많을 때에는 성능 저하가 심하다 디퍼드 렌더링 포워드 렌더링을 사용함으로써 생기는 성능 저하를 방지하게 위해 멀티 렌더 타겟(MRT)를 지원하는 경우 사용할 수 있다. N개의 광원과 M개의 물체가 있는 씬에서 N+M번의 드로우 콜이 필요 과정 1. 모든 물체에 대해 화면 해상도 크기의 렌더 타겟에 물체 고유의 색상(라이트를 적용하기 전 색상을 의미. Material 자체의 Diffuse, Emmisivem, Ambient, Specular 색상), 깊이 값, 노말 벡터 등을 저장 2. 똑같은 크기의 다른 렌더 타겟에 Light를 누적시킨 ..

계산 셰이더(Compute Shader)

계산 셰이더(Compute Shader) DirectX가 제공하는 프로그램 가능 셰이더 중 하나 렌더링 파이프 라인 외부에 따로 존재한다 => 그럼에도 화면에 렌더링하지 않고도 GPU 자원에 읽고(Read) 쓰는게(Write) 가능하다 병렬적 알고리즘 구현에 용이하다 => GPGPU 프로그래밍에 유용하다 계산 셰이더의 출력 결과를 렌더링 파이프라인에 다시 바인딩 할 수 있다 GPGPU(General Purpose GPU) 프로그래밍 GPU를 비그래픽 분야에 응용하는 것. 장점 : 많은 양의 데이터를 병렬적으로 처리할 수 있다 ex) 파티클 시스템 단점 : 그래픽 연산과 달리 GPU의 연산 결과를 다시 CPU로 보내야 한다(물론 GPU를 통한 연산으로 보는 이득이 더 크다) 지금은 계산 셰이더로 하는 계산..

상수 버퍼, 구조화 버퍼, D3D11_BUFFER_DESC

상수 버퍼 : CPU에서 write해서 GPU로 보내주면 GPU에서는 Read만 가능 구조화 버퍼 : CPU에서 접근 가능 여부를 설정해줄 수 있으며, 이에 따라 바인딩해줘야 하는 자원 뷰(Resource View)가 다르다. 사용자 정의 구조체로 구성할 수 있으며, 대용량 버퍼를 셰이더로 넘겨줘야 할 때 적합 D3D11_USAGE enumeration 설명 D3D11_USAGE_DEFAULT GPU Read & Write -> RWStructuredBuffer에 사용 D3D11_USAGE_IMMUTABLE Only GPU Read(CPU Access, GPU Write 불가) D3D11_USAGE_DYNAMIC CPU Write, GPU Read만 가능 -> 상수 버퍼와 StructuredBuffer에..

3D OBB 충돌 코드 및 설명

분리축 이론 : 다면체 A, B에 대해서 어떤 축이 존재해서 그 축으로의 다면체들의 투영된 구간이 "하나라도" 서로 겹치지 않는다면 A, B는 서로 분리되어 있다는 이론 bool CCollision::CollisionBox3DToBox3D(CollisionResult& SrcResult, CollisionResult& DestResult, const Box3DInfo& boundingBox, const Box3DInfo& targetBox) { double c[3][3]; double absC[3][3]; double d[3]; double r0, r1, r; int i; const double cutoff = 0.999999; bool existsParallelPair = false; Vector3 d..

그림자 매핑(Shadow Mapping)

여기서 소개할 그림자 매핑은 최근 사용되는 그림자 매핑 기법중에 가장 기본이되는 기법이다. 사실 이 기법을 기반으로 발전된 여러가지 고급 기법들이 다음과 같이 이미 나와있다. 캐스케이드 그림자 맵 : 그림자 매핑의 해상도 문제를 해결하기 위하여 영역별로 여러개의 그림자맵을 만드는 기법 퍼센티지 클로저 필터링 : 그림자의 외곽선을 부드럽게 필터링 해주는 기법 배리언스 그림자맵 : 하드웨어 텍스처 필터링이 가능하도록 깊이 값을 저장하는 방법 그림자가 생기는 원리 아래 그림 기준으로 1번 빛에서는 D앞에 가리는 물체가 없으므로 그림자가 생기지 않는다. 2번 빛은 B앞에 A라는 물체가 가리고 있으므로 2번 광선이 B의 표면에 만나는 지점에 그림자가 생길 것이다. C도 마찬가지로 A, B 물체에 가리니까 그림자가..

Lighting

Lighting - 빛과 Object간의 상호 작용 Direction Light Source - 아주 멀리서 오는 Sun(해)라고 생각하면 됨. - 이제부터 설명하는 모든 Light의 종류는 Direction Light Source라고 가정하고 설명할 것임 - 아주 멀리서 오는 빛이기 때문에 오브젝트의 모든 점에 들어오는 빛은 같은 방향과 입사각으로 들어온다고 가정 Phong Light Model - 대표적 Lighting Model - Phong Model은 4가지 Term으로 이루어짐 1. Diffuse(난반사, = Lambert) - 온갖 방향으로 동일한 양의 빛을 반사. - 온갖 방향으로 동일한 양으로 반사된다는 것은 우리가 카메라를 어디 두던간에 같은 색으로 보인다는 의미. - 우리가 "어떤 물..

ID3D11DeviceContext::Map 상황별 사용

GPU에서 쓴 정보를 CPU로 가져와서 읽을 때 Map // (GPU에서 써준)구조화 버퍼에 있는 본 정보 m_BoneBuffer를 m_BoneDataBuffer로 복사한다. CDevice::GetInst()->GetContext()->CopyResource(m_BoneDataBuffer, m_BoneBuffer->GetBuffer()); D3D11_MAPPED_SUBRESOURCEMap = {}; // D3D11_MAP타입의 3번째 인자는 D3D11_MAP_READ로 CDevice::GetInst()->GetContext()->Map(m_BoneDataBuffer->GetBuffer(), 0, D3D11_MAP_READ, 0, &Map); // m_vecBoneMatrix로 복사 memcpy(&m_ve..

디퍼드 렌더링(Deferred Rendering)에서 반투명한 물체를 위한 블렌딩처리가 안되는 이유

디퍼드 렌더링은 각 물체별로의 최종 색상(= 고유의 Diffuse Color에 Light를 적용한 색상)을 구하지 않고, 화면에 그려질 픽셀에 대해서만 최종 색상을 구한다. 블렌드는 결국 최종 색상끼리 블렌딩처리를 해야 하는데, 디퍼드 렌더링은 겹쳐지는 물체들의 픽셀에 그려지는 모든 최종 색상을 알 수 있는게 아니라 렌더 타겟에 존재하는 픽셀들의 최종 색상만 아는 것이다(디퍼드 렌더링은 화면 해상도 크기의 버퍼에 픽셀 별 최종 깊이 판정을 모두 거친, 빛을 받기 전 물체 고유한 색깔(=Diffuse Color)을 GBuffer에, Light들을 LightDiffuse, Light 모아둔다. 반투명 A 물체와 불투명 B 물체가 겹쳐지는 픽셀이 있는데 블렌딩 처리가 되려면 당연히 A물체의 최종 색상과 B물체..

렌더링 파이프라인(Rendering Pipeline)

렌더링 파이프라인을 검색해보면 두가지의 이미지를 발견할 수 있다. 사실 두개의 그림이 같은 내용인데 나는 다르다고 생각했다. Vertex Processing : Vertex Shader -> Hull Shader -> Tessellation -> Domain Shader -> Geometry Shader Rasterization : Rasterization Stage Fragment Processing : Pixel Shader Output Mering : Output Merger 위의 그림이 DX11기준 세분화한 것이고, 아래 그림에서는 Computer Graphics 기준에서 좀 더 포괄적인 의미의 그림이므로 이런 의미이므로 사실상 같은 내용이다 입력 조립기 단계 3D 모델 하나를 출력하기 위해선 3..