Hacker News 의견
- 글이 흥미로웠지만, 다이어그램에서 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을 지원받기 때문임
- Vulkan은 오픈소스가 아니라 오픈 표준임을 덧붙이고 싶음
- 이 웹사이트의 코스 품질이 놀라움
책이 사전 예약 형태로라도 판매되면 프로젝트를 후원하고 싶을 정도임
첫 글부터 팔로업 중인데, 글마다 점점 더 인상 깊어짐 - 셰이더를 실험해보고 싶다면 다음 IDE들을 추천함
- shadertoy – 브라우저 기반으로 가장 쉽고 인기 많음
- Shadron – 사용성이 좋아 개인적으로 선호하지만 다소 마이너함
- SHADERed – UX가 익숙해지기까지 시간이 걸리지만 기능은 충분함
- KodeLife – 들어봤지만 직접 써보진 않음
-
Cables(cables.gl)도 꽤 멋짐
Kirell Benzi의 인상적인 작품들이 있음 - Mint의 소프트웨어 매니저에서 wgshadertoy를 발견했음
flatpak, AUR, macports, Windows 등 다양한 플랫폼 지원 - macOS나 iPadOS에서는 Playgrounds로 Metal 셰이더를 쉽게 시작할 수 있음
- 데모씬에서 셰이더 라이브 코딩 대회용으로 쓰이는 Bonzomatic도 있음
- 프로그래밍은 결국 사람이 이해한 것을 컴퓨터가 이해하도록 변환하는 과정임
그런데 GPU 프로그래밍은 그 난이도가 훨씬 높음
수많은 함정, 하드웨어/소프트웨어 간 불일치, 디버깅 도구 부족 등으로 개발 경험이 매우 열악함
커뮤니티가 이 문제를 개선하려는 의지가 약한 것도 아쉬움- OpenGL과 DirectX 12 이전 버전은 하드웨어 세부를 추상화하려는 시도였지만, 결과적으로 추상화가 오히려 해로웠음
- 프래그먼트 셰이더를 작성할 때 가장 직관적이지 않은 부분은 좌표를 입력받아 색을 출력하는 개념임
펜으로 그림을 그릴 때와 달리, 셰이더는 각 픽셀의 위치를 계산해 색을 결정함
물체를 움직이는 대신 공간을 조작하는 방식으로 사고해야 함
버텍스 셰이더는 삼각형의 위치를 출력하므로 더 자연스러움- 프래그먼트 셰이더를 남용할 때만 비직관적이라 느껴짐
실제로는 텍스처 샘플링과 조명 계산 등 렌더링 파이프라인의 마지막 단계를 담당함
PBR이나 지연 렌더링에서는 대부분 공통 셰이더를 공유하고, 특수 효과만 커스텀함 - 이는 셰이더 자체의 문제가 아니라 래스터 vs 벡터 그래픽스의 차이로 봐야 함
셰이딩은 윤곽선을 그리는 게 아니라 물리 기반 재질을 표현하는 과정임
회화는 셰이딩에 더 가깝지만 펜 드로잉은 그렇지 않음 - 사각형을 그리기 위해 프래그먼트 셰이더를 쓰는 건 잘못된 접근임
셰이더는 사각형을 음영 처리(shading) 하는 용도임 - 실제로는 버텍스 셰이더가 경계를 정의하고, 프래그먼트 셰이더가 내부를 채움
교육용으로는 버텍스 셰이더를 생략하고 전체 화면을 프래그먼트 셰이더로 채우기도 함
- 프래그먼트 셰이더를 남용할 때만 비직관적이라 느껴짐
- GPU 코드를 배울 때 가장 힘든 부분은 초기 설정이 복잡하고 난해하다는 점임
데이터 포맷, 변환 순서, CPU-GPU 경계 등 개념이 어렵고 문서도 부족함
GPU의 전역 변수 시스템도 헷갈림- 나도 같은 의문이 많아 WebGL 학습용으로 블로그 글을 썼음
Barebones WebGL in 75 lines,
Barebones 3D rendering with WebGL
Vulkan은 WebGL보다 훨씬 많은 보일러플레이트 코드가 필요함 - 질문 중 일부는 GPU 자체보다는 API 설계에 관한 것임
GPU는 SIMT 구조이므로 데이터 접근의 일관성이 중요함
변환은 각 스레드 내에서 순차적으로 적용되며, CPU-GPU 간 경계는 성능 예산에 따라 여러 번 넘을 수 있음
전역 변수는 uniform처럼 각 스레드에 동일하게 전달되는 상수 개념임
CUDA에서는 atomic 연산으로 글로벌 접근이 가능하지만 성능 저하가 큼
WebGL 입문 코스가 좋은 출발점이 될 것임
- 나도 같은 의문이 많아 WebGL 학습용으로 블로그 글을 썼음
- 사이트의 완성도가 놀라울 정도로 높음
다이어그램, 스크롤바, 스타일 모두 훌륭함
셰이더는 GPU보다 먼저 등장했고 CPU에서도 실행 가능함
GPU의 핵심은 SIMT/SIMD 실행 모델이며, 셰이더는 본질적으로 콜백 함수 개념임
CPU와 동일한 순차적 사고로 작성할 수 있다는 점이 셰이더의 단순함과 우아함을 만든다고 생각함- 모든 일러스트가 Figma로 제작된 점이 특히 인상적임
- 피드백이 훌륭하다는 답글을 남김
- 작품이 정말 아름답고 완성도가 높음
- 100% 공감함. 혹시 이 사이트가 Next.js로 만들어진 커스텀 앱인지 궁금함
- 훌륭한 작업임. 보는 내내 즐거웠음
- Iñigo Quilez의 영상 “This painting is a mathematical formula”을 추천함
각 픽셀의 x, y 좌표를 함수로 표현하는 셰이더 개념을 잘 보여줌