Programming/D3D12 25

(공부중) #1 App 구조 예쁘게 다시 바꿔보기

유영천 프로그래머(@megayuchi )님 방송을 가끔 보는데... 그동안 공부했던 D3D12 책이 그다지 좋지 않다는.... 얘기를 들었다. 그래서뭐라도 좀 해야겠다 싶어서 앱 구조라도 일단 예쁘게? 다시 짜보는 걸 해보도록 하겠다.- 예쁘다의 기준은... 나중에 공부하면서 추가할 기능이... 예쁘게? 돌아가게 하는 거 ㅋㅋgithub - d3d12practice - solopractice 0. 일단 megayuchi 강의 샘플을 적당히 따라감https://inf.run/WYdms D3D12 프로그래밍-기초편 강의 | megayuchi - 인프런megayuchi | 이제는 주류 그래픽 API의 자리가 D3D11에서 D3D12로 넘어간 것 같습니다. D3D12는 매력적인 기능들을 지원하지만 학습 난이도가..

Programming/D3D12 2024.07.01

[일기장] 무작정 FBX SDK 사용해보기 (Material + Animation)

1편 : [일기장] 무작정 FBX SDK 사용해보기 (삽질 + Mesh) 1. 이제 FbxSurfaceMaterial가 뭔지 알아볼 차례- 1편에서 Layer 정보를 냅다 출력할 때, FbxSurfaceMaterial의 Element도 출력을 했었는데- 그때는 Material 의 개수와, 각 property들을 찾는 문자열(?)만 출력이 되었다. (결국 예제코드 컨닝하기...)- FbxSurfaceMaterial 클래스가 맴버로 가지고 있는 property 내용을 FbxSurfaceMaterial 객체에서 FindProperty()를 이용해서 FpxProperty를 받는다...- 이제 보니 FbxObject의 상속을 받는 친구였다. FbxObject는 대부분의 FBX object의 베이스 클래스라고 한다..

Programming/D3D12 2024.05.05

[일기장] 무작정 FBX SDK 사용해보기 (삽질 + Mesh)

친구랑 Unity만지다가....모집공고 올라와서 이력서 넣으려는데 뭔가 텅텅 빈 느낌이라. 급하게 시작한 FBX공부 ㅋㅋㅋㅋFBX SDK | Autodesk Platform ServicesFBX SDK Help | Autodesk 1. 냅다 content /  attribute / Type 정보를 출력해보는 예제 따라하기- 엄청나게 많은 skeleton과 2개의 Mesh가 있다...흠 - 주어진 코드를 그대로 따라했고 다른 점은, WinApp이여서 - printf 대신에 C++20의 std::format으로 출력창에 출력을 해줬다.- 모델은 Mixamo 의 이 친구를 사용했다. 2. FBXLayer가 뭐지??- 일단 Mesh를 얻고 싶어서 옛날 문서를 찾아보다가...- (안전하지 않은 옛날 링크) FBX..

Programming/D3D12 2024.04.30

[책공부] 캐릭터 애니메이션 chap 23 (연습 문제 X)

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. 캐릭터 애니메이션 - 책 내용은 그냥 '그렇구나' 라는 생각을 하며 읽을 수 있다. 예제 또한 읽기 쉽게 특수 제작된 모델 형식과, 애니메이션을 가지고 연습할 수 있도록 도와준다. 그냥 책에서 정해준 구조에, 정해준 방법으로 따라만했다.. - 블로그에는 책에 소개된 개념과, 그 개념을 예제에서는 어떤방식으로 구현했는지 간단하게 언급하고 넘어갈 것이다. - 이걸로 느낌을 잡았으니, 다음은 FBX, OBJ 같은 상용 포멧을 나만의 Render위에 올려봐야 제대로 공부가 끝날 것이다. 2. 뼈대(bone) 좌표계와 위계구조(Hierarchy) - 언리얼 마네킹이나 블랜더에서 모델을 하나 만들면, Pelvis나 Root에서..

Programming/D3D12 2024.03.25

[책공부] Quaternion + chap 22 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 0. 이거는 진짜로 이해했다고 말할 수 없다. - 일단 이 quaternion 챕터 내용은 복소수에서 기하학적 해석으로 회전으로 개념을 확장하고, 복소수의 확장 + 일반적인 버번인 사원수도 그 회전의 개념을 적용시킨다. - 사원수와 선형대수의 벡터 공간에서 연산을 이용하여, 임의의 축(axis)에 대해 벡터(점)를 세타(θ)만큼 회전시키는 식이 선형 변환(linear transform)이 선형 변환임을 알아내고, - 그것을 행렬로 또 다른 선형 변환과 함께 사용할 수 있다는 것에 관한 내용인데... - 솔직히 말해서... 공식으로 몇 번 유도해 보고, 써보고 결과를 눈으로 보니까 이해했다기보다는 그냥 익숙해진 느낌이다....

Programming/D3D12 2024.03.12

[책공부] Ambient Occlusion + chap 21 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Ambient Occlusion - 냅다 모든 모델 픽셀에 일정량의 빛을 더해주었던 Ambient Light를 좀 더 그럴싸하게 바꾸는 챕터이다. - 아이디어는 일단 타겟픽셀 주변에 뭔가 많으면, 그림자가 드리워져서 혹은 빛이 가려져서 Ambient Light를 어둡게 설정하는 것이다. - 타겟 픽셀의 노멀 방향 반구로 냅다 Ray를 쏴서, 뭔가 닿는것이 많을 수록 어두워지는 것이다. - 하지만 모든 모델, 모든 픽셀에 대해서 Ray를 쏘는건 일단 말이 안되고, 좀 더 가벼운 방법이 필요하다. - 그래서 나온게 SSAO (Screen Space Ambient Occlusion) 이다. 화면에 보이는 부분에 대해서만,..

Programming/D3D12 2024.03.08

[책공부] Shadow Mapping + chap 20 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Shadow Mapping - 아이디어의 시작은 그림자를 지게 만드는 광원에서 뭔가를 하는 것이다. - 광원에서 빛이 나와서 opaque한 물체에 닿으면, 그 뒤로 그림자가 생기는 것이다. - Shadow Mapping이 이 원리를 써먹을 알고리듬이다. - 광원에서 빛의 방향으로 바라본 장면을 렌더링 하고, 이것의 뎁스 버퍼를 이용하는 것이다. 그러면, 광원과 빛이 처음 닿는 픽셀과 거리가 담긴 텍스쳐를 얻게 된다. - 이를 그림자를 지게할 곳과 거리를 비교해서, 해당 평면에 그림자가 드리울지, 아닐지, 혹은 얼마나 드리울지 결정하는 것이다. 2. Projective Texturing - 예제에서는 Direction..

Programming/D3D12 2024.03.04

[책공부] Normal Mapping + chap 19 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Normal Mapping - Vertex에서만 존재하는 Normal 값을, 텍스쳐로 받아서 더 디테일하게 표면을 그려보려고 한다. - Normal 정보를 가지고 있는 Normal Map(Texture)와 그것을 적절히 모델에 적용(Mapping)시키는 것이 목적이다. - 노멀맵 이미지를 보면, 파란색 베이스에 초록색이나 붉은색이 약간씩 섞여있는... 아무튼 그런 모양새다. - RGB에 각각 Normal의 X, Y, Z 값을 넣어서 그런 것이다. Z가 접면 좌표계에서는 수직을 나타내니깐, 그것을 담은 나타내는 B값이 제일 클 것이고, 그래서 전반적으로 푸른빛을 내는 것이다. - bit - format은 각 성분의 구..

Programming/D3D12 2024.02.27

[책공부] Cube Mapping + chap 18 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. CubeMap과 환경 매핑 - 플레이어(카메라) 가까이 Mesh들이 있는 Level이 아니라, 예제 사진처럼 환경을 그려주고, 반사되는 물체에도 적절히 환경 반사상을 그려주어서, 심미적인 효과를 주는 것이 이번 예제의 목표이다. - 이를 위해서는(예제와 같은 결과가 나오기 위해서는) 주변 환경을 나타내는 6장의 Texture를 가진 환경맵이 필요하고, 해당 텍스쳐의 포맷인 D3D12_SRV_DIMENSION_TEXTURECUBE에서 픽셀을 참조하기 위해 필요한, LookUp 벡터로 샘플링을 해야 한다. 2. TextureCube 맵 과 LookUp Vector - 일단 환경 자체를 그리는 방법을 먼저 보면, 예제에서..

Programming/D3D12 2024.02.26

[책공부] Picking + chap 17 연습 문제

(사실 이해했는지 모르겠다. 어렴풋이 느껴질 뿐... 그래도 그 느낌을 정리한다.) 1. Picking - 화면을 마우스로 클릭해서 model을 선택하는 것을 목표로 한다. - 마우스 입력은 Client Area의 2D 좌표로 받고, Model은 App 상에서 3D로 존재하고, 좌표계도 다르다. (Client Area -> World Coordinates) - 아이디어는 NDC위의 점을 클릭한 것을, 원점(카메라 위치)에서 View Frustum의 Projection Screen위의 한 점으로 지나가는 반직선(Ray)으로 변환하는 것이다. - 카메라 위치에서 Projection Screen을 지나 View Frustum을 가로지르는 반직선(Ray)과, Model의 충돌을 적절한 좌표계 변환과 + Dire..

Programming/D3D12 2024.02.22