Có phải multitexturing thực sự chỉ là sử dụng nhiều hơn một kết cấu không?


10

Điều này có vẻ ngu ngốc, nhưng nó làm phiền tôi. Theo những gì tôi hiểu, multitexturing chỉ là sử dụng nhiều hơn 1 kết cấu cho mỗi shader (thường để trộn chúng bằng cách nào đó). Vì vậy, thay vì tạo 1 kết cấu, tôi tạo 2 hoặc nhiều hơn ... khá rõ ràng!

Tại sao có một thuật ngữ đặc biệt cho điều đó? Có nhiều thứ hơn là chỉ "sử dụng nhiều hơn 1 kết cấu" không? Tui bỏ lỡ điều gì vậy?


Tại một thời điểm đặc biệt là trong đồ họa 3d thời gian thực, sử dụng một kết cấu (bản đồ khuếch tán) là rất phổ biến. Do đó, tên được sử dụng để gợi ý rằng bạn đang sử dụng nhiều hơn một kết cấu. Tôi không thấy vấn đề. Giống như đa luồng
AturSams

Nhưng đa luồng yêu cầu API đặc biệt, thiết kế chương trình hoàn toàn khác nhau, v.v. Nó không khác nhau về nhiều mặt. Câu hỏi của tôi bắt nguồn từ thực tế là multitexturing dường như không có gì khác ngoài số lượng kết cấu. Và đó không phải là một vấn đề, chỉ là một câu hỏi.
NPS

Nó không phải yêu cầu một API đặc biệt. Điều đó sẽ phụ thuộc vào việc thực hiện. Tôi sử dụng một số công cụ xử lý đa điểm giống như cách chúng sẽ "unitexture";)
AturSams

@concept Phần nào? Tiêu đề?
Anko

Câu trả lời:


16

Thuật ngữ đặc biệt có liên quan đến sự phát triển của card đồ họa và API đồ họa thời gian thực thay vì quá đặc biệt. Ví dụ, xử lý hình ảnh và kết xuất đồ họa ngoại tuyến có tính năng này từ lâu trước khi nó có sẵn trong API đồ họa thời gian thực và phần cứng cấp độ người tiêu dùng.

Do tính năng đa biến OpenGL 1.1 (chức năng cố định) đã được giới thiệu như một trạng thái mới cho API. Thay vì chỉ ràng buộc một kết cấu, nó cho bạn khả năng liên kết nhiều kết cấu; một cho mỗi đơn vị kết cấu và sau đó pha trộn giữa chúng bằng cách sử dụng một trong các tham số môi trường kết cấu, trộn, điều chế..vv 1

Sau đó, các trình kết hợp kết cấu đã được giới thiệu, nó cho khả năng kết hợp một tập hợp họa tiết bằng các thao tác linh hoạt hơn, bằng cách cho bạn cách truyền tham số cho một tập hợp hoạt động cố định (nghĩ về nó như các shader nhưng với tập params cố định), đây là linh hoạt hơn so với "tổ hợp" ban đầu.

Với sự ra đời của shader, các combo trước đó trở nên dư thừa cho đến khi chính thức bị từ chối. Cuối cùng, nó trở nên tầm thường (khi phần cứng và các API theo đó phát triển) để chuyển một bộ lấy mẫu kết cấu cho trình đổ bóng và để GPU thực hiện các thao tác tùy ý (trình đổ bóng của bạn) trên kết cấu của bạn nhiều hơn so với trước đây.

Điểm ở đây; ngay cả khi nó trở nên tầm thường, thuật ngữ này vẫn tồn tại như một thuật ngữ chung cho bất kỳ hoạt động nào mô tả lấy mẫu và tích chập của nhiều kết cấu.

1 Tôi đang sử dụng bộ nhớ của mình để gọi lại chức năng cố định OpenGL cho tôi nếu tôi bỏ lỡ sth.


5

Lý do lịch sử là "multitexturing" là một từ thông dụng tiếp thị như "TnL phần cứng" ngày xưa. Vì đó là một đặc điểm nổi bật của thẻ mới, nên cần phải có một từ để bán chúng.

Lý do kỹ thuật là multitexturing không chỉ tạo và sử dụng hai kết cấu thay vì một. Nếu bạn chỉ đơn giản sử dụng hai kết cấu (hoặc ba hoặc bất kỳ số nào), bạn cũng có thể chỉ sử dụng một kết cấu, vì chỉ có một đoạn đầu ra. Điều đó sẽ không có gì khác biệt (dù đầu vào là gì, đầu ra chỉ có thể là cái này hay cái khác), vì vậy nó sẽ không có gì đặc biệt.

Sự khác biệt không phải là bạn có thể tạo ra một số kết cấu, mà là bạn kết hợp hai hoặc nhiều kết cấu. Ví dụ: bạn có thể trộn chúng dựa trên alpha hoặc trên một số yếu tố pha trộn nội suy trên mỗi đỉnh hoặc bạn có thể thêm chúng hoặc một cái gì đó khác.
Số lượng cấu hình / khả năng lập trình đã phát triển rất nhiều trong thập kỷ qua, nhưng một điểm khác biệt lớn vẫn là bạn có thể bằng cách nào đó kết hợp hai hoặc nhiều đầu vào thành một đầu ra.


2

Ban đầu có ánh sáng

Ánh sáng OpenGL, cụ thể, đã chỉ định một số thao tác toán học được áp dụng cho một đoạn, sau đó được kết hợp với kết cấu để tạo ra màu cuối cùng.

Và sau đó là trận động đất

Quake đã không sử dụng loại ánh sáng này cho nhiều đối tượng. Thay vào đó, nó sử dụng kết cấu thứ hai để thể hiện ánh sáng, được nhân với (hoặc "điều chế)) kết cấu đối tượng để tạo ra màu cuối cùng.

Tuy nhiên, phần cứng thời gian không hỗ trợ điều này trong một hoạt động. Vì vậy, Quake cần phải vẽ các đối tượng cảnh hai lần:

  • Vẽ mọi thứ một lần để đặt kết cấu cơ sở.
  • Đặt chế độ hòa trộn điều biến.
  • Vẽ mọi thứ lần thứ hai để áp dụng kết cấu ánh sáng.

Điều này tất nhiên là chậm; không chỉ tất cả các hình học cần phải được chuyển đổi và cắt bớt hai lần (mà trong những ngày đó là hoạt động của CPU), mà mọi pixel trên màn hình cuối cùng cũng bị chạm hai lần trong khi kết xuất.

Nhập đa diện

Multitexture là giải pháp cho vấn đề này và ban đầu được đưa ra thông qua tiện ích mở rộng GL_SGIS_multitexture, chỉ tồn tại trên một số thẻ 3DFX tiêu dùng nhất định. Ban đầu nó chỉ cho phép pha trộn hai kết cấu (và với một bộ chế độ hòa trộn giới hạn).

Để trích dẫn từ GLQuake readme gốc :

GL_SGIS_multitexture
hỗ trợ Multitextures cho phép phần cứng nhất định để làm cho thế giới trong một vượt qua thay vì hai. GLQuake sử dụng hai đường chuyền, một cho kết cấu thế giới và lần thứ hai cho các bóng đèn được pha trộn trên kết cấu. Trên một số phần cứng, với triển khai OpenGL được hỗ trợ GL_SIGS_multitexture, điều này có thể được thực hiện trong một lần. Trên phần cứng hỗ trợ này, bạn sẽ tăng tốc độ khung hình từ 60% đến 100%. Hiện tại, chỉ có thẻ TMU kép 3DFX (như Obsidian 2220) hỗ trợ tiện ích mở rộng này, nhưng phần cứng khác sẽ sớm xuất hiện.

Điều quan trọng cần nhớ là tại thời điểm này, các hiệu ứng như ánh xạ bình thường, bất kỳ loại ánh sáng trên mỗi pixel nào khác, thậm chí là các bóng đổ, v.v ... không tồn tại (chúng đã làm, nhưng chủ yếu chỉ trong các bài báo nghiên cứu và dự án nghiên cứu, và không được coi là khả thi để sử dụng trong kết xuất thời gian thực).

Và cho đến hiện tại

Từ đây, nó khá nhiều như được mô tả trong các câu trả lời khác. Multitexturing đã trở thành một tính năng tiêu chuẩn theo thời gian, với nhiều chế độ hòa trộn trở nên khả dụng, cuối cùng nhường chỗ cho mã shader tùy ý.

Nhưng điều quan trọng cho mục đích câu hỏi của bạn là thế này: ban đầu, chức năng tiêu chuẩn chỉ có thể sử dụng một kết cấu tại một thời điểm khi kết xuất. Có thể sử dụng nhiều hơn một chức năng bổ sung chỉ hỗ trợ phần cứng cao cấp và do đó, nó cần một cái tên. Tên đó có thể là "kết cấu kép" (vì các triển khai đầu tiên chỉ hỗ trợ hai kết cấu) nhưng với một mắt về tương lai, tên "multitexture" đã được chọn.

Đọc thêm về lịch sử của tất cả những điều này có sẵn ở đây , và một bài viết lịch sử tốt (về bối cảnh rộng hơn, và phần đa biến được chơi trong đó) tại câu trả lời của Lập trình viên .

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.