Học lập trình đồ họa không chỉ là học API. Đó là về cách học đồ họa hoạt động. Biến đổi Vertex, mô hình chiếu sáng, kỹ thuật bóng, ánh xạ kết cấu, kết xuất hoãn lại, v.v. Chúng hoàn toàn không liên quan gì đến API bạn sử dụng để triển khai chúng.
Vì vậy, câu hỏi là: bạn có muốn tìm hiểu cách sử dụng API không? Hay bạn muốn học đồ họa ?
Để thực hiện công cụ với đồ họa được tăng tốc phần cứng, bạn phải học cách sử dụng API để truy cập phần cứng đó. Nhưng một khi bạn có khả năng giao tiếp với hệ thống, việc học đồ họa của bạn sẽ ngừng tập trung vào những gì API làm cho bạn và thay vào đó tập trung vào các khái niệm đồ họa. Ánh sáng, bóng tối, bản đồ, vv
Nếu mục tiêu của bạn là tìm hiểu các khái niệm đồ họa, thời gian bạn dành cho API là thời gian bạn không dành thời gian để học các khái niệm đồ họa . Làm thế nào để biên dịch shader không liên quan gì đến đồ họa. Cũng không làm thế nào để gửi cho họ đồng phục, làm thế nào để tải dữ liệu đỉnh vào bộ đệm, v.v ... Đây là những công cụ và công cụ quan trọng để thực hiện công việc đồ họa.
Nhưng chúng không thực sự là khái niệm đồ họa. Họ là một phương tiện để kết thúc.
Nó mất rất nhiều công sức và học tập với Vulkan trước khi bạn có thể đạt đến điểm mà bạn đã sẵn sàng để bắt đầu học các khái niệm đồ họa. Truyền dữ liệu cho các shader yêu cầu quản lý bộ nhớ rõ ràng và đồng bộ hóa truy cập rõ ràng. Và kể từ đó trở đi.
Ngược lại, đến thời điểm đó với OpenGL đòi hỏi ít công việc hơn. Và vâng, tôi đang nói về OpenGL cấu hình lõi dựa trên shader hiện đại.
Chỉ cần so sánh những gì nó cần để làm một cái gì đó đơn giản như xóa màn hình. Trong Vulkan, điều này đòi hỏi ít nhất một số hiểu biết về một số lượng lớn các khái niệm: bộ đệm lệnh, hàng đợi thiết bị, đối tượng bộ nhớ, hình ảnh và các cấu trúc WSI khác nhau.
Trong OpenGL ... đó là ba chức năng: glClearColor
, glClear
, và hoán đổi nền tảng cụ thể đệm gọi. Nếu bạn đang sử dụng OpenGL hiện đại hơn, bạn có thể giảm xuống còn hai: glClearBufferuiv
và trao đổi bộ đệm. Bạn không cần phải biết bộ đệm khung là gì hoặc hình ảnh của nó đến từ đâu. Bạn xóa nó và trao đổi bộ đệm.
Vì OpenGL che giấu bạn rất nhiều, nên mất ít công sức hơn để đi đến điểm bạn thực sự học đồ họa thay vì học giao diện với phần cứng đồ họa.
Hơn nữa, OpenGL là một API (tương đối) an toàn. Nó sẽ phát sinh lỗi khi bạn làm điều gì đó sai, thường. Vulkan thì không. Mặc dù có các lớp gỡ lỗi mà bạn có thể sử dụng để trợ giúp, API Vulkan lõi sẽ cho bạn biết hầu như không có gì trừ khi có lỗi phần cứng. Nếu bạn làm điều gì đó sai, bạn có thể nhận được kết xuất rác hoặc làm hỏng GPU.
Cùng với sự phức tạp của Vulkan, việc vô tình làm điều sai trái trở nên rất dễ dàng. Việc quên đặt kết cấu theo bố cục phù hợp có thể hoạt động theo một cách thực hiện, nhưng không phải là khác. Việc quên một điểm đồng bộ hóa đôi khi có thể hoạt động, nhưng sau đó đột nhiên thất bại mà dường như không có lý do. Và kể từ đó trở đi.
Tất cả những gì đang được nói, có nhiều thứ để học đồ họa hơn là học các kỹ thuật đồ họa. Có một khu vực đặc biệt nơi Vulkan chiến thắng.
Hiệu suất đồ họa .
Trở thành một lập trình viên đồ họa 3D thường đòi hỏi một số ý tưởng về cách tối ưu hóa mã của bạn. Và đây là nơi mà việc che giấu thông tin và làm những việc sau lưng của OpenGL trở thành một vấn đề.
Mô hình bộ nhớ OpenGL là đồng bộ. Việc triển khai được phép đưa ra các lệnh không đồng bộ miễn là người dùng không thể biết được sự khác biệt. Vì vậy, nếu bạn kết xuất với một số hình ảnh, sau đó thử đọc từ nó, việc triển khai phải đưa ra một sự kiện đồng bộ hóa rõ ràng giữa hai tác vụ này.
Nhưng để đạt được hiệu suất trong OpenGL, bạn phải biết rằng việc triển khai thực hiện điều này, để bạn có thể tránh nó . Bạn phải nhận ra nơi triển khai đang bí mật phát hành các sự kiện đồng bộ hóa, sau đó viết lại mã của bạn để tránh chúng càng nhiều càng tốt. Nhưng chính API không làm cho điều này trở nên rõ ràng; bạn phải có được kiến thức này từ một nơi nào đó.
Với Vulkan ... bạn là người phải đưa ra các sự kiện đồng bộ hóa đó. Do đó, bạn phải nhận thức được thực tế rằng phần cứng không thực thi các lệnh một cách đồng bộ. Bạn phải biết khi nào bạn cần đưa ra những sự kiện đó, và do đó bạn phải biết rằng họ có thể sẽ làm chậm chương trình của bạn. Vì vậy, bạn làm mọi thứ bạn có thể để tránh chúng.
Một API rõ ràng như Vulkan buộc bạn phải đưa ra các loại quyết định hiệu suất. Và do đó, nếu bạn học API Vulkan, bạn đã có một ý tưởng tốt về những gì sẽ diễn ra chậm và những gì sẽ diễn ra nhanh chóng.
Nếu bạn phải thực hiện một số công việc bộ đệm khung buộc bạn phải tạo một kết xuất đồ họa mới ... tỷ lệ cược là điều này sẽ chậm hơn nếu bạn có thể đặt nó vào một đường dẫn riêng biệt của một đường dẫn kết xuất. Điều đó không có nghĩa là bạn không thể làm điều đó, nhưng API cho bạn biết trước rằng nó có thể gây ra vấn đề về hiệu suất.
Trong OpenGL, API về cơ bản mời bạn thay đổi tệp đính kèm bộ đệm khung của bạn willy-nilly. Không có hướng dẫn về những thay đổi sẽ nhanh hay chậm.
Vì vậy, trong trường hợp đó, học Vulkan có thể giúp bạn học tốt hơn về cách làm cho đồ họa nhanh hơn. Và nó chắc chắn sẽ giúp bạn giảm chi phí CPU.
Sẽ vẫn còn nhiều thời gian nữa trước khi bạn có thể đi đến điểm mà bạn có thể học các kỹ thuật kết xuất đồ họa.