Tìm hiểu về Tessellation, tính năng chính của DirectX 11

Thảo luận trong 'Khoa học' bắt đầu bởi cuLong, 8/7/12.

  1. cuLong (_ _#)

    [IMG]
    Tổ ong là hình mẫu của tessellation trong tự nhiên

    Tessellation là gì?
    Có lẽ bạn đã rất quen thuộc với thư viện đồ họa DirectX 11 của Microsoft, DirectX 11 có mặt trong phần lớn các game trên máy tính xuất hiện trong khoảng 2 năm gần đây, cùng với các thế hệ card đồ họa hỗ trợ DirectX 11 đầu tiên là nVIDIA GeForce 400 series và AMD Radeon HD 5000 series.

    Về cơ bản, DirectX 11 khác biệt với thế hệ DirectX 10 trước đó chủ yếu ở công cụ Tessellation. Vậy Tessellation là gì, nó giúp ích gì được cho các game thủ và các nhà phát triển ứng dụng? Bài viết này sẽ đem đến cho bạn cái nhìn sơ lược nhất về tessellation và việc ứng dụng của nó.

    Tessellation, nói đơn giản, là việc chia các đa giác (polygon) thành những đa giác nhỏ hơn một cách tự động theo một kịch bản quy định sẵn bởi các nhà phát triển. Ví dụ bạn lấy một hình vuông, cắt chéo nó, bạn sẽ có 2 hình tam giác nhỏ hơn, cây kéo để cắt chính là công cụ tessellation. Chỉ khác là tessellation được thực hiện hoàn toàn tự động. Tuy nhiên chia hình vuông ra 2 tam giác hay hàng ngàn đa giác thì nhìn cũng không khác nhau là mấy, nếu chúng nằm trên một mặt phẳng. Tessellation chỉ có tác dụng rõ rệt nếu các đa giác nằm trên một cấu trúc gồ ghề, không bằng phẳng.

    [IMG]

    Sau khi dùng tessellation để cắt các đa giác, người ta sẽ dùng một kỹ thuật khác, nhằm sắp xếp các đa giác mới đó vào một mô hình vật thể, được gọi là ánh xạ vị trí (displacement mapping). Một bản đồ ánh xạ vị trí là một tổ hợp các thông số chứa thông tin về độ cao của từng đa giác, hoặc gọi là đỉnh độ cao (vertices). Khi nó được áp vào một bề mặt nào đó, nó sẽ ra lệnh cho các vị trí trên bề mặt nâng lên hoặc hạ xuống ứng với thông tin độ cao trên bản đồ ánh xạ vị trí đó.

    Ví dụ, nhà thiết kế game khi cần thiết kế một ngọn núi trong game, họ sẽ thiết lập một bản đồ ánh xạ vị trí chứa độ cao của từng điểm (tương tự với bản đồ đường đồng mức của ngành trắc địa) và áp một một file hình ảnh trên mặt phẳng của ngọn núi lên bản đồ đó để tạo ra một mô hình 3 chiều của ngọn núi. Với nguyên lý tương tự như vậy, các nhà phát triển sẽ làm ra nhà cửa, xe cộ, vũ khí, người, cây…

    [IMG]

    Tương tự như tessellation, bản đồ ánh xạ vị trí đã tồn tại khá lâu, nhưng cho tới gần đây nó mới được chú ý sử dụng nhiều hơn. Lý do rằng để bản đồ ánh xạ được phát huy hiệu quả, bề mặt vật liệu được tạo lập sẵn từ rất nhiều các đỉnh độ cao. Trong ví dụ của ngọn núi ở trên, nếu chỉ có khoảng 8 đỉnh độ cao, sẽ không có thông tin về độ cao của các vị trí lân cận để định hình được ngọn núi. Do đó cần phải có một số lượng đỉnh độ cao đủ lớn, các nhà phát triển phải bỏ công sức khá nhiều cho công đoạn này. Tessellation sẽ thực hiện việc này hoàn toàn tự động, giúp tiết kiệm công sức thiết kế của nhà phát triển rất nhiều.

    Với DirectX 11 thì hai công cụ này đã được kết hợp chặt chẽ với nhau, nhờ tessellation, việc thiết kế các đỉnh độ cao được thực hiện hoàn toàn tự động, giúp tiết kiệm công sức cho các nhà phát triển, đồng thời đem lại hiệu ứng đồ họa bắt mắt hơn với các mô hình có độ chi tiết cao. Các game phổ biến như Alien vs Predator hay Metro 2033 đều áp dụng tessellation để tạo ra các mô hình rất trơn tru và mượt mà.

    [IMG]
    Một mô hình thô (trái) sau khi được xử lý bằng tessellation (giữa) và áp bản đồ ánh xạ vị trí lên (phải)

    Vậy với công dụng như vậy, Tessellation có những ứng dụng gì? Sau đây là 4 ứng dụng tiêu biểu nhất được dùng rộng rãi trong ngành công nghiệp trò chơi điện tử.

    Ứng dụng của Tessellation:

    1. Tạo hiệu ứng vân nổi hoàn hảo
    Bản đồ ánh xạ vị trí sẽ là một giải pháp thay thế cho các kỹ thuật ánh xạ vân nổi (bump mapping) hiện tại. Các kỹ thuật ánh xạ vân nổi hiện tại thường dựa chủ yếu vào thị giác để tạo cảm giác về độ sâu. Trong đó, kỹ thuật ánh xạ thông thường (normal mapping) được sử dụng nhiều nhất trong các thế hệ game cũ. Ví dụ phổ biến nhất là các vết thủng trên tường khi bắn đạn vào, kỹ thuật vân nổi thông thường sẽ áp các vân (ví dụ vết thủng tường) lên bề mặt vật thể, tạo ra một “ảo giác” về độ sâu của vật thể đó, cụ thể ở đây là tường bị thủng lỗ.
    Nhưng kỹ thuật ánh xạ vị trí sẽ dựa trên thông tin về độ sâu của việc thủng tường để tạo ra một vết thủng thực sự bằng mô hình 3 chiều, thông tin về đỉnh độ sâu này sẽ được cung cấp bởi tessellation.

    [IMG]
    Kỹ thuật ánh xạ thông thường (trái) và kỹ thuật ánh xạ vị trí có sự giúp đỡ của Tessellation (phải)

    Rõ ràng ta có được hiệu ứng đồ họa đẹp mắt và chân thực hơn nhiều so với “miếng dán” kia trong các game sử dụng các thế hệ DirectX cũ (phiên bản 10 trở về trước).

    2. Mô hình nhân vật mượt mà và chi tiết hơn
    Một công cụ có thể khai thác tessellation khác là thuật toán làm mịn. Thuật toán này sẽ dùng một mô hình thô, với sự trợ giúp của tessellation sẽ tạo ra một mô hình mịn màng và có số lượng đa giác cao hơn nhiều, mà không cần các nhà phát triển phải bỏ thời gian để vẽ mô hình đó.

    Một ví dụ khá phổ biến là thuật toán PN-triangles (có tên khác là N-patches). PN-triangles sẽ chuyển đổi một mô hình có bề mặt đơn giản thành các bề mặt có số lượng đa giác phức tạp hơn nhiều lần, nhờ tessellation. Thuật toán này được sử dụng rất rộng rãi trong các game DirectX 11 hiện nay, từ các vô lăng xe hơi, khuôn mặt nhân vật, quả bóng đá… Trong game Stalker: Call of Pripyat, PN-triangles được dùng để tạo ra rất nhiều các mô hình nhân vật.

    [IMG]
    Mô hình này được xử lý bởi tessellation cho ra một kết quả mịn màn và trơn tru hơn.

    3. Tạo ra các mức độ chi tiết liền mạch nhau

    Đối với các game có môi trường lớn, như series GTA hoặc các game đua xe, bạn sẽ nhận thấy có nhiều vật thể nằm ở xa mà chỉ xuất hiện khi bạn tiến lại gần nó ở một khoảng cách nhất định nào đó (*). Trong các game trước thế hệ DirectX 11, khi càng tiến lại gần, các vật thể sẽ xuất hiện rõ ràng và chi tiết hơn một chút, và chỉ xuất hiện ở hình dạng chi tiết nhất khi bạn tiến tới đủ gần. Nguyên nhân của việc này là các nhà phát triển game đã tạo sẵn các mô hình (của vật thể đó) từ sơ cấp đến rất chi tiết và tùy thuộc vào khoảng cách xa gần mà hiển thị cho phù hợp, tác dụng chính là giúp máy tính không bị quá tải với quá nhiều vật thể có độ chi tiết cao cùng xuất hiện cùng lúc.

    *Khoảng cách này phụ thuộc vào tùy chỉnh View of Distance (hoặc Limit of Detection) trong game.

    Nhược điểm của việc này là các nhà phát triển phải bỏ công sức ra vẽ nhiều mức độ chi tiết của cùng một mô hình, đồng thời người chơi cũng nhận thấy mô hình sẽ biến đổi rõ ràng khi khoảng cách xa gần thay đổi.

    Tessellation sẽ giúp cho độ chi tiết của mô hình thay đổi một cách liền mạch, ko bị ngắt quãng. Ví dụ trong game đua xe, khi ở khoảng cách xa tầm 500m, ngôi nhà sẽ có khoảng 100 đa giác, khi khoảng cách giảm xuống (tức là ta tiến lại gần nó hơn), ngôi nhà sẽ tăng mức đa giác lên từ từ, 100 lên 500 chẳng hạn, và khi bạn ở cách nó chỉ 10m thì ngôi nhà đã có khoảng 10.000 đa giác, rất liền mạch. Đây gọi là tessellation động (dynamic tessellation).

    Ưu điểm rất rõ ràng: nhà phát triển không phải mất công vẽ 5 hoặc 10 mô hình sẵn ứng với các mức độ chi tiết, và người chơi cũng cảm thấy ngôi nhà có mức chi tiết rất liền mạch, ko biến đổi một cách “giật cục” nữa.

    [IMG]
    3 cấp độ chi tiết của cùng một mô hình mà nhà phát triển phải “vẽ” sẵn khi không có tessellation hỗ trợ

    4. Khả năng thay đổi độ chi tiết linh hoạt
    Đối với các nhà phát triển, tessellation giúp họ tiết kiệm công sức và thời gian rất nhiều. Jasson Mitchell, một nhà phát triển của Valve, đã chia sẻ: “Chúng tôi rất thích thú với khả năng tăng lên và hạ xuống mức độ chi tiết mô hình của tessellation. Chúng tôi chỉ cần thiết kế một mô hình, tessellation sẽ giúp tăng mức độ chi tiết như trong các bộ phim. Ngược lại, tessellation sẽ giảm mức chi tiết xuống thấp nhất để tiết kiệm thời gian render”. Nhờ đó, họ chỉ cần thiết kế mô hình một lần và sử dụng nó cho nhiều nền tảng, nhiều mục đích khác nhau, giúp tiết kiệm rất nhiều thời gian và công sức bỏ ra. Đối với gamer, họ sẽ có được những hình ảnh đẹp nhất tương xứng với sức mạnh card đồ họa của mình.

    [IMG]
    Mức độ chi tiết thay đổi theo tùy chỉnh tessellation

    Kết luận
    Như vậy sau rất nhiều năm thử nghiệm, tessellation đã chính thức đến với thế giới máy tính cá nhân. Các game như Metro 2033 đã phô diễn sức mạnh của tessellation, cho ra chất lượng đồ hoạt tuyệt vời. Theo thời gian, tessellation sẽ đóng vai trò rất quan trọng, tương tự vai trò của công nghệ đổ bóng điểm ảnh (pixel shading) hôm nay. Cả nVIDIA và AMD đều đã ứng dụng tessellation vào các thế hệ card đồ họa mới nhất của mình, nhằm đem lại những trải nghiệm đồ họa tuyệt vời nhất cho người dùng.

    Metro 2033, tựa game nổi tiếng với hiệu ứng Tessellation.




    Truong.Vi.Hao, 610, engadget.com26 người khác thích nội dung này.
  2. aeronautic punlinh2007

    Quan trong gia ca la hanh phuc roi.....:)
  3. juliusmozartius Thành viên

    ^
    Não à? Hay là spam để tăng posts?
    goole159, anhcanhd900, y0ulost4 người khác thích nội dung này.
  4. J_Android Anh Duong Talents

    thật ra thuật toán này đã dùng trong đồ họa 3 chiều, dúng các tam giác để tạo nên vật thể...có liên quan đến ma trận, lâu rồi không nhớ nữa
  5. emkobit Thành viên

    Thật là kinh khủng o_O
    malepro thích nội dung này.
  6. nhatientri Thành viên

    1 vật thể được tạo nên từ nhiều polygon ghép lại,
    đơn giản như hình tròn tạo bởi đa giác rất nhiều cạnh, và nếu game để ở chế độ low thì số cạnh giảm xuống, nhìn rõ từng góc cạnh không tròn nữa,
    còn cái têsêllation này nó vót tròn các cạnh đó lại,
    mềnh hiểu thế có đúng k nhỉ
    concaloco0tobite0o thích nội dung này.
  7. thanhpk123 Thành viên

    Nhìn game cũng kết không biết giá cả ntn.

    _ :*"v"*:_thanh™_(._.*)_
  8. HoLyNightKing Thành viên

    thax bạn bài viết rất hửu ích . biết bao giờ mình mới chơi dc game như vậy trời . máy ở nhà far cry 1 chơi còn ko nổi nữa là ^^!
  9. quyetk12 Thành viên

    toàn từ chuyên ngành. e là e chịu:rolleyes:
    y0ulost thích nội dung này.
  10. thoitrang365 Thành viên

    dr12 thì bao giờ có nhỉ ?
  11. Góc nhìn Thành viên

    Mới nhìn lại tưởng tìm hiểu về cuộc sống loài ong :D
    duo8, Chung1905vanduc1602 thích nội dung này.
  12. twin snakes Thành viên

    ko có j là quá khó hiểu đâu, bạn nào thường chơi game PC sẽ hiểu ngay bài này ấy mà :D
  13. noctunalguy Thành viên

    WP8 sắp tới có nhiều game khủng đây
    le hoang tuanChung1905 thích nội dung này.
  14. casperpas Thành viên

    Thật ra thì công nghệ này có trên OpenGL từ lâu rồi. Ngay cả PixelShader cũng vậy (bên OpenGL sử dụng 2 cái là VertexShader và FragmentShader, được viết bằng GLSL). Nhờ có công nghệ này mà nhiều hình mô phỏng trông thật hơn. Xem mấy cái demo của NVIDIA đẹp ghê gớm. :D
  15. hamyty Thành viên

    Iphone có công nghệ này lâu rồi , game 3d hình ảnh rất tuyệt vời , nếu ko dùng thử chắc mình ko tin iphone 4s chơi infinity blade hình ảnh lại tuyệt vời như thế :">
  16. ducmthai Thành viên

    Chia lưới trong Phần Tử Hữu Hạn cũng na ná zầy :)
  17. lovesocnho Thành viên

    Lập trình game thì cần nhiều thuật toán quá mà giải thuật thì bỏ lâu quá và ko có học thêm nên chẳng nhớ được gì! Theo lập trình ứng dụng cho nó lành! :D. Ai tạo game ra mình chơi. :D
  18. deadstar2104 Thành viên

    vót tròn cạnh là sang vấn đề khử răng cưa rồi (anti-aliasing)
    túm cái váy lại là cái công nghệ này làm giảm thời gian khi tạo hình 3d xuống, dev ko cần phải tạo ra nhiều mô hình ứng với các cấp độ chi tiết khác nhau của cùng 1 vật thể.
  19. ateenrau Thành viên

    Công nghệ này hỗ trợ tốt hơn cho các nhà phát triển đồ hoạ, nhất là game và hoạt hình ( trong này chắc có hãng pixar nổi tiếng của bác Jobs) trong việc tiết kiêm thời gian và khả năng dùng lại các mô hình là chính.
    Còn người dùng, hehe, các anh có $ mua cấu hình cao mới tận dụng được công nghệ này :d
  20. warmboy24 Thành viên

    Mình không mê chơi game nhưng mê những gình ảnh đồ hoạ đẹp mắt trong các game nổi tiếng! Nên chủ yếu chơi game là để thuởng thức đồ hoạ!

Chia sẻ trang này