DirectX11
-
[DirectX11] CubeMap 적용DirectX11 2023. 12. 20. 11:35
큐브맵으로 배경에 이미지를 씌우는 과정이다. 여기에 사용될 이미지는 HDRI 이미지를 큐브맵으로 변환해서 사용했다. HDRI 이미지는 이곳에서 구했다. https://polyhaven.com/hdris HDRIs • Poly Haven Previously known as HDRI Haven. Hundreds of free HDRI environments, ready to use for any purpose. No login required. polyhaven.com HDRI 이미지를 큐브맵으로 변환해주는곳 https://matheowis.github.io/HDRI-to-CubeMap/ HDRI to CubeMap matheowis.github.io 변환한 뒤에 6면을 따로 받으면 된다. 큐브맵 이미지는 ..
-
[DirectX11] chrono로 정확한 DeltaTime 구하기DirectX11 2023. 12. 18. 17:17
DeltaTime은 프레임 렌더링이 됐을때 이전 프레임에서부터 시간이 얼마나 지났는지를 뜻한다. 1초에 60프레임이 일정하게 나오면 각 프레임 사이의 DeltaTime은 1/60 초씩으로 약 0.01667 초다. 실시간 렌더링에서는 초당 프레임이 높게 나와야하므로 DeltaTime의 값이 매우 작아지게되어 정확도가 중요해진다. 그리고 게임에서는 DeltaTime을 기준으로 작동하는 계산이 많아서 중요도가 높다. 이전 글에서 입력으로 카메라를 조작하는 내용을 다뤘는데 그 중에서 이동 속도는 DeltaTime을 곱해서 적용한다고 했다. 이렇게 하지 않으면 초당 프레임 개수에 따라 이동 속도가 달라지는 문제가 생긴다. 애초에 속도가 초당 이동거리이므로 일정한 이동 속도를 위해서는 DeltaTime이 꼭 필요하..
-
[DirectX11] 1인칭 카메라 조작DirectX11 2023. 12. 18. 16:28
다이렉트x에서 Direct Input으로 1인칭 카메라 회전과 이동이 가능하게 구현했다. 참고한 곳은 https://www.rastertek.com/dx11win10tut16.html Tutorial 16: Direct Input Tutorial 16: Direct Input This tutorial will cover using Direct Input in DirectX 11. The code in this tutorial will be based on the previous tutorial code. Direct Input is the high-speed method of interfacing with input devices that the DirectX API provide www.rasterte..
-
[DirectX11] 쉐도우 맵과 PCF(Percentage Closer Filtering)DirectX11 2023. 12. 15. 13:59
이전 글의 결과물을 보면 그림자가 없어서 어색하기도 하지만, 물체가 바닥과 얼마나 떨어져있는지 구분이 안되기도 한다. 실제로는 바닥에 닿아있는 상태지만 떠있는듯이 보이는 문제가 있다.그림자를 추가하면 더 자연스러워질 것이다. 그림자를 그리기 위해서 쉐도우 매핑을 한다.이론에 대해서는 자세하게 알려주는 글이 많으니 자세히 다루지는 않겠다.간단하게 적으면 카메라 시점에서 렌더링 하기 전에 조명 시점에서 모든 물체를 렌더링하고 깊이 정보를 저장한다.그 다음에 카메라 시점에서 렌더링 할 때 조명시점에서의 깊이 정보를 사용해서 그림자가 진 영역인지 아닌지를 판단한다.카메라 시점에서 렌더링할때 대상의 월드 좌표를 알 수 있고, 이 월드 좌표에서부터 조명까지의 거리도 알 수 있다.만약 이 조명까지의 거리가 ..
-
[DirectX11] 텍스쳐와 노멀매핑DirectX11 2023. 12. 13. 17:58
모델에 텍스쳐를 적용하는 과정이다. 필요한 것 텍스쳐를 저장할 쉐이더 리소스 뷰 (ID3D11ShaderResourceView) 텍스쳐에서 값을 읽을 방식을 결정하는 샘플러 (ID3D11SamplerState) GPU에서 텍스쳐를 받을 Texture2D 타입 변수 GPU에서 텍스쳐를 읽을 방식을 지정받을 SamplerState 타입 변수 텍스쳐를 읽을때에는 DirectXTK의 CreateTextureFromFile함수를 사용한다. DirectXTK: https://github.com/microsoft/DirectXTK/tree/main GitHub - microsoft/DirectXTK: The DirectX Tool Kit (aka DirectXTK) is a collection of helper cl..
-
[DirectX11] Disney DiffuseDirectX11 2023. 12. 12. 18:38
지금까지는 Diffuse로 램버트의 코사인 법칙만 적용했는데 디즈니의 BSDF에 사용되는 Diffuse 모델이 있어서 적용해봤다. 아래 내용들을 참고해서 적용했다. https://lifeisforu.tistory.com/350 [ 번역 ] Physically-Based Shading at Disney 원문 : https://disney-animation.s3.amazonaws.com/library/s2012_pbs_disney_brdf_notes_v2.pdf 주의 : 번역이 개판이므로 이상하면 원문을 참조하세요. 주의 : 허락받고 번역한 것이 아니므로 언제든 내려갈 수 있습니 lifeisforu.tistory.com https://schuttejoe.github.io/post/disneybsdf/ Ren..
-
[DirectX11] Specular BRDFDirectX11 2023. 12. 11. 17:09
Diffuse의 경우에는 간단하게 램버트의 코사인 법칙을 적용했다.다음으로 Specular를 계산해야하는데 Phong 반사 모델 같은 간단한 방법도 있지만 그것보다는 더 자연스럽게 표현하고싶어서 Cook-Torrance 방식을 적용했다. 코드와 수식 참고한곳:https://blog.naver.com/canny708/221551990444 GGX와 Schlick Fresnel, 그리고 자주 쓰이는 쿡-토런스 함수이전 쿡-토런스 게시글에서 가장 핵심이 되는 건 다음 수식입니다. 사실, 나머지 수식과 소스코드는 쿡-토...blog.naver.comhttps://graphicrants.blogspot.com/2013/08/specular-brdf-reference.html?m=0 Specular BRDF Ref..
-
[DirectX11] DrawIndexedInstanced로 여러개의 인스턴스 그리기DirectX11 2023. 12. 7. 22:29
여러개의 동일한 모델을 그려야 하는 경우 DrawIndexed를 여러번 호출하는 대신 DrawIndexedInstanced를 사용하면 한번의 드로우 콜으로 여러개의 모델을 그릴 수 있다. 각 인스턴스들의 정보를 배열의 형태로 버퍼를 통해 전달하면 DrawIndexedInstanced에 지정한 횟수만큼 배열의 인덱스를 늘리면서 각 인스턴스의 정보에 맞게 그린다. 필요한 것은 다음과 같다. 인스턴스의 정보를 담을 구조체 인스턴스의 정보를 GPU로 보내줄 버퍼 인스턴스용 버텍스 쉐이더 또는 픽셀 쉐이더 인스턴스의 정보는 간단하게 월드 변환 매트릭스만 전달하겠다. struct InstanceInfo { XMMATRIX mInstanceToWorld; }; // ... int g_InstanceNum = 2; I..