Một Số Thuật Toán Chiếu Sáng Toàn Cục


Ở đây, có hai kỹ thuật, làm mờ theo chiểu ngang và làm mờ theo chiều dọc. Chúng ta làm mờ theo mỗi chiều độc lập với nhau (mỗi bóng đổ của pixel thêm vào giá trị điều chỉnh căn cứ vào độ lệch của giá trị trung bình. Ví dụ làm mờ theo chiều dọc thêm vào giá trị tính được từ 15 điểm láng giềng: SpriteBatch spriteBatch;

RenderTarget2D shadowBlurTarg; Effect shadowBlurEffect;

Những giá trị này có thể được tạo ra từ thủ tục:

spriteBatch = new SpriteBatch(GraphicsDevice); shadowBlurEffect = Content.Load("GaussianBlur"); shadowBlurTarg = new RenderTarget2D(GraphicsDevice, shadowMapSize, shadowMapSize, false, SurfaceFormat.Color, DepthFormat.Depth24);

Từ đó thủ tụclàm mờ:

void blurShadow(RenderTarget2D to, RenderTarget2D from, int dir)

{

// Set the target render target graphicsDevice.SetRenderTarget(to); graphicsDevice.Clear(Color.Black); spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque);

// Start the Gaussian blur effect shadowBlurEffect.CurrentTechnique.Passes[dir].Apply();

// Draw the contents of the source render target so they can

// be blurred by the gaussian blur pixel shader spriteBatch.Draw(from, Vector2.Zero, Color.White); spriteBatch.End();

// Clean up after the sprite batch graphicsDevice.BlendState = BlendState.Opaque; graphicsDevice.DepthStencilState = DepthStencilState.Default;

// Remove the render target graphicsDevice.SetRenderTarget(null); }


Việc điều chỉnh cuối cùng đối với lớp Prelightingrenderer, ta cần đảm bảo làm mờ được hàm Draw(). Trước hết copy từ ảnh nền đến ảnh bóng mờ theo chiều ngang sau đó theo chiều dọc:

public void Draw()

{

drawDepthNormalMap(); drawLightMap();

if (DoShadowMapping)

{

drawShadowDepthMap(); blurShadow(shadowBlurTarg, shadowDepthTarg, 0);

blurShadow(shadowDepthTarg, shadowBlurTarg, 1);

}

prepareMainPass(); }

2.5. Một số thuật toán chiếu sáng toàn cục

Như đã đề cập chiếu sáng toàn cục là chiếu sáng mà tại mỗi điểm giá trị cường độ sáng được tính dựa trên sự ảnh hưởng tổng hợp của các nguồn sáng trực tiếp và các nguồn sáng gián tiếp (ánh sáng phản xạ lại từ các điểm, đối tượng xung điểm điểm đang xét). Với hướng tiếp cận này độ phức tạp tính toán của các thuật toán thường là rất lớn do đó khó có khả năng ứng dụng trực tiếp vào công đoạn kết xuất ảnh cho các ứng dụng trưng bày ảo. Tuy nhiên chúng ta có thể sử dụng chúng để tính trước các bản đồ sáng. Các bản đồ sáng thu được bằng các thuật toán này, sau đó có thể ứng dụng trực tiếp vào trong quá trình tạo hình ảnh môi trường theo thời gian thực mà không phải tiến hành chiếu sáng lại. Việc ứng dụng bản đồ chiếu sáng trong trưng bày ảo một mặt làm tăng tốc độ kết xuất hình ảnh không gian trưng bày một mặt khác chất lượng chiếu sáng cũng được cải thiện có được điều này là vì các tính toán


chiếu sáng phức tạp đã được thực hiện trước ở bước tính bản đồ chiếu sáng. Ngoài ra bản đồ chiếu sáng có thể làm công cụ để đo lường cường độ sáng của không gian tại mọi điểm qua đó có thể đánh giá được hiệu quả của chiếu sáng toàn cục. Các kỹ thuật tạo hình dựa trên chiếu sáng toàn cục đã và đang được sử dụng phổ biến hiện nay có thể kêt đến như kỹ thuật Ray tracing, Radiosity, Photomapping v.v..

Ray tracing:

Ray tracing là một kỹ thuật tạo hình ảnh trong đồ họa 3D được đưa ra khá sớm bởi tác giả Appel A[4] vào năm 1968 cho đến ngày này đã có nhiều nghiên cứu nhằm cải tiến tốc độ cũng như chất lượng của của kỹ thuật này tuy nhiên tư tưởng cốt lõi của kỹ thuật là hầu như không thay đổi.


Hình 2 16 Minh họa quá trình sinh và dò tia của ray tracing Ý tưởng cơ bản của 1


Hình 2.16: Minh họa quá trình sinh và dò tia của ray tracing


Ý tưởng cơ bản của kỹ thuật này dựa trên việc dò tia ánh sáng đến được với các điểm trên màn chiếu. Nó thực hiện thông qua các bước cơ bản như sau: Từ điểm quan sát và mặt phẳng quan sát ta xây dựng một tập hợp các tia xuất phát từ điểm quan sát đi qua mỗi điểm trên mặt phẳng quan sát. Với mỗi


tia sinh được ta thực hiện quá trình dò tia bằng cách tìm điểm trên đa giác thuộc một đối tượng bất kỳ gần nhất trong không gian thế giới va chạm với tia cần dò, khi tìm thấy một điểm và chạm với tia cần dò tại điểm va chạm đó ta tiến hành việc tính toán ánh sáng tại điểm va chạm. Việc tính toán ánh sáng tại điểm va chạm được thực hiện bằng cách xây dựng các tia với điểm gốc là điểm va chạm và điểm ngọn là các điểm trên các nguồn sáng trong không gian nếu trên đường đi của các tia này không va chạm với bất kỳ điểm đối tượng nào khác trong không gian thì tiến hành tính toán ánh sáng cho điểm gốc theo các hiệu ứng đã được trình bày trong phần 3.1. Nếu dừng ở đây thì thuật toán này sẽ được gọi là thuật toán Ray casting là một thuật toán chiếu sáng cục bộ. Giá trị chiếu sáng tại điểm đầu tiên này là giá trị chiếu sáng trực tiếp. Tiếp tục trên điểm va chạm chúng ta tiến hành xây dựng các tia phản xạ và khúc xạ và sau thực hiện đệ quy quá trình dò ánh sáng cho các tia phản xạ, khúc xạ thụ được, giá trị chiếu sáng thu được trên các tia phản xạ và khúc xạ là giá trị chiếu sáng gián tiếp. Việc thực hiện đệ quy được dừng lại khi số bước lặp đệ quy vượt quá một ngưỡng hoặc hệ số ảnh hưởng của các giá trị sáng gián tiếp lên giá trị sáng trực tiếp ban đầu nhỏ hơn một ngưỡng cho trước. Giá trị ánh sáng tại một điểm sẽ được thông qua sự tổng hợp giá trị sáng trực tiếp và các giá trị sáng gián tiếp.

Ngày nay thuật toán này đã được các hãng sản xuất phần cứng xây dựng và tích hợp trong các thiết bị tăng tốc đồ họa của họ. Hình dưới đây là sơ đồ hoạt động của thuật toán Ray tracing được tích hợp trong một số thiết bị tăng tốc đồ họa của hãng Nvidia


Hình 2 17 Các bước xử lý trong giải thuật Ray tracing Bằng việc cứng hóa các 2


Hình 2.17. Các bước xử lý trong giải thuật Ray tracing

Bằng việc cứng hóa các bước thực hiện của kỹ thuật ray tracing trong các thiết bị tăng tốc đồ họa có sức mạnh tính toán hàng Gfs việc render thời gian thực bằng ray tracing đang dần khả thi hơn. Hình dưới đây là so sánh kết quả của cùng một cảnh với hai kỹ thuật chiếu sáng dựa trên scan line và chiếu sáng bằng ray tracing


Scan line Ray tracing Hình 2 18 So sanh giữa Scan line và ray tracing Photomapping Photon 3


Scan line

Ray tracing

Có thể bạn quan tâm!

Xem toàn bộ 81 trang tài liệu này.

Hình 2.18: So sanh giữa Scan line và ray tracing


Photomapping

Photon mapping là một thuật toán chiếu sáng toàn cục với các tiếp cận dựa trên việc mô phỏng lại đặc tính hạt của ánh sáng. Trái ngược với kỹ thuật ray tracing photon mapping sinh ra các tia đặc trưng cho các photon ánh sáng xuất phát từ nguồn sáng, các photon này chuyển động trong không không gian theo đường thẳng, khi gặp bề mặt đối tượng nó sẽ tương tác với bề mặt đối tượng, phản xạ, kết hợp, khúc xạ hấp thụ v.v.. sau đó bức xạ ngược lại môi


trường một tập các tia mới mang đặc tính của tia ban đầu kết hợp với các đặc tính của bề mặt. Ảnh cần dựng trong trường hợp này sẽ là một màn chắn ảo trong không gian sử dụng để đón nhưng tia tới được bề mặt của ảnh. Khi đó giá trị màu sắc của từng điểm trên màn chiếu là tổng hợp các giá trị của các tia đến được màn chiếu sau một khoảng thời gian nhất định. Dưới đây là một hình ảnh thử nghiệm của kỹ thuật photon mapping


Hình 2 19 Chiếu sáng bằng photon mapping Do cách tiếp cận của photon mapping là dựa 4

Hình 2.19: Chiếu sáng bằng photon mapping

Do cách tiếp cận của photon mapping là dựa trên mô phỏng là photon của ánh sáng nên nó có khả năng thể hiện được hầu hết các hiệu ứng của ánh sáng như phản xạ, khúc xạ thậm chí cả hiệu ứng thấu kính, lăng kính photon maping cũng có khả năng thể hiện được (đây là hai hiệu ứng mà ray tracing không có khả năng thể hiện được một cách trực tiếp). Tuy nhiên do xuất phát từ nguồn sáng có rất nhiều tia sáng không liên quan đến ảnh quan sát cũng


được tính toán vì vầy tốc độ thực hiện của thuật toán này là phức tạp hơn nhiều so với ray tracing.

Các kỹ raytracing và photon mapping là các kỹ thuật chiếu sáng toàn cục được ứng dụng phổ biến ngoài ra chúng còn nhiều kỹ thuật chiếu sáng toàn cục khác cũng được ứng dụng trong đồ họa 3D ví dụ như radiocity[9], hoặc các kỹ thuật dựa trên phương pháp tính toán Monte Carlo…

2.6. Kỹ thuật chiếu sáng cục bộ

Kỹ thuật chiếu sáng cục bộ là kỹ thuật chiếu sáng mà giá trị ánh sáng tại mỗi điểm chỉ ảnh hưởng trực tiếp bởi các nguồn sáng trực tiếp mà không chịu ảnh hưởng bởi các nguồn sáng gián tiếp. Các kỹ thuật chiếu sáng cục bộ có thể kể đến là ray casting và scan line. Trong đó kỹ thuật scan line là kỹ thuật được đưa ra và ứng dụng khá sớm, hiện nay đây là giải thuật được cứng hóa trong hầu hết các thiết bị tăng tốc đồ họa ngày nay.

Trong thực tế người ta hay sử dụng khái niệm Graphics pipeline khi đề cập đến trình thực hiện của kỹ thuật này. Các bước chính trong kỹ thuật được thể hiện thông qua hình 10 dưới đây. Trong đó quá trình Vertex processing là quá trình xử lý tại mỗi đỉnh trên từng đa giác đầu vào thông thường tại đây các điểm sẽ được chuyển đổi từ không gian địa phương của đối tượng về không gian địa phương của camera, cùng với đó các giá trị cường độ sáng, pháp tuyến trên từng điểm cũng được ước lượng cách tính giá trị cường độ sáng tại từng điểm cụ được thực hiện thông qua các mô hình chiếu sáng đã được đề cập trong phần 3.1. Bước thứ hai của giải thuật này chính là Rasterization tại bước này đầu vào là các điểm đã được chuyển đổi từ không gian địa phương của camera xang không gian quan sát thông qua một phép chiếu 3D v.v.. Tại đây các điểm trong đa giác sẽ được ánh xạ xang không gian ảnh sau đó thuật toán scand line được sử dụng để xử lý từng điểm trên ảnh dựa vào các tham số của từng đỉnh và vị trí tương đối của điểm đang xét so


với các đỉnh của đa giác đầu vào. Bước cuối cùng của quá trình này là kết hợp giá trị màu sắc của điểm đang xét với giá trị cũ để tạo ra giá trị màu sắc cuối cùng.


Hình 2 20 Các bước xử lý trong giải thuật Scan line Các mô hình thiết bị tăng 5

Hình 2.20 Các bước xử lý trong giải thuật Scan line.

Các mô hình thiết bị tăng tốc đồ họa hiện nay đều cho phép người lập trình thay lập trình từng bước trong một luồng xử lý cho trước. Do đó người tac có thể tùy biến các thành phần để tạo ra các hiệu đồ họa ứng mong muốn. Các ngôn ngữ lập trình cho các thiết bị này có thể kể đến như GLSL, CL, hay HLSL v.v..

Xem toàn bộ nội dung bài viết ᛨ

..... Xem trang tiếp theo?
⇦ Trang trước - Trang tiếp theo ⇨

Ngày đăng: 02/10/2023