Chương 1 - H-ANIM 1. Khái ni m H-anim Cùng với sự tăng trưởng của lĩnh vực ñồ họa 3D trong những thập kỷ vừa qua, nhiều phần mềm làm nhiệm vụ thiết kế mô hình 3D và kiến tạo các hoạt ñộng phỏng sinh học của các mô hình ñó ñã và ñang nổi lên hết sức ñáng chú ý. Một số hệ thống ñã ñược xây dựng nhằm mục ñích tự hiệu chỉnh những cử ñộng của mô hình người trong thế giới ảo. Vấn ñề khó khăn nẩy sinh trong quá trình sử dụng nhiều gói phần mềm và hệ thống dạng này là việc trao ñổi thông tin.
Thiếu một hệ thống khung chuẩn trong truyền thông thường bó buộc các nhà xây dựng animation và các studio hiệu chỉnh cử ñộng phải phát triển những giải pháp riêng mang tính ñộc quyền nhằm làm mịn các bước chuyển tiếp giữa hệ thống và phần mềm mà họ ñang dùng. ISO (International Standard Organization) ñịnh rõ khái niệm H-Anim, là một hình dung mang tính khái quát về việc mô hình hóa các hình nhân 3D. ISO cũng mô tả một cách thức chuẩn ñể biểu diễn các hình nhân này, theo ñó, cho phép dùng một công cụ (có thể của nhà cung cấp A) ñể xây dựng nên mô hình hình nhân 3 chiều, sau ñó lại dùng công cụ khác (có thể của nhà cung cấp B) ñể ñiểu khiển các cử ñộng của hình nhân này. Mục tiêu mà H-Anim hướng tới là: • Khả năng tương thích: Các ñặc tính của một hình nhân H-Anim sẽ phải ñược diễn ñạt thành công ở bất cứ bộ duyệt cơ bản nào.
• Tính mềm dẻo linh hoạt: Không có giới hạn trong vấn ñề quy ñịnh xem kiểu ứng dụng nào sẽ ñược phép dùng các hình nhân H-Anim. • Tính ñơn giản: Loại bỏ các hình nhân ra khỏi ứng dụng một cách dễ dàng khi không cần thiết hoặc bổ sung thêm hình nhân mới khi cần. Với 3 mục tiêu trên, cần phải ñịnh rõ các chi tiết kỹ thuật ñể có thể truy nhập vào biểu ñồ phân cấp các khớp trực tiếp của hình nhân cũng như các ñỉnh của khối hình học có z –4 nhiệm vụ cấu thành nên các ñoạn cơ thể một mô hình người theo một cách thức cho phép nhằm tạo nên các hình nhân có khả năng thực hiện các cử ñộng [15]. Các thành phn ca mt H-Anim ðối tượng H-Anim bao gồm 5 thành phần [29]: • Humanoid • Joint • Segment • Site • Displacer z –5 Hình 1: Các thành phần của một H-Anim z –6 1.
Humanoid Là gốc của mô hình H-Anim, ñối tượng này cho biết cơ chế gắn kết tất cả các thành phần của hình nhân. Cụ thể hơn, Humanoid là một container chứa ñựng các thành phần ñịnh nghĩa nên hệ khung xương, hình khối và các giới hạn của mô hình hình nhân H-Anim. Các thành phần này bao gồm các ñối tượng Joint, Segment, Site và Displacer, chúng ñịnh rõ phần lớn các chi tiết của mô hình hình nhân H- Anim. Ngoài ra nó còn mang thông tin về tác giả, bản quyền và những hạn chế thường gặp của mô hình.
Sau ñây là ví dụ mô tả lớp ñối tượng Humanoid dùng cú pháp của VRML V2. PROTO Humanoid [ exposedField SFVec3f center 000 exposedField MFNode humanoidBody [] exposedField MFString info [] exposedField MFNode joints [] exposedField SFString name "" exposedField SFRotation rotation 0010 exposedField SFVec3f scale 111 exposedField SFRotation scaleOrientation 0010 exposedField MFNode segments [] exposedField MFNode sites [] exposedField SFVec3f translation 000 exposedField SFString version "1.1" exposedField MFNode viewpoints [] field SFVec3f bboxCenter 000 field SFVec3f bboxSize -1 -1 -1 ] z –7 Lưu ý rằng “exposedField” là các trường mà scrip có thể truy nhập ñược ñể ñọc dữ liệu, còn “field” thì không. Joint Là ñối tượng mô tả khớp nối của mô hình H-Anim. Các ñối tượng Joint ñược tổ chức thành cấu trúc phân cấp mô tả mối liên hệ cha-con mang tính thừa kế của các khớp trong hệ khung xương.
Joint cũng chính là các container mang thông tin xác ñịnh tên và thuộc tính của mỗi khớp trong hệ khung xương. Ví dụ mô tả lớp ñối tượng Joint dùng cú pháp của VRML V2.0 utf8 như sau: PROTO Joint [ exposedField SFVec3f center 000 exposedField MFNode children [] exposedField SFRotation limitOrientation 0010 exposedField MFFloat llimit [] exposedField SFString name "" exposedField SFRotation rotation 0010 exposedField SFVec3f scale 111 exposedField SFRotation scaleOrientation 0010 exposedField MFFloat stiffness [1 1 1] exposedField SFVec3f translation 000 exposedField MFFloat ulimit [] ] 1. Segment Là ñối tượng mô tả các ñoạn chi của mô hình H-Anim. Về mặt vật lý, chúng là vật thể trung gian giữa các khớp xương.
Ví dụ cẳng tay nối giữa khớp cùi chỏ và khớp cổ tay, cẳng chân nối giữa khớp ñầu gối và khớp cổ chân. Ví dụ mô tả lớp ñối tượng Segment dùng cú pháp của VRML V2.0 utf8 như sau: z –8 PROTO Segment [ eventIn MFNode addChildren eventIn MFNode removeChildren exposedField SFVec3f centerOfMass 000 exposedField MFNode children [] exposedField SFNode coord NULL exposedField MFNode displacers [] exposedField SFString name "" exposedField SFFloat mass 0 exposedField SFVec3f momentsOfInertia 1 1 1 field SFVec3f bboxCenter 000 field SFVec3f bboxSize -1 -1 -1 ] 1. Site Mỗi Segment có thể có một số nút Site. ðối tượng này ñịnh nghĩa một số vị trí ñặc biệt có liên quan ñến Segment.
ðối tượng Site ñược sử dụng nhằm 3 mục ñích: • ðịnh nghĩa ñiểm kết nối cho các ñối tượng phụ như quần áo và trang sức. • ðịnh nghĩa vị trí cho camera ảo trong khung tham chiếu của một ñối tượng Segment. • ðịnh nghĩa vị trí “end-effector” dùng trong các hệ thống IK (inverse kinematic). [xem giải thích trong phụ lục 2] Ví dụ mô tả lớp ñối tượng Site dùng cú pháp của VRML V2.0 utf8 như sau: PROTO Site [ eventIn MFNode addChildren eventIn MFNode removeChildren z –9 exposedField SFVec3f center 000 exposedField MFNode children [] exposedField SFString name "" exposedField SFRotation rotation 0010 exposedField SFVec3f scale 111 exposedField SFRotation scaleOrientation 0 0 1 0 exposedField SFVec3f translation 000 ] 1.
Displacer Hình dạng của từng ñối tượng mạng lưới có thể biến ñổi tùy theo yêu cầu của ứng dụng. Ở mức cơ bản nhất, sự biến ñổi này chính là thao tác sửa ñổi dữ liệu lưu trong trường field của ñối tượng mạng lưới. Trong trường hợp các mô hình khớp nối (articulated avatar) thì ñối tượng mạng lưới thuộc ñối tượng Segment. Trong trường hợp các mô hình lưới không phẳng (deformable mesh avatar) thì ñối tượng mạng lưới ñược xác ñịnh trong trường skin của ñối tượng Humanoid.
Chi tiết này rất ñáng chú ý vì nó xác ñịnh các nhóm ñỉnh trong một mạng lưới. Ví dụ: trình ứng dụng có thể cần nhận biết những ñỉnh nào thuộc phần ñầu bao gồm cả lông mày bên trái. Các thông tin này ñược lưu trong nút Displacer. Dữ liệu lưu trong Displacer ñược coi như một “gợi ý chỉ dẫn” trong trường hợp ta cần dịch chuyển mỗi ñỉnh trong mạng lưới.
Với mô hình khớp nối thì ñối tượng Displacer ñược lưu trong trường displacer của ñối tượng Segment. Còn ñối với mô hình lưới không phẳng thì ñối tượng Displacer ñược lưu trong trường displacer của ñối tượng Joint. Các thông tin gọi là ñộ dịch chuyển (displacements) này, ñược xác ñịnh trong phạm vi của ñối tượng Joint và biến ñổi theo phạm vi của Humanoid. Sau ñó bộ render sẽ căn cứ vào chúng ñể áp vào mạng lưới khi render mô hình lưới thành mô hình 3 chiều thực sự.
z – 10 ðối tượng Displacer có 3 mức. Ở mức ñộ cơ bản nhất, nó ñơn giản chỉ dùng ñể nhận biết các ñỉnh tương ứng với một ñặc trưng ñặc biệt nào ñó trên mạng lưới. Ở mức hai, nó biểu thị một hoạt ñộng cơ bắp ñặc biệt nào ñó mà hoạt ñộng này lại biến ñổi các ñỉnh theo các hướng khác nhau. Ở mức ñộ thứ ba, Displacer biểu thị cấu hình hoàn chỉnh của các ñỉnh trong mạng lưới.
Ví dụ, trường hợp một mô hình 3 chiểu biểu thị khuôn mặt thì mỗi ñối tượng Displacer sẽ biểu thị gương mặt với một sắc thái nào ñó (vui, rất vui, buồn, rất buồn, cười mỉm, cười to, bất hạnh, giận dữ…). Mỗi ñối tượng Displacer xác ñịnh một sơ ñồ các vị trí gọi là “ñích hình vị” (morph target), nó ñược dùng ñể biến ñổi thuộc tính ñộ dịch chuyển của mô hình. Mức ñộ co dãn của ñộ dịch chuyển trong mỗi ñối tượng Displacer có thể ñược truyền như là một tham số từ bên ngoài. Các ñối tượng Displacer ñược sử dụng với mục ñích chủ yếu là ñiều khiển các hình thái của khuôn mặt, tuy nhiên ta cũng có thể sử dụng chúng cho các phần cơ thể khác nhau của hình nhân.
Ví dụ, dùng ñiều khiển việc cánh tay sẽ thay ñổi hình dáng như thế nào khi cánh tay gập lại, mô phỏng việc các bắp thịt sẽ căng lên ra sao… Ví dụ mô tả lớp ñối tượng Site dùng cú pháp của VRML V2.0 utf8 như sau: Displacer { coordIndex [ 7, 12, 24, 18 ] displacements [ 0 0.001 0 ] name “l_eyebrow_raiser_action” } 1. Cây phân cp khung x !ng Cũng giống như một cơ thể người, hình nhân 3D cũng có bộ khung xương. ðây là cơ sở ñể tiến hành mô phỏng các chuyển ñộng của hình nhân 3D. Khung xương trong một mô hình 3 chiều chính là tập hợp dạng cây của các ñối tượng Joint của mô hình ñó.
z – 11 Hình 2: Mô hình người và cây khung xương 1. Mức phân cấp (LOA - Level Of Articulation) Các mô hình H-Anim có thể cử ñộng ñược là nhờ thao tác biến ñổi thông số transform của các khớp, các thông số này ñược ghi trong ñối tượng Displacer. Tính chân thực trong chuyển ñộng của mô hình 3D phụ thuộc rất lớn vào số lượng các khớp và các ñoạn chi. Số lượng khớp và ñoạn chi càng nhiều, mô hình càng tinh vi và chuyển ñộng càng mềm mại, chân thực.
ISO quy ñịnh rằng một mô hình H-Anim phải có ít nhất là một Joint gốc có tên là HumanoidRoot. Tất nhiên, trong thực tế số lượng Joint luôn nhiều hơn một. Khái niệm mức phân cấp - LOA (Level Of Articulation) dùng ñể chỉ số lượng Joint ñược ñịnh nghĩa trong một mô hình hình nhân. Mô hình hình nhân có từ 14 Joint trở lên ñược gọi là “mức phân cấp thấp”, mô hình hình nhân có từ 72 Joint trở lên ñược gọi là “mức phân cấp cao”.
Mỗi cây phân cấp khung xương chỉ chứa duy nhất một ñối tượng Joint có tên HumanoidRoot, ñây là mức thấp nhất trong cây phân cấp. ISO quy ñịnh có tất cả 4 mức phân cấp. ðể dễ hình dung các bạn có thể xem các hình minh họa dưới ñây, chúng là kết quả của các file VRML v2.0 ñược coding theo từng LOA. z – 12 - LOA mức 0 chỉ hỗ trợ một ñối tượng Joint là HumanoidRoot.
Hình 3: LOA mức 0 - LOA mức 1 hỗ trợ cây phân cấp mức thấp.