Tới đây, chúng ta đã có thể di chuyển và tránh va chạm. Nhưng quỹ đạo của các nhân vật lại không được trơn tru. Dường như có một sự dao động khi các nhân vật dần tiếp cận nhau. Mặc dù tránh được va chạm nhưng sự chuyển động không được tự nhiên. Đây là một trong những hạn chế của vật cản vận tốc. Hãy xem xét một nhân vật đi tới mục tiêu của nó với một vận tốc cụ thể. Khi nhân vật đó nhận ra vận tốc của nó nằm trong vật cản vận tốc tại một bước thời gian nhất định, nó sẽ chọn một vận tốc bên ngoài vật cản vận tốc. Bây giờ khi nó đã có vận tốc mà không có sự va chạm với chướng ngại vật, trong bước thời gian tiếp theo, nó sẽ chọn một vận tốc mà sẽ đưa nó đến mục tiêu và vận tốc này lại nằm trong vận cản vận tốc lúc trước và nó lại chọn một vận tốc nằm ngoài vận cản vận tốc đó và quá trình này tiếp tục xảy ra.
Để giải quyết vấn đề đó của vật cản vận tốc van den Berg và các cộng sự của mình đã nghiên cứu ra phương pháp sử dụng Vật cản vận tốc tương hỗ (Reciprocal Velocity Obstacle hay RVO). RVO được định nghĩa là trung bình vận tốc hiện tại của nhân vật và một vận tốc nằm bên trong VO (velocity obstacle) của chướng ngại vật. Nếu nhân vật chọn lại vận tốc trước đó, thì vận tốc này cũng sẽ rơi vào RVO và nhân vật sẽ không chọn vận tốc đó. Bằng cách này, sự dao động trong quỹ đạo sẽ không xảy ra nữa. Ta có định nghĩa của RVO như sau:
RV OAB(vB,vA) ={v′A|2v′A−vA∈V OAB(vB)}
Vật cản vận tốc tương hỗRV OAB(vB,vA)của nhân vật B đối với nhân vật A chứa tất cả các vận tốc cho nhân vật A mà những vận tốc này là trung bình của vận tốc hiện tạivAvà vận tốc bên trong vật cản vận tốcV OA
B(vB)của tác nhân B. Về mặt hình học nó có thể được biểu diễn bởi vật cản vận tốcV OAB(vB)được dịch chuyển sao cho đỉnh của nó nằm ởvA+vB
2 (xem hình 20).
Từ định nghĩa đó, RVO sẽ đảm bảo một số điều dưới đây:
• Di chuyển không có va chạm (Collision-Free Navigation): GọivAlà vận tốc hiện tại của nhân vật A và gọi vBlà vận tốc hiện tại của nhân vật B và cả A và B chọn các vận tốc mới (v′
Avàv′B) bên ngoài vật cản vận tốc tương hỗ của nhau. Định lý sau chứng minh rằng điều này sẽ làm hai nhân vật không va chạm với nhau, miễn là cả hai nhân vật chọn cùng phía để vượt qua nhau (dấu−→∈/ có thể được tự do thay thế bằng←∈−/):
v′A−→ / ∈RV OAB(vB,vA)∧v′B−→ / ∈RV OBA(vA,vB)⇒v′A−→ / ∈V OAB(v′B)∧v′B−→ / ∈V OBA(v′A) Chứng minh: v′A−→ / ∈RV OAB(vB,vA)∧v′B−→ / ∈RV OBA(vA,vB)
Từ định nghĩa của RVO và tính đối xứng của VO:
⇔2v′A−vA−→ /
∈V OAB(vB)∧vA−→ /
∈V OAB(2v′B−vB)
Từ tính bất biến khi dịch chuyển của VO:
⇔2v′A−vA−vB−→ /
∈V OAB(0)∧vA+vB−2v′B−→ /
∈V OAB(0)
Từ tính lồi của VO vớiα=1 2:
⇒v′A−v′B−→ /
∈V OAB(0)
Từ tính bất biến khi dịch chuyển và tính đối xứng của VO:
⇔v′A−→ /
∈V OAB(v′B)∧v′B−→ /
∈V OBA(v′A)
• Cùng phía (Same side): RVO có thể đảm bảo rằng cả hai nhân vật đều tự động chọn cùng một phía để vượt qua nhau nếu mỗi nhân vật chọn vận tốc bên ngoài vật cản vận tốc tương hỗ của nhau sau cho vận tốc đó gần nhất với vận tốc hiện tại của nó. Điều này được chứng minh bằng các dữ kiện sau: (1) Nếu đối với nhân vật A,vA+ulà vận tốc gần nhất vớivAnằm ngoài vật cản vận tốc tương hỗ của B, thì đối với nhân vật B,vB−u là vận tốc gầnvBnhất nằm ngoài vật cản vận tốc tương hỗ của A. (2) Nếu đối với nhân vật A, vận tốc gần nhất này ở bên phải (hoặc bên trái) của vật cản vận tốc tương hỗ của B, thì vận tốc gần nhất của tác nhân B là ở bên phải (hoặc bên trái) vật cản vận tốc tương hỗ của A. Những dữ kiện này đều tuân theo bổ đề sau (∈/ có thể được tự do thay thế bằng−→∈/,←∈−/ hoặc∈):
vA+u∈/RV OAB(vB,vA)⇔vB−u∈/RV OBA(vA,vB)
Chứng minh:
vA+u∈/RV OAB(vB,vA)
Từ định nghĩa của RVO:
Từ tính bất biến khi dịch chuyển và tính đối xứng của VO:
⇔2(vB−u)−vB∈/V OBA(vA)
Từ định nghĩa của RVO:
⇔vB−u∈/RV OBA(vA,vB)
• Quỹ đạo không có sự dao động (Oscillation-Free Navigation): Việc chọn vận tốc gần nhất bên ngoài vận cản vận tốc tương hỗ của nhân vật khác cũng đảm bảo không có sự dao động trên quỹ đạo. Điều này được chứng minh bởi định lý sau:
vA∈RV OAB(vB,vA)
Từ định nghĩa của RVO và tính bất biến khi dịch chuyển của VO:
⇔2vA−vA−vB∈V OAB(0)
⇔2vA−vA−vB−u+u∈V OAB(0)
Từ tính bất biến khi dịch chuyển của VO và định nghĩa của RVO:
⇔vA∈RV OAB(vB−u,vA+u)
Điều này có nghĩa là vận tốc cũvAcủa A sẽ nằm trong vật cản vận tốc tương hỗ mới của B, với vận tốc mới vA+uvàvB−utương ứng cho nhân vật A và B. Điều tương tự cũng đúng cho nhân vật B. Do đó, sau khi chọn vận tốc mới, vận tốc cũ không còn hợp lệ nữa và sẽ không được chọn (ngược lại với khi vật cản vận tốc được sử dụng). Bằng cách chọn vận tốc gần nhất ngoài vật cản vận tốc tương hỗ đối với cả A và B, các vật cản vận tốc tương hỗ vẫn nằm ở vị trí cũ. Do đó, các vận tốcvA+uvàvB−uvẫn là vận tốc gần nhất trong số tất cả các vận tốc hợp lệ. Kết quả là không có sự dao động nào xảy ra.
Hình 21: Quỹ đạo khi áp dụng VO (trái) và RVO (phải). Quỹ đạo khi áp dụng RVO mượt hơn và ít có những vị tríchuyển hướng đột ngột (Bonagiri, 2018). chuyển hướng đột ngột (Bonagiri, 2018).
4 Thiết kế mô hình nhận thức thị giác (visual perception) choNPC NPC
4.1 Nhận thức thị giác ở con người
Thị giác của con người là một chức năng quan trọng và không thể thiếu. Nó giúp chúng ta nhận biết được sự vật, sự việc xung quanh. Nói về thị giác của người sẽ có rất nhiều khía cạnh khác nhau, nhưng ở đây sẽ chỉ nói đến những đặc tính có thể sử dụng được trong mô hình.
Điều tất nhiên mà ai cũng biết đó là con người có 2 mắt, nhờ vào 2 mắt này mà con người có thể nhìn được trong phạm vi200◦. Mắt tập trung ánh sáng vào mặt sau của mắt, sử dụng các tế bào hình que và tế bào hình nón để phát hiện ánh sáng và màu sắc. Thị lực lớn nhất sẽ nằm ở vùng chính giữa phía trước và giảm dần khi cách rời xa trung tâm. Các tế bào hình nón tập trung dày đặc trong trung tâm võng mạc, nó chịu trách nhiệm phân biệt màu sắc tạo nên tầm nhìn trung tâm (central vision). Ngược lại các tế bào hình que cho phép nhìn sự vật trong điều kiện thiếu ánh sáng và nhận biết chuyển động tạo nên tầm nhìn ngoại vi (peripheral vision).
• Central Vision: là phần quan trọng nhất ở thị giác của con người. Nó cho phép con người có thể nhìn thấy hình dạng, màu sắc, và các chi tiết một cách rõ ràng và sắc nét.
• Peripheral Vision: là thị giác giúp con người có khả năng phát hiện chuyển động bên ngoài tầm nhìn trực tiếp. Nó chịu trách nhiệm việc phát hiện sự vật ở điều kiện ánh sáng yếu, hoặc ban đêm nhưng lại không nhạy cảm với màu sắc - ngược lại với tầm nhìn trực tiếp.
Central Vision sẽ được tập trung mô phỏng trong mô hình và Peripheral Vision sẽ không được mô phỏng. Vì để giảm tính phức tạp của mô hình và giảm sự nhập nhằng trong việc phát hiện người chơi của NPC. Tức là nếu mô phỏng Peripheral Vision thì NPC sẽ có thể phát hiện người chơi bằng những chuyển động nhỏ nhất kể cả khi NPC không thực sự nhìn thấy người chơi, điều này gây ra các trường hợp người chơi bị phát hiện nhưng không rõ lý do, tạo cảm giác thiếu công bằng cho người chơi. Ngoài ra, giác quan thứ sáu (khả năng cảm nhận có người sau lưng) cũng sẽ được mô phỏng để khắc phục hạn chế như đã đề cập ở phần 2.4.
4.2 Mô hình đề xuất cho nhận thức thị giác ở con người
Mô hình nhận thức thị giác được đề xuất nhằm giúp NPC có thể nhìn thấy các đối tượng. Mô hình sẽ định nghĩa cách làm thế nào để một NPC có thể nhận thấy được vật thể và người chơi (player), cũng như cải thiện những thiếu sót từ các mô hình truyền thống.
4.2.1 Mô hình thị giác cơ bản
Trước khi đi đến mô hình đề xuất, thì cần giới thiệu về mô hình thị giác cơ bản được sử dụng phần lớn trong các trò chơi ngày nay. Bao gồm ba phần chính đó là: "view distance", "view cone" và "line-of-sight".
Hình 22: Mô hình thị giác cơ bản (Rabin & Delp, 2008)
Ở mô hình này, người chơi được cho là bị NPC phát hiện khi thỏa mãn đủ 3 điều kiện đó là: 1. Vị trí của người chơi nhỏ hơn khoảng cách nhìn (view distance) của NPC.
2. Vị trí của người chơi nằm trong vùng nhìn nón (view cone).
3. Tồn tại một đường thẳng (line-of-sight) nối liền giữa người chơi và NPC mà không đi qua một vật cản nào. Kiểm tra đầu tiên là khoảng cách giữa người chơi và NPC sẽ tính toán như khoảng cách giữa hai điểm. Tuy nhiên, sẽ hiệu quả hơn nếu chúng ta chỉ so sánh khoảng cách bình phương thay vì khoảng cách thực để tránh tính toán căn. Ví dụ, nếu NPC có tầm nhìn là 10, chọn vị trí gốc tọa độ (0,0,0) và người chơi đang ở tọa độ (6,7,0). Việc kiểm tra chỉ đơn giản là so sánh giữa102=100và62+72+02=85. Do đó NPC có thể nhìn thấy được người chơi
(85<100).
D2=x2+y2+z2
Bước tiếp theo là kiểm tra vị trí trong vùng nhìn nón. Bằng cách thực hiện tích vô hướng giữa vector forward được chuẩn hóa và vector từ NPC đến người chơi được chuẩn hóa. Ta sẽ được giá trị cosin của góc giữa hai vector, từ đó so sánh với cosin của1/2tầm nhìn (fov), ví dụ ở đây làcos(120/2) =cos(60) =0.5. Nếu nó lớn hơn0.5, tức đã thỏa mãn điều kiện kiểm tra.
cosα= ~a.~b |~a| ∗ |~b|
Kiểm tra cuối cùng là kiểm tra về đường nhìn. Ta cần thực hiện một tia ray bắn từ vị trí mắt của NPC cho tới người chơi. Nếu giao với bất kỳ vật thể nào trước khi chạm đến người chơi, thì tức là không thể nhìn thấy người
chơi. Nhưng liệu thực sự là người chơi có bị phát hiện hay không, hay có vật thể nào phía trước người chơi hay không? Thì cần bắn nhiều tia ray vào các vị trí khác nhau ở người chơi, rồi dựa vào kết quả để đánh giá xem thực sự người chơi có bị phát hiện hay không.
4.2.2 Mô hình thị giác đề xuất
Mô hình thị giác cơ bản được đề cập bên trên thì không mô hình hóa tốt thị giác của con người. Điển hình, nó còn tồn tại một số nhược điểm như sau:
• Đối tượng có thể không phát hiện được vật thể dù cho có đứng ngay sát bên cạnh.
• Độ nhạy của thị lực là càng tăng nếu khoảng cách càng ngắn. Nhưng mô hình bên trên lại đánh giá như nhau ở mọi điểm trong vùng nhìn.
• NPC vẫn có thể nhìn thấy người chơi tùy thuộc vào vật cản tầm nhìn. Ví dụ như vật thể có chiều cao thấp hơn chiều cao nhân vật.
Mô hình của em, về cơ bản cũng dùng những biện pháp như mô hình thị giác cơ bản đã được đề cập vì mô hình này đã phản ánh được cơ bản những tính chất của Central Vision của thị giác của con người. Nhưng em sẽ có những biện pháp để giải quyết các vấn đề kể trên, em thêm một vùng nhìn xa và một vùng xung quanh NPC để mô phỏng giác quan thứ sáu nhằm cải thiện độ thực tế về thị giác của con người. Mô hình đề xuất bao gồm các thành phần như sau:
Hình 23: Mô hình thị giác đề xuất
• Clear Vision (Direct Vision): Đây là tầm nhìn trực tiếp, mọi vật trong vùng đều được xác định chính xác, rõ ràng, bất kể cao hay thấp hơn tầm mắt của NPC.
• Far Vision: Đây là tầm nhìn xa, tương ứng với việc vật thể cách nhân vật một khoảng cách nhất định từ đó dẫn đến việc khó thấy vật thể hơn. Tầm nhìn này chỉ phát hiện được các vật thể cao hơn tầm mắt nhân vật, còn các vật thấp hơn thì không.
• Sense: Đây là vùng cảm quan của con người (người có xu hướng nhận thấy được có ai đó đang đứng kế bên mình). Vùng này nhằm khắc phục trường hợp người chơi đứng cạnh mà NPC không phát hiện được, làm tăng cảm giác thực tế cho người chơi.
• Ngoài ra, các vùng nhìn này sẽ được liên tục xoay trái và phải để góp phần tránh tình trạng người chơi đứng cạnh mà NPC không phát hiện được và mô phỏng sự di chuyển mắt của NPC.
Một bổ sung thêm dành cho mô hình này, và đã cũng có đề cập ở phần trước. Đó chính là tầm nhìn của NPC sẽ như thế nào nếu có vật cản chắn ngang.
Hình 24: Tầm nhìn đi qua vật cản chắn ngang
• Đối với vật cản cao hơn tầm mắt NPC: Tầm nhìn của NPC sẽ bị hạn chế tối đa, tức là NPC không thể nhìn được bất cứ đối tượng nào sau những vật cản này như tường, nhà, ...
• Đối với vật cản thấp hơn tầm mắt NPC: Tầm nhìn của NPC cũng bị hạn chế. Nhưng với vùng nhìn sau vật cản này, NPC vẫn có khả năng phát hiện những đối tượng cao hơn tầm mắt NPC (cũng cao hơn vật cản đó), nhưng không nhìn thấy được những đối tượng thấp hơn tầm mắt NPC. Vùng nhìn này có tính chất giống với Far Vision như đã mô tả ở trên.
Ngoài ra, để mô phỏng sự không chắc chắn khi một NPC nhìn thấy người chơi, thì để một NPC thành công phát hiện người chơi thì sẽ mất một khoảng thời gian, khoảng cách càng xa NPC thì thời gian này càng lâu. Tức là, khi người chơi lọt vào tầm nhìn của NPC thì sẽ tiến hành đếm ngược, khi hết thời gian đó, thì NPC đã phát hiện người chơi và báo động.
5 Thiết kế mô hình nhận thức thính giác (auditory percep-tion) cho NPC tion) cho NPC
5.1 Nhận thức thính giác ở con người
Sự hiểu biết về nhận thức thính giác của con người là rất cần thiết để thiết kế được mô hình cho NPC. Vì vậy, phần này sẽ cung cấp những kiến thức tổng quan về các tính chất của âm thanh và thính giác của con người.
5.1.1 Sự suy giảm cường độ của âm thanh
Âm thanh lan truyền trong không gian dưới dạng sóng và sự suy giảm cường độ theo khoảng cách là một đặc tính cơ bản của âm thanh, một đặc tính mà hầu hết mọi người biết đến. Âm thanh trở nên nhỏ hơn (quieter) hoặc ít dữ dội hơn khi tăng khoảng cách. Sự suy giảm hoặc giảm cường độ âm thanh khi tăng khoảng cách giữa nguồn âm thanh và người nghe là điều cơ bản đối với nhận thức của chúng ta về khoảng cách. Âm thanh được tạo ra khi một vật thể rung động (chẳng hạn như dây âm thanh (vocal cords)) làm dao động môi trường truyền sóng (không khí). Môi trường truyền âm thanh mà chúng ta quen thuộc nhất là không khí, tuy nhiên, âm thanh cũng có thể lan truyền ở một mức độ nào đó thông qua nhiều loại vật chất khác nhau bao gồm chất khí, chất lỏng và chất rắn. Không khí xung quanh các vật đang dao động bị nén và giãn nở gây ra sự dao động của áp suất không khí. Sự dao động này làm cho không khí xung quanh cũng dao động theo. Nếu không có vật cản, một sóng năng lượng âm thanh sẽ phát ra với tốc độ âm thanh và có dạng gần giống hình cầu. Khi diện tích bề mặt của hình cầu đó càng tăng thì cường