1P by GN⁺ 11일전 | ★ favorite | 댓글 1개
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은 단순히 헤더 파일일 뿐임
      또한 MoltenVKKosmicKrisp 같은 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을 지원받기 때문임
  • 이 웹사이트의 코스 품질이 놀라움
    책이 사전 예약 형태로라도 판매되면 프로젝트를 후원하고 싶을 정도임
    첫 글부터 팔로업 중인데, 글마다 점점 더 인상 깊어짐
  • 셰이더를 실험해보고 싶다면 다음 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 입문 코스가 좋은 출발점이 될 것임
  • 사이트의 완성도가 놀라울 정도로 높음
    다이어그램, 스크롤바, 스타일 모두 훌륭함
    셰이더는 GPU보다 먼저 등장했고 CPU에서도 실행 가능함
    GPU의 핵심은 SIMT/SIMD 실행 모델이며, 셰이더는 본질적으로 콜백 함수 개념임
    CPU와 동일한 순차적 사고로 작성할 수 있다는 점이 셰이더의 단순함과 우아함을 만든다고 생각함
    • 모든 일러스트가 Figma로 제작된 점이 특히 인상적임
    • 피드백이 훌륭하다는 답글을 남김
  • 작품이 정말 아름답고 완성도가 높음
    • 100% 공감함. 혹시 이 사이트가 Next.js로 만들어진 커스텀 앱인지 궁금함
  • 훌륭한 작업임. 보는 내내 즐거웠음
  • Iñigo Quilez의 영상 “This painting is a mathematical formula”을 추천함
    각 픽셀의 x, y 좌표를 함수로 표현하는 셰이더 개념을 잘 보여줌