Khái niệm Render Pipeline trong Unity3D
Phuongne, Th3 17, 2020
Render Pipeline là cái gì?
Theo mình hiểu (một cách đơn giản), Render Pipeline là một nhóm các kỹ thuật mà Unity dùng để vẽ một hay nhiều objects lên màn hình sao cho đơn giản nhưng đẹp và tối ưu nhất có thể, các kỹ thuật có thể phân thành 3 loại chính theo thứ tự:
- Culling: chọn object nào để đưa lên màn hình (object quá xa, object không nằm trong vùng camera, object bị che…)
- Rendering Objects: vẽ objects lên.
- Post Processing: xử lý hình ảnh sau khi đã vẽ các vật thể lên bộ nhớ đệm, trước khi vẽ lên màn hình.
Culling
Bởi chi phí khi render nhiều objects không hề nhỏ nên để tối ưu, khi bắt đầu Render thì Culling là quá trình đầu tiên nhằm xác định và lọc các objects nào sẽ được vẽ, quá trình này sẽ trả về một list các gameObjects và lights (ánh sáng) hợp lệ để áp dụng vào Render pipeline. trong Unity có 2 loại Culling chính:
- Frustum Culling: tính toán chỉ render các vật thể nằm trong vùng từ Clipping Planes (Near – Far) của Unity, nằm ngoài 2 khoảng này thì sẽ bị cull (loại bỏ).
- Occlusion Culling: kỹ thuật cull các vật thể bị che khuất phía sau các vật thể khác.
Rendering Objects
Sau quá trình Culling, chúng ta đã có list các vật thể cần vẽ lên màn hình, điều tiếp theo chúng ta cần xác định đó là mục tiêu mà chúng ta vẽ lên có cấu hình như thế nào, phần cứng của máy, hệ điều hành, 2D hay 3D… để chọn các kỹ thuật render cũng như xử lý ảnh khác nhau.
Một số tiêu chuẩn:
- HDR (High Dynamic Range) hay LDR (Standard/ Low Dynamic Range)
- Linear hay Gamma Color Space
- MSAA hay Post-AA
- PBR Materials vs Simple Materials
- Có xài Lighting hay không, nếu sử dụng thì dùng kỹ thuật nào?
- Shadow?
- …
“Có giải thích các khái niệm này không?”
Các bạn có thể tham khảo ở Một số thuật ngữ về Graphic cho Game Developer
Đây chỉ là bài tổng quan nên mình sẽ giải thích chi tiết hơn về phần Rendering Objects trong Unity ở một bài viết khác về Scriptable Render Pipeline.
Nếu các bạn quan tâm cách CPU gửi dữ liệu tới GPU cũng như cách GPU render thì có thể đọc GPU vẽ lên màn hình như thế nào?.
Post-Processing
Khi các vật thể đã được render lên image trong bộ nhớ đệm (buffer) của Camera, trước khi ảnh này xuất hiện trên màn hình, chúng ta có thể sử dụng Post-Processing để áp dụng các bộ lọc và hiệu ứng cho ảnh.
Hiểu tương tự, Post-Processing cũng giống như việc chỉnh sửa ảnh ở trong điện thoại trước khi post lên Instagram hay Facebook vậy.
Bảng dưới mô tả một số Post-Processing trong Unity3D:
Effect | Mô tả |
---|---|
Anti-aliasing | Khử răng cưa nếu độ phân giải của màn hình thiết bị thấp |
Ambient Occlusion | Làm các vùng hố, trũng hay các nếp gấp trở nên tối hơn vì không nhận được ánh sáng không gian (realistic hơn) |
Bloom | Khử răng cưa nếu độ phân giải của màn hình thiết bị thấp |
Anti-aliasing | Tạo ánh sáng xung quanh viền của vật thể, tạo cảm giác chói hay ánh sáng quá mạnh. |
Chromatic Aberration | Mô phỏng hiệu ứng của camera khi 3 kênh màu red-green-blue của 1 pixel không thể kết hợp với nhau, (chỉ áp dụng quanh viền) |
Color Grading | Tăng sự chênh lệch sáng tối, hiệu chỉnh màu sắc và độ chói |
Deferred Fog | Tạo sương mù bằng cách phủ màu lên bức ảnh theo độ xa gần từ camera tới vật thể |
Depth of Field | Hiệu ứng xóa phông của camera |
Motion Blur | Làm mờ ảnh khi camera di chuyển nhanh, được sử dụng nhiều trong game 3D |
Disclaimer
Bài viết được đăng vào 2020, chỉ có giá trị tham khảo các bạn nhé
Tạm kết và nguồn tham khảo
Nguồn tham khảo
All rights reserved