Hướng dẫn làm game VR với Unity (Phần 2)
Bài đăng này đã không được cập nhật trong 3 năm
Chào các bạn hôm nay mình tiếp tục hướng dẫn các bạn làm một game VR với Unity .
Để tiếp tục phần này nếu bạn nào chưa đọc bài trước của mình thì có thể xem ở đây : https://viblo.asia/ngocdu/posts/maGK7LEDZj2
Ok, bây giờ chúng ta bắt tay vào tạo một project nhé : Bước 1: bạn hãy tạo một project unity trống nhé , cái này chắc ai cũng biết rồi mình không hướng dẫn chi tiết nữa . Bước 2 : bạn hãy chắc chắn rằng project đang ở nền tảng PC, Mac & Linux Standalone , hãy vào build setting kiểm tra xem nhé
Bước 3 : ta sẽ tạo ra một khối hộp nằm ở phía trước camera như hình dưới đây
Bước 4 : lưu scene đó lại
Bước 5 : vào phần Edit > Project Settings > Player và bật chế độ VR lên "Virtual Reality Supported"
Bước 6 : play lên thử
Giờ đây, bạn có thể xem scene của mình thông qua DK2, với một camera được phản chiếu lên Game view. Nhìn xung quanh scene của bạn; camera trong Unity sẽ phản ánh những thay đổi về vị trí và góc nhìn của DK2.
Khắc phục sự cố: Nếu bạn không nhìn thấy scene thông qua DK2, các mẹo dưới đây có thể hữu ích:
Đảm bảo rằng DK2 đã được cắm và bật trước khi mở dự án Unity Cập nhật trình điều khiển Card đồ hoạ của bạn Đảm bảo bạn đã cài đặt Oculus Runtime 0.8 hoặc mới hơn. Để được hỗ trợ thêm với VR, vui lòng xem diễn đàn Unity VR.
Camera Nodes
camera mắt trái và phải không được tạo bởi Unity. Nếu bạn muốn có được vị trí của những nút, bạn phải sử dụng lớp InputTracking.
Nếu bạn muốn nhận được các vị trí cá nhân trong mắt của scene - có lẽ vì các lý do thử nghiệm - hãy sử dụng tập lệnh dưới đây và gắn nó vào camera của bạn.
using UnityEngine;
using UnityEngine.VR;
public class UpdateEyeAnchors : MonoBehaviour
{
GameObject[] eyes = new GameObject[2];
string[] eyeAnchorNames = { "LeftEyeAnchor", "RightEyeAnchor" };
void Update()
{
for (int i = 0; i < 2; ++i)
{
// If the eye anchor is no longer a child of us, don't use it
if (eyes[i] != null && eyes[i].transform.parent != transform)
{
eyes[i] = null;
}
// If we don't have an eye anchor, try to find one or create one
if (eyes[i] == null)
{
Transform t = transform.Find(eyeAnchorNames[i]);
if (t)
eyes[i] = t.gameObject;
if (eyes[i] == null)
{
eyes[i] = new GameObject(eyeAnchorNames[i]);
eyes[i].transform.parent = gameObject.transform;
}
}
// Update the eye transform
eyes[i].transform.localPosition = InputTracking.GetLocalPosition((VRNode)i);
eyes[i].transform.localRotation = InputTracking.GetLocalRotation((VRNode)i);
}
}
}
Hiệu ứng Hình ảnh trong VR
Nhiều hiệu ứng hình ảnh sẽ là quá nặng để sử dụng trong các dự án VR của bạn. Khi bạn vẽ cảnh hai lần - mỗi lần cho mỗi mắt - hầu hết các hiệu ứng hình ảnh đã có hiệu suất có thể trở nên quá tốn kém để sử dụng vì ảnh hưởng của chúng đến tốc độ khung hình.
Khi VR đại diện cho mắt của người dùng trong không gian ảo, một số hiệu ứng hình ảnh sẽ không có ý nghĩa trong VR. Chẳng hạn, độ sâu, blurs và thấu kính lồi thường không hợp lý, vì chúng không được nhìn thấy trong thực tế. Nếu VR HMDs cuối cùng hỗ trợ theo dõi mắt, độ sâu có thể có ý nghĩa.
Một số hiệu ứng có thể được sử dụng: Anti-Aliasing có thể hữu ích (đặc biệt với độ phân giải thấp so với thiết bị HMD), Color Grading chắc chắn có thể được sử dụng và Bloom có thể hoạt động trong một số trò chơi, do đó bạn nên thử nghiệm và xem liệu những hiệu ứng nhất định có thể sử dụng được trong trò chơi của bạn hay không.
Trong khi Unity cung cấp một số hiệu ứng hình ảnh thích hợp để giúp bạn bắt đầu (Assets > Import Package > Effects), Unity asset store cũng có nhiều hiệu ứng hình ảnh tuyệt vời, chẳng hạn như Colorful, Chromatica, Amplify Color và nhiều thứ khác.
Render scale
Dựa vào sự phức tạp của scene VR và phần cứng bạn đang chạy, bạn có thể muốn thay đổi scale render. Điều này kiểm soát tỷ lệ texel: pixel trước khi hiệu chỉnh ống kính, có nghĩa là chúng ta thực hiện thương mại cho độ sắc nét.
Điều này phải được đặt thông qua code, và được truy cập qua http://docs.unity3d.com/ScriptReference/VR.VRSettings-renderScale.html. Điều này có thể dễ dàng thay đổi bằng cách sử dụng script sau đây:
using UnityEngine;
using System.Collections;
using UnityEngine.VR;
namespace VRStandardAssets.Examples
{
public class ExampleRenderScale : MonoBehaviour
{
[SerializeField] private float m_RenderScale = 1f; //The render scale. Higher numbers = better quality, but trades performance
void Start ()
{
VRSettings.renderScale = m_RenderScale;
}
}
}
Ok hôm nay mình tạm dừng tại đây, hẹn gặp lại các bạn trong bài hướng dẫn tiếp theo .
All rights reserved