코딩 3개월 동안 하면서 느낀거 적고 감.
1) OPAQUE 형식의 구조체의 제공으로 C언어에서 무슨 ㅅㅂ 되도않는 인터페이스 기능을 사용함.
코드가 개 길어지는 주요 원인임.
2) GPU 내에서 계산을 하다보니 HOST영역이 아닌 DEVICE영역에서 계산이 진행되어 값이나 인스턴스를 전달하거나 받아올 때 개 ㅅㅂ 애미터짐.
매사 값을 줄 때마다 StagingBuffer/Image, StagingDeviceMemory 할당해서 바인딩 해가지고 또 Recording 커멘드 버퍼 만들어서 실행시키고 VkImage/BufferPipelineBarrier로 베리어 지정 까지 해 줘야 함. 간접적으로 값을 주고 받는 시스템 이거 진짜 개 줬같음.
3) 진입장벽 너무 높음. 다행이 잘 설명되어있는 강좌 하나 있기는 한데 그거 튜토 끝나고 나면 진짜 막막해짐. 혼자서 뭐 만들다가 막혀서 구글에 찾아보면 대부분 opengl설명이고 가뭄에 콩 나듯 vulkan설명 있기는 한데 그것마저도 rust나 java나 다른 코드로 설명되어 있음.
4) 하나부터 열가지 프로그래머에게 전부 떠맡기기 때문에 그래픽스 이론을 제대로 알아야 겨우 코딩이 가능함. 근데 이거는 은근히 장점일 수도 있음ㅋㅋ
1. 인스턴스 생성 (인스턴스는 API를 Device에 바인딩 시켜 Device 정보나 정적 메소드를 사용가능케함)
2. 디버깅 모드이면 Validation 설정함 (layer에 정의된 메소드를 사용하기에 텀블링 메소드 형식으로 생성, 제거)
3. 물리 디바이스 찾기
4. 논리 디바이스 찾기
5. 스왑체인 만들기
6. 그래픽스, 컴퓨트 큐 만들기
7. 스왑체인 이미지 뷰 만들기 (스왑체인 이미지를 컬러이미지나 백 버퍼라고도 부른다더라)
8. 디스크립터 셋 레이아웃 생성
9. 파이프라인 레이아웃 생성
10. 그래픽스 파이프라인 생성
11. 커멘드큐 생성
12. 컬러 이미지 생성
13. 컬리 이미지 뷰 생성
14. 깊이 이미지 생성
15. 깊이 이미지 뷰 생성
16. 렌더패스 생성
17. 프레임 버퍼 생성
18. 모델링 로더 생성
19. 버텍스 버퍼 생성
20. 버텍스 버퍼 큐 생성
21. 인덱스 버퍼 생성
22. 인덱스 버퍼 큐 생성
23. 텍스쳐 이미지 로더
24. 텍스쳐 이미지 생성
25. 텍스쳐 이미지 뷰 생성
26. 이미지 샘플러 생성
27. 이미지 밉맵 생성
28. 디스크립터 큐 생성
29. 디스크립터 버퍼 생성
30. 커멘드 버퍼 생성
31. 싱크 맞추기 위한 이벤트, 펜스, 세마포어 생성
32. 그림 그려주는 drawFrame 생성
3개월 공부 했더니 자동으로 외워지네 ㅋㅋㅋ
이제 왜 VULKAN이 1000줄을 가볍게 넘기는지 알거임.
5) 3)번에 연장선이긴 하지만 ㅅㅂ 이미지와 소통을 하기가 힘듦. 이게 무슨 말이냐면 내가 Button UI 만드려고 이미지를 클릭하면 해당 위치 컬러 픽킹해서 그 색깔에 따라 어떤 버튼이 클릭했는지 확인하려고 한다고 치자. 그럼 그래픽스 파이프라인에서 리타이어 되어진 스왑체인 이미지를 가져와서 읽어야 한단 말야?
근데 ㅅㅂ 각 이미지마다 역할이 정해져 있어서 해당 역할 이외의 일을 할 수 가 없음. 이러한 역할을 "레이아웃"이라고 함.
그러면 ㅁㅊ 읽어오기 용 이미지를 하나 더 생성해서 그래픽스 파이스라인에서 "스왑체인 이미지"에 그려주고 "읽어오기 용 이미지"에 그려주고, 연산을 무려 2배나 더 해야지만 이미지를 읽어올 수 있단말야? 그렇게 되면 프레임이 ㅅㅂ 20에서 30프레임 밖에 안나옴 ㅋㅋㅋㅋㅋㅋㅋ
결국 이미지를 읽어오거나 쓰는 커뮤니케이션을 최대한 아껴야 vulkan의 성능을 좀 맛볼수 있다는 건데, 그 말이 바로 불통이나 다를것이 없다고 생각함..
끝
나중에 5달차 되면 또 글쓰러 옴 ㅂㅂ
팬이에요
?? ㅋㅋ ㄳ
DX11했을 때 렌더 패스 만드는 것 빼고 다 했지만 제일 빡치는 건 리소스 관리임. 파이프라인은 그럴 수 있다 생각함.
다렉에 디스크립터 풀, 셋 설정하는 것도 자동으로 해주지 않음? 아직 응애라 리소스 관리까지는 못해본거 같음 ㅋㅋ
DX12에서는 안 해주니까 빡친다는 것
ㅋㅋ 귀찮게 됐네
응애 - dc App
세상에 ㄷㄷㄷ;;
다행히 잘 설명되어 있는 강좌 ==> 어떤 강좌인가요? 저도 강좌 듣고 싶어요.
https://vulkan-tutorial.com/Introduction
에서 공부를 하시되, 이론부분에서 부족한 부분이 몇 있습니다.
그런부분은
https://lifeisforu.tistory.com/category/Vulkan%20%26%20OpenGL
해당 블로그와 연동해서 보시면
좋을거 같습니다.