2023/11 34
-
AnimationInstancing객체를 사용해서 응용해보자. 인스턴싱 작업을 위해 Buffer에 데이터 범위를 설정하고. 해당 범위값에 대한 데이터를 활용해서 데이터를 넘겨주는 작업을 진행한다. // FireBallManager 클래스의 생성자 FireBallManager::FireBallManager() { // ModelInstancing을 생성하고 이름을 설정합니다. modelInstancing = new ModelInstancing("FireBall"); // 첫 번째 메시에 대한 블렌드 스테이트를 추가적으로 설정합니다. modelInstancing->GetMesh(0)->GetBlendState()->Additive(); // 첫 번째 메시에 대한 래스터라이저 스테이트를 양면 시점으로 설정합니..
-
일반적인 인스턴싱과 다르게 AnimationInstancing은 조금 다른 데이터를 더 주어야 한다. 위치 Matrix의 값과 Animation의 객체값을 따로 넣어야 한다. 먼저 HLSL을 새로 만들어준다. ModelAnimationInstancing.hlsl을 만든다. struct VertexInstancing { float4 pos : POSITION; float2 uv : UV; float3 normal : NORMAL; float3 tangent : TANGENT; float4 indices : BLENDINDICES; // 특정 본들, 본에 꼽혀있을 때, 어떤 본에 가중치를 줄 것인지 웨이트가 들어감. float4 weights : BLENDWEIGHTS; matrix transform : I..
-
Instancing 인스턴싱은, 최적화 기법중 하나로 동일 객체나 요소를 여러번 그리는 작업을 최적화 하기 위한 기술이다. 동일한 메시를 그릴 때 여러번 DrawCall 을 할 필요 없이 한번만 DrawCall 을 한 뒤, 같은 모델을 여러번 배치하는 형태로 이루어진다. 한번 생성된 데이터는 다시 날릴 필요 없이. 그 횟수동안 받아온 위치정보만 대입하여 그려주면 되기 때문에 여러번 데이터버퍼를 받아올 필요가 없기 때문이다. 이는 DrawCall 이 데이터를 Device에서 DeviceContext에서 넘기는 과정에서 생기는 Bus Latency나 Moemory Latency가 쌓이면 엄청난 시간적 손해가 발생하기 때문이다. 그래서 DrawCall 은 리소스를 많이 쓰는 작업이고 이러한 DrawCall을 ..
-
Instancing 인스턴싱은, 최적화 기법중 하나로 동일 객체나 요소를 여러번 그리는 작업을 최적화 하기 위한 기술이다. 동일한 메시를 그릴 때 여러번 DrawCall 을 할 필요 없이 한번만 DrawCall 을 한 뒤, 같은 모델을 여러번 배치하는 형태로 이루어진다. 한번 생성된 데이터는 다시 날릴 필요 없이. 그 횟수동안 받아온 위치정보만 대입하여 그려주면 되기 때문에 여러번 데이터버퍼를 받아올 필요가 없기 때문이다. 이는 DrawCall 이 데이터를 Device에서 DeviceContext에서 넘기는 과정에서 생기는 Bus Latency나 Moemory Latency가 쌓이면 엄청난 시간적 손해가 발생하기 때문이다. 그래서 DrawCall 은 리소스를 많이 쓰는 작업이고 이러한 DrawCall을 ..
-
캡슐형 오브젝트와 구, 캡슐, 사각형, 레이 오브젝트 끼리 충돌과정을 구현해보자. CapsuleCollider는 구체형 Collider에서 선분 Vector를 추가하여 충돌확인을 한다. CapsuleCollider는 위와같이 생겼다. 선분의 양 끝단에 구체가 생겨있고. 모든 선분이 중심점으로 이루어진. 무한히 많은 구가 선분에 끼어져 있다고 생각하면 된다. 대충 위와같이. 무한히 많은 구체가 선분을 따라 생겨있다고 이해하면된다. 그래서, 대부분의 충돌은 구체와 다른 오브젝트와의 충돌이라고 이해하면 된다. 이제 Collider의 정의에 대해 알아보자. CapsuleCollider class CapsuleCollider : public Collider { public: CapsuleCollider(float..
-
DirectX에서 FBXModel을 Import하고 Save할 때 원래 생각해놓고 구현해놓았던 방식대로 정상적으로 Import가 되지 않으면 매우 곤란하다. 이번에는 만약, Import 하였을 시, Mesh와 Matarial의 개수가 일치하지 않을 때, 각 Mesh에 Matarial을 밀어넣어줄 수 있는 코드를 작성한다. 우선 데이터 구조상, Model에서 Matarial과 Mesh값, Name값을 알아야 한다. 이전에 작성하였던 ModelExporter에서 동작하는 동작사항을 일부 수정해서 가져와 사용해야 한다는 의미이다. 또한, Model이 가지고있던 데이터에 접근하여 수정해야 하고, MeshData값을 ModelMesh가 가지고 있어야 한다. (프레임워크 상 MeshData는 ModelMesh가 아..