Ví dụ tốt về hiệu ứng nhiều đường chuyền?


9

Trong XNA (và Direct3D nói chung AFAIK), thay vì tạo các shader đỉnh và mảnh riêng lẻ, bạn có khả năng nhiều shader có liên quan vào 'Hiệu ứng'. Khi bạn đến để sử dụng một hiệu ứng, bạn chọn một 'kỹ thuật' (hoặc lặp qua tất cả chúng) và sau đó mỗi 'kỹ thuật' có một số 'lượt'. Bạn lặp qua từng đường chuyền, nó sẽ chọn shader đỉnh và mảnh có liên quan và bạn vẽ hình học.

Điều tôi tò mò là mặc dù bạn sẽ cần nhiều đường chuyền để làm gì? Tôi hiểu rằng trong những ngày đầu của 3d, bạn chỉ có một đơn vị kết cấu và sau đó bạn có 2 và điều đó thường vẫn không đủ nếu bạn cũng muốn thực hiện ánh xạ môi trường. Nhưng trên các thiết bị hiện đại, ngay cả trong lớp di động, bạn có thể lấy mẫu 8 hoặc nhiều kết cấu và thực hiện nhiều phép tính ánh sáng như bạn muốn trong một shader duy nhất.

Những người có kinh nghiệm hơn ở đây có thể đưa ra các ví dụ thực tế về việc vẫn cần kết xuất nhiều đường chuyền hay đây chỉ là kỹ thuật quá mức trên một phần của XNA / Direct3d?

Câu trả lời:


5

Bất cứ khi nào bạn thực hiện các hiệu ứng hậu xử lý trên một bộ đệm được chụp sẽ là thời gian hợp lý để sử dụng hiệu ứng nhiều đường chuyền, ví dụ như phác thảo, làm mờ chuyển động, SSAO, nở hoa. Ý tưởng là đường chuyền đầu tiên sẽ là nơi bạn kết xuất mọi thứ với bộ đệm thích hợp và mỗi đường chuyền tiếp theo sẽ xử lý từng hiệu ứng sau quá trình.

Giống như Ranieri đã đề cập về ví dụ XNACC, họ đang sử dụng nhiều đường chuyền để hiển thị một số lượng lớn ánh sáng. Mặc dù trong ví dụ đó, họ đang thực hiện cùng một lượt, chỉ một lần cho mỗi ánh sáng.

Hãy nhớ rằng Shader Model 2 và trước đó không thể xử lý có nhiều hướng dẫn như Shader Model 3 hoặc 4 trong mỗi shader, nhưng một lý do khác để phân chia hiệu ứng thành nhiều lượt - để hỗ trợ phần cứng cũ hơn.


Bạn có thể đưa ra một ví dụ trong đó một đối tượng Hiệu ứng XNA nơi bạn lặp qua EffectPasses có nhiều hơn một lần thay vì sử dụng các hiệu ứng khác nhau không và tại sao?
Jason Goemaat

4

Như đã chỉ ra trong các phản hồi khác, kết xuất nhiều lượt (vẽ một lưới nhiều lần với các bóng / tham số khác nhau), như được đề xuất trong các trả lời khác, chắc chắn vẫn được sử dụng, chủ yếu để chiếu sáng và hiệu ứng đặc biệt

Hiệu ứng D3DX có thể được sử dụng cho loại điều này. Nhưng nó cũng có thể được thực hiện với nhiều hơn một shader / effect.

Mục đích ban đầu của pass là giúp triển khai các shader phức tạp trên phần cứng cấp thấp hơn (pre-shader-2.0), trong đó các hạn chế về số lượng giai đoạn kết cấu và hướng dẫn shader trên mỗi pass là khá hạn chế.

Trong ví dụ về chiếu sáng nhiều đường, có bất kỳ mức tăng hiệu suất đáng kể nào có được bằng cách sử dụng các đường chuyền thay vì hiệu ứng chuyển đổi không?


3

Ngoài những thứ ánh sáng mà mọi người đề cập, một công dụng chính khác của điều này là làm mờ . Ngang và dọc được thực hiện trong các đường chuyền riêng biệt (vì vậy để có được độ mờ 9x9, chỉ cần lấy mẫu 18 pixel cho mỗi pixel đầu ra thay vì 81). Điều này được sử dụng để nở hoa / HDR, độ sâu trường ảnh, phát sáng, v.v.


Có thể, nhưng hầu hết tôi nghĩ rằng việc triển khai mờ sẽ sử dụng cùng một shader cho các đường chuyền ngang và dọc - và chỉ truyền trong các mẫu bù (như các hằng số shader hoặc dữ liệu trên mỗi đỉnh)?
bluescrn

1
@bluescrn - Bloom thường được coi là hiệu ứng 4 lượt: một để trích xuất các vùng sáng & thu nhỏ, một để làm mờ theo chiều ngang, một để làm mờ theo chiều dọc, một để kết hợp / nâng cấp hình ảnh bị mờ với bản gốc. Mặc dù các tham số shader có thể được sử dụng để kiểm soát các tham số này, nhưng việc phân nhánh sẽ là cần thiết để phân biệt tất cả trừ hai lần vượt qua
Robert Fraser


1

Như Ranieri đã nói, bạn có thể sử dụng nhiều đường chuyền cho nhiều đèn, ví dụ với một vật liệu duy nhất bạn có thể có đường chuyền 'môi trường xung quanh', đường chuyền phụ gia cho mỗi điểm sáng, đường chuyền phụ gia khác trên đèn chiếu và sau đó là đường truyền decal để nhân lên trong khuếch tán kết cấu (trước đây tôi đã sử dụng một thiết lập như thế này và đó là về cách xử lý linh hoạt nhất của trình tạo bóng ánh sáng mà tôi đã thấy mà không bị che mờ).

Ngoài ra, tôi tin rằng hầu hết các shader lông sử dụng nhiều đường chuyền.


0

Bản đồ bóng để tạo bóng có thể được thực hiện bằng cách sử dụng nhiều lượt. Chỉ cần lưu ý, một số hiệu ứng nhiều lượt có thể được thực hiện trong một lần nếu thẻ video hỗ trợ cùng số đơn vị kết cấu với số lần vượt qua. Vì vậy, nếu bạn không có đủ đơn vị kết cấu, thì bạn sẽ phải sử dụng nhiều đường chuyền. Một nền tảng phần cứng cố định (như bảng điều khiển trò chơi), bạn có thể mã chỉ bằng cách sử dụng đa kết cấu vì bạn biết số lượng đơn vị kết cấu. Nhưng đối với PC, có vô số cấu hình phần cứng. Nếu bạn muốn có phạm vi tiếp cận rộng nhất tới người tiêu dùng, có lẽ bạn sẽ muốn chia một số hiệu ứng phức tạp hơn của mình thành nhiều lượt để người dùng có phần cứng cấp thấp hơn (nghĩa là không có nhiều đơn vị kết cấu trên GPU) vẫn có thể thấy hiệu quả Tóm tắt, bản đồ bóng được tạo ra bằng cách trước tiên tạo bản đồ bóng của cảnh từ góc nhìn của ánh sáng trong một lần. Sau đó, kết cấu bản đồ bóng được trộn vào cảnh với các kết cấu khác của cảnh.

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.