Làm thế nào để phần cứng tessname hoạt động?


34

Tôi chỉ muốn ai đó giải thích một cách rõ ràng một cách tương đối rõ ràng cách thức hoạt động của phần cứng được coi là từ thông dụng mới với DX11.

Cảm ơn.

Câu trả lời:


42

Tôi sẽ cung cấp cho bạn phiên bản "đơn giản" và để người khác điền thông tin cho bạn nếu bạn quan tâm :).

Về cơ bản có hai cách để mô hình các đối tượng 3D. Đầu tiên là bạn không thấy nhiều trò chơi và nó liên quan đến việc sử dụng các đường cong chính xác, được xác định theo toán học để xác định hình dạng của một vật thể. Sử dụng phương pháp này, mức độ chi tiết là (thực tế nói) là "vô hạn". Lấy một hình trụ chẳng hạn. Một hình trụ có thể được định nghĩa theo thuật ngữ toán học rất đơn giản: tất cả những gì bạn thực sự cần biết là bán kính ở hai đầu và chiều dài của hình trụ. Về mặt hình học, thông tin này là tất cả những gì chúng ta cần để hiển thị hình trụ trong cảnh 3D. Hơn nữa, chúng ta có thể dễ dàng quy mô xi lanh để làm cho nó lớn hơn hoặc nhỏ hơn; tất cả những gì chúng ta cần làm là duy trì tỷ lệ giữa chiều dài và bán kính. Chúng ta có thể sử dụng các công thức tương tự để biểu diễn hình học, nhưng với các tham số khác nhau. Chúng ta có thể đại diện cho một hình xuyến ("bánh rán" hình dạng) cũng dễ dàng: chúng ta chỉ cần biết bán kính bên trong và bán kính bên ngoài. Từ đó, chúng ta có thể tính đường kính (và do đó là bán kính) của thân bánh rán ("chiếc bánh") bằng cách trừ bán kính bên trong khỏi bán kính bên ngoài. Cơ thể tròn bao bọc dọc theo vòng cung được xác định bởi bán kính bên trong. Loại định nghĩa 3D này là tốt vì nó tương đối đơn giản (dẫn đến một tệp mô hình nhỏ) và không có giới hạn đáng kể đối với mức độ chi tiết. Nhược điểm là phần cứng video ngày nay không được thiết kế để xử lý các loại mô hình này một cách hiệu quả (nếu có). Cơ thể tròn bao bọc dọc theo vòng cung được xác định bởi bán kính bên trong. Loại định nghĩa 3D này là tốt vì nó tương đối đơn giản (dẫn đến một tệp mô hình nhỏ) và không có giới hạn đáng kể đối với mức độ chi tiết. Nhược điểm là phần cứng video ngày nay không được thiết kế để xử lý các loại mô hình này một cách hiệu quả (nếu có). Cơ thể tròn bao bọc dọc theo vòng cung được xác định bởi bán kính bên trong. Loại định nghĩa 3D này là tốt vì nó tương đối đơn giản (dẫn đến một tệp mô hình nhỏ) và không có giới hạn đáng kể đối với mức độ chi tiết. Nhược điểm là phần cứng video ngày nay không được thiết kế để xử lý các loại mô hình này một cách hiệu quả (nếu có).

Một cách khác là kết hợp hình học đơn giản để gần đúng hình dạng mà chúng ta muốn đại diện. Chúng tôi làm điều này với một quá trình gọi là tessname . Chúng ta có thể sắp xếp một hình trụ bằng cách phá vỡ nó thành các hình dạng nguyên thủy hơn: hai hình tròn và một loạt các hình chữ nhật dài, bao quanh mép ngoài. Các hình tròn có thể được chia nhỏ thành nhiều hình tam giác nhỏ, cũng như các hình chữ nhật dọc theo cạnh. Kết quả cuối cùng là một mô hình chỉ bao gồm các hình tam giác:

Hình ảnh của hình trụ tam giác

Hoặc, cho hình xuyến:

Hình ảnh của tam giác Torus

Tin tốt là phần cứng video được tối ưu hóa để xử lý loại hình học này. GPU ngày nay không gặp khó khăn gì trong việc tạo ra hàng tấn và hàng tấn hình tam giác mỗi giây. Tuy nhiên, có một vấn đề rõ ràng: chúng tôi đang cố gắng thể hiện các bề mặt cong bằng cách sử dụng các hình có cạnh phẳng. Để hình trụ của chúng ta trông giống như một hình trụ (trái ngược với hình khối), chúng tôi muốn chia nó thành nhiềucủa tam giác nhỏ. Chà, chúng ta muốn bao nhiêu? Nó phụ thuộc. Những loại phần cứng sẽ được sử dụng để kết xuất cảnh? Phần cứng nhanh hơn có thể khiến hình tam giác nhanh hơn phần cứng chậm hơn, tạo ra tốc độ khung hình nhanh hơn. Có nhiều yếu tố khác để xem xét, như có bao nhiêu vật thể khác sẽ có mặt trong cảnh, và chúng sẽ phức tạp như thế nào? Trong các trò chơi, thường có rất nhiều đối tượng trong một cảnh nhất định. Hơn nữa, các vật thể có thể đi qua các cảnh khác nhau, mỗi cảnh có mức độ phức tạp thị giác khác nhau. Thật khó để tìm ra mức độ chi tiết để sử dụng khi chúng tôi sắp xếp các mô hình của chúng tôi.

Một vấn đề khác là độ phức tạp hình học: trong khi định nghĩa hình trụ dựa trên đường cong rất đơn giản (bán kính và chiều dài), một định nghĩa được sắp xếp có thể kết hợp hàng trăm hình tam giác, mỗi hình cần được xác định độc lập. Do đó, tệp mô hình tessellated của chúng tôi sẽ lớn hơn nhiều. Hãy nói rằng chúng ta có một mô hình được xác định theo toán học của một cái gì đó phức tạp, giống như một người. Tệp mô hình của chúng tôi có thể có kích thước chỉ 24kb. Chà, một khi mô hình đó được sắp xếp lại, tệp kết quả có thể là 24mb (24.000kb). Đó là một sự khác biệt khá lớn.

Tessname phần cứng tận dụng các shader hình học để thực hiện tessname hỗ trợ phần cứng trong thời gian thực (hoặc gần như trong thời gian thực). Về cơ bản, nó cung cấp một cơ chế để lấy một mô hình 3D được xác định theo toán học và biến nó thành một định dạng được sắp xếp mà card màn hình có thể hiển thị một cách hiệu quả. Theo truyền thống, các nhà phát triển trò chơi đã thực hiện tessname tại studio và vận chuyển các mô hình tessellated với trò chơi. Phần cứng cho phép chúng tôi trì hoãn quá trình này cho đến khi trò chơi thực sự chạy trên máy tính của người chơi. Điều này có một số lợi ích nghiêm trọng:

  1. Kích thước của nội dung 3D của trò chơi giảm đáng kể (ít đĩa hơn hoặc tải xuống nhỏ hơn và không gian đĩa cứng ít hơn).

  2. Chúng tôi có thể kiểm soát mức độ chi tiết trong thời gian thực . Có phải chúng ta đang chạy trên một con thú tiên tiến của một máy chơi game? Nếu vậy, chúng ta có thể tessellate bằng cách sử dụng một mức độ chi tiết rất cao. Có phải chúng ta đang chạy trên một máy tính xách tay cũ với đồ họa tích hợp? Không vấn đề gì; chúng ta chỉ cần giảm mức độ chi tiết để tăng hiệu suất.

Vì vậy, đó là ý chính của nó. Nó có thể không chính xác 100%, vì tôi không phải là lập trình viên 3D, nhưng điều đó sẽ cho bạn ý tưởng tốt hơn về tất cả những gì ồn ào về :).

Chúc mừng,
Mike


Wow ... rực rỡ! "Tổng quan" dài nhất tôi từng đọc: P

6
Có một điều khác xác định mức độ cần thiết - kích thước của đối tượng trên màn hình. Thời gian chạy cho phép bạn có mức độ chi tiết chính xác ở mọi nơi mà không cần tạo nhiều phiên bản của từng đối tượng.
Adam

Đó có phải là một chút CPU nặng?
jcora

@Bane, ý bạn là GPU chuyên sâu? CPU có thể quan tâm ít hơn.
Nate Zaugg

0

Quá tệ đó không phải là cách mà hầu hết các nhà phát triển đang sử dụng tessname ngay bây giờ hoặc trong tương lai gần. Tất cả những gì họ sử dụng tess cho ngay bây giờ là thay thế các bề mặt phẳng chủ yếu theo sơ đồ chiều cao của nó. Điều đó cũng dẫn đến ngoại hình đẹp, nhưng tôi vẫn nghĩ rằng đó là việc sử dụng kém công nghệ có khả năng hơn nhiều.


Các công cụ và đường ống sản xuất phải được xem xét lại và xây dựng lại (vì tôi chắc chắn bạn biết rõ hơn hầu hết, @SamHocevar, vì vậy nhận xét này không nhắm vào bạn) và phần cứng mới phải phổ biến đến tỷ lệ đáng kể.
Rob Craig

@RobCraig Lưu ý rằng tôi chỉ sửa lỗi chính tả trong bình luận đó; Tôi không phải là tác giả gốc.
sam hocevar

@SamHocevar Yup, tôi đã tìm ra - cảm ơn vì đã làm rõ!
Rob Craig
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.