Tại sao khi người dùng di chuyển trong một Virtual Tour, hàng trăm vật thể như ánh sáng, bóng đổ, kết cấu bề mặt đều cập nhật đồng thời mà không bị giật lag? Câu trả lời nằm ở một cấu trúc kỹ thuật ít được nhắc tới nhưng hiện diện trong mọi ứng dụng không gian số: Scene Graph.
Hiểu Scene Graph là gì, cách hoạt động và được triển khai ra sao. Đọc ngay bài viết!
Scene Graph (Đồ thị cảnh) là dạng đồ thị biểu diễn cấu trúc dữ liệu phân cấp trong môi trường 3D, xác định mối quan hệ không gian và tối ưu hóa quá trình rendering thông qua các thao tác như loại bỏ đối tượng không cần thiết (culling) giúp hệ thống thị giác máy tính hiểu cấu trúc và ý nghĩa tổng thể, giảm thiểu tính toán cho ứng dụng thời gian thực.
Nói một cách dễ hiểu: Scene Graph là cách sắp xếp các đối tượng trong mô hình 3D theo dạng cây phân cấp, giống như thư mục trên máy tính. Một đối tượng cha có thể quản lý nhiều đối tượng con. Vì vậy, khi di chuyển, xoay hoặc thay đổi đối tượng cha, tất cả các đối tượng con cũng sẽ thay đổi theo, giúp thao tác với cả một nhóm đối tượng chỉ trong một lần thực hiện.

Scene Graph không chỉ là công cụ tổ chức dữ liệu. Trong các ứng dụng không gian số, đồ thị cảnh phục vụ ba mục đích cốt lõi:
Khi làm việc với nhiều đối tượng phức tạp, ví dụ như một chiếc xe với chassis, bánh xe và người lái, việc theo dõi vị trí tương đối của từng phần trở nên rất khó khăn nếu dùng phương pháp lưu trữ tuyến tính. Scene Graph giải quyết bài toán này bằng cách tổ chức theo phân cấp.
Trong một Virtual Tour bảo tàng, cấu trúc có thể là: Tòa nhà → Tầng 1 → Phòng trưng bày A → Tủ kính → Hiện vật. Khi "Phòng trưng bày A" được cập nhật vị trí, toàn bộ nội dung bên trong dịch chuyển đồng bộ không cần tính toán lại từng đối tượng con.
Scene Graph cho phép triển khai các kỹ thuật tối ưu quan trọng như view frustum culling, bỏ qua các đối tượng nằm ngoài tầm nhìn của camera; occlusion culling, bỏ qua các đối tượng bị che khuất; và level-of-detail management, điều chỉnh độ phức tạp của mô hình theo khoảng cách. Tất cả đều thiết yếu để duy trì hiệu năng trong ứng dụng thời gian thực.
Scene Graph lưu trữ thông tin về mối quan hệ không gian và ngữ nghĩa giữa các đối tượng trong cảnh được sử dụng rộng rãi trong computer vision, đồ họa và robotics để tổ chức các cảnh có nhiều đối tượng tương tác hoặc cấu trúc phức tạp.
Đồ thị cảnh (Scene Graph) hoạt động như một cấu trúc dạng cây.
Mỗi đối tượng cha có thể chứa nhiều đối tượng con. Khi thay đổi vị trí, xoay hoặc thay đổi kích thước của đối tượng cha, tất cả các đối tượng con sẽ tự động thay đổi theo. Nhờ đó, việc quản lý, di chuyển và tạo chuyển động cho cả một nhóm đối tượng trở nên nhanh chóng và nhất quán.
Bên cạnh việc sắp xếp các đối tượng, Scene Graph còn lưu trữ nhiều thông tin quan trọng như vật liệu, ánh sáng, thuộc tính hiển thị và các dữ liệu phục vụ mô phỏng vật lý. Đồng thời, hệ thống cũng tự động tối ưu quá trình hiển thị bằng cách chỉ xử lý những đối tượng mà người dùng có thể nhìn thấy, bỏ qua các đối tượng nằm ngoài góc nhìn hoặc bị che khuất, đồng thời giảm độ chi tiết của các mô hình ở xa. Điều này giúp cảnh 3D hiển thị mượt mà hơn, ngay cả khi có rất nhiều đối tượng.
Mỗi node có thể chứa nhiều loại dữ liệu khác nhau, chẳng hạn: vị trí, góc xoay, tỷ lệ, mô hình 3D, vật liệu và màu sắc, ánh sáng...
Trong Unity, đơn vị tổ chức cơ bản của Scene Graph là Gameobject. Chúng ta tạo node con và gắn vào Gameobject thông qua thuộc tính transform.parent. Một đối tượng lớn có thể chứa nhiều đối tượng con bên trong, giúp việc quản lý trở nên gọn gàng và dễ dàng hơn.
Ví dụ cấu trúc Scene Graph cho một phòng trưng bày trong Unity:
.Room (GameObject - node gốc)
.Lighting (Light component)
.ExhibitCase_01 (GameObject)
.Glass (MeshRenderer)
.Artifact_001 (MeshRenderer + Collider)
.InfoPanel (GameObject - UI)
.Camera_Hotspot (Camera trigger)
Khi toàn bộ phòng cần di chuyển hoặc scale, chỉ cần thao tác trên node Room, Unity tự động cập nhật toàn bộ hệ thống con.
Trong Three.js (Virtual Tour trên trình duyệt)
Trong Three.js toàn bộ không gian 3D được quản lý trong một cảnh (Scene). Bên trong cảnh này có thể thêm nhiều thành phần khác nhau như mô hình 3D, hệ thống ánh sáng và camera.
Mỗi đối tượng cũng có thể chứa nhiều đối tượng nhỏ bên trong, tạo thành cấu trúc cha - con. Nhờ đó, việc quản lý và thao tác với toàn bộ không gian trở nên đơn giản hơn.
Đối với các Virtual Tour có quy mô lớn, Three.js còn hỗ trợ chỉ tải những khu vực mà người dùng đang xem thay vì tải toàn bộ mô hình ngay từ đầu. Ví dụ, khi người dùng bước vào một phòng mới, hệ thống mới tải dữ liệu của phòng đó. Cách làm này giúp trang web mở nhanh hơn, giảm thời gian chờ và mang lại trải nghiệm mượt mà hơn, đặc biệt với các dự án có nhiều phòng hoặc mô hình 3D dung lượng lớn.
Bối cảnh bài toán: Một dự án số hóa bảo tàng có 5 tầng, 40 phòng trưng bày, hơn 2.000 hiện vật với texture độ phân giải cao. Nếu load toàn bộ ngay từ đầu, thời gian khởi động sẽ vượt 30 giây — mất người dùng trước khi họ kịp trải nghiệm.
Đội kỹ thuật tổ chức Scene Graph theo 3 tầng phân cấp rõ ràng:
Kỹ thuật Frustum Culling đảm bảo chỉ những phòng nằm trong tầm nhìn của camera được render. Người dùng đứng ở Phòng 1A không tốn tài nguyên GPU để render Phòng 4C ở phía ngược lại.
Kết quả: Thời gian load ban đầu giảm xuống dưới 4 giây. Frame rate duy trì ổn định ở 60 FPS trên thiết bị di động phổ thông. Bảo tàng có khả năng phục vụ hàng nghìn lượt tham quan đồng thời qua trình duyệt — không yêu cầu cài đặt phần mềm.
Nắm vững cách Scene Graph hoạt động và triển khai giúp đội ngũ kỹ thuật và nhà quản lý dự án đưa ra quyết định đúng về kiến trúc, hiệu năng và chi phí vận hành. Liên hệ VR360 để tìm hiểu cách chúng tôi thiết kế và tối ưu không gian số cho từng bài toán cụ thể của tổ chức bạn.