개발 노트 Vulkan instance 생성 및 device 생성 2016/09/21 01:36 by cagetu

지난 주에 Library 추가하고, 추석이라 애들 보느라 체력 탕진하고... 일상으로 돌아왔음.

Vulkan 초기화 할 일
  1. Vulkan Library 추가
  2. Vulkan Instance 생성
  3. Vulkan Device 생성
  4. Vulkan SwapChain 생성

지난 주 일요일부터 하루 1~2시간 정도 틈틈히 진행 중이고, Instacne 생성과 Device 생성을 처리 함. 인텔 강좌와 언리얼 엔진 코드를 보면서 거의 따라하다 수준으로 하고 있음.

instance는 opengl의 context, directx의 device 같은 api 인스턴스 핸들이라고 보면 될 것 같다. 

instance를 생성할 때, 유효한 Layer와 extensions을 체크해줘야 하는데, layer는 vulkan 아키텍쳐가 multiple gpu와 driver를 지원하기 위해서 layered 아키텍쳐로 되어있다고 한다. extensions은 opengl에서 그래픽카드마다 지원하는 확장함수가 다르기 때문에 그런 확장 기능에 대한 내용이다.

instance를 생성하고 나면, device를 생성하는데, 정리하면 다음과 같은 일들을 한다.
  1. 그래픽카드 조회 (PhysicalDevice)
  2. 메인 그래픽 카드 선택
  3. 벌칸 디바이스 생성 (LogicalDevice)
Vulkan에서는 여러 개의 그래픽카드가 있을 때, 여러 개의 Vukan 프로그램을 띄워서 하나는 렌더링용으로 사용하고, 하나는 GPU 컴퓨팅용으로 사용하는 식으로 사용이 가능하기 때문에, 그래픽카드의 기능에 따라서 잘 선택해서 사용할 수 있다.

좀 더 내용을 보면, OpenGL에서 API함수를 사용해서 Command를 간접적으로 전달하였지만, Vulkan의 경우 Command Buffer에 직접 Command를 생성하고 관리할 수 있도록 되어있다. 이 Command Buffer는 Queue를 통해서 하드웨어에 전달되는데, Graphics Command, Compute Command 등 다른 타입의 작업이 포함되기 때문에, Queue는 타입에 따라서 나뉘어져있다. 즉, Queue Family는 다른 타입의 작업을 지원하게 되며, 우리가 하려는 작업을 지원하는 Physical Device가 있는지 체크해봐야 한다.

그런 다음 렌더링을 위한 메인 그래픽 카드를 선택하고, Vulkan 에서 렌더링할 때 사용할 Device 핸들을 생성하면 된다.


일단 여기까지 해봤다 (인텔 강좌로 따지만 1번 튜토리얼 정도 되는 듯). 이전 세대 그래픽 API보다 좀 더 많은 것이 노출되어 있어서 그런지 초기화 부분이지만 해줘야 할 것도 꽤 많고, 익혀야 할 개념도 꽤 많다. 아직은 더 해봐야 익숙해지고 손에 익을 것 같다.

아직은 화면도 못 그리고 있어.. 흑~ 



풍류(風流) INSIDE 2016/09/20 10:26 by cagetu


LIMBO 게임(무려 아이폰으로 클리어.. 내 손가락.. ㅡㅡ;)이 참 인상깊었다.. 그래서 INSIDE도 점심시간 틈틈히 플레이해서 클리어했다..

이런 몽환적인 느낌이 참 좋다... 하지만 내용에 대해서는 정확한 메시지를 이해하기가 어렵다.

LIMBO도 INSIDE도 단순히 "게임은 즐기는거야!" 라는 것이 아니라, 뭔가 생각하게 하고, 게임 안에서 새로운 경험을 하게 하는 느낌이 참 좋다. 게임이 이런 느낌을 준다는 것에 대해서 또 하나 배웠다.

나중에 혹시 어디선가? 이 개발자들 만나면 도대체 무슨 생각으로 이런 게임을 만들게 되었는지 꼭 물어보고 싶다. (물론 영어..ㅠㅠ)



개발 노트 Vulkan 출발~ 2016/09/13 02:12 by cagetu

하악 하악... 겨우 SDK 설치하고 초기화 처리 중입니다.

Vulkan 초기화 할 일
  1. Vulkan Library 추가
  2. Vulkan Instance 생성
  3. Vulkan Device 생성
  4. Vulkan SwapChain 생성

정리까지는 아니고, 그냥 하면서 틈틈히 작업 내용을 공유해보려고 적어봅니다.

지금 Intel의 Vulkan 강좌를 보면서 설명을 보면서 따라가고 있고, 언리얼 소스코드를 추가로 보고 있습니다. 아직은 윈도우 기반으로 시작했구요. 안드로이드는 Vulkan을 지원하는 테스트 기기를 구하는데로 처리를 해볼까 합니다. (누가 NVIDIA Shield 좀 저에게 팔아주세요.. ㅠㅠ)

오늘은 라이브러리 연결했는데요.

1. LoadLibrary로 "vulkan-1.dll"을 로딩합니다.
2. project 세팅에 프로젝트 링크에 추가 종속성에 "vulkan-1.lib, vkstatic.1.lib"를 추가합니다.
3. Window에 경우, 2번 처럼 정적링크로 Vulkan Runtime을 사용하였기 때문에, vulkan.h에 있는 Vulkan 함수를 그대로 사용하기로 합니다. 따라서, VK_NO_PROTOTYPES 매크로를 사용하지 않습니다. 안드로이드의 경우에는 동적 링크를 사용해야 하기 때문에, VK_NO_PROTOTYPES 라는 매크로를 활성화해주고 함수들을 동적으로 얻어와야 합니다.

안드로이드의 경우에는 세팅이 다르기 때문에 할 때 다시 정리해야 할 것 같습니다. 그리고 생각해보면 OpenGL ES와 Vulkan은 다이나믹하게 스위칭이 되어야 할 것 같으니, 엔진에 두 개의 라이브러리가 공존할 수 있도록 구성되어야 되겠네요...

나머지는 강좌를 따라 가보면 될 것 같네요. 

https://github.com/SaschaWillems/Vulkan 샘플도 있구요. 언리얼 최신 소스 코드를 받아보면 구현이 잘 되어 있으니 따라가보면 될 것 같습니다.

저도 이제 막 시작해서 초기화하는 부분이 엄청 많네요.. 하악.... 이번 주까지는 초기화 마무리하는게 목표인데.. 쉽지 않구만...



개발 노트 성장의 시기 2016/09/12 08:35 by cagetu

하린이가 7살이고 내년이 8살이 되는데, 내가 7년 동안 경험했던 회사들을 보자면 "창업 -> 성공한 스타트업 -> 대기업" 순서가 된다.

창업한 회사에서 더 이상 있을 수 없게 되면서 성공한 스타트업으로 옮기게 되면서, 게임을 만들 때 무엇을 놓쳤었는지... 어떤 선택을 했었어야 하는지... 내가 옆에서 어떤 역할을 했어야 하는지에 대해서 참 많은 것을 배우고 뒤늦은 후회를 했다. 

성공한 스타트업은 항상 성공을 하고 나서가 문제인 것 같다. 게임을 하나 성공적으로 정착을 시켰다고 하더라도 항상 "살아남기 위해" 오늘을 살고 있는 경우가 많다. 그러니 내부적으로 불합리한 개발 방식이 있더라도 눈 앞에 매출과 업데이트 때문에 계속 반복된다. 거기에 점점 회사의 규모가 커지면서 개발 내적으로 외적으로 둘 다 신경쓰면서 회사를 정비한다는 것이 쉽지가 않다. 나도 그 안에 있을 때에는 소스를 정리하고 자동화를 해야 하고, 실수를 줄여야 하고 이런 것들보다 그냥 손으로 실수가 있더라도 밀어붙이는 것이 더 나은 거 아닌가? 라는 생각을 했었다... (못 배워서 그래요.. ;;;). 결국 점점 체질 개선에 실패하면서 고립되는 회사들이 많아지고, 그 결과 항상 현 상태에만 머물어 버리는 경향이 많다. (그런 의미에게 자루님은 참 대단했었다!!!)

대기업으로 옮기고 싶었던 이유 중에 하나는 그 동안 주먹구구식으로 개발했던 회사들과 다르게 (존재한다면) 프로세스라는 것을 보고 경험해보고 싶었다. 물론 이 경험을 하려면 게임을 출시하는 과정까지 지속적으로 가봐야지 좀 더 이해할 수 있을 것 같기는 하지만, 나름의 방식이 있는 것은 분명하다. 아마도 다수의 인원이 함께 일한다는 것과 실수가 얼마나 큰 피해를 가지고 오는지에 대해서 회사 차원에서 명확히 알고 있는 듯 하다.

주변 개발자분들과 이야기하면 겉으로 보기에는 되기 좋고 멋진 회사인데, 실제로 일은 되게 힘들게 하는 경우도 많고 내부적으로 너무 정체되어 있다는 이야기도 많이 한다. 좋은 회사들이 지속적으로 좋은 게임을 만들고 좋은 회사가 되려면 개발팀이 스스로가 체질 개선을 하는 노력이 필요하다. 당연히 쉽지도 않고, 때로는 한 분기 매출을 포기해야 하는 각오가 있어야 하기도 한다. 그러기 위해서는 현재 서비스하는 게임에 대한 유저의 믿음이 있어야 업데이트를 중지하고 체질 개선을 시도할 수 있다. 

결국, 회사의 결정권자가 회사와 직원들에 대한 믿음을 바탕으로 더 나은 결과를 위해서 오늘 하루를 버릴 각오가 되어 있어야 한다는 말이 될 수도 있다.

나도 언젠가 작은 규모부터 관리라는 업무를 맡아서 하게 될 시기가 올텐데, 그 동안 보고 경험한 것들을 잘 정리해서 때로는 윗분들에게 직언을 할 수 있는 용기와 밑이 동료들을 믿을 수 있는 담대함을 잊지 말아야 겠어!!!

(개소리!!!! 멍멍!!!~~ 안드로이드 SDK 받는 중에 심심해서 끄적 끄적.. ;;;)

개발 노트 ㅠㅠ 2016/09/12 06:31 by cagetu


지난 주에는 노트북 구입하고 나서 코딩이라고는 한 줄도 못해봤다. ㅠㅠ. 이번 주는 한 줄이라고 만들어야지.

포기하지마! 지는거야!!


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