묻고 답해요
130만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
SwapChain에 대해서 질문이 있습니다
SwapChain에 대해서 제대로 알고있는게 맞는지 개념 확인좀 부탁드립니다.SwapChain 사용 이유SwapChaine을 생성할시 프론트버퍼와 백버퍼가 생성이되고 프론트버퍼에 있는 데이터가 모니터로 복사가되고 백버퍼에 다음 장면을 렌더링 하는식으로 돌아가게 된다.이렇게 하는 이유는 버퍼에서 모니터로의 비트 데이터 복사 속도가 매우 느리기 때문에 버퍼를 하나만 쓰다간 모니터에 모든 버퍼의 데이터가 복사되기 전에 먼저 다음 프레임의 비트 데이터가 버퍼에 갱신되어서 모니터에 이전 프레임의 비트 데이터가 복사되던 도중 갑자기 갱신된 현재 프레임의 비트 데이터 복사될수도 있기 때문이다. SwapChain Present 동작 원리비트 데이터를 전부 화면에 복사한 프론트버퍼를 가리키는 포인터와 현재 프레임의 비트 데이터로 갱신된 백버퍼의 포인터가 서로 가리키고 있는 버퍼를 교체하면서 화면 복사와 다음 프레임 데이터 갱신을 이어나가게 한다. SwapChain을 만들때 BufferCount를 1개로 설정해주던데 이거는 백버퍼의 개수이고 프론트 버퍼는 개수를 지정해줄 수 없고 자동으로 한개만 생성된다
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
ConstantBuffer에 대해서 질문이 있습니다.
안녕하세요 ConstantBuffer에 관련되어 강의를 듣는도중 질문이 3가지 정도 생겼습니다.VertexBuffer에 있는 내용을 직접 변경해서 다시 랜더링하기 위해선 처음 설정할때 GPU에서 초기화하고 읽기 전용으로만 생성했기때문에 VertexBuffer를 다시 생성하고 GPU로 다시 복사해줘야 한다고 말하셨는데 GPU에서 읽기, 쓰기 둘다 가능한 D3D11_USAGE_DEFAULT 타입으로 생성해준 뒤 GPU내부에 VertexBuffer를 다시 생성할 필요가 없이 쓰기 작업만 해주면 안되는 건가요? 1번 경우가 어떤 이유때문에 안될것이지만 왜 저렇게 하면 안될까 이유가 궁금해서 쓴 것이고 VertexBuffer를 ReadOnly로 설정하고 Offset을 더해주어 모델링이 움직일때 이러한 개념으로 생각해도 되나요?우선 현재 렌더링 되고있는 Enemy 100마리가 존재하고 100마리 전부의 위치를 각기 다르게 수정해준다고 가정.2-1. VertexBuffer를 통해 위치 정보를 직접 수정하는 경우첫 번재, 현재 VRAM에 100마리 만큼의 모델링 정보가 있는 상태에서 100마리 만큼의 위치변환 정보만 전송해주는 방법.두 번째, CPU가 GPU로 정보를 보내줄때 아예 그냥 100마리만큼의 모델링 정보 + 100마리 만큼의 위치변환 정보를 전부 전달해주는 방법.이 있는데 첫 번째 경우로 한다하면 VRAM에 100마리 만큼의 모델링 정보를 감당할 메모리가 존재하지 않아 불가능하고 두 번째 경우로 한다면 보내주는 용량이 너무 많아 전송 시간이 너무 오래 걸리기 때문에 힘들다라고 이해했습니다.그래서 제가 이해해본 강사님께서 말한 방식이 2-2 방법인데2-2. ConstantBuffer를 통해 위치 정보를 간접 수정하는 경우CPU에서 GPU로 정보를 보내줄때 100마리의 위치 정보만 보내주고 VRAM에 존재하는 하나의 모델링에 100개의 각기 다른 위치 정보를 더해주어 렌더링함으로써 C++에서 l-value 하나에 여러 상수를 더하면서 여러 r-value를 쓰듯이 사용하는 방법.이 경우를 통해 1개의 모델링과 100개의 위치변화 정봅만 있으면 100개의 Enemy를 렌더링 할 수 있다 라고 이해했습니다 혹시 이게 맞나요? 마지막 질문입니다 Update 함수에서 memcpy를 사용해서 subResource.pData에 들어온 데이터를 통해 constantBuffer의 상수 데이터를 변경시킨다고 알고 있는데 이 함수 내용에선 직접적으로 constantBuffer에 subResource.pData의 데이터를 할당하는 부분이 없는데 어디서 할당이 되는 건가요? 혹시 몰라서 subResource.pData와 constantBuffer.Get()의 포인터 정보도 찍어봤는데 서로 다른 곳이였어서 deviceContext에서 자동으로 알아서 전달해주는 건가요?제가 궁금한게 생기면 못 넘어가는 성격이라 질문이 길어서 죄송합니다.
-
미해결[게임 프로그래머 도약반] DirectX11 입문
렌더링 파이프라인 front buffer, backbuffer 질문
RenderBegin()과 RenderEnd() 사이의 렌더링 파이프라인 단계를 거쳐서 다 그리고 나면은_swapChain→Present함수 호출을 통해 ‘고속복사’가 발생한다고 강의에서 말씀하셨는데조금 이해가 안되었던 부분이매 틱마다 RenderBegin() → RenderingPipeLine → RenderEnd()를 거치게 되는 버퍼가 _swapChain의 front buffer ↔ back buffer로 순서가 왔다 갔다 바통터치 하듯이 바뀌면서 렌더링 파이프라인이 진행되는 것인가요?아니면 전면버퍼는 모니터 화면에 계속보여주고 backbuffer가 매틱마다 RenderBegin() → RenderingPipeLine → RenderEnd()거쳐서 다 그려진 완성물(보여줄 데이터)을 front Buffer에 ‘고속 복사’를 하는 방식인가요?문서를 보면 포인터로 빠르게 front buffer, back buffer를 왓다 갔다 한다는데 햇갈리네요…
-
미해결[게임 프로그래머 도약반] DirectX11 입문
Constant buffer 질문있습니다
질문 1. Constant 상수 변하지 않는 이라고 생각하는대offset을 변경한다는게 이해가 잘안갑니다.. 질문 2. (CPU 메모리) 버퍼를 생성하고 GPU Video Memory에 복사한다 가 맞는건가여?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
버텍스 버퍼를 잘이해못한거같습니다
현재 정점4개를 만든이유는단순 2D 이미지 띄우기 위함인가여?3D 모델의 정점은 모델 마다 다를테니 정점 데이터를 읽어 오는 방식으로 동작 하는 건 가여?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
Animation 보간 관련 질문드립니다
애니메이션 보간 결과물이 너무 어색해 생각해보니각 키프레임 데이터에서 꺼내온 SRT를 보간 한 후에애니메이션 트랜스폼을 결정해줘야 의도처럼 되더라구요.근데 애니메이션의 Transform을 SRV로 만들어 셰이더로 던져줘서 보간 계산을 할 수 있는 적절한 위치를 모르겠습니다.셰이더에서 하기에는, BONE INDEX를 처음부터 돌면서 현재 프레임의 Transform을 구하는 동일한 과정을 vertex마다 계속 하게되고,CPU에서 처리하기에는 텍스처를 사용하는 의미가 퇴색되는 것 같아 질문드립니다. Transform을 Texture화 하면서 정확한 보간을 할 수 있는 방법이 있나요
-
미해결[게임 프로그래머 도약반] DirectX11 입문
비쥬얼스튜디오에서 디버그할땐 실행되는대 exe파일로는 실행이안되요
1.실행파일로 시작했을때 오류2.비쥬얼스튜디오에서 디버그 했을때 모습제가 잘못한건지 보려고 선생님 프레임워크 실행해봐도 똑같은 문제가 납니다장치 생성하는 라인인거같은대 왜다른걸까요..?
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
카메라 위치에 따른 색상 변화
카메라가 light의 volume mesh 안에 있는 경우와 밖에 있는 경우에 따라 오브젝트의 색이 변합니다.안에 있는 경우 어두워지고, 밖에 있는 경우 밝아집니다. 정확한 원인을 모르겠습니다. 혹시 알려주실 수 있나요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
선행 강의 수강 질문
안녕하세요.이번에 신규가입 얼리버드 25% 할인으로 DirectX11 강의를 구매해서 수강 중인 학생입니다.강의를 들어보니 Windows API와 STL 부터 선행이 필요하다고 생각이 들어[게임 프로그래머 입문 올인원] 강의도 수강하려고 했는데 할인 기간이 종료되었더군요...혹시 [게임 프로그래머 입문 올인원] 할인쿠폰을 받아 수강할 수는 없는 지 문의드립니다.
-
미해결[게임 프로그래머 도약반] DirectX11 입문
Part1: C++ 프로그래밍 입문 강의듣고 넘어왔습니다
질문 1. [게임 프로그래머 도약반] DirectX11 입문 들어 가기 전 혹시 미리 공부해가야 되는 것 이 있을까요?질문 2. 다이렉트x가 처음이라면 물방울책 구매해서 섹션 11부터 시작하는게 좋을까요?
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
SwapChain이 만들어질때 생성되는 버퍼 생성 영역
강의를 보다 렌더링 될때 입력될 Vertex 데이터가 그래픽 카드 내부에 있는 VRAM 내부에 생성된다는 사실을 알게되었니다.그래서 궁금한게 생겼는데 혹시 Swap Chain이 만들어질때 생성되는 백 버퍼들또한 VRAM 내부에 만들어지는 건가요? 아니면 RAM에 만들어지는 건가요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
CreateInputLayout 도중 Offset 관련하여
강의를 듣고 있는 도중 질문이 하나 생겼습니다 강의 16:05 부분입니다.강사님께서 CreateInputLayout을 하기 위해 이전 작업으로 D3D11_INPUT_ELEMENT_DESC라는 구조체를 만드셨고 내부의 요소로 UINT AlignedByteOffset; 이러한 변수가 있었습니다.강의에서 강사님께서 이 부분은 변수가 시작되는 지점을 적는 변수라고 알려주시고 Color가 시작되는 지점이 12Byte라고 하셨는데 이 D3D11_INPUT_ELEMENT_DESC라는 구조체로 설명하려하는 것이 이 전에 선언해두었던 struct Vertex{ Vec3 position; Color color;};라는 구조체였다면 구조체의 메모리 패딩에 따라 제일 큰 변수의 메모리 크기씩 영역이 쪼개져서 16Byte씩 끊어지니깐 position은 0 ~ 12구간 그리고 12 ~ 16 구간은 메모리 패딩으로 인해 비어져 있고 16 ~ 32까지가 color가 있는 구간으로 알고있었습니다 그래서 제가 잘못 생각하고 있는건가해서 12대신 16을 넣어봤는데 정상적인 색이 안나오지 않더라고요.제가 개념을 잘못 알고있는건가 아니면 제대로 알고 있는데 이 부분만 특수한 케이스로 12라고 입력이 된건가를 잘 모르겠어서 개념을 확실히 잡고 가야된다고 생각해서 질문 드립니다 혹시 어디가 잘못된 건지 알려주실 수 있으신가요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
Tessilation 질문입니다
tessilation 을 통해서 displacement mapping 을 좀 복잡한 mesh 에 적용을 해봤는데 gpu 가 갈리는 소리가 나서요. 아무래도 삼각형 개수가 기하급수적으로 늘다보니 gpu load 가 클거 같은데 tessilation 이 실제로 필요사양이 높은가요? 그리고 현업에서도 tessilation 사용하는데 제약이 많은지 궁금합니다.
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
reflectionDir 구하는 과정에서 질문 있습니다
안녕하세요 선생님 skybox 강의 보고 큐브를 뒤에서 본 후 질문이 생겼습니다. float3 reflectionDir = normalize(viewLightDir + 2 * (saturate(dot(-viewLightDir, viewNormal)) * viewNormal));이렇게 구하게 되면 saturate(dot(-viewLightDir, viewNormal))이 0 인 경우에 reflectionDir = viewLightDir이 되어서 큐브의 면 중 빛의 방향과 같은 방향에 있는 면을 마주보게 되면 ambient 만 있어야 하는데 specular 때문에 밝게 됩니다. 이 문제를 어떻게 해결하면 좋을지 궁금합니다.
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
billboard _ geometry shader 질문
안녕하세요 빌보드나 이펙트를 만들때 geometry shader 를 사용하라고 배웠었는데 강사님께서 billboard 수업때 하신것처럼 굳이 geoshader 없이 quad 로도 가능할것 같은데 이게 규모가 커지면 geo_shader 를 사용하는게 성능에 유의미한 의미를 가지나요? 좋은강의 정말 감사합니다!
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
obbcollider update 질문
obb collider 의 업데이트를 할 때 mBoundingBox.Orientation 가 unit quaternion 이란 설명이 있던데 GetTransform()에서 XMQuaternionRotationRollPitchYawFromVector함수를 이용해서 _rotation 을 쿼터니언으로 변환하면 될까요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
마지막에 삼각형이 안 떠서 질문을 드립니다.
선생님 진도에 따라서 문제없이 잘 진행되다가 삼각형을 출력하는 부분에서 삼각형이 안 떠서 질문을 드립니다.저 혼자 디버깅을 해보았으나 Pass, Technique, stride, offset이 모두 제가 보기엔 정상이고, Render에 들어오는데 삼각형이 안떠서 비교하기 위해 수업자료를 다운받아봤습니다.이번 수업에서 엔진은 복붙이고, 클라쪽 코드와 경로 설정 정도만 직접 타이핑해서 선생님 코드를 복붙했으나 삼각형이 뜨지 않아서 선생님 코드를 돌려보니 선생님 코드도 회색화면만 뜹니다.혹시 제가 어떤 부분을 체크하면 좋을지 알려주실 수 있으실까요??제가 현재 사용하는 환경은 VS 2022최신버전, 윈도우 11입니다.
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
뉴비 질문 드립니다
제가 많이 부족한 편이라 실례가 안된다면 기본적인 질문 몇가지만 여쭤보겠습니다1. pch에 넣는 헤더파일과 안넣는 헤더파일의 기준이 어떤건가요?2. 함수 앞에 ::를 표시하고 구별하는건 어떤 것들만 해당하나요?나머지는 강의 내용과 상관없는 질문입니다. 답변 안해주셔도 괜찮습니다조잡한 3d 엔진을 만들고 c++ 게임서버와 데이터베이스 구축하여 연동하는 것까지 목표로 하고 있습니다질문은 3. 게임 서버를 c++로 만들고 싶은데 Boost.Asio같은 라이브러리를 사용해서 만들면 난이도가 많이 높아질까요? 그리고 현업에서 서버를 만드는데 Boost를 사용하나요?4. c++ 게임 서버에서 mysql과 연동할때 보통 Connector/C++를 사용하나요?
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
Transformation pipeline 질문
제가 원래는 wvp matrix로 곱해서 주어진 값을 w에있는 z값으로 나누어서 x,y는 -1~1z는 0~1로 클립핑 하고 래스터라이즈로 들어간다고 생각했었는데 이번 강의를 수강하면서 ms문서나 블로그들을 조사해보니까클립핑할때는 x,yz 를 w랑 직접비교하고 그이후에 viewport로 변환을 미리 해주고 마지막에 w값을 나누어 주더라구요 먼저 제가 잘 이해했는지 궁금하고 그리고 viewport좌표로 변환하는 매트릭스는 Context->rssetviewport하는 과정에서 내부적으로 만들어지는건가요?그리고 rasterizer 로 주어지는 값은 (800,600)을 예로 했을때 (0~800,0~600,0~1,1)이렇게 되나요?감사합니다!!
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
요즘 실제 게임 제작에 컴퓨트 쉐이더가 많이 활용되나요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.요즘 실제 게임 제작에 컴퓨트 쉐이더가 많이 활용되나요? 그리고 서버 쪽에서도 활용되는 경우가 있는지 궁금합니다.