묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
c++ 변수와 Shader 변수와의 상호작용
강사님 강의 정말 잘 듣고있는 도중 질문이 생겼습니다.보시는바와같이 Shader스크립트에서 전역변수를 선언하고 C++에서 만들어준 변수를 알맞게 매핑하여 잘 사용하는 모습을 보았는데요 여기서 질문이 있습니다.바로 저 Shader스크립트에 선언된 변수와 C++스크립트에 선언된 변수가 매핑되는 과정 입니다.C++에서 선언해주는 ShaderResourceView(Texture) 같은건 처음 선언할시 VRAM 내부에 Texture의 비트값이 복사가되고 ShaderResourceView라는 아이가 그 VRAM내부에 선언된 Texture의 주소를 Shader스크립트의 Texture2D라는 아이에게 전달해준다고 생각하고있었는데 그렇다면 그 위에 선언해준 Matrix같은 경우 c++에서 처음 선언할때도 VRAM이 아닌 RAM에 생성되는데 그렇다면 Shader의 Matrix와 C++의 Matrix는 Texture처럼 주소값만 전달해주는게 아니라 완전히 복사해주는건가 두 가지 과정이 다른건가 아니면 제가 어느 한쪽을 잘못 알고 있는건가 해서 질문드립니다.
-
미해결[게임 프로그래머 도약반] DirectX11 입문
V -> VInv 에서 CameraPosition 을 뽑아쓰는 이유가 이게 맞을까요?
듣다가 뇌가꼬여서.. 질문드립니다.V월드에 배치된 오브젝트들을 카메라를 원점으로 한 좌표로 바꿔주고 VInv카메라 로컬기준 오브젝트들을 다시 월드기준으로 변경시켜준다 카메라 움직임 자체에는 이상이 없음.문제점 : 조명효과(보이기엔 Emissive) 그래서 V -> VInv 로 한 이유는 Emissive 효과에선 물체에서 카메라까(눈) 벡터가 필요한데 (월드에 배치된 물체에서 월드에 배치된 카메라의 벡터가 필요) 기존 CameraPosition 은 V 면 항상 카메라가 원점이니깐 회전을 시켰을때 제대로 적용이 안됐다. 그래서 CameraPosition 을 VInv 에서 뽑아내서 월드 좌표로 바꿔줬다.. 란 제 결론이 나왔습니다.. 이게 맞을까요?
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
SRT Rotate 부분 값이 이상한 것 같습니다
1번값이 나오려면 2번에서 s와 -s가 바뀌어야 하는것 아닌가요? 1번의 X = xcos - ysin 이 나와야 하면 v와 M의 첫번째 행을 곱해야 X가 나오는데지금의 RotationZ행렬은 xcos + ysin이 나올것 같은데요...
-
미해결[게임 프로그래머 도약반] DirectX11 입문
Assimp bone 파싱 에러 질문드립니다.
모델, 애니메이션때 사용하셨던 모델이 mixamo의 모델인 걸로 알고 있는데 제공해 주신 모델외에 제가 새로 mixamo에서 다운받거나, 언리얼 리소스를 뜯어서 가져온 fbx 모델 모두 저런식으로 불필요한 bone들이 생깁니다. 제가 작년에 dx12강의를 들었어서 제공해주신 fbxloader를 좀 수정해서 fbx파일 한정으로 일부 해결하기는 했습니다. 혹시 파싱 문제를 해결할 방법이 있을까요?? 위에 사진은 수업때 제공해주신 소스코드에 모델만 바꿔서 파싱한 사진입니다.
-
해결됨[게임 프로그래머 도약반] DirectX11 입문
모든 GameObject가 하나의 TransformBuffer를 쓰는 건에 대하여
MeshRenderer에 구현되어서 각 GameObject마다 한개씩 가지고 있던 TransformBuffer를 RenderManager로 옮기면서 모든 GameObject에 한개의 TransformBuffer를 사용한다고 하셨습니다.질문은 "모든 GameObject에 TransformBuffer를 하나만 사용하면 TransformData가 중간에 곂쳐서 지워지거나 하진 않는가?" 입니다.제가 생각해봤을때 모든 Renderable GameObject 하나하나마다 for문을 통해 지금 GameObject가 이미 렌더링 되고 다음 GameObject로 넘어가므로 이전 GameObject를 그리기 위해 사용한 ConstantBuffer의 내용을 갱신해도 괜찮다고 생각되는데 제 생각이 맞나요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
Transform #2 강의 질문있습니다.
2분쯤에 SRT를 통해서 나온 행렬이 왜 월드 변환행렬이 되고 이것의 ux, uy, uz 성분이 왜 right 벡터가 되는 것인지 잘 모르겠습니다.
-
미해결[게임 프로그래머 도약반] DirectX11 입문
좌표계 변환 행렬 강의 질문있습니다.
처음에 해당강의가 이해가 안가서 한 두세번 보다가 넘어가고 Transform#2 강의 듣고 이해가 안가는 부분이 있어서 해당강의를 다시 보는데도 아직 이해가 안 가는 부분이 있어서 질문드립니다. 해당강의 8분쯤에 벡터 BM을 풀어서 쓰면 '만능공식'이 어떻게 나오는지 까지는 이해를 했습니다.그런데 SRT 행렬 연산을 하여 나온 행렬의 ux, uy, uz의 성분이 right벡터가 된다는 말이 이해가 안가는데이해가 안 간다고 스스로 생각한 부분이SRT연산을 해서 나온 결과는 말 그대로 현재 object의 좌표를 기준으로 Scale이 변화하고 Rotation이 변화하고 Transform이 변화한 좌표값을 말하는거라고 이해를 했습니다.그런데 어떻게 SRT를 통해 나온 행렬의 1행성분 (ux, uy, uz)가 right벡터가 된다는건지 이해가 안갑니다.. SRT 스자이공부가 무엇을 말하는지 까지는 이해를하고좌표계 변환행렬강의에서 좌표는 부모를 기준으로 상대적이다 라는 개념까지는 이해가 가는데SRT행렬을 구하면 월드 변환행렬이 되고 이 SRT를 통해 나온 월드 변환행렬에서의 ux, uy, uz가 right성분이 된다는 흐름?이 이해가 가지않습니다..
-
미해결[게임 프로그래머 도약반] DirectX11 입문
코드중 이해안가는부분이있습니다
Awake() :모든 오브젝트가 초기화되고 호출Start() :스크립트 인스턴스가 활성화된 경우에만 호출유니티 랑 비슷하게 하시려고 만드신 건 이해했습니다근데 생성자가 있는대 필요한 이유가 있을까요?생성 순서 문제 때문이라도 Awake나 Start 하나만 써도 될 것 같아서요
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
단일물체 애니메이션 구현중 descriptorheap handle 오류
안녕하세요수업 내용 이외에 단일 물체 애니메이션을 구현하는 도중에 descriptorheap handle 쪽에서 오류가 발생하였습니다.기본적으로 물체의 변환행렬을 상수버퍼에 추가하고 셰이더쪽에 연결하여 물체의 최종행렬을 계산하는 과정으로 알고 있습니다.objanimation 클래스를 파줘서 여기다가 모든 애니메이션 정보를 넣어놓고 컴포넌트에 연결해서 finalupdate 에서 행렬 보간을 해주고 meshrenderer 에서 transform 다음에 변환 행렬을 상수 버퍼에 pushdata 하는 과정에서 이런 오류가 발생하였습니다.그리고 currentindex < elementcount 어썰트가 종종 일어나는데 이부분도 왜 일어나는것인지 궁금합니다어떤부분에서 잘못구현한 것인지 감이 안잡혀서 질문 남깁니다또한 오류가 발생하기이전에 다르게 구현을 해봐도 쉽지가 않았습니다. 어떤식으로 접근해봐야 잘 구현이 될지도 궁금합니다!
-
미해결[게임 프로그래머 도약반] DirectX11 입문
강의에서 언급하시는 포폴 제작하는 과정이 포함되나요?
현재 강의에서 제작하고있는 프레임워크로 3D포폴을 만든다라는 언급이 종종 나오는데 그러한 과정도 이 강의에 포함이 되어있나요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
RenderTarget Group 적용
DX12에서 썼던 방법으로 RenderTargetGroup을 적용하는데SwapChain 옵션 중 SwapEffect = DXGI_SWAP_EFFECT_FLIP_DISCARD; 로 주니까SwapChain의 버퍼 카운트를 2로 했는데도SwapChain->GetBuffer(index, IID_PPV_ARGS(&resource)); 이 부분에서 index가 0이 아니면 resource를 반환해주지를 않는데, DX11에서는 DX12때 처럼 SwapChain의 BackBufferIndex를 이용해서 수동으로 관리하는게 불가능한가요
-
미해결[게임 프로그래머 도약반] DirectX11 입문
ComputeShader로 ParticleSystem 구현 관련해서 질문이 있습니다
DX12 강의에 있던 방법과 같이ParticleSystem을 컴포넌트로 만들고, FinalTick에서Compute Shader로 StructuredBuffer를 전해줘서 계산하고,Render 단계에서, FinalTick에서 전해줬던 StructedBuffer를 다시 던져 그리는 방식으로 만들었는데,m_pShader->GetSRV .... 부분에서 Effects11: ID3DX11EffectVariable::AsShaderResource: Invalid typecast 이런 오류가 뜹니다.RWStructuredBuffer라서 그런가 싶은데, 그럼 Input용으로 던져줄 StructuredBuffer<> 와 Output용으로 던져줄 RWStructuredBuffer를 따로 선언해서 채워줘야 하는건가요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
Pipeline 강의 질문있습니다.
이번 강의에서 Pipeline클래스를 따로 만든다음에 공통적이고 필수적인 부분들은 _pipeline클래스의 Update가 담당하여 렌더링 파이프 라인을 진행하고일단은 그 밑에 다시 IA - VS - RS - PS - OM단계를 진행하던데rendering pipeline도식화 해놓은것을 보면(구글링하여 나온 이미지들) IA - VS - RS -PS -OM 단계인데RenderBegin()이 호출되면 무조건 바로다음에 IA단계들이 다 붙어서 와야하고 그다음에 VS단계에 오는 것들이 다 순서대로 오는식이 아니라그냥 RenderBegin()이 시작하여 화면을 초기화하고나서 SwapChain을 통해 Present하기 전에만 그냥 순서상관없이 IA 단계부터 OM단계까지의 함수호출들이 오면 되는 것인가요?렌더링 파이프라인 도식화 한 이미지들은 렌더링 할 버퍼 이미지를 초기화하고 이것을 Swap하여 Present하기 전까지의 렌더링 과정을 이해하기 쉽게 그냥 도식화 해놓은 개념에 불과한가요?
-
미해결[게임 프로그래머 도약반] DirectX11 입문
World 행렬 생성중 회전행렬 값에 대하여 의문이 있습니다.
유니티에서 회전행렬을 확인 해보고자 출력을 했을 때.이렇게 출력을 하였습니다.Transform을 해당 값으로 맞춰놓고 작업을 하였는데 Log 값은이렇게 출력되었습니다. 여기서 의문점인경우가Z축 회전 행렬을 적용하면C -S 0 0S C 0 00 0 0 10 0 0 1이 적용이 되어야 하는데 Log 값으로 출력되는것을 보면 Sin값 적용부분에서C -SS C가 아닌C S-S C로 적용되는걸 알 수 있는데 왜 이렇게 값이 나오는 것인지 궁금합니다.(부호가 왜 바뀌어서 나오는지 궁급합니다.) X축 , Y축 , Z축 동일하게 출력을 해 보았으나 모두 다 같습니다...
-
미해결[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part2: 게임 수학과 DirectX12
이번 강의를 듣고
이번에 신규 오픈하신 DX11 강의를 또 들어야 할까요 아니면 이것만으로도 충분할까요?
-
해결됨[게임 프로그래머 도약반] 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 모델의 정점은 모델 마다 다를테니 정점 데이터를 읽어 오는 방식으로 동작 하는 건 가여?