글이 흥미로웠지만, 다이어그램에서 OpenGL / WebGL / WebGPU가 Vulkan 위에 구축된 것처럼 표현된 부분은 잘못된 설명임
WebGL과 WebGPU는 Vulkan을 거치지 않고 직접 D3D와 Metal 위에서 동작함
또한 Vulkan은 오픈소스가 아니라 표준임
WebGPU는 브라우저에만 한정되지 않으며, C++용 Dawn, Rust용 WGPU 라이브러리로도 제공되어 Windows, macOS, Linux, iOS, Android 등에서 실행 가능함
Vulkan은 DirectX보다 약간 더 많은 플랫폼에서 동작하지만, Windows 기본 구성에는 포함되지 않으며 macOS나 iOS에서는 실행되지 않음
Vulkan은 오픈소스가 아니라 오픈 표준임을 덧붙이고 싶음
실제 구현은 각 하드웨어 벤더가 담당하며, Vulkan은 단순히 헤더 파일일 뿐임
또한 MoltenVK나 KosmicKrisp 같은 Vulkan-to-Metal 변환 계층을 통해 Apple 플랫폼에서도 잘 동작함
Vulkan이 완전히 크로스플랫폼은 아니지만, DirectX보다는 훨씬 더 넓은 범위를 지원함
DirectX는 Windows와 Xbox, Vulkan은 Linux, Android, Windows, Nintendo Switch, Switch 2 등에서 사용 가능함
WebGPU는 각 플랫폼의 네이티브 API(DirectX, Vulkan, Metal) 위에 있는 통합 API임을 언급해야 함
Khronos API들은 수많은 확장 기능이 존재하지만, 일부는 독점적이라 이식성이 떨어짐
PlayStation은 Vulkan을 지원하지 않으며, Switch에서는 OpenGL/Vulkan 대신 NVN을 주로 사용함
Vulkan이 Windows에서 동작한다는 점만으로도 DirectX보다 더 범용적이라 생각함
일부 Linux VNC 환경에서 Vulkan이 안 된다는 건 일반적인 경우가 아님
대부분의 사용자는 GPU 드라이버를 통해 Vulkan을 지원받기 때문임
이 웹사이트의 코스 품질이 놀라움
책이 사전 예약 형태로라도 판매되면 프로젝트를 후원하고 싶을 정도임
첫 글부터 팔로업 중인데, 글마다 점점 더 인상 깊어짐
프로그래밍은 결국 사람이 이해한 것을 컴퓨터가 이해하도록 변환하는 과정임
그런데 GPU 프로그래밍은 그 난이도가 훨씬 높음
수많은 함정, 하드웨어/소프트웨어 간 불일치, 디버깅 도구 부족 등으로 개발 경험이 매우 열악함
커뮤니티가 이 문제를 개선하려는 의지가 약한 것도 아쉬움
OpenGL과 DirectX 12 이전 버전은 하드웨어 세부를 추상화하려는 시도였지만, 결과적으로 추상화가 오히려 해로웠음
프래그먼트 셰이더를 작성할 때 가장 직관적이지 않은 부분은 좌표를 입력받아 색을 출력하는 개념임
펜으로 그림을 그릴 때와 달리, 셰이더는 각 픽셀의 위치를 계산해 색을 결정함
물체를 움직이는 대신 공간을 조작하는 방식으로 사고해야 함
버텍스 셰이더는 삼각형의 위치를 출력하므로 더 자연스러움
프래그먼트 셰이더를 남용할 때만 비직관적이라 느껴짐
실제로는 텍스처 샘플링과 조명 계산 등 렌더링 파이프라인의 마지막 단계를 담당함
PBR이나 지연 렌더링에서는 대부분 공통 셰이더를 공유하고, 특수 효과만 커스텀함
이는 셰이더 자체의 문제가 아니라 래스터 vs 벡터 그래픽스의 차이로 봐야 함
셰이딩은 윤곽선을 그리는 게 아니라 물리 기반 재질을 표현하는 과정임
회화는 셰이딩에 더 가깝지만 펜 드로잉은 그렇지 않음
사각형을 그리기 위해 프래그먼트 셰이더를 쓰는 건 잘못된 접근임
셰이더는 사각형을 음영 처리(shading) 하는 용도임
실제로는 버텍스 셰이더가 경계를 정의하고, 프래그먼트 셰이더가 내부를 채움
교육용으로는 버텍스 셰이더를 생략하고 전체 화면을 프래그먼트 셰이더로 채우기도 함
GPU 코드를 배울 때 가장 힘든 부분은 초기 설정이 복잡하고 난해하다는 점임
데이터 포맷, 변환 순서, CPU-GPU 경계 등 개념이 어렵고 문서도 부족함
GPU의 전역 변수 시스템도 헷갈림
질문 중 일부는 GPU 자체보다는 API 설계에 관한 것임
GPU는 SIMT 구조이므로 데이터 접근의 일관성이 중요함
변환은 각 스레드 내에서 순차적으로 적용되며, CPU-GPU 간 경계는 성능 예산에 따라 여러 번 넘을 수 있음
전역 변수는 uniform처럼 각 스레드에 동일하게 전달되는 상수 개념임
CUDA에서는 atomic 연산으로 글로벌 접근이 가능하지만 성능 저하가 큼
WebGL 입문 코스가 좋은 출발점이 될 것임
사이트의 완성도가 놀라울 정도로 높음
다이어그램, 스크롤바, 스타일 모두 훌륭함
셰이더는 GPU보다 먼저 등장했고 CPU에서도 실행 가능함
GPU의 핵심은 SIMT/SIMD 실행 모델이며, 셰이더는 본질적으로 콜백 함수 개념임
CPU와 동일한 순차적 사고로 작성할 수 있다는 점이 셰이더의 단순함과 우아함을 만든다고 생각함
Hacker News 의견
WebGL과 WebGPU는 Vulkan을 거치지 않고 직접 D3D와 Metal 위에서 동작함
또한 Vulkan은 오픈소스가 아니라 표준임
WebGPU는 브라우저에만 한정되지 않으며, C++용 Dawn, Rust용 WGPU 라이브러리로도 제공되어 Windows, macOS, Linux, iOS, Android 등에서 실행 가능함
Vulkan은 DirectX보다 약간 더 많은 플랫폼에서 동작하지만, Windows 기본 구성에는 포함되지 않으며 macOS나 iOS에서는 실행되지 않음
실제 구현은 각 하드웨어 벤더가 담당하며, Vulkan은 단순히 헤더 파일일 뿐임
또한 MoltenVK나 KosmicKrisp 같은 Vulkan-to-Metal 변환 계층을 통해 Apple 플랫폼에서도 잘 동작함
DirectX는 Windows와 Xbox, Vulkan은 Linux, Android, Windows, Nintendo Switch, Switch 2 등에서 사용 가능함
PlayStation은 Vulkan을 지원하지 않으며, Switch에서는 OpenGL/Vulkan 대신 NVN을 주로 사용함
일부 Linux VNC 환경에서 Vulkan이 안 된다는 건 일반적인 경우가 아님
대부분의 사용자는 GPU 드라이버를 통해 Vulkan을 지원받기 때문임
책이 사전 예약 형태로라도 판매되면 프로젝트를 후원하고 싶을 정도임
첫 글부터 팔로업 중인데, 글마다 점점 더 인상 깊어짐
Kirell Benzi의 인상적인 작품들이 있음
flatpak, AUR, macports, Windows 등 다양한 플랫폼 지원
그런데 GPU 프로그래밍은 그 난이도가 훨씬 높음
수많은 함정, 하드웨어/소프트웨어 간 불일치, 디버깅 도구 부족 등으로 개발 경험이 매우 열악함
커뮤니티가 이 문제를 개선하려는 의지가 약한 것도 아쉬움
펜으로 그림을 그릴 때와 달리, 셰이더는 각 픽셀의 위치를 계산해 색을 결정함
물체를 움직이는 대신 공간을 조작하는 방식으로 사고해야 함
버텍스 셰이더는 삼각형의 위치를 출력하므로 더 자연스러움
실제로는 텍스처 샘플링과 조명 계산 등 렌더링 파이프라인의 마지막 단계를 담당함
PBR이나 지연 렌더링에서는 대부분 공통 셰이더를 공유하고, 특수 효과만 커스텀함
셰이딩은 윤곽선을 그리는 게 아니라 물리 기반 재질을 표현하는 과정임
회화는 셰이딩에 더 가깝지만 펜 드로잉은 그렇지 않음
셰이더는 사각형을 음영 처리(shading) 하는 용도임
교육용으로는 버텍스 셰이더를 생략하고 전체 화면을 프래그먼트 셰이더로 채우기도 함
데이터 포맷, 변환 순서, CPU-GPU 경계 등 개념이 어렵고 문서도 부족함
GPU의 전역 변수 시스템도 헷갈림
Barebones WebGL in 75 lines,
Barebones 3D rendering with WebGL
Vulkan은 WebGL보다 훨씬 많은 보일러플레이트 코드가 필요함
GPU는 SIMT 구조이므로 데이터 접근의 일관성이 중요함
변환은 각 스레드 내에서 순차적으로 적용되며, CPU-GPU 간 경계는 성능 예산에 따라 여러 번 넘을 수 있음
전역 변수는 uniform처럼 각 스레드에 동일하게 전달되는 상수 개념임
CUDA에서는 atomic 연산으로 글로벌 접근이 가능하지만 성능 저하가 큼
WebGL 입문 코스가 좋은 출발점이 될 것임
다이어그램, 스크롤바, 스타일 모두 훌륭함
셰이더는 GPU보다 먼저 등장했고 CPU에서도 실행 가능함
GPU의 핵심은 SIMT/SIMD 실행 모델이며, 셰이더는 본질적으로 콜백 함수 개념임
CPU와 동일한 순차적 사고로 작성할 수 있다는 점이 셰이더의 단순함과 우아함을 만든다고 생각함
각 픽셀의 x, y 좌표를 함수로 표현하는 셰이더 개념을 잘 보여줌