전체 글

전체 글

    [DirectX 11] Particle System

    Particle System - Unity Particle System을 참고하여 현재 프로젝트에서 필요한 기능 위주로 제작. - 현재 MaxParticle 개수대로 만들어 두고 파티클을 사용하고 있다. - LifeTime Option에 따른 Animation 분기 설정 후 애니메이션 실행. // Particle Animation Option typedef enum PARTICLE_ANIMATION_OPTION : UINT { TEXTURE_ANI= 0x00000001, COLOR_ANI= 0x00000010, POSITION_ANI= 0x00000100, ROTATION_ANI= 0x00001000, SCALE_ANI= 0x00010000 }PARTICLE_ANIMATION_OPTION; // Part..

    [DirectX 11] Terrain Mesh Blending

    [DirectX 11] Terrain Mesh Blending

    Terrain Mesh Blending - 현재 프로젝트 진행중 Unreal Data를 이용하여 Terrian Material Layer 들의 Mask Image와 각각의 Material Texture을 이용하여 Texture Blending을 한다. - 현재 프로젝트에서 사용하고있는 Terrian Layer는 두개를 사용하기에 R, G Channel 만 이용. Texture Blending - 위의 이미지는 100 x 100 단위로 1 Pixel에 해당 Material 가중치가 들어있는데, 위 데이터를 활용하여 Terrain의 Blending을 할 수 있다. - Terrain의 경우 일반 Mesh 와는 다르게 Vertex Buffer에 해당 Vertex의 Mask Color를 입력해두어 내부 Pixel..

    [C++] Return Type Operator

    Return Type Operator 엔진 구조를 짜다보면 Collider나 Shader 같은 경우 Base Class를 통해 자식 Class를 만드는 경우가 많은데 해당 Resource를 관리할땐 BaseClass List로 관리를 하는 경우가 대부분이다. 이런 자식 Class가 생길때마다 Get하는 함수를 각각 만들어줄 때마다 깔끔하게 하나의 함수로 내보내고 싶다는 생각을 계속하게 되었는데 처음엔 std::valiant와 std::vist을 이용하려 했으나 직관적이지 못해 사용하지 않았다. 그러다 발견한 방법이 Type Operator인데 생각보다 복잡하지 않고 예외처리도 해당 Type들에 대한 정보만 있다면 쉽게 처리할 수 있었다. Operator 방식 - 반환 하고 싶은 Type의 Operator..

    [Project] DirectX 2D Mini Project

    DirectX 2D Project ( Penguin And Hide ) Component기반 DirectX 2D 프로젝트 플레이 영상입니다. DirectX 2D Project - Animation Tool MFC를 활용한 Animation Tool 입니다. Pivot Mode를 통한 Animation 중심점 설정 Collider Mode를 통한 해당 Frame Collider 설정 Frame 진행 시간 설정 Sprite Cut 설정 Ctrl + Z / Ctrl + Y Save / Load DirectX 2D Project - Map Tool Object Version MFC를 활용한 Object 기반 Map Tool 입니다. Collider(Rectangle, Triangle) 설정 Attribute 별..

    [DirectX 11] Map / UnMap vs UpdataSubresource

    [DirectX 11] Map / UnMap vs UpdataSubresource

    UpdataSubresource - 매 프레임 1번 미만으로 일어나는 Resource Update에 적절하다. - 해당 Buffer의 크기와 같은 Data를 받아 내부적으로 Resource Data를 Map / UnMap 하여 Resource Copy 한다. - 하나의 Resource에 Thread를 이용하여 동시에 복사는 불가능. (내부에서 Lock / Unlock 하기 때문) - CPU에서 GPU로 데이터를 복사하는 방식. Map / UnMap - 매 프레임 1번 이상으로 일어나는 Resource Update에 적절하다. - 해당 Buffer를 Map을 통해 Unlock 하여 변경하고 싶은 Resource Data를 memcpy 하고, UnMap하여 Buffer를 Lock 해주어야 한다. - GPU에..

    [Shader / HLSL] Shader Reflection & Define Macro를 이용한 Resource 관리 (3)

    Shader Resource 등록 방식 및 사용 - 이어서 실질적으로 Resource가 등록되고 사용하는 방식에 대해 정리해보려 한다. 이전에 설명해둔 방식을 토대로 HashCode를 Key값으로 두고 구현을 하였다. /// ConstantBuffer Reflection // Shader ConstantBuffer.. for (unsigned int cbindex = 0; cbindex GetConstantBufferByIndex(cbindex); D3D11_SHADER_BUFFER_DESC bufferDesc; if (S..

    [Shader / HLSL] Shader Reflection & Define Macro를 이용한 Resource 관리 (2)

    Shader Resource Struct / Hash Table 이전 글에서 해당 Resource 등록 과정에 대해 써놓았는데 내부적으로 사용하는 방식을 정리하려한다. 굳이 왜 해당 Resource에 대응하는 Class를 선언하여 Key값을 검색하는데에 사용하는가? 에 대한 의문이 들 수도 있는데 일단 이전에 사용하던 string Key값을 이용한 검색은 잘못된 Key를 입력했을 경우 RunTime에 반환이 잘못되거나 에러가 뜨는 상황이 자주 발생하여 실수를 최소화 하고싶어 이와 같은 방식으로 모든 Resource 관리를 변경하였다. 이제 내부 코드를 순차적으로 정리해보자. /* # HashClass Create Define * ClassName-> Struct Name * ResourceType-> S..

    [Shader / HLSL] Shader Reflection & Define Macro를 이용한 Resource 관리 (1)

    [Shader / HLSL] Shader Reflection & Define Macro를 이용한 Resource 관리 (1)

    Shader Resource 관리 방식 현재 사용하고 있는 Shader Reflection을 이용하여 Constant Buffer와 1:1 대응하는 Struct의 Hash_Code를 이용하여 List를 생성한다. Shader Resource Update 동작 과정 - Shader에 선언되어 있는 Constant Buffer와 같은 이름을 갖는 Struct 생성. - Define Marcro를 이용하여 해당 Class의 Hash_Code를 Hash List에 등록. - Shader Load 후 Shader Reflection을 통해 해당 Constant Buffer의 이름을 Hash Table에서 검색 후 Buffer List의 Key 값으로 사용 - 해당 Constant Buffer Update시 1:1..