전체 글 17

Cascade Shadow

Cascaded Shadow Maps - Win32 apps | Microsoft Learn Cascaded Shadow Maps - Win32 apps Cascaded shadow maps (CSMs) are the best way to combat one of the most prevalent errors with shadowing perspective aliasing. learn.microsoft.com MSDN에 적힌 이론대로 구현이 가능하다. 기본적으로 렌더링 할 장면을 기준으로 거리에 따라 Light Matrix를 다르게 주어 기하 셰이더를 통해 버텍스를 복사하여 여러장의 그림자 맵을 그리는 것이다. 그렇기에 한번 드로우 콜로 여러장의 그림자 맵을 얻을 수 있다. 그런데 여기서 거리가 멀 수록..

DirectX11 2023.02.16

SIMD (1)

SIMD는 병렬처리의 한 종류로, 하나의 명령어로 여러 개의 값을 동시에 계산하는 방법이다. 벡터나 행렬과 같은 다량의 데이터를 계산하는데 유리하기에 그래픽스를 처리하기에 유리하다. struct Vector4 { union { float x, r; }; union { float y, g; }; union { float z, b; }; union { float w, a; }; Vector4() = default; Vector4(const Vector4&) = default; }; inline Vector4 __vectorcall operator+ (Vector4 V1, Vector4 V2) { Vector4 result; result.x = V1.x + V2.x; result.y = V1.y + V2.y;..

PhysX API 구조 (2)

PhysX에서 물리를 연산할 오브젝트인 PxActor를 물리 연산 하기 위해서는 인스턴스된 PxActor의 공간 범위와 충돌 속성을 설명하는 PxShape를 인스턴스하고 PxActor에 모양을 설정해주어야 한다. PX_FORCE_INLINEPxShape* createShape(const PxGeometry& geometry, const PxMaterial& material, bool isExclusive = false, PxShapeFlags shapeFlags = PxShapeFlag::eVISUALIZATION | PxShapeFlag::eSCENE_QUERY_SHAPE | PxShapeFlag::eSIMULATION_SHAPE) Shape를 생성하기 위해선 Shape의 Geometry 정보를 담고 ..

PhysX 2022.10.14

PhysX API 구조 (1)

PhysX를 사용하기 위한 전역 객체 생성을 해주어야한다. PxFoundation 상위 수준 SDK를 인스턴스화 하기위해 필요 PxPhysics 모든 장면에 영향을 미치는 전역 매개 변수를 설정하고 여러 장면에서 공유할 수 있는 개체를 생성 PhysX는 PxScene에 PxActor 객체를 생성하고 각 Actor의 속성(Transform 정보, PhysicsMaterial 등)값을 설정 그러고 elapse time 만큼 시뮬레이션를 시켜준 후 각 Actor의 시뮬레이션 결과(Global Position, Velocity 등)을 사용하게 된다. PhysX에서는 다음과 같은 Actor들을 지원하고 있다. PxBase Reflection / Querying 객체 Type PxActor Actor의 이름, 플래..

PhysX 2022.10.11

Shadow Mapping

Shadow Mapping이란 빛의 시점으로 봤을때의 깊이 값과 카메라 시점으로 봤을때의 깊이 값의 차이를 이용하여 그림자를 표현하는 방법이다. 광원 시점으로 봤을 경우의 깊이 값 보다 카메라 시점으로 보았을때의 깊이 값이 클 경우 그림자 안에 있는 것이고 작거나 같을 경우에는 그림자 안에 있지 않는것이다. 그러기 위하여 빛의 시점으로 깊이 버퍼를 그려야한다. 빛을 기준으로 View Projection Matrix를 계산하여야한다. 문제는 Directional Light의 경우는 직교투영을 해주어야 하고 Spot Light와 Point Light의 경우 원근투영으로 Projection Matrix를 계산하여야 한다. // 직교 투영 m_viewTM = XMMatrixLookAtLH(m_LightPos, ..

DirectX11 2022.09.27

Resource Manager 구성(1)

ResourceManager 필요한것 - 리소스 로드 / 언로드 - 리소스 매니저 컨테이너에 키 값에 해당하는 리소스가 없을 경우 리소스를 로드 - 리소스를 매니저한테 받아 올때 참조 카운트 증가 - 리소스를 참조하던 오브젝트를 제거시 해당 오브젝트에서 사용하던 리소스 참조 카운트 감소 - 리소스의 참조 카운트가 0이 되면 릴리즈(COM 객체들 릴리즈) 추후 필요 및 고려 - 메모리 연속성 - Comptr ResourceBase - 그래픽스 엔진에서 관리할 리소스(Mesh, Shader 등등)들의 Base int m_RefCnt = 0; void AddRef(); bool ReleaseRef(); virtual void Release() abstract; - 참조 카운트로 리소스 매니저에서 로드/언로드 ..

Project 2022.06.28