+1

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ự:

  1. 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…)
  2. Rendering Objects: vẽ objects lên.
  3. 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ỏ).

image.png

Loại bỏ các vật thể nằm ngoài vùng Render (Unity3D Documents)
  • 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.

image.png

Loại bỏ các vật thể bị che khuất (Unity3D Documents )

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.

image.png

Hiệu ứng Color Grading (phải) (Unity3D Documents )

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

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí