Dành cho game thủ – NVIDIA GeForce PhysX – Phần 3

Ageia – PhysX – NVIDIA: Sự kết hợp có lợi cho game thủ?

Thật ra cho đến năm 2007, chỉ còn lại có hai công ty dẫn đầu về mô phỏng vật lý trong game trên thế giới là Havok và Ageia. Lúc đầu cả NVIDIA và AMD đều đánh giá thấp khả năng PhysX của Ageia, nên dồn sức vào việt phát triển các hỗ trợ cho game trên chip của mình dựa vào Havok FX. Sau khi Intel mua lại Havok vào ngày 14 tháng 9 năm 2007, với cái giá được đồn đại rất nhiều là 110 triệu đô la Mỹ, đột nhiên Ageia trở thành công ty còn lại độc lập duy nhất làm công nghệ tính toán vật lý trên chip đồ họa thu hút cả NVIDIA và AMD. Cuối cùng NVIDIA đã mua lại Ageia vào ngày 13 tháng 2 năm 2008. Ngay sau khi hợp đồng mua bán này được hoàn tất, NVIDIA đã nhanh chóng triển khai việc chuyển mã nguồn PhysX của Ageia sang CUDA để chạy được trên các thế hệ chip GeForce của mình, với sự giúp đỡ từ những kỹ sư tài năng của Ageia, bao gồm cả Manju Hedge, CEO của Ageia, giờ đã trở thành phó chủ tịch phụ trách công nghệ PhysX của NVIDIA. Kết quả là giờ đây những người yêu game như tôi và các bạn có thể thưởng thức các hiệu ứng do PhysX mang lại trên các card đồ họa NVIDIA GeForce 8 trở lên.

Trong phần 3 này, tôi muốn điểm lại một vài yếu tố quan trọng trong sự kết hợp hai công ty tài năng về đồ họa là NVIDIA và Ageia thông qua điểm nhấn quan trọng PhysX. Trên quan điểm của riêng cá nhân mình, tôi cho là những bài học mà Ageia đã phải đối mặt và vượt qua là hết sức quan trọng cho tất cả những công ty dạng khởi nghiệp (start-ups) với các ý tưởng công nghệ độc đáo, mà những người sáng lập nên nghĩ là chúng có thể giúp họ thay đổi được thế giới.

Ageia – Giai đoạn 2002 – 2007

Năm 2002 có một công ty rất trẻ trung được thành lập ở vùng Santa Clara, bang California. Điểm đặc biệt ở công ty này là:

Họ cố gắng làm một việc cực kỳ khó, đó là mang công nghệ tính toán vật lý vào thị trường game đầy tính cạnh tranh khốc liệt.

Giải pháp họ đề nghị bao gồm cả phần mềm (PhysX SDK) và phần cứng (PPU add-in card). Ở khía cạnh phần mềm, trước họ đã có một công ty của Ireland ở vùng Dublin, gọi là Havok, cho ra đời phiên bản Havok SDK đầu tiên từ năm 2000, được sử dụng chẳng hạn trong trò Half-Life 2, hay Dead Rising. Về mặt phần cứng, họ là những người đầu tiên trên thế giới cung cấp phần cứng chuyên dụng cho vật lý trong game qua bộ xử lý vật lý PPU (Physics Processing Unit).

Chúng ta hãy quan sát kỹ hơn về cái chip PPU này qua hình chụp dưới đây.

Chip PPU của Ageia - Hình chụp của The Tech Report

Chip PPU của Ageia - Hình chụp của The Tech Report

Chip này chính là trái tim của card gia tốc vật lý do Ageia kết hợp với các nhà sản xuất bo mạch nổi tiếng là BFG và ASUS đưa ra thị trường vào khoảng đầu tháng Năm 2006, như trong hình dưới đây.

Chip PPU này có các đặc điểm chính sau đây:

  • Là thiết bị dựa trên kiến trúc MIPS đa lõi với sự tích hợp các hệ thống con bộ nhớ và phần cứng gia tốc vật lý
  • Chứa 134 triệu transistor trên một diện tích 182 mm^2.
  • Dung lượng bộ nhớ là 128MB GDDR3 với giao diện 128-bit.
  • Giao tiếp với bo mạch chính thông qua giao diện PCI.
  • Khả năng dò đụng độ khối cầu: 530 triệu/giây (khả năng tối đa)
  • Khả năng dò đụng độ lồi – lõm: 530,000/giây (khả năng tối đa)
  • Băng thông chỉ thị ở mức cao nhất: 20 tỷ chỉ thị/giây
  • Mức điện năng tiêu thụ: 30 W
  • Được chế tạo bởi TSMC với công nghệ 130 nm
  • Giá bán khoảng từ 100-250 đô la Mỹ

Vai trò của chip này trong một hệ thống máy tính được minh họa bởi hình vẽ sau:

Mối quan hệ giữa chip PPU của Ageia với CPU & GPU

Mối quan hệ giữa chip PPU của Ageia với CPU & GPU

Những gì chip này mang lại được về mặt tính toán vật lý bao gồm:

Kiến trúc vật lý song song ở mức cực lớn: Với khả năng này, chúng ta có thể tiến hành các tính toán vật lý với phạm vi lớn dựa trên bộ xử lý đa lõi được tinh chỉnh ở mức cao.

Kỹ thuật dò đụng độ liên tục đa năng: Với khả năng này, chúng ta có thể tạo ra các game với toàn bộ môi trường có tính tương tác cao thông qua một lượng lớn các đụng độ và phản ứng qua lại giữa các đối tượng di chuyển hết sức nhanh chóng.

Công nghệ chất điểm thông minh kiểu vật lý: Với khả năng này, chúng ta có thể tiến hành tính toán hàng ngàn hạt chất điểm thông minh rất thực cho các yếu tố thể tích, độ đậm đặc, và áp suất cho các dòng chảy nén được, khói, mưa, cũng như các mảnh vỡ vụn trong các cảnh game.

Hệ thống vật lý giành cho các đối tượng phức tạp: với khả năng này, chúng ta có thể biểu diễn các đối tượng và tương tác giữa chúng giống với đời thực hơn.

Công nghệ độ tin cậy cao về địa hình co giãn được: Với khả năng này, chúng ta có thể tạo ra các môi trường cảnh quan giống thực tế trong game.

Với cả thế mạnh về phần cứng và phần mềm như vậy, Ageia đã hứa hẹn một tương lai hết sức tươi sáng. Tuy nhiên vấn đề mà Ageia gặp phải, đó là sự chấp nhận về mặt công nghiệp. Với giá thành thiết bị phần cứng khá cao so với thời điểm 2006, cộng với sự thiếu vắng của các ứng dụng kiểu “bom tấn” đi kèm, Ageia đã ở vào những thời điểm hết sức khó khăn. Họ đã cố gắng rất nhiều để cố gắng mở rộng nền tảng PhysX tới nhiều hơn nữa các nhà phát triển game trên thế giới. Bộ công cụ phát triển PhysX SDK đã được phát hành đến tận tay các nhà phát triển game cho máy Playstation 3 của Sony vào đầu năm 2006, và hàng loạt các công ty khác vào dịp cuối năm, gồm cả BioWare. Mọi thứ đã thật sự trở nên nóng bỏng trong năm 2007, với Unreal Tournament 3, rồi Cell Factor: Revolution, và cả Warmonger lần lượt ra đời và game thủ có thể down về chơi miễn phí.

Ageia – Từ 2008 trở đi – Với NVIDIA

Mặc dù ý tưởng tiên phong của Ageia về chip gia tốc vật lý cho game là hết sức thú vị, các bạn hãy thử nghĩ xem, để hỗ trợ PhysX trên một diện rộng, chúng ta cần phải có gì trong tay, nếu đứng ở vị trí của Ageia năm ngoái 2007? Rõ ràng chúng ta cần có một lượng khách hàng lớn để nhận được sự chấp nhận về mặt công nghệ, từ đó khiến các nhà làm game phải bỏ thêm tiền cài đặt các tính năng hấp dẫn mới, để “chèn” PhysX vào các game của họ. Để cài đặt được các tính năng như vậy đòi hỏi rất nhiều thời gian của lập trình viên, có nghĩa là sẽ ảnh hưởng rất nhiều đến hầu bao của các công ty làm game khắp nơi trên thế giới. Điều này chỉ xảy ra khi Ageia có một lượng khách hàng cực lớn.

Trong khi đó, NVIDIA, với mạng lưới kinh khủng các nhà phát triển game đang tham gia trong chương trình “The Way It’s Mean To be Played” của mình, và hơn 70 triệu GPU khả lập trình được theo kiểu công nghệ CUDA, sẽ dễ dàng thuyết phục mọi người chấp nhận PhysX hơn.

Có lẻ nhìn thấy cơ hội khổng lồ đó, NVIDIA đã tiến hành những bước đi quyết định thúc đẩy sự kết hợp hoàn hảo giữa GeForce và PhysX thông qua cầu nối CUDA. Kết quả là giờ đây mọi người có thể nhìn thấy biểu tượng sau đây ở khắp nơi.

Sơ đồ dưới đây được cung cấp bởi HotHardware cho chúng ta một cách so sánh về cách thức triển khai công nghệ tính toán vật lý trong game giữa NVIDIA, AMD và Intel.

Với sơ đồ này, chúng ta có thể thấy là giải pháp hiện giờ trên các chip Intel và AMD là sử dụng Havok FX cho hỗ trợ vật lý trong game, còn NVIDIA sử dụng phiên bản PhysX từ Ageia. Phiên bản NVIDIA PhysX có cấu trúc cơ bản như sau.

Trong sơ đồ kiến trúc công nghệ PhysX nói trên của NVIDIA, tôi thích thú nhất là phần “Game Designer Scalable”, là nơi các nhà phát triển game sẽ có dịp thi thố tất cả năng lực sáng tạo của mình, và với hơn 150 tựa game đã và sẽ ra đời trong một ngày không xa, chúng ta hy vọng sẽ có dịp thưởng thức rất nhiều game “ác liệt” trong thời gian tới. Hy vọng tôi sẽ có nhiều thứ để bàn tiếp ở blog này vào lúc đó.

Cuối cùng, bài học kinh nghiệm mà tôi tự rút ra được là:

  • Nếu chúng ta ở phía các công ty khởi nghiệp: Nếu chúng ta tự tin là ý tưởng của mình có thể làm thay đổi tương lai thế giới, và chúng ta cam kết sẽ thực hiện nó đến cùng, vậy thì hãy tận dụng hết tất cả các cơ hội có thể có, kể cả “bán mình”, như mọi người vẫn thường nói. Vì nếu chúng ta chọn đúng công ty để trao ý tưởng của mình, người hưởng lợi cuối cùng vẫn là nhân loại, và chúng ta vẫn có thể tiếp tục thực hiện giấc mơ của mình trong một môi trường mới, với sự hỗ trợ mới, và do vậy với nhiều hứa hẹn thành công hơn nữa.
  • Nếu chúng ta ở phía các công ty lớn: Với lợi thế là người đi trước, chúng ta nên đi tiên phong trong việc đón nhận các ý tưởng mới từ những người khác, qua sự hỗ trợ từ ít đến nhiều về mặt tài chính, kỹ thuật, … Làm như vậy chúng ta đã góp phần rất lớn trong việc đưa thế giới này ngày một trở nên tốt đẹp hơn.

Dành cho game thủ – NVIDIA GeForce PhysX – Phần 2

Trong phần 1, chúng ta đã có dịp quan sát những điểm mạnh do công nghệ PhysX mang lại. Ở phần 2 này, tôi sẽ bàn chi tiết về mặt thuật toán do PhysX hỗ trợ đối với bài toán mô phỏng động học thể rắn trong game (rigid body dynamics).

Thật ra có rất nhiều dạng vật lý trong game, mà chúng ta có thể liệt kê những dạng chính gồm:
– Mô phỏng các nhân vật kiểu có khớp nối
– Mô phỏng xe cộ
– Mô phỏng vải vóc
– Mô phỏng các vật thể có thể biến đổi hình dạng
– Mô phỏng dòng chảy
– Mô phỏng động học thể rắn

Trong số các dạng mô phỏng vật lý kể trên, mô phỏng động học thể rắn giữ vai trò quan trọng nhất trong các trò chơi hiện đại. Cùng với mô phỏng các vật thể có thể biến đổi hình dạng (non-rigid or deformable body dynamics, như trong phần demo “Great Kulu” đã giới thiệu ở phần 1), nó tạo nên sự sinh động cho các đối tượng trong game, đặc biệt là động vật và các kiểu đồ đạc, hay cảnh có tác động của gió, bom đạn chẳng hạn.

Nói một cách dễ hiểu, mô phỏng động học thể rắn quan tâm đến cách thể hiện các đối tượng có hình dạng cố định di chuyển trong môi trường có trọng lực và tuân theo các qui luật chuyển động vật lý của Newton. Sơ đồ thực hiện việc mô phỏng này thông thường gồm có 3 bước:

Bước 1: Kết hợp (Integration)

  • Ở bước này vận tốc của các đối tượng sẽ được cập nhật dựa trên các lực vật lý được áp dụng trên chúng (bao gồm trọng lực, gió, sự tương tác tạo bởi người chơi).
  • Sau khi cập nhật vận tốc cho các đối tượng, vị trí mới của chúng cũng sẽ được cập nhật.

Bước 2: Dò đụng độ (Collision detection) 

  • Đây là bước tiêu tốn nhiều tài nguyên tính toán nhất trong toàn bộ sơ đồ mô phỏng.
  • Ở bước này, động cơ mô phỏng cần phải xác định xem những đối tượng nào có khả năng xảy ra đụng độ, dựa trên kết quả cập nhật đã thực hiện ở Bước 1. Thông tin đụng độ được cho bởi các điểm tiếp xúc giữa các đối tượng có đụng độ. Về nguyên tắc, việc xác định này đòi hỏi chúng ta phải tiến hành so sánh từng đối tượng có trong cảnh quan hiện tại của game với các đối tượng khác. Giả sử chúng ta có N đối tượng thì phí tổn cho tác vụ này là cỡ \mathbf{O(N^2)}, hết sức tốn kém về mặt tính toán. Trong thực tế, người ta chia bước này thành 2 bước con gọi là pha rộng và pha hẹp như sau:

Pha rộng: Chỉ so sánh biểu diễn đơn giản hóa của các đối tượng (kiểu hộp bao quanh chúng) để nhanh chóng xác định các cặp đối tượng có khả năng đụng độ.

Pha hẹp: Xác định chính xác những đối tượng thật sự đụng độ, để cho ra các thông tin như điểm tiếp xúc, vectơ chuẩn của mặt tiếp xúc, và độ xuyên sâu.

Bạn nào muốn tìm hiểu chi tiết hơn về bước này, có thể tham khảo bài báo sau.

P. M. Hubbard, “Collision detection for interactive graphics applications”, IEEE Transaction on Visualization and Computer Graphics, Vol. 1, N. 3, pp. 218-230, 1995.

Bước 3: Phân giải đụng độ (Collision resolution)

  • Ở bước này, chúng ta cần áp dụng các lực truyền tức thời (instant transitory forces) cho các cặp đối tượng có đụng độ đã dò ra ở Bước 2 để giúp chúng di chuyển rời nhau ra đúng theo các luật vật lý về va chạm và đàn hồi.

Để cài đặt cả 3 bước nêu trên, do những ràng buộc hết sức ngặt nghèo về yếu tố đáp ứng kiểu thời gian thực trong game, các hệ vật lý trong game cho đến nay đều thường là sử dụng các bộ giải (solver) kiểu lặp (cải tiến dần kết quả) thay vì chọn cài đặt bộ giải kiểu ma trận vốn rất phổ biến trong các công trình nghiên cứu lý thuyết. Bằng cách này, các hệ đó có thể điều chỉnh giữa độ chính xác – hiệu năng của hệ thống bằng cách thay đổi số lần lặp cần thiết.

Nhằm cải tiến hơn nữa các mô phỏng vật lý trong game, cách đây 3 năm (2005), Havok, một trong nhưng công ty hàng đầu về mô phỏng vật lý, đã quyết định tiến hành một nghiên cứu mới với mục tiêu giúp tạo ra các hệ mô phỏng mới có khả năng thể hiện hàng ngàn đối tượng thể rắn trên các bộ xử lý song song. Một trong những bộ xử lý được để ý đến chính là GPU, chip đồ họa thường có trong các máy tính của game thủ. Lý do chính cho sự chọn lựa này là các thuật toán thực hiện mô phỏng thường chiếm hơn 10% thời gian của CPU, do vậy nếu giao được phần việc nặng nề này cho GPU, CPU sẽ rảnh tay để phục vụ nhiều yêu cầu khác nữa trong một trò chơi kiểu mới. Ngoài ra, nếu việc tính toán mô phỏng được thực hiện từ GPU, chương trình sẽ không tốn thời gian chuyển dữ liệu về vị trí và hướng của hàng nghìn đến hàng triệu đối tượng từ CPU qua GPU để hiển thị lên màn hình. Kết quả tính toán giờ đây sẽ được lấy trực tiếp từ bộ nhớ đồ họa có trên GPU.

Kết quả của nghiên cứu tại Havok từ năm 2005 mà tôi vừa đề cập chính là Havok FX, một hệ thống mô phỏng lai, tận dụng tất cả các điểm mạnh của cả hai loại bộ xử lý là CPU và GPU. Các tác vụ trên Havok FX được phân chia giữa CPU và GPU như sau:

  • Trên GPU: Thực hiện việc lưu trữ trạng thái đầy đủ của các đối tượng (như vị trí, hướng, vận tốc tuyến tính và vận tốc quay) cùng với thông tin về hình dạng của chúng (được biểu diễn thông qua một kiểu texture do Havok tạo ra). Cách biểu diễn hình dạng này là mấu chốt cho việc xử lý các đụng độ kiểu lồi – lõm một cách hết sức nhanh chóng, dù là kém chính xác hơn so với các thuật toán dựa trên phép giao đa diện vô cùng tốn kém. Dựa trên các thông tin được lưu trữ hiệu quả này, GPU sẽ tiến hành thực hiện các bước kết hợp và dò đụng độ pha hẹp bằng một bộ dò Euler đơn giản với bước lặp có thời gian cố định.
  • Trên CPU: Thực hiện giai đoạn pha rộng trong bước dò đụng độ bằng cách
    Với mỗi hình (frame) của từng cảnh trong game: CPU đọc thông tin về các hộp bao canh theo trục của các đối tượng ở dạng nén từ GPU.
    CPU sau đó thực hiện các thuật toán so sánh đối tượng kiểu sắp xếp – quét đã được tối ưu hóa.
    CPU sẽ trả về cho GPU danh sách các cặp đối tượng có khả năng đụng độ.
    Việc trao đổi dữ liệu giữa CPU và GPU là khá nhỏ, chỉ vào khoảng vài trăm kí lô byte, nên với băng thông hiện tại (từ 2GB/giây đến 5GB/giây với giao diện PCI Express), bài toán cổ chai sẽ ít xảy ra.

Kết quả cài đặt cụ thể cho thấy, nếu chỉ với một CPU cỡ đơn lõi kiểu Intel 2.9GHz Core 2 Duo, tốc độ xử lý và hiển thị vào khoảng 6.2 hình/giây. Nếu dùng phiên bản lai với GPU là NVIDIA GeForce 8800 GTX, tốc độ đạt được vào khoảng 64.5 hình/giây (nhanh hơn khoảng 10 lần), mở rộng được cho các GPU thế hệ đi sau (như GTX 280 chẳng hạn), và còn có thể dùng nhiều GPU, một cho tính toán vật lý, và một dùng để hiển thị hình ảnh.

Bạn nào quan tâm đến việc thử nghiệm Havok FX trên máy PC của mình có thể download ở đây:

http://tryhavok.intel.com/

Nếu so sánh với kết quả cài đặt PhysX trên chip GeForce mới nhất của NVIDIA, chúng ta sẽ có bảng số liệu sau:

Kết quả th�� nghiệm NVIDIA PhysX từ HotHardware

Kết quả thử nghiệm NVIDIA PhysX từ HotHardware

 Nhìn vào bảng số liệu này, chúng ta có thể thấy điểm khác biệt về mặt phần cứng giữa chip Intel Core 2 Quad và NVIDIA GeForce GTX 280 là ở số lõi tính toán. Con số này trên GTX 280 lớn gấp 60 lần so với Core 2 Quad, phần nào giải thích được cho khả năng tính toán vượt trội của nó với 930 GFLOPS, gấp 10 lần so với CPU. Ngoài phần mô phỏng động học thể rắn đã đề cập ở trên, chúng ta cũng có thể quan sát thấy nhiều cải tiến quan trọng trong việc mô phỏng dòng chảy, mô phỏng các vật thể mềm, hay còn gọi là các vật thể có hình dạng thay đổi, và cả mô phỏng các chất liệu vải (ví dụ như vải bay trước gió, vải trước tác động của nhiều loại ngoại lực chẳng hạn).