프로그래밍 공부

프로그래밍 700

카테고리 설명
  • Map의 블랜딩을 여러개 중첩하여 적용해보자. 원래 있었던 Hight를 수정하는 Editer에 Alpha값을 추가하여 수정하고, 저장 , 불러오기를 할 수 있게 할 것이다. 우선 MapEdit용 shader를 추가로 제작한다. #include "../VertexHeader.hlsli" #include "../PixelHeader.hlsli" struct VertexInput { float4 pos : POSITION; float2 uv : UV; float3 normal : NORMAL; float4 alpha : ALPHA; }; struct PixelInput { float4 pos : SV_POSITION; float2 uv : UV; float3 normal : NORMAL; float3 tang..

  • Terrain을 제작하는 Editer를 제작할 것 이다. Editer에는 어떤 기능이 필요한지 생각해보아야 한다. 1. 마우스와 Terrain의 위치에 따른 원형 표시. 2. 마우스가 눌렸을 때 해당 위치의 Terrain의 vertice가 변화하여야 한다. 3. 변화한 vertice에 따른, Diffuse값과 normal값을 재정의 해주어야 한다. 4. 맵 을 불러왔을때, 다른사이즈의 map의 경우. 해당 map의 사이즈만큼 Buffer를 재정의 해주어야 한다. 제작해보자. #pragma once class TerrainEditer : public GameObject { private: //typedef VertexUVNormal VertexType; // VertexType을 정의합니다. // Vert..

  • 컴퓨터 쉐이딩 우선, 컴퓨터 쉐이딩을 알기 위해서는 스레드와 멀티프로세스를 이해해야한다. 스레드는 작업 한개를 처리하는 단위이고, 멀티프로세스는 멀티스레드 를 사용해서 동작하는 프로세스를 여러개 돌린다고 이해하면 된다. DriectX에서 스레드와 뮤텍스 라이브러리로 다중 스레드 프로그래밍을 사용할 수 있다. 쓰레드와 뮤텍스 라이브러리로 다중쓰레드를 사용할 수 있다. #include #include #include DirectXCollision은, 비효율적이지만, 다중처리방식을 사용하면 큰 부하를 일으키지 않고 사용할 수 있다. 위와같은 멀티프로세스 방식의 코딩을 사용하면, 비동기 방식의 데이터처리 시 더 효율적으로 사용할 수 있다. 예를들어 플레이어가 아이템을 주워서 인벤토리에 넣었다고 가정해보자. 그렇..

  • 컴퓨터 쉐이더 라고 하는 방식이다. 이름이 조금구리기는 한데, 컴퓨팅 연산을 그래픽카드에서 진행하는 쉐이더를 의미한다. 데이터를 전부 Shader에 전달하고, 쉐이더에서 데이터연산을 처리하는 과정을 이야기한다. Buffer형태로 데이터를 전달하고, DeviceContext->Map형태로 데이터가 제공된다. //ComputePicking.hlsl cbuffer RayBuffer : register(b0) { float3 pos; uint triangleSize; float3 dir; } struct InputDesc { float3 v0, v1, v2; }; StructuredBuffer input : register(t0); struct OutputDesc { int picked; float distan..

  • Map과 Unmap은 동적으로 데이터를 매핑하여 CPU에서 GPU메모리에 직접 엑세스 할 수 있게 해준다. 즉, CPU에서 GPU메모리의 포인터를 관리한다고 생각하면 이해하기가 편할것이다. 그렇기 때문에, 큰 데이터를 업데이트할 때 효과적이다. 동적으로 메모리를 매핑하고 CPU에서 데이터를 직접 변경한 뒤, 다시 언매핑하여 GPU로 복사해줄 수 있다. 장점 대량의 데이터를 효율적으로 업데이트 할 수있다. GPU와 CPU간의 직접적인 메모리 엑세스가 가능함으로, 특별한 복사대입과정이 필요가 없다. 단점 코드가 UndateSubresource에 비해 더 복잡해진다. 동기화와 메모리 일관성이 해쳐지면 문제가 발생할 수 있다. 주의점! MAP을 선언하고, 데이터를 수정하고 난뒤, Unmap을 해야 데이터가 정상..

  • 간단하게 메모리를 업데이트하는데 사용된다. 상수버퍼와 텍스처같은 자원의 업데이트에 사용한다. 버퍼 및 텍스처와 같은 데이터를 복사연산에 최적화되어있어, 간단하게 연산이 가능하다. 장점 단순하게 사용할 수 있어, 코드가 간결하고 이해하기가 쉽다. 작은데이터를 업데이트 할 때 효과적이다. 단점 큰 데이터를 업데이트할 때 성능이슈가 발생할 수 있다.(복사연산특징) 동적으로 메모리를 할당하여 데이터를 복사하고, 해당 메모리를 GPU에 복사하는 과정을 거침으로 오버헤드 가능성이 있다.