Kiến thức : Ambient Occlusion là gì ?

[ Bài viết này được đăng lần đầu tiên trên hiephoicgvn.com cách đây hơn 1 năm, bây giờ tôi port nó sang đây, nội dung có thể bị thay đổi chút ít ]

Ambient Occlusion ( AO ) nôm na là giá trị ảnh hưởng tới độ sáng hoặc tối trên bề mặt vật thể. Chính xác hơn, nó là giá trị được tính toán dựa trên sự “bị chặn kín bởi những vật xung quanh” của 1 điểm bất kì nào đó trên bề mặt vật thể ( nge khó hiểu nhẩy ). Để hình dung AO được thể hiện ra như thế nào, đơn giản nhất là đặt 1 quả bóng tròn nằm trên mặt đất fẳng trong 1 ngày trời âm u và ko nắng. Chúng ta sẽ thấy ở phía dưới, chỗ quả bóng tiếp xúc với mặt đất, và vùng xung qanh đó sẽ có bóng đổ mềm mại và rất mịn. Vậy thôi, AO nó cốt là tính toán và tái hiện lại 1 cách gần đúng nhất cái “bóng mềm” đó ( 1 dạng Global Illumination ) để tạo ra hình ảnh cuối chân thực nhất có thể.

AO thường được tính toán trong 2 nơi, 1 là khi dùng nguồn sáng SkyLight ( nguồn sáng bầu trời – chác các bác ở đây quá bik ròi ), 2 là trong các bộ shading AO ( Ambient Occlusion Shader ).
Quá trình tính toán này cơ bản là như sau:

Trong hình trên, ta sẽ chọn 1 điểm A trên mặt fẳng để render. Từ A ta “cast” ra 5 tia trong fạm vi 1 bán cầu, xung quanh cái Normal của face chứa điểm đó ( trong trường hợp này normal chính là đường thẳng vuôg góc với mặt fẳng chứa A ). Bây giờ hãy xem đường đi của 5 tia đó, ai cũng thấy là chỉ có 3 tia là được đi thẳng, còn 2 tia kia thì bị chặn lại bởi cái khối tròn, cái việc “chặn lại” này gọi là Occlude ( bịt kín ), và sự “chặn lại” được gọi là Occlusion ( sự bịt kín ). Ta sẽ có 1 tỉ lệ là 2/5, tươg ứng với Số tia bị bịt / Tổng số tia fát ra .

Tiếp tục với điểm B trên mặt fẳng, lặp lại quá trình trên, ta có tỉ lệ là 3/5.

Cứ thế, tiếp tục lặp lại với nhiều điểm nữa, ta sẽ có 1 dải các tỉ lệ, tươg ứng với 1 thang độ xám ( grayscale ) mà ta tháy ở hình trên. Số tỉ lệ càng gần 0 thì màu tươg ứng càng gần Đen, cũng như là điểm render càng ít bị Occlude hơn ( và xa típ xúc điểm giữa khối cầu và mặt fẳng hơn ).

Hình ảnh 3D của các giá trị AO trên bề mặt vật thể được thể hiện ở hình trên. Chú ý rằng đó mới chỉ là ảnh của các giá trị AO. Còn khi muốn sử dụng các giá trị này để tạo nên ảnh cuối cùng của vật thể, ta fải nhân nó với giá trị ánh sáng trên bề mặt vật thể. Quá trình này sẽ “âm cực” ảnh ở trên lại và tạo thành ảnh render cuối cùng của vật thể sau khi đã tính toán AO. Khi đó điểm nào bị “Bịt” nhiều hơn thì sẽ tối hơn.

Tóm lại quá trình tính toán cơ bản là như trên. Trên thực tế thì việc này rất fức tạp do fải tính toán trong môi trường 3D, với nhiều tia fát ra từ điểm render tới mọi hướng trong fạm vi 1 bán cầu.

Tùy vào engine render mà quá trình tính AO có thể khác nhau đôi chút. Khi dùng SkyLight thì sau khi tính xong, nó sẽ nhân luôn với giá trị ánh sáng bề mặt. Còn nếu dùng AO Shader, thì nó chỉ tính giá trị AO. Tuy nhiên trong AO Shader, có 1 thông số là “khoảng cách xa nhất” mà các tia fát ra có thể đến được, chỉ những vật thể trong khoảng này mới được xét xem có chặn những tia fát ra từ điểm render hay ko ( rất fù hợp khi dùng cho các cảnh indoor ). Trong quá trình tính AO của Skylight thì ko có thông số này.

Tùy vào môi trường render khác nhau mà các AO có thể được tạo ra =những cách khác nhau. Hay xuất hiện trong các Game Engine nhất là Ambient Occlusion Map – thể hiện giá trị của AO. Dùng AO Map sẽ giúp giảm nhẹ gánh nặng cho engine mà vẫn giữ được yêu cầu về độ chân thực của hình ảnh. Và tất nhiên là cũng có Realtime Render Engine tính toán AO trong thời gian thực, ko cần Map, mà điển hình là Mach Studio Pro

Chác bây giờ bạn đã hiểu tại sao người ta lại gọi là “Ambient Occlusion”. Ambient : bao quanh, Occlusion : chặn kín . Ambient Occlusion : sự bị chặn kín ánh sáng bởi các vật thể bao quanh.

© 2009 – duyyudus – VIZVA

Tổng hợp.

One Response to Kiến thức : Ambient Occlusion là gì ?

Leave a Reply

Your email address will not be published. Required fields are marked *

Tags

Archives

  • 2016 (4)
  • 2015 (22)
  • 2014 (39)
  • 2013 (59)
  • 2012 (134)
  • 2011 (240)