Tạo video 3D từ mô hình 3D sử dụng công nghệ tính toán hiệu năng cao trên các bộ xử lý đồ họa Tạo video 3D từ mô hình 3D sử dụng công nghệ tính toán hiệu năng cao trên các bộ xử lý đồ họa Tạo video 3D từ mô hình 3D sử dụng công nghệ tính toán hiệu năng cao trên các bộ xử lý đồ họa luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp luận văn tốt nghiệp,luận văn thạc sĩ, luận văn cao học, luận văn đại học, luận án tiến sĩ, đồ án tốt nghiệp
Trang 1Mẫu 1a MẪU BÌA LUẬN VĂN CÓ IN CHỮ NHŨ VÀNG Khổ 210 x 297 mm
LUẬN VĂN THẠC SĨ KHOA HỌC
CÔNG NGHỆ THÔNG TIN
Hà Nội – Năm 2011
Trang 2Mẫu 1b MẪU TRANG PHỤ BÌA LUẬN VĂN
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI
-
Dương Nhật Tân
TẠO VIDEO 3D TỪ MÔ HÌNH 3D SỬ DỤNG CÔNG NGHỆ TÍNH TOÁN
HIỆU NĂNG CAO TRÊN CÁC BỘ XỬ LÝ ĐỒ HỌA
Chuyên ngành : CÔNG NGHỆ THÔNG TIN
Trang 5L ỜI CAM ĐOAN
Tôi – Dương Nhật Tân – xin cam đoan
Luận văn tốt nghiệp Thạc sĩ này là công trình nghiên cứu của bản thân tôi dưới
sự hướng dẫn của TS Nguyễn Hữu Đức
Các kết quả trong Luận văn tốt nghiệp là trung thực, không phải là sao chép
toàn văn của bất kỳ công trình nào khác
Hà nội, ngày 11 tháng 11 năm 2011
Trang 6LỜI CẢM ƠN
Tôi xin được gửi lời cảm ơn sâu sắc nhất tới thầy giáo – Ti ến sĩ Nguyễn Hữu Đức –
giám đốc Trung tâm tính toán hiệu năng cao ĐHBKHN, người đã tận tình hướng dẫn
và theo dõi sát sao tôi trong quá trình thực hiện luận văn này Ngay từ những ngày đầu
chọn lựa đề tài cho luận văn, chính Thầy là người đã đưa ra ý tưởng, giúp tôi xác định bài toán và mục đích nghiên cứu Cùng với đó trong quá trình thực hiện luận văn này,
Thầy luôn đưa ra những nhận xét, lời khuyên định hướng có ích nhất để tôi có thể hoàn thành luận văn này
Tiếp theo, tôi xin được gửi lời cảm ơn chân thành tới Thầy giáo – Giáo sư, Tiến sĩ – Nguy ễn Thanh Thủy – Hiệu phó trường Đại học Công nghệ, ĐHQGN Thầy đã để lại
trong tôi rất nhiều điều đáng học hỏi khi Thầy còn là giám đốc Trung tâm tính toán
hiệu năng cao ĐHBKH Tôi đã học hỏi được từ Thầy rất nhiều, từ cách thức phương pháp làm khoa học, nghiên cứu cho tới mọi điều trong cuộc sống
Tôi cũng gửi lời cảm ơn tới các đồng nghiệp và các bạn trong nhóm nghiên cứu tính toán đa lõi MCG ở Trung tâm tính toán hiệu năng cao ĐHBKHN Có thể nói luận văn này có thể sẽ không được hoàn thành trọn vẹn nếu không có sự phối hợp và cộng tác
của các thành viên trong nhóm: KS Tr ịnh Quốc Việt, KS Nguyễn Hữu Dũng Cũng
xin được gửi lời cảm ơn tới các đồng nghiệp khác của tôi ở Trung tâm tính toán hiệu năng cao, tôi cũng học hỏi được từ mọi người rất nhiều điều và chính sự chan hòa, chia
sẻ của mọi người giúp cho tôi thực hiện luận văn tốt hơn
Trang 7DANH MỤC TỪ VIẾT TẮT, THUẬT NGỮ VÀ Ý NGHĨA
GPU Bộ xử lý đồ họa đa lõi GPGPU Công nghệ tính toán đa dụng trên các bộ
xử lý đồ họa BRDF Hàm hoặc giải thuật mô tả cách phản xạ
của ánh sáng lên một bề mặt JPEG Là loại tệp tin định dạng ảnh do Joint
Photographic Experts Group đặt ra CUDA Môi trường phát triển ứng dụng cho các
bộ xử lý đồ họa của hãng NVIDIA Rasterization Phương pháp kết xuất đồ họa được hỗ trợ
bởi các phần cứng chuyên biệt trên GPU Ray tracing Giải thuật kết xuất đồ họa tạo ra các bức
ảnh có độ chân thực cao AVI Định dạng tệp tin chứa đồng bộ cả âm
thanh và hình ảnh MJPEG Chuẩn nén video tín hiệu số
Trang 8DANH MỤC BẢNG
3
Bảng 1 Các lược đồ trộn màu biểu diễn ảnh nổiU 44 3
Bảng 2 - Thời gian chạy tính theo giây kết xuất mô hình chessboard.tri gồm khoảng
46 000 tam giác với độ phân giải 600*800 điểm ảnh trên CPU Pentium D 2.8 GHz và GPU Geforce GTX 295U 76 3
Bảng 3 - Hiệu năng tính theo số frames/giây của hai mô hình (độ phân giải 600*800 điểm ảnh , trên CPU Pentium D 2.8 GHz và GPU Geforce GTX 295)U 77
Trang 9Hình 8 Minh họa công thức tính cường độ sáng theo mô hình PhongU 29 3
Hình 9 Minh họa tia phản xạU 31 3
Hình 10 Minh họa tia khúc xạU 32 3
Hình 11 Các tia che bóng để thực hiện hiệu ứng che bóngU 33
3
Hình 12 Màn ảnh 2 chiềuU 34 3
Hình 13 Minh họa camera pinholeU 36 3
Hình 14 Định nghĩa 1 tia trong hệ tọa độ worldU 38
3
Hình 15 Hình ảnh 2 chiều minh họa tìm giao điểm tia – hộp Bên trái, tURU near URU> tURU far URU nên tia không cắt hộp Bên phải, tURU near URU< tURU far URU nên tia cắt hộp.U 403
Hình 16 Chiếu đa giác lên mặt phẳng 2 chiềuU 423
Hình 17 Kiểm tra điểm nằm trong đa giác Số đoạn thẳng bị cắt là lẻ (3) nên điểm nằm trong đa giácU 43
3
Hình 18 Quan sát ảnh qua kính lọc màuU 45 3
Hình 19 Ảnh trái woods.left.bmpU 46 3
Hình 20 Ảnh phải woods.right.bmpU 473
Hình 21 Ảnh kết hợp theo công thức anaglyph red/cyanU 48 3
Hình 22 Số phép tính dấu phẩy động trên giây CPU và GPUU 49 3
Hình 2-22 GPU dành nhiều transistor hơn CPU để xử lý dữ liệuU 50 Hình 24 Mô hình lập trình và kiến trúc trên GPU Geforce 8800 của NVIDIA 51
Trang 11CHƯƠNG 1 MỞ ĐẦU
1.1 Lý do ch ọn đề tài và lịch sử nghiên cứu
Các mô hình 3 chiều (3D) đang ngày trở nên phổ biến và được sử dụng rộng rãi trong nhiều lĩnh vực chính như kiến trúc, làm phim, game v v Các mô hình này có thể là
các đối tượng giao thông, các công trình kiến trúc hay các nhân vật hoạt hình được thiết kế bởi các phần mềm đồ họa như Maya hay Autodesk 3DS Max, giúp các kĩ sư có được một môi trường, đối tượng ảo dùng để nghiên cứu, thử nghiệm trước khi đưa vào
thực hiện trong thực tế Thông qua một quá trình xử lý gọi là kết xuất đồ họa (rendering), các mô hình/cảnh kịch 3 chiều – thường được xây dựng từ các hình đa giác hay các đối tượng hình học cơ bản hay hình nguyên thủy (primitives) được kết xuất thành một bức ảnh 2 chiều trên máy tính
Sự phát triển nhanh chóng của đồ họa máy tính từ những năm 1960 đã đưa đến nhiều phương pháp kết xuất đồ họa khác nhau Các phương pháp này đều đòi hỏi chi phí tính toán lớn và có một sự tương xứng giữa thời gian thực hiện và chất lượng của bức ảnh đầu ra Chúng có thể được phân biệt bởi thời gian kết xuất ảnh: kết xuất online và offline Kết xuất đồ họa thời gian thực - online được dùng trong các ứng dụng như game, hiện thực ảo hay các bộ mô phỏng, máy tính cần sinh ra khoảng 30 (hoặc nhiều hơn) ảnh/frame trong 1 giây Kết xuất offline thường phù hợp với làm phim, máy tính
cần nhiều thời gian để sinh ra các bức ảnh chân thực hơn Đến những năm 90, nhiều sự quan tâm đặc biệt đã được dành cho việc giảm tải khối lượng tính toán đồ họa trên bộ
xử lý trung tâm (CPU) Điều này dẫn tới sự phát triển của các bộ xử lý đồ họa (GPU),
với mục đích chính là đảm nhận quá trình kết xuất các mô hình 3D thay cho CPU Hiện nay có hai phương pháp kết xuất đồ họa chính được quan tâm nhiều nhất là rasterization và raytracing
Trang 12Rasterization là một phương pháp kết xuất đồ họa được sử dụng rộng rãi nhất trong
những năm gần đây bởi hầu hết các dòng phần cứng đồ họa đều được thiết kế để hỗ trợ cho rasterization Rasterization có thể định nghĩa là một quá trình tuần tự kết xuất một
mô hình /cảnh kịch 3 chiều bằng cách chuyển đổi tọa độ của các hình nguyên thủy sang
một tập các điểm ảnh 2 chiều để vẽ lên màn hình Do đó, phương pháp này thường có
thời gian kết xuất tuyến tính với số lượng hình tam giác được vẽ GPU hỗ trợ rasterization nhờ vào phần cứng chuyên biệt bên trong, làm cho thời gian xử lý một hình tam giác là rất nhỏ Các GPU hiện đại có thể vẽ tới 600 triệu hình đa giác trong
một giây [30] Tuy nhiên, kết quả của rasterization thiếu độ chân thực bởi vì nó không
dựa trên các đặc điểm vật lý của các đối tượng Các hiệu ứng ánh sáng và màu sắc phải được thêm vào bằng các phương pháp riêng biệt để tạo ‘xấp xỉ’ các hiệu ứng, làm tăng
độ phực tạp và thời gian
Raytracing mặt khác, là một quá trình xây dựng lại cảnh kịch dựa trên lấy mẫu, nó xem màn hình như một lưới điểm ảnh và phóng ra các tia từ mỗi điểm ảnh tọa độ 2 chiều trên màn ảnh vào trong một cảnh kịch 3 chiều đã dựng trước và nằm trong bộ nhớ Mỗi thông tin về giao điểm của tia với các đối tượng 3 chiều sau đó được dùng để xác định giá trị màu của điểm ảnh trên màn hình Nhờ mô phỏng tia sáng trong tự nhiên nên nhiều hiệu ứng phức tạp như phản xạ, đổ bóng - vốn rất khó đạt được với các phương pháp khác là một kết quả tự nhiên của raytracing Do đó, tuy không được hỗ trợ bởi các
phần cứng đồ họa nhưng raytracing vẫn được sử dụng trong những ứng dụng kết xuất
đồ họa off-line như làm phim hoạt hình, ví dụ hãng Pixar đã sử dụng raytracing để tạo
ra các bức ảnh phục vụ cho việc làm các bộ phim nổi tiếng như “Finding Nemo” và
“Cars” Để sinh ra được những bức ảnh ‘siêu thực’, raytracing phải trả giá bằng thời gian kết xuất rất lớn Nhiều thực thi raytracing trên các hệ thống tính toán thông dụng
đã thể hiện sự kém khả thi, trong [12], để kết xuất một cảnh kịch phức tạp gồm 15 cars, raytracing mất trung bình 15 giờ cho một bức ảnh/frame trên một máy tính Apple G5, dual-CPU PowerPC 2Ghz và 2GB RAM
Trang 13Mặc dù không phải là một ý tưởng mới, nhưng kể từ khi được giới thiệu dưới dạng
hiện đại của nó bởi Turner Whitted trong [7], raytracing dần nhận được nhiều sự quan tâm của các nhà khoa học Các nghiên cứu sau đó đã đưa ra nhiều cải tiến đa dạng cho raytracing cả về các hiệu ứng quang học (path tracing, beam và cone tracing, packet và distribution raytracing, ) và tăng tốc (ví dụ các cấu trúc tăng tốc SAH, BVH, Kd-tree, ) cho giải thuật này Cùng với sự phát triển mạnh mẽ của công nghệ phần cứng, raytracing ngày càng được thử nghiệm để hướng đến thời gian thực nhiều hơn, và được xem là tương lai của đồ họa tương tác Tuy nhiên, thực hiện một sự chuyển dịch ngay
lập tức từ rasterization sang raytracing là không thể vì việc này cần thời gian và nghiên
cứu để phát triển lại các phần mềm đồ họa hiện tại [9]
Nguyên thủy, các kỹ thuật kết xuất đồ họa như raytracing không thể sinh ra trực tiếp
những bức ảnh lập thể (stereoscopic) hay có ảo giác về độ sâu của các đối tượng trong
mô hình 3d Trong vài thập kỷ qua, có nhiều kỹ thuật khác nhau đã được phát triển để
biểu diễn các bức ảnh nổi lập thể nhưng nguyên lý chung để xem được ảnh 3d là giống nhau: gửi tới hai bức ảnh lệch tới mắt trái và phải của người xem, cả hai ảnh lệch này sau đó được kết hợp trong nào và làm người xem có ảo giác về độ sâu 3d Đã có các nghiên cứu về sinh ảnh stereoscopic với raytracing, [11, 13] là các minh chứng cho điều này Tuy nhiên các phương pháp này đều không đặt thêm camera vào raytracing
mà cố gắng sử dụng các công thức toán học để nội suy ra bức ảnh lệch thứ hai dựa vào
bức ảnh được kết xuất thực sự Hầu hết các công việc này đều thực hiện raytracing tuần
tự trên CPU
Những cải thiện gần đây trong công nghệ sản xuất các bộ xử lý đồ họa (GPU) không
những mang lại những sản phẩm tốt hơn cho mục đích diễn họa, mà còn mang lại một môi trường tính toán mạnh cho các ứng dụng phi đồ họa Nhiều thí nghiệm được thực
hiện trên các bộ xử lý đồ họa đã chứng minh được tính hiệu quả hơn hàng chục, hàng trăm lần so với thực hiện trên các bộ xử lý trung tâm Sự xuất hiện của các môi trường
Trang 14lập trình trên GPU như CUDA của hãng NVIDIA cho phép người phát triển dễ dàng
thực hiện các tính toán đa dụng và khai thác sức mạnh của các GPU hiện đại [19] thay
vì phải sử dụng các API đồ họa (OpenGL, DirectX) và các ngôn ngữ tô bóng đỉnh/đoạn (GLSL, Cg, HLSL) vốn phức tạp như trước đây Một trong những ưu điểm của raytracing là nó có khả năng song song hóa rất cao [30] Điều này dẫn đến một câu hỏi: Làm thế nào để thực hiện được giải thuật raytracing trên các kiến trúc đồ họa song song ngày nay để tận dụng được sức mạnh tính toán của chúng, tiết kiệm thời gian thực
hiện cho raytracing?
Luận văn trình bày một cách tiếp cận đơn giản trong việc tạo ra các video nổi 3d từ các
mô hình 3d dựng sẵn bằng cách kết hợp kỹ thuật kết xuất raytracing và một số lược đồ
lọc màu đơn giản (anaglyph, colorcode 3D) Ý tưởng cơ bản là kết xuất ra một tập các ảnh nổi 3d và sau đó nối các ảnh này thành một video 3d Các bước thực hiện được minh họa trong hình dưới
Trang 15Trước hết nghiên cứu này thiết lập cảnh kịch 3d sử dụng 2 camera quay xung quanh các đối tượng Vị trí của các camera được đặt sao cho chúng tương ứng với hai góc nhìn từ hai mắt trái, phải Sau đó sử dụng giải thuật raytracing để sinh ra hai bức ảnh
lệch 2d của tương ứng với 2 camera Cuối cùng, các phương pháp kết hợp ảnh dựa trên anaglyph, colorcode 3d được sử dụng để kết hợp 2 bức ảnh 2d thành một bức ảnh nổi 3d Quá trình này được lặp lại cho đến khi tập hợp đủ số fame cho việc tạo video 3d
Trở ngại lớn nhất trong cách tiếp cận này đó là sự phức tạp tính toán lớn của giải thuật raytracing Thực tế, raytracing mô phỏng mỗi tia sáng đi qua màn ảnh, với mỗi tia, raytracing kiểm tra giao điểm của tia đó với mọi đối tượng trong cảnh kịch 3d Để lần
vết đúng đắn đường đi của tia, chúng ta cần kiểm tra sự giao nhau của tia với các đối tượng trong khung cảnh Một cách làm đơn giản là kiểm tra mỗi tia với tất cả các đối tượng trong khung cảnh để tìm ra đối tượng đầu tiên được giao Việc kiểm tra này có chi phí thực hiện O(Rays x Polygons) trong đó, Rays là số tia sáng còn Polygons là số hình đa giác tạo nguyên thủy tạo nên mô hình 3d, do đó rất tốn kém Để vượt qua trở
ngại này, luận văn đã áp dụng cấu trúc tăng tốc BVH (bounding volume hierarchy) được đề xuất bởi Wald trong [15, 8] để giảm số lượng kiểm tra giao điểm giữa tia sáng
với đối tượng vật thể Để tăng tốc việc thực hiện chương trình, luận văn đã ứng dụng công nghệ tính toán song song trên các bộ xử lý đồ họa đa dụng cho việc thực hiện giải thuật raytracing cùng với kết hợp ảnh theo kỹ thuật anaglyph Chương trình song song
thử nghiệm đã được viết bằng ngôn ngữ CUDA [19] chạy trên một bộ xử lý đồ họa Geforce GTX 295 của nVidia
1.2 M ục tiêu nghiên cứu của luận văn
Luận văn được thực hiện nhằm mục tiêu xây dựng một chương trình song song hóa của
stereoscopic raytracing sử dụng công nghệ tính toán song song trên các bộ xử lý đồ
họa, từ đó ứng dụng vào để tạo các video hiệu ứng nổi 3d:
- Nghiên cứu về mô hình 3D, một số lược đồ tạo ảnh nổi 3D phù hợp với nghiên cứu
Trang 16- Nghiên cứu phương pháp kết xuất đồ họa raytracing và các lý thuyết liên quan, thiết
lập thêm camera ảo để raytracing kết hai ảnh với hai góc nhìn từ một mô hình 3D
- Xây dựng chương trình song song cho raytracing và quá trình tạo ảnh nổi trên GPU
sử dụng CUDA, thêm vào đó cấu trúc tăng tốc BVH cũng được sử dụng Mục đích tăng tốc cho raytracing
- Ứng dụng các tập ảnh nổi sinh ra giải thuật kết xuất song song, xây dựng chương trình tạo ra video 3D anaglyph từ mô hình 3D
- So sánh hiệu năng thực hiện bài toán trên GPU và CPU, kết luận khả năng ứng
dụng của công nghệ GP-GPU vào lĩnh vực đồ họa
1.3 K ết quả đạt được
Chương trình của chúng tôi đã được thử nghiệm trên trên một bộ xử lý đồ họa GeForce GTX 295 của nVidia cùng với một số mô hình 3D có sẵn, các kết quả thử nghiệm cho thấy tốc độ kết xuất ảnh 3D tăng tùy thuộc vào độ phức tạp của mô hình 3D đầu vào khi so sánh với chương trình tuần tự trên CPU Intel Pentium D 2.8 GHz
Thời gian kết xuất cùng mô hình cũng khác nhau phụ thuộc góc đặt camera ảo Với mô hình 3D phức tạp nhất trong thử nghiệm, chứa khoảng 970 000 hình tam giác nguyên
thủy, kết quả đạt được là khá hứa hẹn, tăng tốc tới 31 lần
Bằng việc thực hiện thành công giải thuật song song raytracing tạo ra trực tiếp ảnh nổi, nghiên cứu này khắc phục được yếu điểm của các giải thuật kết xuất đồ họa vốn chỉ kết
xuất được các bức ảnh hai chiều từ mô hình 3d
1.4 N ội dung của luận văn
Luận văn này được tổ chức như sau: chương 2 cung cấp các công việc liên quan bao
gồm giải thuật Raytracing, cấu trúc BVH, tạo ảnh anaglyph, môi trường phát triển ứng
dụng Cuda và công nghệ GP-GPU Chương 3 trình bày chi tiết về giải thuật song song hóa raytracing, ở đây cũng trình bày các kỹ thuật khử đệ quy cho raytracing và quá
Trang 17trình duyệt cây BVH bởi vì ngôn ngữ song song CUDA hiện tại không hỗ trợ đệ quy Sau đó chương này cũng mô tả các thiết lập camera để tạo ảnh tương ứng với các góc nhìn của 2 mắt và hoạt cảnh cho camera xoay quanh mô hình Chương 4 mô tả một số
thử nghiệm và thảo luận về kết quả Cuối cùng, chương 5 đưa ra một số kết luận và hướng phát triển của luận văn
Trang 18CHƯƠNG 2 CƠ SỞ LÝ THUYẾT
- Cấu trúc liên kết của đối tượng: hình dạng, kích thước và sự phức tạp
- Các thuộc tính: màu sắc, vị trí , đặc tính quang học tại bề mặt
- Các thuộc tính mô tả động nếu đối tượng thuộc một khung cảnh động: khả năng va
chạm với các đối tượng khác
Thêm nữa mô tả toàn bộ khung cảnh cần phải bao gồm các thông tin về ánh sáng được
sử dụng, vị trí tương đối giữa các đối tượng, các tác động của môi trường lên đối tượng
Đi sâu vào tìm hiểu các mô hình 3D, luận văn đã lựa chọn định dạng file 3DS, một trong những định file mô hình 3D khá phổ biến để làm đầu vào cho chương trình 3DS là một định dạng file được sử dụng bởi phần mềm kết xuất đồ họa, mô hình hóa 3D Autodesk 3ds MAX 3ds là một định dạng file nhị phân do đó nó có thể tải vào bộ
nhớ nhanh hơn và nhỏ gọn hơn so với các định dạng file dựa trên text (có thể dùng 1 file text để mô tả các đặc tính của mô hình 3D) Bên cạnh tính phổ biến của 3ds, định
dạng này vẫn có một số giới hạn như sau:
Trang 19 Tất cả các lưới đều phải tạo thành từ các tam giác
Số lượng các đỉnh và đa giác trong một lưới bị giới hạn bởi giá trị 65556
Tên của đối tượng, ảnh sáng và camera bị giới hạn trong 10 ký tự Tên chất liệu
giới hạn 16 ký tự
Chiều các nguồn sáng không được hỗ trợ
2.1.1 Định dạng file 3ds
Định dạng 3ds [28] dựa trên các khối dữ liệu là chunk, mỗi phần dữ liệu được đặt trong
một khối chứa định danh khối và chiều dài của dữ liệu đó (để cung cấp vị trí của khối
tiếp theo), và nội dung dữ liệu Điều này cho phép các bộ phân tích đọc định dạng 3ds
có thể bỏ qua các khối không cần thiết, và cho phép mở rộng định dạng này
Các khối tạo nên một cấu trúc phân cấp, tương tự như cậy XML DOM Hai byte đầu tiên của khối là ID Từ giá trị này bộ phân tích có thể xác định khối dữ liệu và quyết định là phân tích hay bỏ qua nó Bốn byte tiếp theo chứa một số nguyên đầu nhỏ là chiều dài của khối, bao gồm dữ liệu của nó, chiều dài của các khối con của nó và 6 byte header Các byte tiếp theo là dữ liệu của khối, theo sau bởi các khối con, theo một
cấu trúc có thể mở rộng tới vài mức độ sâu Dưới đây là cấu trúc chung của một file 3DS, chứa các ID chung nhất và một cấu trúc phân cấp miêu tả sự phụ thuộc của chúng:
│ │ │ ├─ 0x4140 // Mapping Floatinates List
│ │ │ │ └─ 0x4150 // Smoothing Group List
│ │ │ └─ 0x4160 // Local Floatinates System
│ │ ├─ 0x4600 // Light
│ │ │ └─ 0x4610 // Spotlight
Trang 20│ │ └─ 0x4700 // Camera
│ └─ 0xAFFF // Material Block
│ ├─ 0xA000 // Material Name
│ ├─ 0xA010 // Ambient Color
│ ├─ 0xA020 // Diffuse Color
│ ├─ 0xA030 // Specular Color
│ ├─ 0xA200 // Texture Map 1
│ ├─ 0xA230 // Bump Map
│ └─ 0xA220 // Reflection Map
│ │ /* Sub Chunks For Each Map */
│ ├─ 0xA300 // Mapping Filename
│ └─ 0xA351 // Mapping Parameters
└─ 0xB000 // Keyframer Chunk
├─ 0xB002 // Mesh Information Block
├─ 0xB007 // Spot Light Information Block
└─ 0xB008 // Frames (Start and End)
2.1.2 Thư viện lib3ds
Lib3ds [29] là một thư viện phần mềm miễn phí để xử lý các tệp tin 3DS Một trong
những tính năng mà lib3ds cung cấp là khả năng tải hầu hết các khối dữ liệu 3DS trong các phần của file như vật liệu, camera, ánh sáng, lưới, và keyframer
Dữ liệu quan trọng để xây dựng nên một đối tượng trong 3ds là lưới các hình tam giác (triangle mesh [27]) Nó là một loại lưới đa giác trong đồ họa máy tính, bao gồm một
tập các tam giác (thường dạng 3 chiều) và được kết nối với nhau qua các cạnh hoặc đỉnh chung để tạo thành một đối tượng
Trang 21Hình 2 Minh h ọa lưới tam giác
Nhiều gói phần mềm đồ họa và các thiết bị phần cứng làm việc hiệu quả hơn trên các tam giác được nhóm thành lưới hơn là trên một số lượng tam giác tương tực nhưng lại
biểu diễn tách biệt Điều này là dễ hiểu vì đồ họa máy tính thực hiện thao tác trên các đỉnh và góc của các hình tam giác Với các tam giác đơn lẻ, hệ thống phải xử lý 3 đỉnh cho mỗi tam giác Trong một lưới tam giác lớn, có thể có từ 8 đến rất nhiều tam giác chung một đỉnh – và những đỉnh này chỉ cần xử lý một lần
Sử dụng thư việc lib3ds giúp dễ dàng đọc ra các phần dữ liệu quan trọng trong mô hình 3ds, để cho quá trình render sau đó được thực hiện Như đã đề cập ở phần 1.1, để lần
vết đúng đắn đường đi của một tia sáng, ratracing kiểm tra sự giao nhau của tia với các đối tượng trong khung cảnh Một cách làm đơn giản là kiểm tra mỗi tia với tất cả các đối tượng trong khung cảnh để tìm ra đối tượng đầu tiên được giao Việc kiểm tra này
có chi phí thực hiện O(Rays x Polygons) trong đó, Rays là số tia sáng còn Polygons là
số hình đa giác tạo nguyên thủy tạo nên mô hình 3d Trong trường hợp mô hình 3ds, số
Trang 22hình đa giác ở đây chính là số lượng tam giác tạo nên khung cảnh đó Xem xét thêm độ phân giải của màn ảnh thì rõ ràng việc kiểm tra giao điểm này rất tốn kém về thời gian
Vấn đề này đã dẫn đến các nghiên cứu về cấu trúc tăng tốc cho raytracing để giảm số lượng phép kiểm tra này
2.2 Xây d ựng cấu trúc tăng tốc cho raytracing
Các nghiên cứu về raytracing đã đề xuất vài cấu trúc dữ liệu để tổ chức lại khung cảnh
nhằm giảm số lượng kiểm tra giao điểm Một trong những phương pháp hiệu quả đó là
sử dụng các hộp bao quanh (bounding volume) một hoặc một nhóm các hình nguyên
thủy, được đề xuất lần đầu tiên bởi Godsmith [5] Theo định nghĩa, bounding volume
là các đối tượng hình học cơ bản bao lấy hoàn tòan các đối tượng khác trong nó Các
hộp bao này thường được chọn là các đối tượng đơn giản để có thể dễ dàng tương tác
với một tia, ví dụ hình cầu hoặc hình lăng trụ chữ nhật có các cạnh song song với các
trục tọa độ - axis aligned bounding box (AABB)
Hai lợi ích cơ bản khi sử dụng hộp bao là: việc kiểm tra giao điểm tia với hộp nhanh hơn nhiều so với kiểm tra giao điểm giữa tia với các đối tượng phức tạp, và nếu tia không cắt hộp thì tất cả các hình đa giác trong hộp đó không cần phải kiểm tra giao điểm nữa, do đó giảm được khá nhiều việc kiểm tra vô ích (hình 4) Các hộp này sau
Trang 23đó lại được nhóm lại trong một hộp lớn hơn và cứ thế tạo thành một cấu trúc phân cấp các hộp bao quanh các đối tượng Cấu trúc này được gọi là BVH (bounding volume hierarchy)
2.2.1 Bounding volume hiearachy (BVH)
BVH là cây lưu trữ một hộp bao tại mỗi nút Thêm nữa mỗi nút trong có các tham chiếu tới một số nút con, và mỗi nút lá lưu một danh sách các hình nguyên thủy (ví dụ hình tam giác) Mỗi bounding volume của một nút được đảm bảo là bao lấy bounding volume của các con của nó Mỗi hình nguyên thủy phải nằm đúng trong 1 lá Có vài hình đơn giản như hình cầu, các hộp có cạnh song song với trục tọa độ (AABB) và các
hộp có hướng có thể được chọn làm bouding volume Việc lựa chọn loại hình nào để làm hộp bao phụ thuộc vào hai yếu tố:
- các đối tượng bị bao quanh có nằm vừa bên trong tốt nhất không
- việc kiểm tra giao điểm giữa tia và hộp có dễ dàng nhất hay không
Trang 24Thông thường, một cây BVH chỉ chứa duy nhất 1 loại bounding volume, để cho việc xây dựng và duyệt cây đơn giản hơn Hình dưới minh họa một cây BVH được tổ chức
từ một tập gồm 12 hình tam giác
Để xây dựng một cấu trúc phân cấp một cách nhanh chóng thì sẽ phải hy sinh chất lượng của nó Điểm mạnh của cấu trúc BVH là có thời gian xây dựng nhanh và dễ dàng cập nhật khi các đối tượng trong khung cảnh chuyển động Do đó BVH là phương pháp phổ biến nhất để biểu diễn cho các khung cảnh động []
Khi xây dựng hay cập nhật một cấu trúc, một số hàm heuristic được dùng để xác định các đối tượng hình học sẽ được tổ chức như thế nào trong một phân cấp như thế Luận văn này áp dụng phương pháp xây dựng cây phân cấp BVH nhị phân theo hướng tiếp
cận top-down được đề xuất bởi Warld trong [15], phương pháp này sử dụng các hộp bao là các hộp có cạnh song song với các trục tọa độ hay còn gọi là AABB (axis aligned bounding box) và hàm heuristic để phân chia các hình nguyên thủy là SAH (Surface Area Heuristic) được sử dụng rất nhiều khi xây dựng cấu trúc phân cấp kd-tree [3, 6]
2.2.2 Xây dựng cây BVH
Goldsmith và Salmon [5] đã phát triển một biểu thức đơn giản để đánh giá thời gian
thực hiện của một tia bất kỳ chạm vào hộp bao của nút gốc Họ lập luận rằng tỉ lệ mà
Trang 25tia tới tương tác với một nút cụ thể là tỉ lệ của diện dích vùng của hộp bao của nút đó
với diện tích vùng của hộp bao của nút gốc Nếu tia chạm vào một nút trong, nó sẽ gọi
tới hai nút con và một hàm kiểm tra giao điểm với hộp bao của các nút đó sẽ được thực
hiện Nếu một nút lá bị cắt, các hình tam giác trong danh sách của nút đó sẽ có các hàm
kiểm tra giao điểm được gọi Với BVH nhị phân, thời gian để một tia ngẫu nhiên tương tác với một BVH sẽ là:
Ở đây T là thời gian thực hiện trung bình của một tia, B là số lượng các nút trong của cây (do đó sẽ có B + 1 nút lá), AR i R là diện tích của bounding volume của nút i, AR 1 R là
diện tích của bounding volume của nút gốc, và TR i R là thời gian thực hiện kết hợp với xử
lý nút i Trong trường hợp một nút trong, TR i Rlà thời gian để kiểm tra các hộp bao của hai nút con của nó có bị cắt hay không, trong khi đó đối với một nút lá, TR i Rlà thời gian
để kiểm tra các hình tam giác trong danh sách của nó có bị cắt không Do đó công thức (1) trên sẽ trở thành:
ở đây TR AABB R là thời gian để kiểm tra một tia và một AABB có giao điểm hay không,
TR tri R là thời gian để tính một giao điểm tia-tam giác, và NR i R là số tam giác trong danh sách của nút lá i
Theo chiến lược top-down xây dựng cây BVH nhị phân, mỗi bước xây dựng đệ quy bao gồm một việc phân hoạch tập S gồm các tam giác thành hai tập con SR 1 R và SR 2 R, và
việc phân chia này được thực hiện đệ quy cho đến khi S được coi là đủ nhỏ để tạo thành lá Tại mỗi bước phải chọn được phân hoạch sao cho làm tối thiểu chi phí để
Trang 26đảm bảo một cây hai lá sẽ được xây dựng Áp dụng công thức (2) cho trường hợp cây 2
một tối ưu toàn cục bằng cách kiểm tra tất cả các trường hợp là kém khả thi
Theo đề xuất của Ingo Wald và các cộng sự trong [15], công thức (3) được tối ưu bằng cách sử dụng một tập các mặt phẳng song song với trục tọa độ để phân hoạch các tam giác Với mỗi mặt phẳng đã cho, trọng tâm của các đối tượng được sử dụng để lựa
chọn hai tập con để phân chia Giải thuật xây dựng cây BVH dựa trên SAH và trọng tâm của hộp bao được minh họa như ở dưới:
function partitionSweep( Set S)
bestCost= Ttri*|S| {chi phí để tạo một nút lá}
thisCost=SAH(|S1|,S[i].leftArea,|S2|,S[i].rightArea) move Triangle i from S1 to S2
if thisCost < bestCost then
Trang 27bestCost = thisCost bestEvent = i
bestAxis = axis
end if end for end for
if bestAxis = -1 then {found no partition better than leaf}
return makeleaf else
sort S in axis ’bestAxis’
để chuyển các tam giác của S từ bên phải sang trái, và tính diện tích bề mặt của hộp
chứa các tam giác của SR 2 R, đến đây đã có đủ dữ liệu để đánh giá chi phí phân hoạch này
bằng cách sử dụng công thức 3 Sau đó, các tam giác được chuyển từ SR 1 R sang SR 2 Rđể tìm
ra một sự phân hoạch tốt nhất gồm các thông tin: trục tọa độ tốt nhất, chi phí tốt nhất, hình tam giác được chuyển lần cuối Cuối cùng khi đã tìm được một sự phân hoạch tối
ưu theo cách trên, giải thuật tạo ra một nút trong với 2 nút con là SR 1 R và SR 2 R Quá trình xây dựng này được thực hiện đệ quy cho tới khi tập S đủ nhỏ để tạo thành lá
Chi tiết hơn về các bước trong quá trình xây dựng có thể tìm thấy trong [10]
Trang 282.2.3 Duyệt cây BVH
BVH có một giải thuật duyệt rất đơn giản Với các nút lá, tia sáng được kiểm tra giao điểm với hộp bao của nút và nếu có một giao điểm được tìm thấy, danh sách các hình tam giác của nút được kiểm tra với tia Với các nút trong, nếu tia giao với hộp bao của nút, thì các nút con được kiểm tra một cách đệ quy để tìm giao điểm Chú ý là trong trường hợp này, việc kiểm tra cũng cần phải được thực hiện cho cả 2 nút con ngay cả khi ta đã tìm thấy một giao điểm ở một nút, điều này là bởi vì đặc tính của giải thuật xây dựng cây BVH như trên Cuối cùng giải thuật phải trả về giao điểm của tia với hình tam giác gần nhất Dưới đây là đoạn mã minh họa cách duyệt cây BVH để tìm giao điểm của tia Ray r với hình tam giác gần nhất trong BVH, kết quả trả về giao điểm
for i=1to n.children do
if r overlaps n.child[i] then
t=t ∪ BVHTraverse(n.child[i],r) end if
end for
return closest t
end if
2.3 Gi ải thuật Raytracing
Ray tracing giả lập hành vi của các tia sáng phát ra từ mắt người xem để tạo ảnh cho
vật thể Ý tưởng cơ bản là lần theo dấu vết của các phần tử ánh sáng ngược chiều với nguồn phát sáng, tức là cho tia sáng xuất phát từ vị trí mắt và đi qua từng điểm trên màn ảnh vào cảnh kịch 3 chiều Sau đó một mô hình rọi sáng được sử dụng để tính toán giá trị màu cho mỗi điểm ảnh trên màn ảnh Giải thuật bắt đầu bằng cách phóng ra các tia sơ cấp – là các tia phóng ra từ mắt hay camera tới các điểm ảnh trên màn ảnh
Trang 29Các công thức toán học định nghĩa đối tượng bên trong khung cảnh cho phép xác định
có hay không giao điểm tia – đối tượng Nếu tia sáng phát vào khung cảnh không giao
với bất cứ đối tượng nào, thì một màu nền sẽ được trả lại cho điểm ảnh đó Nếu tia sáng tương tác với các vật thể trong hoạt cảnh, điểm ảnh tương ứng với tia đó sẽ có màu của giao điểm của vật thể gần nhất được tương tác (hình 2)
Trong trường hợp tia sáng chạm vào bề mặt một vật thể mà có phát sinh hiệu ứng phản
xạ hay khúc xạ, việc tính toán màu sắc tại điểm tiếp xúc có thể yêu cầu phải tính toán
việc dò thêm một số tia sáng nữa – đó là tia phản xạ và tia khúc xạ tương ứng do các
hiệu ứng phản xạ, khúc xạ tại bề mặt vật thể sinh ra, các tia phóng ra từ bề mặt giao điểm này được gọi là tia thứ cấp Các tia thứ cấp này có thể sẽ lại tiếp xúc các bề mặt khác nữa, tùy tính chất của từng bề mặt lại phát sinh các thứ cấp khác cần thực hiện ray tracing Việc xử lý quá trình như vậy được gọi là xử lý đệ quy với Ray tracing (hình 3) Các tia thứ cấp được phóng ra cho đến khi không còn tìm thấy giao điểm tia – đối tượng, hoặc đã đạt đến một độ sâu đệ quy nào đó Màu của một giao điểm trên bề mặt
một đối tượng được tính theo công thức:
I = Ilocal + Kr * Ireflected + Kt * Itransmitted
Trang 30Ở đây IR local Rcường độ sáng cục bộ, thường được tính bằng mô hình chiếu sáng Phong [12], IR reflected Rvà IR transmitted R là cường độ của tia phản xạ, khúc xạ - được xác định đệ quy
KR r Rvà KR t R các hệ số phản xạ và khúc xạ của đối tượng đó
Mã giả của giải thuật như sau:
Color trace_ray( ray, depth )
Trang 31}
else /*have no intersection*/
}
2.3.1 Mô hình chiếu sáng Phong
Tất cả các đối tượng hình học đều có một hàm hoặc giải thuật để mô tả các đặc tính
phản xạ tại bề mặt của đối tượng đó gọi chung là BRDF (bidirectional reflectance distribution function) [39] Nếu không có một mô hình rọi sáng BRDF, một đối tượng nào đó sẽ không bị tác động bởi ánh sáng do đó thiếu đi sự chân thực Phương pháp đơn giản nhất song lại rất hiệu quả trong việc mô hình hóa ánh sáng tác động lên đối tượng đó là mô hình chiếu sáng Phong, được thiết lập bởi Bùi Tường Phong năm 1975 [18]
Mô hình chiếu sáng Phong phân biệt các loại ánh sáng thành các thành phần: ánh sáng môi trường, ánh sáng specular và ánh sáng khuếch tán Thành phần ambient (môi trường) đại diện cho lượng ánh sáng được cung cấp bởi một nguồn sáng toàn cục tác động lên bề mặt đối tượng Thành phần khuếch tán để mô tả cho những điểm nổi bật trên bề mặt của một đối tượng Thành phần specular xác định sự thô mịn của bề mặt
Mỗi đối tượng trong khung cảnh có các loại chất liệu khác nhau Với mỗi loại material, các tham số sau được xác định:
- ks: hằng số phản xạ specular
Trang 32- kR d R: hằng số phản xạ diffuse
- kR a R: hằng số phản xạ ambient
- kR e R: độ bóng của vật liệu (material), sẽ có giá trị lớn hơn tại các bề mặt mịn và gần
giống như gương Khi hằng số này lớn thì độ specular sẽ nhỏ đi
Với mỗi nguồn sáng trong khung cảnh gọi LR a R là cường độ sáng của thành phần môi trường (ambient), LR i Rvà L’R i R là cường độ của thành phần khuếch tán và specular tương ứng Các tham số này và màu tại bề mặt, cùng với các thông tin về vectơ tại bề mặt giao điểm được tính toán để xác định màu cuối cùng của điểm ảnh Giả sử điểm P trên
bề mặt vật thể được chiếu sáng bởi tia SR i Rđến từ nguồn sáng Gọi RR i R là tia phản xạ của
SR i R, N là véc tơ pháp tuyến tại điểm P, V là vectơ chỉ chiều đến mắt người xem hay camera ảo
Công thức tính màu cuối cùng tại điểm P theo mô hình Phong là:
Trong công thức trên, màu cuối cùng là tổng hợp của 3 thành phần ambient, diffuse và specular tương ứng Tích của các vectơ là tích vô hướng, lấy tổng theo i tức là tất cả các tia sáng từ các nguồn sáng chiếu tới điểm P
Trang 332.3.2 Tia phản xạ
Để kết xuất được các bề mặt có tính chất phản xạ, cần phải phóng ra các tia phản xạ tại giao điểm của tia với đối tượng Với mỗi điểm đặt mắt/camera ảo cố định, mỗi vị trí trên một đối tượng có đặc tính phản xạ chỉ có duy nhất một chiều để ánh sáng đi tới
mắt, ví dụ ở hình dưới, chỉ có duy nhất một tia sáng phản xạ ở P và đi vào mắt Màu
của tia phản xạ này phụ thuộc vào màu của tia tới và màu của bề mặt đối tượng
Gọi S là tia tới, N là vecto pháp tuyến tại bề mặt đối tượng, việc tạo ra tia phản xạ tương ứng R khá đơn giản theo công thức:
2.3.3 Tia khúc xạ
So với tia phản xạ, các tia khúc xạ có một hướng đi phụ thuộc vào hệ số khúc xạ của
vật liệu được xem xét Hình dưới minh họa một đường đi của tia khúc xạ, ở đây tia truyền qua vật thể
Trang 34Hình 10 Minh h ọa tia khúc xạ
Việc sinh ra các tia khúc xạ tuân theo công thức sau:
2.3.4 Che bóng
Che bóng rất dễ thực hiện trong raytracing, quá trình bắt đầu bằng cách phóng ra một tia từ giao điểm tới nguồn sáng để tìm che bóng Nếu không có giao điểm nào giữa tia này và nguồn sáng, thì không có che bóng trên bề mặt đó Nếu có một giao điểm, thì có
một bóng che trên bề mặt Hình dưới minh họa hai tia che bóng phóng đi từ một bề
mặt, tia LR A R đi tới nguồn sáng A, và tia LR B Rđi tới nguồn sáng B Tia LR A R không bị ngắt khi đi tới nguồn, nhưng tia LR B R chạm một đối tượng mờ trên đường đi
Trang 35Hình 11 Các tia che bóng để thực hiện hiệu ứng che bóng
2.3.5 Màn ảnh
Màn ảnh được xem là một lưới ảo, với một sự tương ứng 1-1 với các pixel trên màn hình và được đặt giữa mắt và khung cảnh 3d Kết quả render là các bức ảnh 2 chiều sẽ được lưu trên màn ảnh này Hình dưới minh họa một màn ảnh có độ phân giải là hR res Rx
vR res
Trang 36Trong đồ họa máy tính, có một sự phân biệt rõ ràng giữa các hệ tọa độ tương ứng với world, màn ảnh, các nguồn sáng, và các đối tượng Màn ảnh có một hệ tọa độ 2 chiều, các trục được đánh dấu bởi (i,j) Mỗi ô biểu diễn vị trí một điểm ảnh, ở đây mỗi ô vuông có kích thước là s x s, trong trường hợp không cần chống nhiễu răng cưa, s có giá trị là 1 Trong hình trên, hệ tọa độ world cũng được biểu diễn với các ký hiệu XR W R,
YR W R với trục ZR W R có chiều dương hướng ra phía người xem còn chiếu âm đi vào khung
cảnh 3 chiều
Các tia được bắn ra từ vị trí i=0 và j=0, và tiếp tục duyệt theo chiều dọc và chiều ngang Tuy nhiên, các đối tượng 3d được định nghĩa và đặt trong hệ tọa độ world, do
đó tọa độ 2 chiêu ftrên màn ảnh cần được chuyển sang hệ tọa độ 3 chiều world Công
thức sau thể hiện việc chuyển chỉ số i thành XR W R và j thành YR W R
Trang 37Một khi thực hiện các chuyển đổi này, việc kiểm tra giao điểm giữa đối tượng và tia được thực hiện trong hệ tọa độ 3 chiều world Các tia có điểm gốc nằm trên trục dương
ZR W R và có chiều đi vào trục âm ZR W R Điều này ngụ ý rằng màn ảnh bị cố định theo trục
ZR W R Để có thể xem được khung cảnh ở các góc nhìn khác nhau, raytracing sử dụng một
loại camera ảo là pinhole
2.3.6 Camera pinhole
Camera ảo dùng trong raytracing là loại camera pinhole Camera pinhole cho phép xem khung cảnh (scene) từ mọi vị trí bằng cách thiết lập các tham số: điểm đặt mắt, điểm nhìn vào, vecto up, và khoảng cách d giữa mắt và màn ảnh Điểm đặt mắt (e) chỉ ra vị trí của người xem, điểm look-at (l) chỉ ra một điểm trên khung cảnh làm tâm để camera nhìn vào Vecto up chỉ ra chiều được xem là chiều lên, thường là trục tọa độ y (ví dụ
nếu vecto này là chiều âm của trục x , thì ảnh kết xuất cuối cùng sẽ bị quay trái 90P
0
P)
Trang 38Hình 13 Minh h ọa camera pinhole
Thực hiện một camera pinhole cần phải tính toán được chiều của các tia sơ cấp Điều này trước hết phải định nghĩa một hệ tọa độ về điểm đặt mắt (e), có các thành phần là các vecto u,v, và w Các công thức sau tuân theo từ [2]:
Sau đó chiều của mỗi tia sơ cấp được tính toán như sau:
rayDirection = XR w R u + YR w R.v – d.w
2.3.7 Giao điểm tia – đối tượng
Các hàm tìm giao điểm của tia với các đối tượng trong khung cảnh 3d là trung tâm trog
một chương trình raytracing Bất kể là các mô hình chiếu sáng, ánh xạ bề mặt (texture mapping), các kỹ thuật phân chia không gian, các lược đồ chống nhiễu răng cưa nào
Trang 39được sử dụng trong giải thuật, luôn luôn cần phải tìm ra giao điểm của một tia và một đối tượng
Khi một tia được phóng tới môi trường mô hình hóa, thông tin nào cần lấy về phụ thuộc vào mục đích của tia Với một tia được phóng ra từ mắt, một hàm tính giao điểm
với đối tượng phải trả giao điểm gần nhất và pháp tuyến bề mặt tại điểm đó Với một tia được gửi tới một nguồn sáng (để kiếm tra sự che bóng), thông tin cần là liệu có giao điểm nào trên đường đi tới nguồn sáng không Thêm nữa, các thông tin khác cũng cần
lấy về phụ thuộc mô hình chiếu sáng Với những tia sáng được kiểm tra với một hộp bao (bounding volume) thì việc xác định liệu tia có chạm hộp hay không đã là đủ Như đã đề cập ở trên, chúng ta sử dụng cấu trúc tăng tốc BVH chứa các hộp bao của các hình tam giác nguyên thủy tạo nên mô hình 3ds Do đó, việc xác định giao điểm tia
với hộp cần được thực hiện nhanh chóng Phần này trước hết trình bày một giải thuật đơn giản được đề xuất lần đầu tiên bởi Kay và Kajiya [17] để xác định tia có cắt hộp hay không, sau đó trình bày các hàm tia – giao mặt phẳng, tia giao đa giác bởi vì cây BVH chứa các hình tam giác của mô hình
2.3.7.1 Giao điểm tia – hộp
Đối tượng hộp phổ biến nhất đó là dạng hình hộp chữ nhật có các trục song song với các trục tọa độ world Chúng được gọi là AABB (axis aligned bounding boxes) Chúng không phải là một phần của cấu trúc phân cấp, mặc dù ta thực hiện kiểm tra giao điểm nhưng sẽ không kết xuất ra các hộp này
Trước hết một tia được xác định bởi hai thành phần :
RR 0 R = (XR 0 R, YR 0 R, ZR 0 R) ;
Vec tơ chỉ phương RR d R = (XR d R, YR d R, ZR d R)
Trang 40Hình 14 Định nghĩa 1 tia trong hệ tọa độ world
Tia này có phương trình là :
R(t) = RR 0 R + t.RR d R = (XR 0 R + t.XR d R, YR 0 R + t.YR d R, ZR 0 R + t.ZR d R), với t > 0
Một hộp bao được biểu diễn bởi hai đỉnh ở 2 góc đối diện của nó BR l R = (XR l R, YR l R, ZR l R) và
BR h R = (XR h R, YR h R, ZR h R) với XR l R < XR h R, YR l R < YR h R, ZR l R < ZR h R Kay và Kajiya đã giới thiệu một phương pháp kiểm tra tia cắt hộp dựa trên slabs [17] Một slab đơn giản là khoảng không gian giữa hai mặt phẳng song song Giao điểm của một tập các slab sẽ xác định
một hộp bao Theo đó, một hộp AABB là giao của 3 slab trực giao x ∈ [XR l R, XR h R], y ∈ [YR l R, YR h R], z ∈ [ZR l R, ZR h R]: box = [XR l R, XR h R] ∩ [YR l R, YR h R] ∩ [ZR l R, ZR h R]
Giải thuật thiết lập 2 biến tR near Rvà tR far R, so sánh giá trị của chúng để kết luận tia có cắt
hộp hay không, tR near Rlà giá trị lớn nhất giữa hai khoảng từ gốc của tia tới hai giao điểm
của tia với slab mà tia đi vào, còn tR far Rlà giá trị nhỏ nhất giữa hai khoảng cách từ gốc
của tia tới giao điểm của tia với slab mà tia đi ra (hình dưới) Nếu tR near R > tR far Rthì tia không cắt hộp, ngược lại tia cắt hộp