개발 노트 [Vulkan 일지] Buffer 생성 공부 중 2016/12/06 01:18 by cagetu

간단하게 Begin ~ End 로 Command Buffer를 여는 방법을 익힌 후, 실제로 무엇인가를 그려보기 위해 학습 중. 삼각형을 그리기 위해서는 Vertex, Index Buffer를 생성하는 방법을 알아야 하고, 생성한 버퍼를 출력하기 위한 Shader가 필요하다.

VertexBuffer, indexBuffer와 함께 Staging Buffer라는 개념이 있는데, 버퍼 메모리를 CPU, GPU 상에 어디에 올려 놓는가?에 대한 부분이다. GPU 상에 최적으로 메모리를 올리기 위해서는 Staging Buffer에 버퍼 정보를 기록하고, Staging Buffer -> Device Buffer로 Copy하여 사용하도록 해야 한다는 것이다.

자세한 내용은 조금 더 진행하면서 더 정리가 되면 한번 더 소개해보기로 하면 좋을 것 같다.

얼마전 우리나라에서 Vulkan 관련한 컨퍼런스가 있었는데, 한국 강사가 Vulkan에 대해서 발표한 엄청 좋은 내용이 유투브에 올라와 있으니 그걸 보는 것이 빠를 듯..


지금부터 할 일 --- 이 정도면 단색 삼각형 그릴 듯
1. VertexBuffer 구현
2. IndexBuffer 구현
3. Buffer 관리 구현 (Staging Buffer, Device Buffer)
4. Command Buffer 정비
5. Device Memory 처리 공부
6. SPIR-V 공부
7. Vertex Layout 처리
8. 좌표계 처리

아~ 많다.. ㅠㅠ



개발 노트 [Vulkan일지] RenderPass, Framebuffer 생성 2016/11/24 01:01 by cagetu

Swapchain을 생성해서, 임시로 화면에 백버퍼 색상을 변경하는 코드까지 만들어보기는 했지만, 정상적인 흐름으로 하는 한 프레임을 완성해보고 싶었다.

이전 세대 그래픽 api라면, 한 렌더링 루프는 대충 이렇게 구성된다.

BeginScene
{
     ClearColor
     
     //렌더링
}
EndScene
Present

하지만, Vulkan (or DX12)의 경우에는 한 프레임이라는 것이 이렇게 정해진 순서대로 되는 것이 아니라, 어느 타이밍이던지 CommandBuffer에 Command들을 기록(Recording) 하고 나서, 현재 프레임에서 CommandBuffer를 Queue에 Submit해서 실행시키고, Present하게 된다.

즉, Vulkan에서의 한 프레임이라는 것은 아래 순서로 진행된다.

1. Swapchain의 현재 이미지 버퍼 획득
2. 현재 이미지 버퍼에 대응하는 CommandBuffer 에 Command 기록
3. Command를 Queue에 Submit
4. SwapChain에 현재 이미지 버퍼 Present 요청

그래서, 처음에 이 차이를 이해하지 못하고, 코드를 보면서도 많이 당황을 했다. 지금도 익숙해지는 중이고, 연습하고 있는 중이다.

무언가를 그리기 위해서는 vkRenderPass와 vkFrameBuffer를 만들어서 사용해야 하고, CommandBuffer에 Command로 기록된다.

CommandBuffer->Begin
{
      CmdBeginRenderPass(framebuffer, renderpass)
      {
            // 렌더링
      }
      CmdEndRenderPass()
}
CommandBuffer->End

이런 형태가 된다. 큰 흐름으로 보면 이렇지만, 실제로 설정을 하기 위해서는 많은 설정을 해줘야 한다. RenderTarget (MultiRenderTarget)에 맞춰서 세팅하기 위해서 고민을 많이 하기도 했고, 그리기 위해서 attachment, attachmentDescription, AttachmentReference 등등이 무엇을 의미하는지 명확히 알기 위해 시간이 상당히 오래 걸리기도 했다.

좀 귀찮은 것은 RenderTarget 설정이 바뀔 때마다 vkRenderPass와 vkFramebuffer를 새롭게 만들어야 한다는 것이다. 

Vulkan에서는 기본적인 컨셉이 명시적으로 설정된 내용만 사용이 가능하다는 느낌이라 동적으로 바뀌는 부분에 대해서는 미리 만들어서 관리해야 하는 불편한 것들이 좀 있다. 

그리고, MemoryBarrier라던지 메모리 관리 부분에 대해서는 조금씩 나오고 있는데 아직은 이 부분은 한~참 더 봐야 할 듯 하다.

정말 어렵다고 느껴질 정도로 복잡하고 방대한데, 그 만큼 드라이버에서 처리해주던 내용들을 프로그래머블하게 노출시켜 놓은 것이니 반대로 정확하게 이해를 하고 있지 않으면 제 성능 내기도 쉽지 않다는 말이라 꼼꼼하게 이해해가면서 봐야할 듯 하다.

아~ 할 게 많네.. ;;;;



개발 노트 적응 중... 2016/11/18 23:16 by cagetu

팀원으로 팀장으로 일하는 것보다 더 쉬울 것이라 생각했다. 팀장을 해본 적도 없으면서....

하지만, 지금까지 일반적인 팀장이 있는 팀에서 팀원으로 일해 본 기억이 거의 없다. 그래서인지 팀장이 있는 팀에서 팀원으로 일하는게 솔직히 굉장히 어색하고, 부담스럽고 눈치가 보인다.

특히, 나이도 꽤 많은 편이고, 경력도 어느 정도 높아지다 보니, 이상하게 나이먹고 이 경력에 팀장하고 있지 않는게 혹시 우습게 보이는게 아닐까? 라는 자책까지도 하게 된다. 실제로는 누구도 그렇게 하지 않지만, 사람이 그렇게 되는 것 같다. (그래서 나이먹고 다른 사람 밑에 있는게 쉽지 않은가보다...)

아직은 많이 어색하지만, 반대로 생각하면 나 또한 언젠가는 누군가의 팀장이 될 것이고, 그러면 다른 사람도 이런 느낌을 받을 수 있을 것이다. 결국 좋은 결과를 내기 위해서 하는 일이다 보니, 좋은 경험으로 나도 잘 적응하고 편해져야 할 것 같다.

결국 내가 변하지 않으면 안되는 것이구나... 내년에는 조금 더 편해져 있었으면 좋겠다...


개발 노트 부끄럽다.... 2016/11/15 00:37 by cagetu

업무 산출 미스로 거의 보름 이상 예정된 일정보다 딜레이되어서 마무리를 지었다. 왜 그랬을까? 부끄럽다.

나는 팀장이 아닌데도 불구하고, 나이나 경력이 많다는 이유로 대우 받기를 원했나? 속으로 적당히 하려고 했던 것 같다. 적당히 봐주기를 바랬던 것 같다.

내 착각이고 내 실수다. 경력이 많기는 하지만, 이 회사에서는 나는 그냥 입사한지 얼마 되지 않은 일개 프로그래머일 뿐이다. 이럴려고 다른 회사에서 관리자 제안을 뿌리친 것이 아닌데... 속으로는 대접받고 싶었나보다. 아니면 팀장이 되어서 팀원들 일이나 시키고 편하게 놀고 싶었나보다... 정신차리자!!! 

크고 좋은 회사에 들어가서 주변에서 좋은 회사 들어갔다고 축하도 해주고, 알아준다고 으쓱해져 있었던 것 같다. 사실 나는 아무것도 아닌데... 괜히 내가 잘하는 것으로 착각하고 있었나보다.

정신 차리자... 아직 편하게 지내기에는 아무것도 보여준 것이 없지 않은가.... 

기본적인 일정관리도 제대로 하지 못하는 내 스스로가 너무 부끄럽다. 그리고, 내가 먼저 다가가는 용기 없다는 것이 너무나 부끄럽다. 다음에 뭘 할지 고민하기 이전에 지금 현재에 내 앞에 주어진 일이나 똑바로 잘하는게 맞는거다. 

나는 너무 부끄럽다...

개발 노트 문득.... 2016/11/08 01:30 by cagetu

이번 프로젝트는 모바일 플랫폼 mmorpg다. 문득, 그럼 이번 프로젝트가 끝난다면 나는 어떤 것을 하게 될까? 라는 생각이 들었다.

PC? 모바일? 콘솔? (내가 결정할 수 있는 문제인지는 모르겠지만) 국내 개발사에 있는 한 현재 상태에서는 모바일 / PC 중에 하나가 유력할 것이다. 

요즘 추세가 모바일 MMORPG 라는데... mmorpg를 만들기를 좋아하고, 플랫폼을 가리지 않고 mmorpg를 만드는데, 그렇다면 콘솔로 mmorpg를 만드는 것도 시도해볼만 하지 않을까? 이게 돈이 모바일이나 PC보다 돈이 안된다고 말을 하지만, 솔직히 될지 않될지는 해봐야 아는 것이고, N사들 정도면 시도해볼만 하지 않을까 생각도 든다. 요즘 같이 엔진도 좋아져서 멀티플랫폼을 좀 더 편하게 할 수 있는 시대라면 가능하지 않을까??

콘솔 게임을 개발해보고 싶기도 하지만, 전세계 유저를 대상으로 그 정도의 퀄리티를 가지고 부딪혀보고 싶은 생각이 들었다.
그게 아니라면, 해외 취업으로 콘솔 개발을 한번 도전해보는 건 어떨까? 나이가 40이나 가까이 되어서 어려울까?? 모르겠다.

아직 현재 프로젝트가 얼마나 걸릴지도 모르는데... 쓸데없는 생각!!

1 2 3 4 5 6 7 8 9 10 다음



메모장

내가 먼 훗날에 이 글들을 보았을 때, 좋은 추억이 될 수 있기를...

나를 위해... 나에게 쓰는...

msn: cagetu@hotmail.com
mail: cagetu79@gmail.com
twitter: twitter.com/cagetu
facebook: facebook.com/cagetu