CHƯƠNG 3: CHƯƠNG TRÌNH THỬ NGHIỆM
3.1. Giới thiệu bài toán
Trên cơ sở mục tiêu nghiên cứu đặt ra của luận văn, để đạt được mục tiêu đã đề ra, tác giả đã tập trung nghiên cứu khái quát về bài toán mô phỏng, lý thuyết liên quan tới mô phỏng nhân vật điều khiển chuyển động và đồng thời nghiên cứu một số cơ sở toán học, phương pháp, kỹ thuật mô phỏng nhân vật chuyển động theo chế độ điều khiển trong chương 2.
Chương này, tác giả sẽ tập trung nghiên cứu cài đặt đề mô thử nghiệm kỹ thuật điều khiển nhân vật chính là học viên Nguyễn Đức Nhân theo chế độ chủ động, điều khiển tương tác của nhân vật trong không gian môi trường thực tế ảo gồm các hàng cây, cỏ, hoa, đồi, núi, đá và sông nước… Điều này sẽ góp phần mô phỏng được giống thực tế hơn.
3.2. Lựa chọn nhân vật
Với mục tiêu là mô phỏng nhân vật chuyển động, dịch chuyển theo chế độ người dùng chủ động, tương tác. Tác giả chọn nhân vật chuyển động chính là mình.
58
Hình 3.1. Một số tư thế chuyển động của nhân vật
Trên đây là hình ảnh biểu hiện cho một số tư thế khác nhau của nhân vật, tùy thuộc vào những hành động, cử chỉ khác nhau của nhân vật là ở mức độ nào, thời điểm, khung cảnh nào thì sẽ có các tư thế, cử chỉ hành động khác nhau.
Trong luận văn này, báo cáo tập trung nghiên cứu đề mô thử nghiệm một số cử chỉ, tư thế cho nhân vật đơn gian, đó là đi lại, dịch chuyển thông thường. Vì vậy, tác giả chỉ tập trung vào trạng thái đi lại bình người của con người.
3.3. Mô tả đầu vào và đầu ra bài toán
Dựa vào các hình ảnh, thể hiện các tư thế khác nhau ứng với các hành động, cử chỉ của nhân vật. Nhóm tiến hành xây dựng thành mô hình 3D thể hiện nhân vật sử dụng công cụ Unity 3D như sau:
Xây dựng nhân vật, khung cảnh:
Tạo mô hình 3D nhân vật bản dựa trên những ý tưởng: dựng nhân vật 3D dựa trên các bản vẽ.
Khái quát về tấm plane được sử dụng xây dựng đầu người:
Khái niệm: Tấm plane là một bề mặt không có độ dài, độ rộng hoặc độ dày. Nó mở rộng vô hạn theo cả hai hướng và không có đỉnh hoặc cạnh.
Phương trình: Một tấm plane có thể được biểu diễn bằng phương trình phẳng. Phương trình của một tấm plane trong không gian ba chiều thường được viết dưới dạng ax + by + cz + d = 0, trong đó (a, b, c) là vector pháp tuyến của tấm plane và (x, y, z) là các biến độc lập trong không gian ba chiều. Hằng số d xác định vị trí của tấm plane trong không gian.
Tương tác với điểm và đường thẳng: Tấm plane tạo ra sự tương tác quan trọng với các điểm và đường thẳng trong không gian ba chiều. Một điểm nằm trên tấm plane thỏa mãn phương trình của nó, và một đường thẳng có thể giao tấm plane tại một điểm hoặc là song song với tấm plane nếu không giao tại điểm nào.
Ứng dụng: Tấm plane là một khái niệm quan trọng trong nhiều lĩnh vực của toán học, đặc biệt là hình học, đồ họa máy tính, và trong việc mô tả không gian trong lĩnh vực khoa học máy tính và kỹ thuật. Nó được sử dụng để mô phỏng bề mặt phẳng, như mặt đất trong các trò chơi video, mặt phẳng làm việc trong các ứng dụng CAD (Computer-Aided Design), và nhiều ứng dụng khác.
59
Bước 1: Xây dựng nhân vật là xây dựng đầu người:
Hình 3.2. Khởi tạo hình vào phần mềm trên tấm plane Bước 2: Đầu người sau khi dựng xong từ tấm plane
Sử dụng phần mềm Maya 3D, 3Ds max để chỉnh sửa mô hình:
Hình 3.3. Đầu người sau khi dựng xong từ tấm plane và tạo tai
Hình 3.4. Đầu người low poly sau khi đã hoàn thiện Tiếp theo, thiết kế mô hình cho từng bộ phận của nhân vật:
Hình 3.5. Tạo lưới khuỷu tay và khớp ngón tay
60
Hình 3.6. Tạo dựng mô hình chân, gối…
Tiếp theo, tạo dựng mô hình 3D thân nhân vật:
Hình 3.7. Tạo dựng thân nhân vật
Trải UV map cho áo của nhân vật:
61
Hình 3.8. Toàn cảnh nhân vật sau khi áp vật liệu 3.4. Phân tích bài toán
Trên cơ sở xác định và tạo dựng được mô hình 3D cho nhân vật, bài toán mô phỏng nhân vật dịch chuyển chủ động, điều khiển theo chế độ người dùng tương tác. Chúng ta cần xác định:
Đầu vào: Mô hình nhân vật 3D, dưới dạng lưới đa giác và kèm khung xương tương ứng được thiết lập đối với từng bộ phận trên cơ thể nhân vật.
Đầu ra: Chuyển động của mô hình nhân vật 3D theo khung xương.
Trong thực nghiệm này, mô phỏng được nhân vật chuyển động chính là học viên Nguyễn Đức Nhân và tạo diễn hoạt cho cánh tay của nhân vật, cần điều khiển chuyển động cánh tay của nhân vật một cách uyển chuyển giống thật.
Kỹ thuật điều khiển ngược IK ở đây sẽ được áp dụng để giải quyết việc tính toán các tham số về vị trí và hướng quay tại mỗi thời điểm cho từng thành phần của khung xương.
Sử dụng Open GL trong việc draw mô hình
Khởi tạo môi trường OpenGL: Trước khi bạn có thể sử dụng OpenGL, bạn cần khởi tạo môi trường OpenGL trên hệ thống của mình. Điều này thường được thực hiện bằng cách sử dụng một thư viện khác như GLFW, SDL hoặc GLUT để tạo cửa sổ đồ họa và quản lý các tài nguyên OpenGL.
Chuẩn bị mô hình 3D: Để vẽ một mô hình 3D, bạn cần chuẩn bị dữ liệu mô hình. Điều này bao gồm đọc dữ liệu mô hình từ các tệp 3D (như OBJ, FBX, hoặc glTF) hoặc tạo mô hình một cách programmatic bằng cách xác định các đỉnh (vertices), normal vectors, texture coordinates và các phần tử kết nối (indices) của mô hình.
Toạ cấu hình các đối tượng OpenGL: Bạn cần tạo các đối tượng OpenGL như vertex buffer objects (VBOs), vertex array objects (VAOs), và shader
62
programs để vẽ mô hình của bạn. Shader programs bao gồm vertex shader và fragment shader để xác định cách mô hình sẽ được hiển thị và ánh sáng.
Vẽ mô hình: Sau khi bạn đã chuẩn bị dữ liệu và cấu hình các đối tượng OpenGL, bạn có thể bắt đầu vẽ mô hình bằng cách sử dụng các cuộc gọi OpenGL để vẽ đỉnh, áp dụng shader programs, và thiết lập các thông số như chiếu sáng, camera, và màu sắc.
Vòng lặp vẽ và sử lý sự kiện: Trong một ứng dụng thực tế, bạn cần tạo một vòng lặp để liên tục vẽ mô hình và xử lý sự kiện người dùng như di chuyển camera, xoay mô hình, và thay đổi góc nhìn.
Dọn dẹp tài nguyên: Cuối cùng, sau khi bạn hoàn thành việc vẽ và sử dụng OpenGL, bạn cần giải phóng tài nguyên bằng cách xóa VBOs, VAOs, shader programs, và dọn dẹp bộ nhớ được cấp phát.
Xử lý va chạm:
Xử lý va chạm trong điều khiển nhân vật là một phần quan trọng của lập trình trò chơi và mô phỏng. Dưới đây là một số thuật toán cơ bản để xử lý va chạm giữa nhân vật và các vật thể trong trò chơi hoặc mô phỏng:
Phát hiện va chạm
Bounding Box (Hộp bao quang): Đây là phương pháp đơn giản nhất. Mỗi nhân vật và vật thể được đại diện bởi một hộp chứa (bounding box), và va chạm được xác định bằng cách kiểm tra xem hai hộp bao quanh có giao nhau hay không.
Boundinh sphere (Hình cầu bao quang): Mỗi đối tượng được bao bọc bởi một hình cầu, và va chạm được xác định bằng cách kiểm tra xem hai hình cầu có tiếp xúc hay không. Đây là một phương pháp nhanh hơn so với bounding box, nhưng không chính xác bằng bounding box.
Mesh collision (Va chạm mạng lưới): Đối với các mô hình 3D phức tạp, bạn có thể sử dụng va chạm dựa trên mạng lưới (mesh collision). Điều này liên quan đến việc xác định xem các mạng lưới đỉnh của nhân vật và vật thể có tiếp xúc hay không.
Xử lý va chạm
Phương ứng đơn giản: Khi va chạm xảy ra, bạn có thể đặt vị trí của nhân vật trở lại vị trí trước khi va chạm để tránh xâm nhập vào vật thể. Điều này thường được gọi là "phản ứng đơn giản" (simple response).
63
Giới thiệu ma sát và độ đàn hồi: Để làm cho va chạm trông tự nhiên hơn, bạn có thể giới thiệu ma sát và độ đàn hồi (bounciness). Khi va chạm xảy ra, nhân vật có thể bị chậm lại (do ma sát) và bật lại (do độ đàn hồi).
Kiểm tra va chạm liên tục: Đối với các trò chơi nhanh, phương pháp phát hiện và xử lý va chạm theo bước thời gian có thể không đủ chính xác. Trong trường hợp này, CCD được sử dụng để xác định va chạm trong khoảng thời gian nhỏ giữa các khung hình, để tránh xảy ra va chạm mà không phát hiện được.
Sử cụng collision layers (lớp va chạm): Trong một số trường hợp, bạn muốn kiểm soát việc xử lý va chạm giữa các đối tượng cụ thể. Sử dụng collision layers, bạn có thể xác định xem các đối tượng nên tương tác va chạm với nhau hay không.
Optimization (Tối ưu hoá): Xử lý va chạm có thể đòi hỏi nhiều tài nguyên tính toán, vì vậy tối ưu hóa là quan trọng. Sử dụng các cơ chế như cắt bỏ (culling) và phát hiện va chạm xấp xỉ (approximate collision detection) để giảm tải cho CPU.
Sự kiện va chạm (conllition Events): Để làm cho xử lý va chạm dễ dàng hơn, bạn có thể triển khai hệ thống sự kiện để xử lý các sự kiện va chạm cụ thể, ví dụ như khi nhân vật va chạm vào một vật thể nào đó.
Để đánh giá được mức độ thành công của thuật toán xử lý va chạm trong chương trình thử nghiệm ta dựa vào kiết quả của chương trình khi chạy thử, ta đã thấy nhân vật khi di chuyển gặp các chướng ngại vật đã không đi xuyên qua, khi bước lên tảng đá thì bàn chân và toàn thể cơ thể của nhân vật đã nằm trên tảng đá mà không bị chìm vào trong tảng đá. Các chuyển động của nhân vật mượt mà như ngoài đời thực.
3.5. Chương trình mô phỏng
3.5.1. Hướng dẫn cài đặt, sử dụng chương trình
Hệ thống mô phỏng thử nghiệm sự chuyển động cho đối tượng có xương, dịch chuyển theo chế độ người dùng chủ động, nhập vai điều sử dụng ngôn ngữ lập trình Visual C Sharp thư viện đồ hoạ Unity Engine 3D.
Với phần mềm mô phỏng đối tượng nhân vật chuyển động là con người, chính học viên: Nguyễn Đức Nhân, với mô hình nhân vật được thiết kế sử dụng công cụ phần mềm 3DS Max, Maya 3D, Unity 3D.
64
Chương trình phần mềm mô phỏng nhân vật chuyển động sử dụng ngôn ngữ lập trình Unity Engine 3D; Lập trình C Sharp.
Để chương trình có thể chạy được trên máy tính, yêu cầu hệ thống sau:
A. Cấu hình máy tính:
Các loại hệ điều hành windows
Cấu hình máy tính: RAM càng lớn càng tốt, tối thiểu phải là loại RAM 4 GB
B. Các bước cài đặt
Bước 1: Copy Thư mục Dilaichudong kèm file “Thamquanchudong”
vào một ổ đĩa trong máy tính
Bước 2: Chạy file “Thamquanchudong.exe”
Bước 3: Tương tác với hướng dẫn khai thác trên phần mềm.
Hình 3.9. Thư mục và file chạy chương trình mô phỏng 3.5.2. Kết quả thực nghiệm
Dưới đây là một số kết quả chạy chương trình mô phỏng nhân vật đối tượng là học viên Nguyễn Đức Nhân như sau:
65
Hình 3.9. Giao diện khởi tạo chương trình mô phỏng nhân vật “Nguyễn Đức Nhân”, nhân vật đứng im
Trong giao diện trên, nhân vật đứng im, không có chuyển động có bất cứ sự dịch chuyển hay tương tác nào.
Sau khi khởi động chương trình, người sử dụng có thể tương tác với:
- Không gian ảo, thế giới ảo bằng cách: sử dụng chuột và đưa chuột đi các góc khác nhau, đưa chuột sang trái, sang phải, đưa lên trên hay xuống dưới, xoay chuột thì đều làm cho không gian thay đổi và góc nhìn nhân vật cũng thay đổi.
Dưới đây là một số hình ảnh kết quả:
66
Hình 3.10. Tương tác điều khiển không gian ảo dựa vào chuột
- Điều khiển nhân vật ảo dịch chuyển, chuyển động như người thật trong không gian ảo bằng cách: sử dụng các chữ cái trên bàn phím để điều khiển nhân vật theo ý muốn người dùng. Cụ thể:
(1). Sử dụng các phím chữ cái để thay đổi hướng của nhân vật: đi thẳng sử dụng phím ‘S’; Xoay sang trái phím ‘D’; Xoay sang phải phím ‘A’; Xoay lại 1800 là phím ‘W’. Dưới đây là một số tương tác thay đổi hướng đi của nhân vật:
Hình 3.11. Tương tác điều khiển hướng của nhân vật sử dụng phím Ngoài ra, chương trình còn cài đặt lập trình sử dụng các phím mũi tên:
để điều khiển chuyển động của nhân vật theo các hướng khác nhau theo ý muốn của người sử dụng. Với mỗi phím mũi tên được cài đặt lập trình tích hợp với các ràng buộc cho từng bộ phận trên cơ thể nhân vật như đầu, cổ, chân, tay, cổ chân, cổ tay, hông… sao cho đảm bảo sự chuyển động đi lại của nhân vật được mềm dẻo giống người thật. Các cánh tay đưa ra phía trước, phí sau phải logic với các bước chân khi di chuyển tương ứng và biểu cảm khuôn mặt, biểu cảm trên cơ thể, sự co giãn của áo, quần giống như người thật. Dưới đây là một số điều khiển:
67
Hình 3.12. Tương tác điều khiển hướng của nhân vật sử dụng phím mũi tên Chương trình cho phép kết hợp điều khiển của 2 phím mũi tên để điều khiển hướng di chuyển của nhân vật cho đi đúng hướng theo ý người dùng.
Để tạo cho không gian thế giới ảo được chân thực giống như môi trường thế giới thực, chương trình thiết kế không gian ảo gồm nhiều đối tượng trong không gian như cỏ, hoa, đá, sông nước chuyển động, có gió thổi.
Điều khiển nhân vật di chuyển đi lại được được camera theo dõi và đưa ra các góc nhìn khác nhau, tạo ra sự chân thực đối với không gian ảo.
Xử lý va chạm để tạo cho nhân vật không bị đi xuyên qua các vận cản như cây. Hay leo lên đồi, núi cao thì nhân vật không bị chìm xuống mặt đất, đá mà chân vẫn phải thể hiện đi trên mặt đất.
68
Hình 3.13. Xử lý va chạm giữa nhân vật với các vật cản trong không gian Mô hình nhân vật trên được người dùng điều khiển chuyển động dịch chuyển đi đến các vị trí, khung cảnh khác nhau trong môi trường không gian ảo.
Với mỗi vị trí, khung cảnh khác nhau kèm các hiện vật, đối tượng trong không gian ảo như đất, đồi, đá, cây, cỏ, hoa, sông, ao hồ…
3.6. Nhận xét, đánh giá thử nghiệm chương trình
Trong luận văn này, tác giả sử dụng kỹ thuật tạo mô hình dựa vào công cụ phần mềm Maya 3D, 3Ds Max. Sau đó, sử dụng các kỹ thuật IK để lập trình điều khiển nhân vật di chuyển. Thực tế, khi con người chuyển đông, hầu hết cánh tay chuyển động từ trên vai, sau đó đến cùi chỏ, và sau cùng là cổ tay. Do đó, nếu sử dụng kỹ thuật FK thì sẽ gần giống với tự nhiên hơn. Tuy nhiên, nó có thể có chút phức tạp với IK – vì theo phương pháp này, cổ tay sẽ di chuyển đầu tiên, và phần còn lại của cánh tay sẽ di chuyển theo nó, sẽ khiến nó trông như cánh tay tự nó di chuyển. Nhiệm vụ của ta chính là làm nó có cảm giác như vai đang dẫn chuyển động, thậm chí khi ta đặt vị trí cho cổ tay trước tiên.
Khi hoạt động con người thì yêu cầu phải có sự gắn kết các phần của cơ thể. Khi con người di chuyển cột sống, đôi tay cũng sẽ di chuyển. Khi bạn giơ tay lên, cột sống cũng di chuyển luôn. Một lần nữa, điều này sẽ dễ đạt được với FK hơn. Nếu ta có cánh tay với FK và ta di chuyển cơ thể thì cả cánh tay (cả cổ tay) sẽ di chuyển theo, vì thế ta nhận thấy cánh tay đã được kết nối với toàn cơ thể. Với cánh tay IK, sự chuyển động của cột sống không tự động ảnh hưởng đến vị trí của cổ tay. Ta sẽ di chuyển cơ thể và cổ tay vẫn ở nguyên vị trí cũ. Vì thế, đôi khi ta có cảm giác như cánh tay (cổ tay) độc lập với cơ thể.
Nếu tạo chuyển động bằng kỹ thuật IK cho cánh tay, phải cố hết mình để truyền tải cảm giác rằng sự chuyển động được làm chủ bởi đôi vai, chứ không phải cánh tay làm chủ chính nó. Cơ bản, phải xử lý với IK, và chuyển động cổ tay, cùi chỏ y như cách di chuyển của một cánh tay thật. Ta sẽ cần xác định vị trí của cánh tay, đảm bảo sao cho sự di chuyển của cùi chỏ có thể truyền tải ý tưởng: