1 điểm bởi GN⁺ 2025-11-24 | 1 bình luận | Chia sẻ qua WhatsApp

1 bình luận

 
GN⁺ 2025-11-24
Ý kiến trên Hacker News
  • Bài viết khá thú vị, nhưng phần sơ đồ mô tả OpenGL / WebGL / WebGPU như thể được xây dựng trên Vulkan là không chính xác
    WebGL và WebGPU không đi qua Vulkan mà hoạt động trực tiếp trên D3D và Metal
    Ngoài ra, Vulkan không phải mã nguồn mở mà là một tiêu chuẩn
    WebGPU cũng không chỉ giới hạn trong trình duyệt, mà còn có các thư viện Dawn cho C++ và WGPU cho Rust, nên có thể chạy trên Windows, macOS, Linux, iOS, Android, v.v.
    Vulkan chạy trên nhiều nền tảng hơn DirectX một chút, nhưng không có sẵn trong cấu hình mặc định của Windows và cũng không chạy trên macOS hay iOS
    • Tôi muốn bổ sung rằng Vulkan không phải mã nguồn mở mà là tiêu chuẩn mở
      Phần triển khai thực tế do từng nhà cung cấp phần cứng đảm nhiệm, và Vulkan về cơ bản chỉ là các tệp header
      Ngoài ra, nó cũng hoạt động tốt trên các nền tảng Apple thông qua các lớp chuyển đổi Vulkan-to-Metal như MoltenVK hoặc KosmicKrisp
    • Vulkan không hoàn toàn đa nền tảng, nhưng vẫn hỗ trợ phạm vi rộng hơn nhiều so với DirectX
      DirectX dùng trên Windows và Xbox, còn Vulkan có thể dùng trên Linux, Android, Windows, Nintendo Switch, Switch 2, v.v.
    • Cần nói rõ rằng WebGPU là một API hợp nhất nằm trên các API native của từng nền tảng như DirectX, Vulkan, Metal
    • Các API của Khronos có rất nhiều tiện ích mở rộng, nhưng một số mang tính độc quyền nên tính di động kém
      PlayStation không hỗ trợ Vulkan, còn trên Switch thì chủ yếu dùng NVN thay vì OpenGL/Vulkan
    • Chỉ riêng việc Vulkan chạy được trên Windows cũng đã khiến nó trở nên đa dụng hơn DirectX theo tôi
      Việc Vulkan không hoạt động trong một số môi trường Linux VNC không phải trường hợp phổ biến
      Hầu hết người dùng đều có hỗ trợ Vulkan thông qua driver GPU
  • Chất lượng khóa học trên trang web này thật đáng kinh ngạc
    Nếu cuốn sách được bán, dù chỉ ở dạng đặt trước, tôi cũng muốn ủng hộ dự án
    Tôi đã theo dõi từ bài đầu tiên, và mỗi bài lại càng ấn tượng hơn
  • Nếu muốn thử nghiệm với shader, tôi đề xuất các IDE sau
    • shadertoy – dễ dùng nhất và phổ biến nhất vì chạy trong trình duyệt
    • Shadron – trải nghiệm sử dụng tốt nên cá nhân tôi thích hơn, nhưng hơi ít người biết
    • SHADERed – cần thời gian để quen UX nhưng tính năng thì đầy đủ
    • KodeLife – có nghe qua nhưng chưa tự dùng
    • Cables(cables.gl) cũng khá tuyệt
      Có những tác phẩm rất ấn tượng của Kirell Benzi
    • Tôi tìm thấy wgshadertoy trong trình quản lý phần mềm của Mint
      Hỗ trợ nhiều nền tảng như flatpak, AUR, macports, Windows
    • Trên macOS hoặc iPadOS, có thể bắt đầu shader Metal khá dễ bằng Playgrounds
    • Cũng có Bonzomatic, được dùng trong các cuộc thi live coding shader của demoscene
  • Rốt cuộc, lập trình là quá trình chuyển thứ con người hiểu thành thứ máy tính có thể hiểu
    Nhưng lập trình GPU thì khó hơn rất nhiều
    Vô số cạm bẫy, sự lệch pha giữa phần cứng và phần mềm, thiếu công cụ gỡ lỗi... tất cả khiến trải nghiệm phát triển rất tệ
    Cũng đáng tiếc là cộng đồng dường như không quá quyết tâm cải thiện vấn đề này
    • OpenGL và các phiên bản DirectX trước DirectX 12 là những nỗ lực nhằm trừu tượng hóa chi tiết phần cứng, nhưng kết quả là sự trừu tượng hóa đó lại gây hại
  • Phần kém trực quan nhất khi viết fragment shader là ý tưởng nhận tọa độ làm đầu vào rồi xuất ra màu sắc
    Khác với vẽ bằng bút, shader tính vị trí của từng pixel rồi quyết định màu của nó
    Thay vì di chuyển vật thể, bạn phải tư duy theo kiểu thao tác lên không gian
    Vertex shader thì tự nhiên hơn vì nó xuất ra vị trí của tam giác
    • Chỉ khi lạm dụng fragment shader thì nó mới bị cảm thấy là thiếu trực quan
      Trên thực tế, nó đảm nhiệm giai đoạn cuối của pipeline dựng hình như lấy mẫu texture và tính toán ánh sáng
      Trong PBR hay deferred rendering, phần lớn dùng shader chung, chỉ hiệu ứng đặc biệt mới tùy biến
    • Đây không phải vấn đề của bản thân shader mà nên được xem là khác biệt giữa đồ họa raster và vector
      Shading không phải là vẽ đường viền mà là biểu diễn vật liệu dựa trên vật lý
      Hội họa gần với shading hơn, còn vẽ bút thì không
    • Dùng fragment shader để vẽ hình chữ nhật là một cách tiếp cận sai
      Shader được dùng để tô bóng (shading) cho hình chữ nhật
    • Trên thực tế, vertex shader xác định biên, còn fragment shader tô phần bên trong
      Trong mục đích giảng dạy, người ta đôi khi bỏ qua vertex shader và để fragment shader lấp đầy toàn màn hình
  • Phần khó nhất khi học code GPU là khâu thiết lập ban đầu quá phức tạp và khó hiểu
    Các khái niệm như định dạng dữ liệu, thứ tự biến đổi, ranh giới CPU-GPU đều khó, mà tài liệu lại thiếu
    Hệ thống biến toàn cục của GPU cũng gây bối rối
    • Tôi cũng từng có nhiều thắc mắc như vậy nên đã viết các bài blog để học WebGL
      Barebones WebGL in 75 lines,
      Barebones 3D rendering with WebGL
      Vulkan cần nhiều mã boilerplate hơn WebGL rất nhiều
    • Một số câu hỏi ở đây liên quan đến thiết kế API hơn là bản thân GPU
      GPU có cấu trúc SIMT nên tính nhất quán trong truy cập dữ liệu là rất quan trọng
      Các phép biến đổi được áp dụng tuần tự trong từng luồng, và ranh giới giữa CPU-GPU có thể được vượt qua nhiều lần tùy theo ngân sách hiệu năng
      Biến toàn cục là khái niệm hằng số được truyền giống nhau vào mỗi luồng, như uniform
      Trong CUDA có thể truy cập toàn cục bằng phép toán atomic nhưng hiệu năng giảm mạnh
      Một khóa nhập môn WebGL sẽ là điểm khởi đầu tốt
  • Mức độ hoàn thiện của trang này cao đến mức đáng kinh ngạc
    Sơ đồ, thanh cuộn, phong cách trình bày đều rất tuyệt
    Shader xuất hiện trước cả GPU và cũng có thể chạy trên CPU
    Cốt lõi của GPU là mô hình thực thi SIMT/SIMD, còn shader về bản chất là khái niệm hàm callback
    Tôi nghĩ việc có thể viết shader bằng cùng kiểu tư duy tuần tự như CPU chính là điều tạo nên sự đơn giản và thanh nhã của nó
    • Việc tất cả minh họa đều được làm bằng Figma đặc biệt gây ấn tượng
    • Tôi đã để lại một bình luận rằng phần phản hồi thật tuyệt vời
  • Tác phẩm thực sự rất đẹp và được hoàn thiện ở mức cao
    • Đồng ý 100%. Tôi tò mò không biết trang này có phải là một ứng dụng tùy chỉnh làm bằng Next.js hay không
  • Công việc thật xuất sắc. Tôi đã rất thích thú khi xem
  • Tôi đề xuất video của Iñigo Quilez, "This painting is a mathematical formula"
    Nó thể hiện rất rõ khái niệm shader, nơi tọa độ x, y của từng pixel được biểu diễn dưới dạng hàm