월 44,000원
5개월 할부 시다른 수강생들이 자주 물어보는 질문이 궁금하신가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
다렉12 강의 개편은 언제쯤 완성되는지 알 수 있을까요??
개편 하신다는 글을 봤는데언제쯤 될지 궁금해서요..
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
#include wrl.h 헤더를 사용하면 에러가납니다
wrl.h 헤더를 사용했을때 계속해서 아래와 같은 에러가 뜨는데 혹시 방법이 있나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
shader의 blob관련 질문 드립니다.
이전 Texture 강의 들으며 실습할 때까지는 문제가 없었는데 DepthStencilBuffer 강의를 들으며 실습한 후 Engine을 빌드하는 것 까지는 성공하였습니다. 그런데 디버그할 시에 blob이 null이어서 예외가 발생하는데 무엇이 문제일까요? 디버깅하며 확인해보니 Shader.h의 멤버변수로 선언된 _vs, _ps, _err 모두 아래와 같이 null값이 저장되어 있습니다. 연관이 있는지는 모르겠지만 아래와 같은 경고가 함께 뜨는데 이것과 연관이 있는 것일까요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
TestCameraScript 질문
TestCamerScript 클래스에서 Q를 공부할 때 Q를 누르면 +방향이어서 카메라 머리가 올라갈줄 알았는데, 실제로 해보니까 머리가 내려가서 베이가가 점점 올라갔습니다. 혼자 생각해보니 왼손 좌표계여서 yz -> x로 하면 +방향이 왼손을 도르르 마는 방향인 아래 방향이어서 rotation의 x에 값을 더했는데 카메라머리가 내려갔다고 생각했습니다. 제 생각이 맞는지 확인받고 싶습니다..
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
visual studio 사용법 질문
강의 24분 57초에 함수이름 드래그해서 함수 호출하는 부분 다 보게 하는기능은 혹시 어떻게 사용하는 건가요??
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
상수 버퍼에 관련해 질문이 있습니다.
학습 내용에서 Constant Buffer와 Root Signature 강의 두개를 보고 이해가 잘 안가서 질문드립니다. 먼저 Constant Buffer 강의에서는 Resource의 모음집인 _cbvBuffer에 데이터를 넣고 커맨드큐에 0 또는 1번 레지스터가 그 주소를 가리키라고 요청했는데, 이 때 이 방식이 가능한 이유는 Root Parameter를 정해주는 단계에서 InitAsConstantBufferView에서 Shader Visible이 ALL이기 때문인가요? 아니면 _cbvBuffer의 타입이 D3D12_HEAP_TYPE_UPLOAD이기 때문인가요? 또한 D3D12_HEAP_SHADER_VISIBLE이 아닌 D3D12_HEAP_FLAG_NONE인 이유가 있나요? 다음 질문입니다. Root Constant 방식은 각 b0 b1 레지스터가 GPU 메모리에 담긴 정보를 가리키는 형태라고 말씀하셨는데,Descriptor Table을 사용하게 되면 b0 b1 ... b4 레지스터가 Descriptor Heap에 담긴 주소를 가리키게 되는건가요? 아님 다른 방식인가요? 다음 질문입니다. Descriptor Table의 방식을 정리해보면 다음과 같다고 이해하고 있습니다. Constant Buffer의 내용을 Constant Buffer View가 가리키고, 그 내용을 Shader Visible인 Descriptor Heap이 가리키고, 그걸 b0, b1, b2... 에 놓는다. 라고 이해하고 있는데 그냥 Constant Buffer의 내용을 Shader Visible인 Descriptor Heap이 가리키게 하면 한 단계가 더 줄지 않나 싶어서 여쭤봅니다. 마지막 질문입니다. Root Constant 방식을 사용하게 된다면 중복으로 인해 데이터가 덮어씌워질 수 있으니 각 오브젝트가 Constant Buffer를 사용할 때 다른 index를 사용하게 하여 데이터가 덮어씌워지는거를 피했는데, 오브젝트가 늘어나면 늘어날수록 Constant Buffer 속 _cbvBuffer의 크기가 늘어난다고 이해하고 있습니다. 그럼 Descriptor Table 방식은 오브젝트가 늘어나면 늘어날수록 Descriptor Heap의 크기가 늘어나고, 동시에 Constant Buffer View의 크기도 늘어나는건가요? 따로 답변을 받아도 이해가 잘 가지 않는다면 추가적인 공부 후에 또 정리해서 질문드려도 괜찮은거겠죠..?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
그럼 View 좌표계는 결국 카메라의 Local 좌표계 인가요?
ㅈㄱㄴ
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
pch 만들기 사용하기 차이
pch 만들기와 사용하기 차이가 뭔가요? 프로젝트 설정에서 pch 사용하기를 해두면 앞으로 해당 프로젝트 내에 있는 모든 cpp파일에서 pch를 사용한다는 뜻이고, 만들기는 이 파일을 이용해서 pch를 만들어라 이런뜻인가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
서명 할 때 없애준 부분이 이부분 맞나요?
ConstancBuffer::PushData에서 D3D12_GPU_VIRTUAL_ADDRESS address = GetGpuVirtualAddress(_currentIndex); CMD_LIST->SetGraphicsRootConstantBufferView(rootParamIndex, address); 이 두줄을 삭제한 이유가 서명을 할 때 없앴기 때문인데 (43:44) 그 서명이란게 RootSignature::Init 의 param[0].InitAsConstantBufferView(0); // 0번 -> b0 -> CBV param[1].InitAsConstantBufferView(1); // 1번 -> b1 -> CBV 테이블을 이용하게 되면서 삭제한 이 부분을 이야기 하는건가요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
Transition 질문있읍니다.
CommandQueue::RenderBegin 함수와 RenderEnd 함수에서 Transition함수를 호출하는데, 이 Transition 함수가 정확히 무엇을 하는지 잘 모르겠습니다. 일단 제가 이해한 것은 이렇습니다. swapchain에 버퍼가 2개 있습니다. 각 버퍼에는 리소스가 담겨있으며, 각 버퍼를 0번 버퍼, 1번 버퍼라고 하겠습니다. 하나는 현재 화면에 출력하는 용도(이하 Present), 다른 하나는 GPU가 다음 화면에 출력할 내용을 기록하는 용도(이하 RenderTarget) 입니다. 현재 0번 버퍼는 Present, 1번 버퍼는 RenderTarget로 사용되고 있는 상태팁니다. 이 때, RenderBegin의 Transition 함수 호출문은 Present 버퍼를 RenderTarget 버퍼로 바꿉니다. 즉 0번 버퍼를 RenderTarget으로 바꿉니다. 그렇다면 여기서 의문점이 생깁니다. Present 버퍼의 상태를 바꿀 건데 어째서 Transition 함수에 첫 번째 인자로 RenderTarget 버퍼를 넘겨주었나요? 또, 0번 버퍼를 RenderTarget으로 바꾸면 0번, 1번 버퍼 둘다 RenderTarget인 상태가 맞나요? 만약 그렇다면, RenderEnd 에서 Transition 함수는 RenderTarget 버퍼를 Present 버퍼로 바꾸는데, 0번과 1번 둘 중 어떤 RenderTarget 버퍼를 바꿔주나요? 아니라면 제가 잘못 이해하고 있는 부분은 어떤 것인가요?? 질문이 길었는데 읽어주셔서 감사합니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
리뉴얼이 되더라도,,
리뉴얼이 되더라도, 현재 강좌도 부록으로 남아 있었으면 좋겠습니다. 녹음이 상태가 좋지 않은 부분도 있었지만, 지금의 강좌도 충분히 개념을 잡아가는데도움이 되는 부분이 있기에, 이후에 리뉴얼이 되어도,현재강좌도 부록으로 히스토리 형태로 남겨 주시길 부탁드립니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
리뉴얼은 언제 출시를 목표로 하고 계신지 여쭤봐도 될까요?
늘 좋은 강의 감사합니다. 리뉴얼을 하신다는 공지를 보았는데, 리뉴얼은 언제쯤 완료를 목표로 하고 계실까요? 재출시 전까지 이미 올리신 강의 보다가 재출시하면 넘어가려고 합니다
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
output.pos += offset0; 에서 vec4가 vec3로 바뀐건가요?
t.offset = Vec4(0.75f, 0.f, 0.f, 0.f); 셰에더에서 pos는 vec3이고 offset0은 vec4 인데 자동으로 vec4가 vec3로 변환되어서 계산 되었다고 볼 수 있는 거죠??
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
테셀레이션 지형에 플레이어 태우기
테셀레이션된 지형은 쉐이더에서 지형의 높이 등이 결정되는데 이 테셀레이션된 지형 위에서 플레이어가 움직이게 하려면 어떻게 해야하나요? 테셀레이션된 정보를 플레이어가 알 수 있는 방법이 있나요?
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
질문이 있습니다.
Texture Mapping에 있는 강의를 다 듣고 실행 시키려고 하는데, 파일을 찾을 수가 없다는 에러가 뜹니다. 경로는 다 설정을 해주었고, Engine에서의 빌드는 정상적으로 됩니다. 그럼에도 불구하고, 실행을 시키면 에러가 떠서 질문을 드립니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
빛이 여러개 중첩되는 상황이 궁금합니다
강사님께서 올려주신 코드에서SceneManager::LoadTestScene() 에서 PointLight 를 그대로 2개 복사하여 총 3개를 만들었습니다. 빛의 중첩이 효과가 있는지를 확인하기 위해서 였습니다. 저는 사실 이렇게 할 경우 효과가 없을 줄 알았습니다. 왜냐하면 Point Light 가 3개일 경우 lighting.fx 의 PS_PointLight 에서Deffered Rendering 에서 만들어 낸 g_tex0(Position RT) 와 g_tex1(Normal RT) 으로 1번 Point Light 의 빛을 계산한 후 Light shader 의 Render Target 인 DiffuseLightTarget 와 SpecularLightTarget 으로 출력하고, 그 다음에 2번째 Point Light 의 PS_PointLight 가 실행될 때 위의 과정을 거쳐 DiffuseLightTarget 와 SpecularLightTarget 에다가 그 결과를 덮어씌우고, 마지막 3번 째 Point Light 역시 DiffuseLightTarget 와 SpecularLightTarget 에 결과를 덮어씌워서 결과적으로 하나의 Point Light 를 사용한 결과가 나올 줄 알았습니다. 왜냐하면 위의 3개의 Point Light 의 결과물을 더해주는 과정이 어디있는지 찾을 수 없어서 입니다;; 혹시 이 더해주는 과정들이 BLEND_TYPE::ONE_TO_ONE_BLEND 이것을 지정해 줌으로서 shader 에서 알아서 계산을 해주는 것인가욥?? 그게 아니라면 위와 같은 상황에서 어떻게 3번의 빛이 중첩이 되는 걸까욥?ㅜㅜ 궁금합니다ㅠㅠ 항상 강의 잘 보고 있습니다 감사합니다
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
a + bi 를 행렬로 표현하는 부분이 이해가 가지 않습니다.
37분쯤 부터 a + bi 가 행렬로도 표현이 가능하다고 설명해주시고 계시는데요 a + bi 가 [a, -b] [b, a] 로 표현된다고 하셨는데 아래에서 단위행렬을 말씀하실 때에는 E = [1, 0] [0, 1] I = [0, -1] [-1, 0] 으로 말씀하셨습니다. 제가 이해한 바로는 E 가 실수부의 단위행렬이고, I 가 허수부의 단위행렬같은데, 다른 질무의 계산 결과도 보니 I 가 잘못된 건 아닌것 같고, [a, -b] [b, a] 이게 [a, -b] [-b, a] 이렇게 (2, 1)의 값이 b 가 아닌 -b가 되어야 하는게 아닌가요?? 행렬에 너무 약해서 제가 잘못이해한것 같기도 한데ㅠㅠ 확인한번만 부탁드립니다ㅠㅠ
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
pch설정관련 질문드립니다.
처음에 pch를 설정할때는 client프로젝트 속성에서만 설정한것인데 Engine프로젝트를 생성하자마자 pch도 같이 생기는부분이 의문입니다.
- 미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
라이브러리 디렉터리는 왜 추가해야하나요?
#pragma comment(lib, "Engine.lib") 문장을 통해서 Client프로젝트에게 라이브러리 경로를 알려준 것이라고 생각하는데 왜 라이브러리 디렉터리도 추가해주어야 하나요? 그리고 프로젝트 속성 -> 구성속성 ->VC++ 디렉터리 에서 포함 디렉터리와 라이브러리 디렉터리를 변경해주는 것과 프로젝트 속성 -> 링커 -> 일반 -> 추가 라이브러리 디렉터리, 입력 -> 추가 종속성은 어떻게 다른가요? 궁금합니다.
- 해결됨[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
FBX Loader 메모리 릭 해결법
직접 엔진을 짜던 도중에 + 디버깅 중에 강의에서 사용된 FBX 로더의 메모리릭을 발견했습니다. 저만 그런건지 모르겠지만 해결법도 같이 공유합니다. 메모리릭의 원인은 FbxArray<FbxString*> _animNames; 이 FBX SDK의 데이터를 제대로 릴리즈 하지 않아서 그랬습니다. 저는 따로 셧다운 함수를 늘 만들어서 쓰는편인데, (디스트럭터에 해도 됩니다.) 해당 함수에 추가로 I32 count = _animNames.GetCount(); for (I32 i = 0; i < count ; i++) { _animNames[i]->Clear(); delete _animNames[i]; } _animNames.Clear(); 부분을 추가하시면 됩니다. FBX SDK 문서를 보면 Clear 만으로 메모리를 해제해주는것 같았는데, 왜 인지는 모르겠지만 디버깅 중에 메모리 덤프가 C런타임에 잡혔습니다. 큰 메모리블록이 줄줄 새는건 아니지만 신경쓰인다면 이렇게 해제하세요! 혹시나 찾는 사람 있을까봐 글 작성합니다.