Vertex và Pixel shader là gì?


Câu trả lời:


50

Một Pixel Shader là một GPU (Graphic Processing Unit) thành phần có thể được lập trình để hoạt động trên một cơ sở cho mỗi pixel và chăm sóc những thứ như ánh sáng và bump mapping.

A Vertex Shader cũng là thành phần GPU và cũng được lập trình bằng cách sử dụng cụ thể lắp ráp giống như ngôn ngữ, như pixel shader, nhưng đều hướng đến hình học cảnh và có thể làm những việc như thêm cạnh hoạt hình bóng để đối tượng, vv

Không loại nào tốt hơn loại nào, mỗi loại đều có công dụng cụ thể. Hầu hết các card đồ họa hiện đại hỗ trợ DirectX 9 trở lên đều bao gồm các khả năng này.

Có nhiều tài nguyên trên web để hiểu rõ hơn về cách sử dụng những thứ này. Đặc biệt NVidia và ATI là những nguồn tốt cho các tài liệu về chủ đề này.


14
Shader cũng được viết bằng các ngôn ngữ cấp cao hơn (không hợp ngữ) như Cg, HLSL và GLSL.
Walt Ritscher

67

DirectX 10 và OpenGL 3 đã giới thiệu Geometry Shader là loại thứ ba.

Theo thứ tự đường ống hiển thị -

Vertex Shader - Lấy một điểm duy nhất và có thể điều chỉnh nó. Có thể được sử dụng để tạo ra các calc ánh sáng đỉnh ** phức tạp như một thiết lập cho giai đoạn tiếp theo và / hoặc làm cong các điểm xung quanh (lung lay, tỷ lệ, v.v.).

mỗi kết quả nguyên thủy được chuyển cho

Geometry Shader - Lấy từng nguyên thủy đã biến đổi (tam giác, v.v.) và có thể thực hiện các phép tính trên đó. Điều này có thể thêm điểm mới, lấy đi hoặc di chuyển chúng theo yêu cầu. Điều này có thể được sử dụng để thêm hoặc loại bỏ các mức chi tiết động từ một lưới cơ sở, tạo lưới toán học dựa trên một điểm (đối với các hệ thống hạt phức tạp) và các nhiệm vụ tương tự khác.

mỗi nguyên thủy kết quả được chuyển đổi đường quét và mỗi pixel mà khoảng bao phủ được chuyển qua

Pixel Shader (Fragment Shader trong OpenGL) - Tính toán màu sắc của pixel trên màn hình dựa trên những gì mà vertex shader đi vào, kết cấu liên kết và dữ liệu do người dùng thêm vào. Điều này hoàn toàn không thể đọc được màn hình hiện tại, chỉ cần tìm ra màu sắc / độ trong suốt mà pixel đó nên có cho nguyên thủy hiện tại.

những pixel đó sau đó được đưa vào bộ đệm vẽ hiện tại (màn hình, bộ đệm sau, kết xuất thành họa tiết, bất cứ thứ gì)

Tất cả các trình tạo bóng đều có thể truy cập dữ liệu toàn cầu như ma trận thế giới quan và nhà phát triển có thể chuyển các biến đơn giản để họ sử dụng cho chiếu sáng hoặc bất kỳ mục đích nào khác. Các trình tạo bóng được xử lý bằng ngôn ngữ giống như trình hợp dịch, nhưng các phiên bản DirectX và OpenGL hiện đại đã tích hợp sẵn các trình biên dịch ngôn ngữ giống c cấp cao được tích hợp sẵn gọi là HLSL và GLSL tương ứng. NVidia cũng có một trình biên dịch shader gọi là CG hoạt động trên cả hai API.

[đã chỉnh sửa để phản ánh thứ tự không chính xác mà tôi có trước đây (Hình học-> Đỉnh-> Điểm ảnh) như đã ghi trong nhận xét.]

Hiện đã có 3 trình tạo bóng mới được sử dụng trong DirectX 11 cho tessellation. Thứ tự đổ bóng hoàn chỉnh mới là Vertex-> Hull-> Tessellation-> Domain-> Geometry-> Pixel. Tôi chưa sử dụng những cái mới này nên không cảm thấy đủ điều kiện để mô tả chúng một cách chính xác.


2
Đường dẫn kết xuất của bạn bị sai. Đầu tiên, các đỉnh được xử lý trong bộ đổ bóng đỉnh và sau đó các gốc mà chúng tạo thành sẽ đi qua bộ đổ bóng hình học. Tôi tự hỏi tại sao chưa có ai khác phàn nàn về đơn đặt hàng sai này.
Christian Rau

2
Tessellation shader bao gồm Hull shaderDomain shader . Giai đoạn giữa Tessellator không thể lập trình được. Vì vậy, chỉ có hai shader bổ sung. Tương đương GL sẽ là Kiểm soát Tiếng kêu và Đánh giá Tessellation .
Christian Rau

12

Vertex và Pixel shader cung cấp các chức năng khác nhau trong đường dẫn đồ họa. Vertex shader lấy và xử lý dữ liệu liên quan đến đỉnh (vị trí, chuẩn, texcoords).

Trình đổ bóng pixel (hay chính xác hơn là Fragment) lấy các giá trị được nội suy từ các giá trị được xử lý trong trình đổ bóng Vertex và tạo ra các phân đoạn pixel. Hầu hết những thứ "hay ho" đều được thực hiện trong trình tạo bóng pixel. Đây là nơi diễn ra những thứ như tra cứu kết cấu và chiếu sáng.


7

DirectX cụ thể:

Shader:

Tập hợp các chương trình thực hiện các tính năng đồ họa bổ sung cho các đối tượng không được xác định trong đường dẫn kết xuất cố định. Vì điều này, chúng tôi có thể có các hiệu ứng đồ họa của riêng mình theo nhu cầu của chúng tôi - tức là chúng tôi không còn bị giới hạn trong các hoạt động “cố định” được xác định trước.

HLSL: (Ngôn ngữ tô bóng cấp cao):

HLSL là một ngôn ngữ lập trình giống như C ++ được sử dụng để thực hiện các trình tạo bóng (Pixel Shaders / Vertex Shaders).

Vertex Shaders:

Trình đổ bóng đỉnh là một chương trình được thực thi trên GPU của cạc đồ họa hoạt động trên từng đỉnh riêng lẻ. Điều này tạo điều kiện cho chúng tôi có thể viết thuật toán tùy chỉnh của riêng mình để làm việc với đỉnh.

Pixel Shader:

Pixel shader là một chương trình được thực thi trên GPU của card đồ họa trong quá trình rasterization cho mỗi pixel. Nó cung cấp cho chúng tôi một cơ sở để truy cập / thao tác trực tiếp các pixel riêng lẻ. Quyền truy cập trực tiếp vào pixel này cho phép chúng tôi đạt được nhiều hiệu ứng đặc biệt, chẳng hạn như đa văn bản, ánh sáng trên mỗi pixel, độ sâu trường ảnh, mô phỏng đám mây, mô phỏng lửa và kỹ thuật tạo bóng phức tạp.

Lưu ý: Cả Vertex Shaders và Pixel Shader (chương trình) phải được biên dịch bằng cách sử dụng phiên bản trình biên dịch cụ thể trước khi sử dụng. Việc biên dịch có thể được thực hiện giống như gọi một API với các tham số bắt buộc như tên tệp, hàm mục nhập chính, v.v.,


4

Về mặt phát triển, Pixel shader là một chương trình nhỏ hoạt động trên từng pixel riêng lẻ, tương tự như Vertex shader hoạt động trên từng đỉnh riêng lẻ.

Chúng có thể được sử dụng để tạo các hiệu ứng đặc biệt, bóng đổ, ánh sáng, v.v.

Vì mỗi Pixel / Vertex được vận hành riêng lẻ trên các trình tạo bóng này nên các trình tạo bóng này có cấu trúc song song cao của các bộ xử lý đồ họa hiện đại.


0

Đã từng có một bản trình diễn Flash cho thấy các mặt phẳng phơi sáng từ gần đến người xem đến khoảng cách phản chiếu. Điều này biểu thị các mặt phẳng xem khoảng cách của khoảng cách ánh sáng phản xạ trở lại người xem qua bất kỳ mặt phẳng nào khác theo cách của nó. Bất kỳ thứ gì trên các mặt phẳng đó đều có thể được sử dụng như chúng vốn có hoặc được sử dụng trong một giá trị dữ liệu được tham số hóa để thay đổi ánh sáng hoặc màu sắc trả về. Đây là cách giải thích đơn giản nhất mà bạn sẽ thấy. Tôi ước bản demo flash vẫn có thể thực thi được nhưng không thực thi được nữa vì lý do bảo mật. Trên thực tế, bất kỳ cơ thể nào thiết lập bộ đổ bóng 3d hiển thị x số mặt phẳng thẳng đứng dọc theo trục Z cho thấy sự tương tác với các mặt phẳng đó có thể trở nên nổi tiếng nhanh chóng. Chế độ xem có thể được hiển thị ở một góc độ giống như cách mà một chế độ xem khái niệm sẽ được hiển thị để phân tích rõ ràng. Nói cách khác, chế độ xem sẽ là một mặt cắt góc của những gì đường ống nhìn thấy và những gì người xem nhìn thấy. Trên thực tế, điều này có thể khiến ai đó thực sự được trả lương cao khi trình đổ bóng này được sử dụng như một tác phẩm tạo bóng đổ trong đó nhà phát triển chỉ cần chèn các mặt phẳng cần thiết vào trục Z. Một cửa sổ xem ở bên cạnh sẽ hiển thị kết quả hiển thị. Tôi trở thành triệu phú.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.