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 đủ
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
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
1 bình luận
Ý kiến trên Hacker News
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
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
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.
PlayStation không hỗ trợ Vulkan, còn trên Switch thì chủ yếu dùng NVN thay vì OpenGL/Vulkan
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
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
Có những tác phẩm rất ấn tượng của Kirell Benzi
Hỗ trợ nhiều nền tảng như flatpak, AUR, macports, Windows
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
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
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
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
Shader được dùng để tô bóng (shading) cho hình chữ nhật
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
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
Barebones WebGL in 75 lines,
Barebones 3D rendering with WebGL
Vulkan cần nhiều mã boilerplate hơn WebGL rất nhiều
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
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ó
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