Tải bản đầy đủ (.pdf) (17 trang)

NGHIÊN CỨU VÀ XÂY DỰNG THỬ NGHIỆM 3D ENGINE - 7 doc

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (677.72 KB, 17 trang )









Chương 5. Hệ thống diễn hoạt (Animation System)
- 91 -
5.2.4. Vấn đề về quản lý diễn hoạt
5.2.4.1. Các vấn đề cơ bản trong diễn hoạt
¾ Các loại diễn hoạt:
Có hai loại diễn hoạt chính của các đối tượng là diễn hoạt khung xương và diễn
hoạt nội suy. Diễn hoạt khung xương tức là các sự chuyển động dựa trên cấu trúc
khung xương và thực hiện diễn hoạt dựa vào các khung hình làm khoá. Diễn hoạt
nội suy là việ
c thực hiện diễn hoạt bằng phép nội suy giữa chuyển động ngay trước
và ngay sau nó. Trong các Game ngày nay hầu hết đề lưu các mô hình bằng cấu trúc
khung xương và kết hợp cả hai loại diễn hoạt để tạo ra một chuyển động đẹp mắt.
¾ Vấn đề thời gian trong diễn hoạt:
Các Game thực hiện trong một hệ thống thời gian thực. Thời gian là yếu tố quan
trọ
ng cần chú ý khi xây dựng Game. Như ta biết trong một chương trình Game thực
chất ta có một vòng lặp vô tận, tại mỗi vòng lặp ta thực hiện quá trình hiển thị tương
ứng với thời gian đó. Trong hệ thống diễn hoạt thì kết quả cuối cùng là phải có một
chuyển động mượt mà và không bị giật do đó phải đảm bảo được số khung hình
trong một giây cao hay là thời gian giữa các vòng lặp chính phải ngắn.
Một điều quan trọng trong yếu tố thời gian là ta phải làm sao cho hệ thống diễn
hoạt của ta hoạt động giống nhau trên những máy tính có tốc độ xử lý khác nhau. Ví
dụ trên một máy tốc độ 2GHz và trên một máy tốc độ 500MHz thì trên máy 2GHz


chuyển động sẽ mịn hơn trên máy 500MHz nhưng phải đảm bảo được chuyển động
giống nhau vì chúng thực hiện trong thời gian như nhau. Để giải quyết ta sẽ
thực
hiện bằng cách tính khung hình hiện tại bằng nội suy giữa các khung hình trước và
sau nó.
¾ Các khung hình trong chuyển động:
Một chuyển động của mô hình là một dãy các biến đổi của mô hình đó theo thời
gian. Ta không thể lưu toàn bộ các biến đổi bởi vì làm như vậy sẽ rất lãng phí bộ
nhớ mà thay vào đó ta lưu sự biến đổi của mô hình tại một số mốc nào đó. Ví dụ








Chương 5. Hệ thống diễn hoạt (Animation System)
- 92 -
như ta lưu sự biến đổi của đối tượng cứ sau vài mili giây chẳng hạn. Các khung
hình chính này có thể lưu cách nhau những khoảng thời gian khác nhau hoặc đều
nhau đều được. Dưới đây là một ví dụ về chuyển động của vật thể theo key frame
với khoảng cách giữa các key frame là 40 mili giây.

Hình 5-4 Ví dụ diễn hoạt qua các khung hình khóa
Như vậy để thực hiện diễn hoạt thì khi chương trình yêu cầu cập nhật thì dựa
vào thời gian trôi qua truyền vào ta sẽ tính được frame nào cần hiển thị và sẽ hiện
thị key frame đó lên. Nhưng rõ ràng chỉ dựa vào các key frame để hiện thị thì hình
ảnh sẽ không mượt mà do sự biến đổi giữa các khung hình là khá lớn. Để khắc phục
việc này ta cần kết hợp thêm biến đổi nội suy vào.

¾ K
ết hợp biến đổi nội suy giữa các khung hình:
Để thực hiện được chuyển động nội suy giữa các key frame ta phải xác định
được thời gian đã trải qua trong chuyển động. Cứ mỗi lần chương trình yêu cầu ta
cập nhật và truyền vào đối số là thời gian đã trôi qua thì ta tính toán được thời điểm
trong chuyển động vì ta có thời gian tổng cộng của chuyển động và tính được thời
gian t
ừ khi chuyển động. Tiếp đó ta sẽ xác định được key frame ngay trước và ngay
sau nó. Giả sử ta có được t1 là thời gian thực hiện key frame n và t2 là thời gian của
key frame n+1. Ta tính được hằng số tỉ lệ:








Chương 5. Hệ thống diễn hoạt (Animation System)
- 93 -
s = (t-t1)/(t2-t1) với t là thời gian hiện thời. Nhờ hệ số này ta dễ dàng nội suy ra
biến đổi hiển tại dựa vào key frame n và n +1:
Khung hình lúc t = khung hình lúc t1 + s* (khung hình lúc t2 – khung hình lúc t1)
Sự biến đổi như vậy có 2 ưu điểm:
Chuyển động sẽ mượt mà, đẹp và thực hơn.
Chuyển động sẽ diễn ra giống nhau trên những máy có tốc độ CPU khác
nhau.
5.2.4.2. Tổ chức quản lý diễn hoạt
Như ta đã biết, một nhân vật có một khung xương và kèm theo là một số các
diễn hoạt riêng biệt như đứng, đi, nhảy, tấn công, … Chúng ta cần hệ thống diễn

hoạt cho phép quản lý được tất cả các diễn hoạt cho một nhân vật.
Để thực hiện đượ
c yêu cầu đó ta phải tổ chức quản lý từ thấp đến cao, từ chi tiết
đến tổng quát. Cụ thể ta xây dựng lớp quản lý một diễn hoạt cho một khớp xương,
dựa vào lớp này ta xây dựng lớp quản lý một diễn hoạt cho toàn bộ khung xương,
và cuối cùng dựa vào lớp vừa xây dựng ta xây dựng tiếp lớp quản lý tất cả các diễn
hoạt cho một khung xương. Tại lớp tổng quát nhất (quản lý toàn bộ diễn hoạt) ta có
thể thực hiện các kết hợp các diễn hoạt lại với nhau. Quá trình tích hợp minh họa
theo sơ đồ lớp sau:

Hình 5-5 Sơ đồ quan hệ các lớp quản lý diễn hoạt








Chương 5. Hệ thống diễn hoạt (Animation System)
- 94 -
¾ Quản lý diễn hoạt cho một khớp xương:
Trong lớp quản lý diễn hoạt cho một khớp xương ta cần có các thông tin như
sau:
Con trỏ chỉ đến khớp xương trong khung xương mà ta cần quản lý. Tất cả
những thông tin về khớp xương sẽ được ta truy cập dựa vào con trỏ này.
Phải lưu các thông tin diễn hoạt của một khớp xương. Thông tin này là một
cấu trúc lưu thông tin diễn hoạt được nạp từ tập tin về chính khớp xương, về khớp
xương cha, về danh sách các khung hình của diễn hoạt.
Trong lớp quản lý này ta cần phải cung cấp các phương thức cho phép truy xuất

đến vector vị trí và quaternion quay của các khung hình trong chuỗi các khung hình
biến đổi. Chúng ta còn có thể thực hiện cập nhật lại trạ
ng thái cho khớp xương khi
biết khớp xương đang ở vào thờii điểm nào của diễn hoạt.
¾ Quản lý diễn hoạt cho toàn bộ khung xương:
Việc quản lý cho toàn bộ khung xương cần có một danh sách các lớp quản lý
cho một khớp xương. Trong lớp quản lý này ta cần quản lý các thông tin liên quan
đến diễn hoạt chung cho khung xương như: khoảng thời gian trôi qua từ khi diễn
hoạt từ khung hình thứ nhất, di
ễn hoạt có lặp đi lặp lại không, khoảng cách di
chuyển của khung xương kể từ lần cập nhật trước và tổng khoảng cách di chuyển
của khung xương trong toàn bộ diễn hoạt.
Khi cần cập nhật diễn hoạt cho toàn bộ khung xương ta sẽ thực hiện cập nhật
diễn hoạt cho từng khớp xương ở trong khung xương. Trong lớp này ta cần phải
cung cấp các phương th
ức cho phép hiệu chỉnh thay đổi diễn hoạt như về thời gian
diễn hoạt, khoảng cách trong diễn hoạt.
¾ Quản lý tất cả diễn hoạt cho khung xương:
Một khung xương có nhiều diễn hoạt, ta cần danh sách các đối tượng với mỗi
đối tượng quản lý cho một diễn hoạt. Thông thường tại một thời điểm ta có một








Chương 5. Hệ thống diễn hoạt (Animation System)
- 95 -

diễn hoạt được kích hoạt. Tại lớp này ta có thể thực hiện các chức năng nâng cao
như kết hợp các diễn hoạt vào một khung xương.
5.2.5. Kết hợp các diễn hoạt
5.2.5.1. Kết hợp các diễn hoạt khác nhau vào khung xương
¾ Giới thiệu:
Đây là khả năng cho phép ta kết hợp nhiều chuyển động riêng biệt lại thành 1
chuyển động kết hợp.
¾ Lý do xây dự
ng:
Đối với môt mô hình ví dụ như một nhân vật trong Game do nhiều yếu tố ràng
buộc như thời gian thực hiện và không gian lưu trữ nên ta chỉ xây dựng cho nhân
vật đó một số các diễn hoạt cơ bản mà thôi. Ví dụ như ta có một quái vật thì ta chỉ
có thể tạo cho chúng các diễn hoạt cơ bản như đứng, đi, chạy, tấn công, chết, lách
qua trái, lách qua phải. Nhưng trong Game đôi khi ta có nhu cầu nhân vậ
t thực hiện
các diễn hoạt phức tạp là sự kết hợp của nhiều diễn hoạt riêng rẽ ví dụ như nhân vật
vừa đi vừa bắn súng được kết hợp từ hai diễn hoạt riêng biệt là đi và bắn súng. Từ
nhu cầu như vậy Game Engine phải có chức năng cho phép người lập trình thực
hiện việc kết hợp các biến đổi này. Với chức năng kết hợp các diễn hoạt thì từ một
tập các diễn hoạt nhỏ ta có thể tạo ta một tổ hợp nhiều diễn hoạt khác nhau.
¾ Cách thức thực hiện:
Một chuyển động của khung xương đơn thuần chỉ là các ma trận biến đổi cho
các khớp của khung xương. Sự biến đổi gồm có sự dịch chuyển, sự quay và biến đổi
tỉ
lệ. Một xương thì chuyển động quay xung quanh một khớp, chỉ có khớp gốc là
chuyển động tương đối so với thế giới mà thôi.
Để tạo được sự kết hợp chuyển động thì ta sẽ tạo se sự kết hợp giữa các ma trận
khoá của nhiều chuyển động. Chú ý rằng ma trận kết hợp là không thể giao hoán
được có nghĩa là thứ tự kết hợp là quan trọng. Nế
u muốn nhân 2 sự biến đổi có sự









Chương 5. Hệ thống diễn hoạt (Animation System)
- 96 -
quay và chuyển dịch thì bạn phải kết thúc bằng một biến đổi cuối theo thứ tự: quay,
chuyển dịch, quay và cuối cùng là chuyển dịch.
Để thực hiện đúng thì chúng ta phải cộng các sự biến đổi thay vì nhân. Ví dụ
như có 2 biến đổi là quay và chuyển dịch cần phải kết hợp vào một chuyển động thì
việc cộng các biến đổi là hợp lý.
Tóm lại, khi thực hiện k
ết hợp các chuyển động ta cần biết các thông tin về tỉ lệ
kết hợp của các chuyển động vào chuyển động chung. Khi yêu cầu cập nhật lại diễn
hoạt ta sẽ tính toán ra các ma trận nội suy cho từng diễn hoạt tại thời điểm đó. Sau
khi đã có các ma trận nội suy của từng diễn hoạt ta sẽ thực hiện cộng tất cả ma trận
nội suy này lạ
i với tỉ lệ đóng góp vào chuyển động đã được biết.
5.2.5.2. Kết hợp các diễn hoạt trong các phần của khung xương
¾ Giới thiệu:
Đôi khi trong một hệ thống khung xương không chỉ có một chuyển động duy
nhất mà có nhiều chuyển động trong đó. Ví dụ như phần khung xương của một thân
thể, có thể phần dưới (bụng đến chân) thực hiện di
ễn hoạt chạy, phần thân trên (từ
bụng lên cổ) lại thực hiện diễn hoạt bắn súng. Như vậy giữa 2 phần thân trên và
thân dưới thực hiện 2 diễn hoạt khác nhau. Phần diễn hoạt phần thân dưới phải có

tác động nhất định lên phần thân trên và ngược lại. Nếu như chúng ta không thực
hiện kết hợp hay điều hòa diễn hoạt tại bụng (nơi giao nhau giữa 2 diễ
n hoạt) thì
nhân vật sẽ chuyển động rất không tự nhiên. Kết hợp diễn hoạt trong các phần
khung xương chính là kết hợp các diễn hoạt khác nhau trong một khung xương để
tạo ra hiệu ứng tự nhiên.
¾ Lý do xây dựng:
Việc xây dựng chức năng phối hợp diễn hoạt giữa các thành phần trong cùng
khung xương sẽ giải cho phép ta thực hiện nhiều diễn hoạt cho các phần trong cùng
khung xương mà v
ẫn đảm bảo tính tự nhiên.








Chương 5. Hệ thống diễn hoạt (Animation System)
- 97 -
Việc xây dựng này còn giúp ta tiếc kiệm rất nhiều diễn hoạt vì ta có thể thực
hiện kết hợp các diễn hoạt ngay trong khung xương. Ví dụ như trong phần thân
nhân vật ta có thể tạo ra chuyển động bắn kết hợp với đi, chạy, nhảy cần 4 diễn
hoạt. Nếu ta không thực hiện kết hợp ta cần xây dựng thêm các diễn hoạt đi bắn,
chạy bắn, nhả
y bắn. Rõ ràng việc phối hợp các chuyển động giúp ta giảm nhẹ công
việc đi rất nhiều và tăng hiệu quả thực hiện lên rất cao.
¾ Cách thức thực hiện:
Để tiện minh họa cách thực hiện ta xét ví dụ cụ thể sau:

Ta có một khung xương là thân người với khớp đầu tiên (chỉ số là 0) là khớp 1b,
2 diễn hoạt là đi và bắn súng. Ta cần thực hiện kết h
ợp 2 chuyển động này vào 2
phần khác nhau trong cấu trúc khung xương. Phần từ hông trở xuống ta thực hiện
diễn hoạt đi, còn phần từ hông trở lên ta thực hiện diễn hoạt bắn. Hình khung xương
như sau:

Hình 5-6 Minh họa kết hợp chuyển động các phần trong khung xương
Trước hết ta sẽ chia phần khung xương thân này ra làm 2 kênh. Kênh thứ nhất từ
khớp 2a trở đi đến hết. Kênh thứ 2 từ khớp 1b đến khớp 1a. Ở đây một kênh là một








Chương 5. Hệ thống diễn hoạt (Animation System)
- 98 -
khái niệm ta đưa ra để quản lý việc kết hợp các diễn hoạt. Một kênh sẽ gồm 4 thông
số sau:
Khớp bắt đầu của kênh.
Khớp kết thúc của kênh. Chỉ số của khớp kết thúc phải lớn hơn hay bằng chỉ
số của khớp bắt đầu.
Chỉ số fade-in: chỉ ra số khớp xương bên trong kênh chịu ảnh hưởng bởi diễn
hoạt. Ví dụ nếu kênh thứ nhất có chỉ số fade-in = 2 thì có nghĩa rằng 2 khớp 2a và
khớp 3a sẽ bị ảnh hưởng khi ta thực hiện kết hợp diễn hoạt. Cụ thể 2 khớp 2a và
khớp tiếp theo 2a bị tác động của chuyển động bắn súng. Tỉ lệ ảnh hưởng của diễn
hoạt bắn súng lên khớp sẽ tăng dần theo chỉ số. Công thức để tính tỉ lệ ảnh hưởng

như sau:
fadeInWeight = 1 / (fadeIn + 1)
Tỉ lệ cho khớp có chỉ số i = fadeInWeight*(i-chỉ số khớp đầu của kênh+ 1)
Chỉ số fade-out: chỉ số này chỉ ra số khớp xương bên ngoài kênh kể từ kênh
cuối chịu ảnh hưởng bởi diễn hoạt. Ví dụ như ta thiết lập chỉ số fade-out của kênh
thứ 2 là 2 thì 2 khớp xương 2a và 3a sẽ bị tác động. Tỉ lệ tác động của diễn hoạt (cụ
thể là đi) sẽ giảm dần theo chiều tăng của chỉ số. Công thức
để tính tỉ lệ ảnh hưởng
như sau:
fadeOutWeight = 1 / (fadeOut + 1)
Tỉ lệ cho khớp có chỉ số i = 1-(fadeOutWeight*(i-chỉ số khớp cuối))
Để chuyển động được chính xác ta phải đảm bảo tổng tỉ lệ tác động lên khớp
xương phải bằng 1. Ví dụ với khớp xương 2a bị tác động của kênh một tỉ lệ là
1/(fade-in+1) = 1/3 thì tỉ lệ của kênh 2 tác động lên khớp 2a phải là 2/3. Để có thể
đạt được sự cân bằng như vậy thì chỉ số fade-in của kênh một phải bằng chỉ số fade-
out của kênh 2 và ngượ
c lại.








Chương 5. Hệ thống diễn hoạt (Animation System)
- 99 -
5.3. Hệ thống diễn hoạt trong thực thi
5.3.1. Sơ đồ lớp của hệ thống diễn hoạt


Hình 5-7 Sơ đồ lớp của hệ thống điễn hoạt
5.3.2. Chức năng các thành phần trong sơ đồ
Một đối tượng thuộc lớp Model sẽ cần thông tin liên quan đến diễn hoạt và
đường dẫn. Các chức năng hệ thống được chia ra 3 nhóm:
5.3.2.1. Hệ thống xử lý dữ liệu
Đây chính là thành phần xử lý dữ liệu về diễn hoạt được lưu trên tập tin định
dạng md5. Cụ thể các lớp như sau:
Lớp CMd5Data: Cung cấp các hàm đọc dữ liệu từ các tập tin vào trong các
cầu trúc dữ liệu định sẵn.
Lớp CMd5DataManager: Thực hiện quản lý việc đọc dữ liệu từ tập tin md5.
Nếu có yêu cầu truy xuất đến dữ liệu và dữ liệu chưa được đọc thì ta sẽ thực hiện
đọc dữ liệu lên, còn ngược lại ta chỉ cần trỏ đến và xử dụng dữ liệu trong đối tượng
CMd5Data đã có.
Mọi dữ liệu về diễn hoạt cần thiết thì các đối tượng khác phải truy xuất thông
qua hệ thống xử lý này.








Chương 5. Hệ thống diễn hoạt (Animation System)
- 100 -
5.3.2.2. Các lớp quản lý đường dẫn
Đây là các lớp thực hiện quản lý đường định hướng di chuyển cho nhân vật. Cụ
thể có các lớp sau:
Lớp CAnimPath: là lớp quản lý thông tin cho một đường trong lộ trình. Các
thông tin nó quản lý bao gồm điểm đầu, điểm cuối, và độ dài của lộ trình.

Lớp CAnimStraightPath: được kế thừa từ lớp CAnimPath để cài đặt cụ thể
cách tính tọa độ và vector pháp tuyến cho nhân vật trên đường thẳng khi biết nhân
vật cách điểm xuất phát một khoảng cách nào đó.
Lớp CAnimCurvedPath: được kế thừa từ lớp CAnimPath để cài đặt cụ thể
cách tính tọa độ và vector pháp tuyến cho nhân vật trên đường còng Bezier khi biết
nhân vật cách điểm xuất phát một khoảng cách nào đó.
Lớp CAnimRoute: lớp này quản lý thông tin cho một lộ trình. Một lộ trình là
sự kết hợp nhiều đường lại với nhau. Lớp này sẽ tính toán vị trí và vector pháp
tuyến cho đối tương khi biết khoảng cách từ đối tượng đến điểm xuất phát trên lộ
trình.
Lớp CAnimRouteController: Quản lý thông tin tất cả lộ trình cho nhân vật.
Trong một thời điểm chỉ có nhiều nhất một lộ trình được sử dụng.
5.3.2.3. Các lớp quản lý diễn hoạt
Các lớp này là cài đặt cụ thể của các lớp quản lý diễn hoạt đã trình bày trong
phần trước.
Lớp CTransformNode: Lớp này định nghĩa một đối tượng lưu các thông tin
biến đổi. Các thông tin của lớp quản lý bao gồm vị trí và góc quay của một đối
tượng trong mối tương quan với đối tượng cha và với thế giới.
Lớp CHierarchy: Quản lý cấu trúc khung xương của nhân vật. Mỗi một khớp
trong khung xương là một đối tượng thuộc lớp được kế thừa từ lớp
CTransformNode.








Chương 5. Hệ thống diễn hoạt (Animation System)

- 101 -
Lớp CAnimation: Quản lý thông tin và thực hiện diễn hoạt cho một khớp của
cấu trúc khung xương. Lớp này sẽ chịu trách nhiệm cập nhật lại vị trí và góc quay
cho khớp xương trong diễn hoạt.
Lớp CAnimationSet: Quản lý thông tin và thực hiện diễn hoạt cho tất cả các
khớp trong khung xương. Thật sự lớp này sẽ bao gồm tập các đối tượng thuộc lớp
CAnimation. Lớp này phải quản lý được thông tin chung cho một diễn hoạt.
Lớp CAnimationController: Đây là lớp bao bọc quản lý tất cả thông tin diễn
hoạt cho một đối tượng. Trong lớp này ta thực hiện khởi tạo dữ liệu, chọn diễn hoạt,
phân thành các kênh diễn hoạt, thực hiện và hiệu chỉnh thông tin diễn hoạt, và phối
hợp các diễn hoạt khác nhau trên cùng một đối tượng.
5.4. Tóm tắt
Hệ thống diễn hoạt là một thành phần hết sức quan trọng trong vi
ệc xây dựng
Game. Dựa trên đặc điểm và yêu cầu của một hệ thống diễn hoạt và việc tham khảo
nhiều Game Engine như Half-live, Cal3D và NeoEngine, chúng tôi đã phân tích,
thiết kế và xây dựng lên một hệ thống đảm bảo được tốc độ, tính trong sáng dễ sử
dụng, khả năng mở rộng cao, và cung cấp ra các chức năng nâng cao cho phép giải
quyết được những tình huống diễn hoạt trong Game.








Chương 6. Hệ thống vật lý (Physics System)
- 102 -
Chương 6 Hệ thống vật lý (Physics System)

 Giới thiệu hệ thống vật lý
 Các yếu tố cần xử lý trong hệ thống vật lý

 Engine vật lý NovodeX

 Sử dụng NovodeX

 Tóm tắt









Chương 6. Hệ thống vật lý (Physics System)
- 103 -
6.1. Giới thiệu hệ thống vật lý
Hiện nay đòi hỏi của người chơi về chất lượng Game rất cao. Bên cạnh Game
phải có hình ảnh đẹp, nội dung hay còn yêu cầu phải chân thực, gần với thực tế bên
ngoài. Để cho Game mô phỏng được các tình huống xảy ra trong thực tế thì phải
xây dựng một hệ thống quản lý các tương tác vật lý.
Có thể nói rằng tương lai của Game chính là vật lý. Game s
ẽ trở nên rất thật khi
xử lý tốt được những hiệu ứng theo quy luật vật lý như va chạm, nổ, chuyển động
của các vật trong cảnh Game, nhân vật di chuyển và tương tác với các yếu tố trong
môi trường, và các hiệu ứng đặc biệt như mô phỏng quần áo, tóc bay trong gió.
Tóm lại, hệ thống vật lý giúp chúng ta có thể xử lý cách các đối tượng di

chuyển, cách chúng ứng xử trong môi trường với từng tình hu
ống cụ thể, và cách
chúng tương tác với nhau. Nhờ hệ thống vật lý mà Game của chúng ta sẽ sinh động,
tự nhiên.
6.2. Các yếu tố cần xử lý trong hệ thống vật lý
¾ Các thuộc tính của vật liệu
Các thuộc tính của vật liệu chính là các đặc trưng vật lý về vật chất như trọng
lượng, ma sát, đàn hồi. Chúng ta có thể tạo ra các mặt phẳng trơn khiến cho nhân
vật có khó di chuy
ển được, các vật được làm bằng chất liệu gỗ với các chỗ nối có
thể gẫy được khi có lực va chạm lớn, các bề mặt đàn hồi như cao su, các bề mặt
bằng kim loại có thể uốn cong được khi tác động lực, và có thể tạo được các tảng đá
có thể vỡ vụn khi bị tác động lực mạnh.
¾ Các đối tượng bao bọc động và phát hiệ
n va chạm
Các đối tượng bao bọc giúp chúng ta bao các đối tượng trong Game để thực hiện
các hiệu ứng vật lý lên đối tượng đó và phát sinh ra các sự kiện tương ứng khi các
va chạm xảy ra giúp chúng ta có thể đưa ra các cách thức xử lý tương ứng. Để thực
hiện được sự mô phỏng vật lý như vậy chúng ta phải dựa vào các định luật vật lý cổ
điển trong đó quan nhất là các định luậ
t Newton. Các định luật vật lý này giúp








Chương 6. Hệ thống vật lý (Physics System)

- 104 -
chúng ta có thể tạo được các va chạm tự nhiên và nhiều hiệu ứng đẹp mắt ví dụ như
sự rung khi một đồng tiền rơi xuống sàn nhà, chiếc xe trượt theo quán tính khi
phanh, … Hầu hết các Engine vật lý xây dựng nên các hình bao bọc động như là
những yếu tố cốt lõi và xây dựng các yếu tố khác thông qua chúng.
¾ Các khớp và sự co giãn
Các khớp và các đặc tính co giãn dùng để mô hình hoá cho các cơ cấu phức tạp
như các máy móc, xe cộ, s
ự di chuyển của các nhân vật, cửa, đòn bẩy, và cung cấp
khả năng cho các nhân vật cầm và thao tác các đối tượng trong Game.
¾ Các chất lỏng và vô định hình
Bên cạnh việc mô phỏng các hiệu ứng như gợn sóng trên mặt hồ thì chúng ta
còn có thể tăng thêm hiệu ứng chất lỏng trong nhiều cảnh vật như dầu, các cột nước
bắn lên, lửa, các vũ khí bắn ra các chất vô định hình. Các chất lỏ
ng này có thể tương
tác với các vật động trong cảnh như bao quanh chúng chẳng hạn.
¾ Áo quần và hiệu ứng khác
Hệ thống vật lý có thể giúp mô phỏng chính xác, trung thực về áo quần như áo
choàng cho nhân vật. Hay hệ thống có thể cung cấp cho ta chức năng mô phỏng về
lửa, khói, sương mù. Tuy nhiên đây chỉ là một khía cạnh phụ có thể bỏ qua trong hệ
thống vật lý, ta có thể xây dựng hệ thố
ng Particle riêng để thực hiện cho các hiệu
ứng này.
6.3. Engine vật lý NovodeX
Hiện nay có rất nhiều Engine vật lý được tạo ra để kết hợp vào các 3D Engine
để tạo ra các Game. Một số Engine vật lý tốt có thể kể đến là Navok được dùng
trong Game Haff Life và NovodeX.
NovodeX là Engine vật lý của hãng AGEIA. Hiện nay (tháng 6 năm 2005)
NovodeX đang có phiên bản 2.2 và chưa được hoàn thiện. NovodeX là một Engine
vật lý rất mạnh và cung cấp miễn phí cho các hoạt động phi thương mại. Engine vật

lý này còn có kèm nhiều ví dụ
và tài liệu hướng dẫn cũng chính vì vậy chúng tôi








Chương 6. Hệ thống vật lý (Physics System)
- 105 -
chọn để nghiên cứu và ứng dụng kết hợp với Nwfc 3D Engine để xây dựng Game
ứng dụng.
Engine vật lý NovedeX cung cấp cho chúng ta một giải phát rất mạnh và hiệu
quả để kết hợp một hệ thống xử lý vật lý thời gian thực vào trong hệ thống Game
của chúng ta. NovodeX được thiết kế để dễ dàng kết hợp với các thành phần khác
trong một Game Engine. NovodeX có thể làm việc tốt trên nhiều API khác nhau
nh
ư Direct3D, OpenLG, NDL Gamebryo, Quake và OGRE. NovedeX còn thể thể
đuợc bao bọc bởi Unreal 3 của Engine Epic Game và Reality Engine của Artificial
Studio. Những kết quả đầu ra của NovodeX còn có thể cung cấp cho Discreet 3D
Studio Max, SoftImage XSI và các công cụ khác cho phép các nhà phát triển có thể
xem công việc của mình thực hiện trong những môi trường tương tự.
Để đễ dàng kết hợp với những công nghệ kèm theo, bản thân NovodeX cung cấp
một loạt các công cụ để tạo ra các hiệu ứng và môi trường động dựa trên vật lý.
Những công cụ đó bao gồm:
Rocket viewer để cài đặt và mô phỏng cho các cảnh vật lý.
Debug render cho phép chúng ta phân tích và chỉnh lại Game.
Bộ xử lý dữ liệu cho phép ta nạp dữ liệu vào nhanh chóng.

NovodeX được thiết kế hoạt động tối ưu trên trên chip AGEIA PhysX.
NovodeX là API duy nhất cho phép các nhà phát triển Game dùng phần cứng để gia
tăng các hiệu ứng vật lý trong Game dựa trên AGEIS PhysX chip, đây là đơn vị xử
lý vật lý (PPU – Physics Processing Unit) đầu tiên trên thế giới. NovodeX còn là
API đa tiểu trình đầu tiên và duy nhất hiện nay cho phép các nhà phát triển Game sử
dụng để tăng thêm khả năng xử lý trong Game của mình.
NovodeX cung c
ấp hệ thống hoàn hảo các đối tượng bao bọc động và hệ thống
phát hiện, xử lý va chạm tốt. NovodeX có thể thực thi trên nhiều môi trường khác
nhau như Microsoft Window XP, Mac OS X, PhysX PPU. Một điểm mạnh nữa của
NovodeX là nó cung cấp sẵn cho chúng ta các lớp dùng để điều khiển di chuyển các
nhân vật.








Chương 6. Hệ thống vật lý (Physics System)
- 106 -
¾ Các chức năng của NovodeX trong lúc thực thi chương trình gồm:
Hệ thống kiểm soát đụng độ cho mặt phẳng, hộp, khối cầu, đỉnh các vật thể,
mesh của môi trường, các điểm lõm của đối tượng.
Cho phép tạo ra các nhóm va chạm. Tức là chúng ta có thể nhóm 1 số đối
tượng thành một nhóm để tiện cho việc kiểm tra và xử lý va chạm giữa các đối
tượng này.
Cung cấp các loại khớp như Fixed (cố định), Revolute(bọc ở bên ngoài theo
một trục), Sperical (cầu), Prismatic (lăng trụ), và Six Degree of Freedom (6 bậc tự

do) (tham khảo thêm ở phần phụ lục) cùng với các phép chiếu, độ đàn hồi, qui định
giới hạn cho các khớp quay.
Các vật liệu cho các bề mặt với các hệ số ma sát động, ma sát tĩnh và độ đàn
hồi.
Cung cấp những hình trigger cho phép chúng ta có thể xử lý các sự kiện khi
có một vật bắt đầu va chạm, đi vào hay ra khỏi một vật thể nào đó.
Cung cấp tia chiếu từ một vật thể vào môi trường xung quanh. Nhờ tia chiếu
này chúng ta có thể xác định được khoảng cách cũng như tính chất của đối tượng có
cắt với tia chiếu và có thể có những ứng xử tương ứng. Đây cũng là cách chúng ta
có thể xây dựng những ứng xử thông minh đơn giản cho các đối tượng, ví dụ khi
con quái vật đến gần nhân vật một khoảng nào đó thì ta cho con quái vậ
t tấn công.
Cung cấp các lớp do người dùng định nghĩa với các hàm xử lý các sự kiện trả
về. Đây là những hàm rất quan trọng cho phép chúng ta có thể xử lý khi có va chạm
xảy ra. Ví dụ khi nhân vật di chuyển trong môi trường và va chạm một hộp thì sẽ có
sự kiện va chạm trả về, trong hàm xử lý va chạm ta có thể thiết lập lực tác động vào
cái hộp chẳng hạn.
Cung cấp một bộ điều khiển nhân vật dựa trên một chiếc hộp tạm. Khi di
chuyển nhân vật, chiếc hộp tạm này thực hiện di chuyển trước để xác định xem








Chương 6. Hệ thống vật lý (Physics System)
- 107 -
nhân vật sẽ phải di chuyển tiếp theo như thế nào để có thể áp dụng lên nhân vật cho

chính xác.
Thực hiện đồng bộ hoá hệ thống vật lý với một bộ xử lý đa tiểu trình.
Cho phép hiển thị chế độ Debug cho hệ thống toạ độ, các đối tượng có trong
cảnh, các điểm va chạm, các vector pháp tuyến, …
¾ Các công cụ phát triển kèm theo gồm có:
Xuất ra định dạng tập tin PML có thể sử dụng trong các phần mềm 3DS
Max, SoftImage, và Maya.
Cung cấp sẵn mã nguồn cho việc đưa các đối tượng trong định dạng tập tin
PML vào trong cảnh của NovodeX.
NovodeX Rocket, một ứng dụng riêng biệt cho phép ta nạp và mô phỏng một
cảnh với định dạng PML.
NovodeX FX, một môi trường kết hợp để mô phỏng các hiệu ứng nâng cao
trong các hệ thống quản lý Game hiện có.
6.4. Sử dụng NovodeX
6.4.1. Kết hợp NovodeX vào Game
NovodeX là một phần hoàn toàn độc lập, chức năng chính là chỉ quản lý về vật
lý và nó được xây dựng trên một thư viện toán học riêng. Do đó để có thể sử dụng
được các tính năng của NovodeX thì cần phải bao bọc nó lại để có thể sử d
ụng kết
hợp với các thành phần khác như hệ thống hiển thị, hệ thống diễn hoạt. Việc bao
bọc hệ thống vật lý còn giúp chúng ta có thể sử dụng nó một cách thống nhất với
các phần khác thông qua cùng một thư viện toán.
Tư tưởng chính để sử dụng hệ thống vật lý NovodeX là ta dùng các vật thể và
mesh do NovedeX cung cấp để bao bọc hay chứa các vật thể và nhân vật của Game.
Việc quản lý vật lý ta để cho hệ thống NovodeX thực hiện. Sau khi hệ thống
NovodeX thực hiện xong ta lấy vị trí và góc quay mới của các vật thể bao bọc của
NovodeX để cập nhật lại vị trí và góc quay tương ứng cho các vật thể và nhân vật
trong Game. Ví dụ như ta có một khối hộp trong màn Game, ta sẽ dùng một đối

×