Tài liệu
Hướng dẫn
Hướng dẫn NanoGeo: thêm cho nhiều đối tượng cùng lúc, chỉnh thiết lập NanoGeoMesh, kiểm tra khả năng tương thích, quản lý dữ liệu bake và dùng các chế độ visualization.
Nhiều đối tượng cùng lúc
NanoGeo Mesh Prefab
Bộ asset thường có hàng trăm prefab gồm nhiều phần. Thay vì thêm NanoGeoMesh vào từng phần bằng tay, hãy thêm component NanoGeo Mesh Prefab vào gốc của prefab, hoặc vào bất kỳ đối tượng cha nào trong scene.
NanoGeo Mesh Prefab gắn NanoGeoMesh cho mọi đối tượng con có MeshRenderer, kể cả những con bạn thêm sau. Nó bỏ qua các mức thấp của LOD Group, vì NanoGeoMesh ở LOD0 thay thế cả nhóm.
Cả một bộ asset
- Trong cửa sổ Project, chọn thư mục chứa các prefab, hoặc chọn chính các prefab.
- Bấm chuột phải và chọn NanoGeo > Add NanoGeo Mesh Prefab.
- Xác nhận. Các prefab được thay đổi và lưu lại. Prefab nằm trong prefab khác được xử lý trước.
NanoGeo > Remove NanoGeo Mesh Prefab gỡ mọi thứ ra. Hãy thử trên một thư mục nhỏ trước, vì nó lưu file prefab và không hoàn tác được bằng Ctrl+Z.
Inspector kiểm tra gì
Inspector của NanoGeo Mesh Prefab kiểm tra mọi phần và hiện cảnh báo kèm nút Fix Now cho từng loại vấn đề.
- Phần không hỗ trợ
- Material trong suốt, shader NanoGeo không chuyển đổi được, ô material trống và mesh làm từ đường hoặc điểm. Fix Now giữ các phần đó trên MeshRenderer và nhớ lựa chọn.
- Mesh không có Read/Write
- Fix Now bật Read/Write trong import settings của model.
- Phần dùng lightmap
- Các phần sẽ nhận lightmap đã bake. NanoGeo không vẽ đối tượng dùng lightmap. Fix Now chuyển chúng sang light probe.
- Batching Static
- Unity vẫn sẽ tạo mesh gộp cho chúng, gây tốn bộ nhớ. Fix Now bỏ cờ này.
Các phần được giữ trên MeshRenderer được liệt kê trong Kept as MeshRenderer, nơi Use NanoGeo đưa chúng trở lại. Tắt Auto Add để component không tự thêm NanoGeoMesh, và dùng Remove From Children để gỡ các component.
Bật và tắt NanoGeo
Trong Editor
Tools > NanoGeo > Disable NanoGeo khiến mọi đối tượng dùng lại MeshRenderer, và Tools > NanoGeo > Enable NanoGeo bật NanoGeo trở lại. Nút On/Off bên trái thanh NanoGeo trong Scene view cũng làm vậy. Không có gì bị gỡ khỏi đối tượng của bạn, nên bạn có thể chuyển qua lại để so sánh hình ảnh và khung hình.
Lựa chọn này được nhớ theo dự án trong Editor. Nó không ảnh hưởng đến bản build game.
Trong script
Đặt NanoGeoManager.enabled.
Thiết lập NanoGeoMesh
Inspector cũng hiện dữ liệu đã bake và, khi đối tượng không được NanoGeo vẽ, hiện lý do.
Error Threshold Pixels
Mặc định 1. Hình dạng đã đơn giản hoá được phép lệch khỏi mesh thật bao nhiêu pixel trên màn hình. 1 trông giống mesh đầy đủ. Giá trị cao hơn nhanh hơn, giá trị thấp hơn giữ nhiều chi tiết hơn khi zoom rất gần. Các giá trị từ 0,5 đến 2 là hợp lý.
Shadow Error Multiplier
Mặc định 3. Bóng có thể dùng hình dạng đơn giản hơn chính đối tượng, vì bóng vốn mềm. Giá trị cao hơn làm bóng rẻ hơn. Nếu tăng nhiều và thấy các vệt tự đổ bóng, hãy tăng shadow bias của đèn một chút.
Shadow Min Lod Level
Mặc định 0. Trên 0, bóng không bao giờ dùng chi tiết mịn hơn mức này. Phù hợp với đối tượng có bóng không cần chi tiết.
Cast Shadows
Tắt để đối tượng không đổ bóng.
Force Fallback
Luôn vẽ đối tượng này bằng MeshRenderer.
Cái gì dùng được và cái gì không
Hoạt động với
- Đối tượng tĩnh và chuyển động
- Nhiều bản sao của cùng một mesh
- Đối tượng lật gương (scale âm)
- Nhiều material trên một mesh
- Material HDRP Lit và URP Lit
- Material HDRP Shader Graph làm từ graph Lit
- Alpha clipping và material hai mặt
- Mọi loại đèn và bóng đổ của chúng, HDRP cached shadows và light layer
- Light probe, decal và SSAO
- Motion vector cho TAA và motion blur
- Nhấp chọn đối tượng trong Scene view (Unity 6000.3 trở lên)
Vẫn dùng MeshRenderer
Các đối tượng sau đơn giản là giữ MeshRenderer của chúng:
- Skinned mesh và blend shape
- Material trong suốt
- Tessellation và terrain
- URP Shader Graph và shader viết tay
- Đối tượng dùng lightmap đã bake
Alpha clipping
Lá cây, hàng rào và lưới chắn được NanoGeo vẽ, nhưng luôn bằng rasterizer GPU thông thường, và chúng không bao giờ che đối tượng phía sau, vì bạn nhìn xuyên qua các lỗ được. Các tấm lá mỏng có thể thưa đi một chút khi ở xa; hãy giảm Error Threshold Pixels của đối tượng đó nếu bạn thấy.
LOD Group
NanoGeo tạo mức chi tiết mượt của riêng nó, nên chỉ đặt NanoGeoMesh trên đối tượng LOD0. Khi nó vẽ, các mức LOD khác bị ẩn. Component NanoGeoMesh trên LOD1 trở xuống không làm gì cả, và Inspector của chúng cho biết điều đó.
Lightmap đã bake
Đối tượng có trong scene lúc bake ánh sáng sẽ dùng lightmap và ở lại MeshRenderer. Để chuyển nó sang NanoGeo, hãy đặt Receive Global Illumination trên MeshRenderer (hoặc trên prefab) thành Light Probes. NanoGeo nhận ngay. Hãy bake lại ánh sáng sau đó để phần còn lại của scene khớp.
HDRP Shader Graph
NanoGeo tạo phiên bản NanoGeo của shader trong graph ở Generated/Shaders và cập nhật khi bạn đổi graph. Lần đầu, đối tượng có thể biến mất một lúc trong khi shader biên dịch. Chuyển động đỉnh làm trong graph, như gió, hoạt động, nhưng chuyển động rất lớn có thể bị cắt ở mép màn hình.
Các chế độ vẽ của Scene view khác Shaded, như Wireframe, hiển thị các mesh gốc.
Dữ liệu đã bake
Lưu ở đâu
Dữ liệu bake được lưu trong Generated/Baked, mỗi mesh một file. Các đối tượng dùng cùng mesh dùng chung nó. Khi bạn đổi mesh, nó được bake lại vào lần dùng tiếp theo. Dữ liệu có dung lượng xấp xỉ bằng chính mesh.
Hãy giữ thư mục Generated trong version control. Bản build của bạn cần nó.
Các lệnh bake
Nút Bake trên thanh NanoGeo trong Scene view có ba lệnh. Các lệnh này cũng có trong Tools > NanoGeo. Khi đang bake, nút hiển thị số lượt bake đang chạy.
- Rebake Selected
- Bake lại các đối tượng đang chọn.
- Rebake All In Open Scenes
- Bake lại mọi thứ trong các scene đang mở.
- Delete Unused Baked Data
- Xoá các file mà không scene hay prefab nào còn dùng.
Xem NanoGeo làm gì
Mở cửa sổ
Mở Window > Analysis > NanoGeo Visualization, hoặc dùng dropdown trên thanh NanoGeo trong Scene view. Các công cụ tương tự có trong Window > Analysis > Rendering Debugger, cả trong Development build. Visualization chỉ hoạt động trong Editor và trong Development build.
Các chế độ visualization
- Overview
- Hiển thị tám chế độ cùng lúc xung quanh khung hình bình thường.
- Triangles, Clusters, Groups, Instances, Primitives, Material ID
- Cho mỗi tam giác, cluster, nhóm, đối tượng, mesh hoặc material một màu riêng.
- Hierarchy
- Tô màu theo mức chi tiết, từ xanh dương (chi tiết đầy đủ) đến tím (đơn giản nhất).
- Raster Mode
- Hiển thị phần được rasterize thông thường màu xanh dương và phần dùng software rasterizer màu cam.
- Overdraw
- Cho thấy mỗi pixel được vẽ bao nhiêu lần.
- NanoGeo Mask
- Hiển thị màu xanh lá cho mọi thứ NanoGeo vẽ. Màu đen nghĩa là NanoGeo không vẽ gì ở đó.
- Streaming
- Cho thấy mỗi phần đến từ trang dữ liệu nào.
- Shadow Clusters
- Cho thấy những gì được vẽ vào cascade bóng đầu tiên.
- Freeze culling
- Giữ nguyên phần được chọn hiện tại, để bạn bay quanh và nhìn nó từ bên ngoài.
Thống kê
Cửa sổ này cũng liệt kê bao nhiêu đối tượng dùng NanoGeo, đối tượng nào không và vì sao, bao nhiêu được vẽ và đang dùng bao nhiêu bộ nhớ. Tick Record GPU Timings để xem chi phí của từng bước.
Lớp phủ Statistics của Unity trong Game view không đếm những gì NanoGeo vẽ. Hãy dùng cửa sổ NanoGeo.
Scene demo
Mở một demo
Mở Samples/Demo/NanoGeoDemo_HDRP.unity hoặc Samples/Demo/NanoGeoDemo_URP.unity. Khi scene đang mở, nó chuyển dự án sang render pipeline tương ứng từ thư mục Settings, nên cả hai demo chạy được trong cùng một dự án. Sau đó, chạy Tools > NanoGeo > Restore Project Render Pipeline để chuyển về pipeline của bạn.
Điều khiển
Bấm Play và dùng các phím sau:
- W, A, S, D hoặc phím mũi tên
- Di chuyển. Q và E (hoặc Page Down và Page Up) đi xuống và lên, giữ chuột phải để nhìn quanh, giữ Shift để đi nhanh hơn.
- V và C
- Chuyển sang chế độ visualization kế tiếp và trước đó.
- F
- Đóng băng culling.
- O
- Bật tắt occlusion culling.
- R
- Bật tắt software rasterizer.
- H
- Ẩn chữ.
Các phím hoạt động với package Input System, với Input Manager cũ, và với cả hai.
Bake dùng thư viện meshoptimizer của Arseny Kapoulkine, theo giấy phép MIT. Thư viện chỉ chạy trong Editor và không nằm trong bản build game của bạn.