E N D
Giới thiệu Caùc nhaø khoa hoïc ñoà hoïa maùy tính luoân muoán taïo ñöôïc nhöõng hình aûnh nhö thaät nhö trong töï nhieân. Ñieàu ñoù coù theå ñaït ñöôïc khi ngaøy nay maùy tính ñaõ trôû neân maïnh hôn, nhöõng thieát bò xuaát nhaäp ñoà hoïa trôû neân phoå bieán. Vì theá khoâng ai khoâng bò gaây aán töôïng khi nhöõng gì hoï thaáy trong phim khoa hoïc vieãn töôûng thöïc chaát laø do maùy tính taïo ra. Ñoái vôùi nhöõng coâng vieäc caàn coù moâ hình phöùc taïp vaø toán coâng ñeå veõ thì baây giôø coù theå moâ hình hoùa treân maùy tính vôùi nhöõng chi tieát phöùc taïp nhöng laïi cho ra nhöõng keát quaû heát söùc trung thöïc.
Giới thiệu (cont.) Neàn taûng ñeå maùy tính xaây döïng caùc hình aûnh chính laø caùch moâ hình hình hoïc chính xaùc caùc hình aûnh ñoù. Hieän nay coù nhieàu thuaät giaûi ñaõ ñöôïc phaùt hieän duøng ñeå hieån thò cho nhieàu moâ hình toaùn hoïc hieån thò maët cong: maët tham soá hoùa, caùc maët baäc ba, caùc maët daïng aån… Söï khaùc nhau giöõa caùc thuaät giaûi naøy chính laø söï khaùc nhau veà maët hình hoïc cuûa ñoái töôïng caàn ñöôïc hieån thò. Vì vaäy ñoái vôùi moãi loaïi ñoái töôïng khaùc nhau caàn coù moät phöông phaùp hieån thò khaùc nhau töông öùng.
Ưu điểm Khaéc phuïc ñöôïc nhöôïc ñieåm treân, Ray Tracing laø phöông phaùp toång quaùt raát höõu hieäu ñeå hieån thò caùc maët cong bôûi vì: • laø tính ñôn giaûn cuûa thuaät toaùn, • söû duïng nguyeân lyù quang hình neân taïo ra nhöõng hình aûnh raát gioáng thöïc teá, • aùp duïng cho nhieàu loaïi maët cong.
Điều kiện áp dụng thuật toán Ray Tracing Ñeå aùp duïng thuaät toaùn Ray Tracing cho caùc maët cong thì ta phaûi xaùc ñònh ñöôïc 2 ñieàu: • giao ñieåm cuûa moät ñöôøng thaúng vôùi moät maët cong • phaùp vector taïi moät ñieåm treân maët cong. Nhöõng maët cong naøo thoûa maõn 2 ñieàu kieän naøy thì coù theå aùp duïng phöông phaùp Ray Tracing ñeå hieån thò.
Tính chất của Ray Tracing Ray tracing laø phöông phaùp ñeå taïo ra nhöõng hình aûnh gioáng nhö thaät: • söï töông taùc giöõa aùnh saùng vaø boùng toái vôùi caùc vaät theå ñöôïc theå hieän gioáng nhö ta thaáy trong töï nhieân. • söï keát hôïp ñôn giaûn cuûa caùc hieäu öùng nhö boùng, söï phaûn xaï, khuùc xaï. • moâ phoûng theo ñöôøng ñi giöõa tia saùng vaø vaät theå theo quy luaät cuûa quang hình hoïc. Nhöõng gì (hình aûnh) maø chuùng ta thaáy ñöôïc laø söï toå hôïp maøu cuûa haøng tæ tia saùng ñi vaøo maét chuùng ta. Vì vaäy, Ray Tracing ñeà ra phöông phaùp ñeå tính toaùn maøu saéc cuûa tia saùng.
Tính chất của Ray Tracing Eyepoint Screen Scene
Nguoàn saùng Vaät theå Mô hình tạo ảnh của Ray Tracing Tia naøy giao vôùi moät vaät theå. Maøu cuûa ñieåm aûnh töông öùng tuøy thuoäc vaøo maøu cuûa vaät theå vaø nhöõng yeáu toá khaùc. Töông öùng giöõa View Plane vaø Buffer löu tröõ hình aûnh. Buffer Viewpoint Location View Plane Tia naøy khoâng giao vôùi vaät theå naøo. Maøu cuûa ñieåm aûnh töông öùng ñöôïc xaùc ñònh bôûi maøu neàn.
Mô hình tạo ảnh của Ray tracing • Moâ hình taïo aûnh cuûa Ray Tracing, bao goàm: • light source (nguoàn saùng), • object (vaät theå), • viewing geometry (taàm nhìn). • Light source bao goàm caùc thuoäc tính vò trí vaø maøu saéc. • Object coù caùc thuoäc tính: maøu saéc, vò trí, ñoä phaûn xaï, khuùc xaï, phöông trình maët, vectô tröïc chuaån. • Viewing geomeotry (taàm nhìn) ñöôïc ñònh nghóa phöùc taïp hôn. Thöïc chaát, taàm nhìn xaùc ñònh vò trí maét ngöôøi nhìn, höôùng cuûa maét seõ nhìn tôùi vaø vuøng naøo trong khoâng gian maø maét seõ nhìn thaáy 3 chieàu thoâng qua moät cöûa soå goïi laø viewplane.
Maét Up Direction Right Location Khoâng gian vaät theå phía sau View Plane View Plane View Plane Maét Viewing Geometry
Viewing Geometry • Chuùng ta söû duïng 4 vector ñeå ñònh nghóa viewing geomeotry: • Location: xaùc ñònh vò trí cuûa maét trong hoaït caûnh 3 chieàu. Vò trí cuûa maét ñöôïc xaùc ñònh trong cuøng heä toïa ñoä vôùi caùc vaät theå. • Direction: ñònh nghóa bôûi moät vector töø vò trí maét ñieåm giöõa cuûa viewplane. Ñoä lôùn cuûa vector naøy xaùc ñònh khoaûng caùch giöõa maét vaø viewplane. • Up: vector coù goác laø ñieåm giöõa cuûa viewplane vaø ngoïn laø ñieåm giöõa cuûa caïnh treân viewplane. • Right: vector coù goác laø ñieåm giöõa cuûa viewplane vaø ngoïn laø ñieåm giöõa cuûa caïnh phaûi viewplane.
Phương pháp tạo ảnh • Treân thöïc teá, tia saùng xuaát phaùt töø nguoàn saùng, ñi vaøo hoaït caûnh 3 chieàu, sau khi töông taùc vôùi caùc vaät theå tia saùng ñi ra khoûi hoaït caûnh, coù theå ñöôïc maét nhìn thaáy hoaëc khoâng. • Phöông phaùp naøy thöôøng ñöôïc goïi laø Ray Tracing thuaän vaø phaûi tính toaùn raát nhieàu. • Sôû dó nhö vaäy laø vì khi muoán taïo hình aûnh cuûa hoaït caûnh ta phaûi xaây döïng haøng tæ tia saùng (coù theå hôn theá nöõa) ñi töø nguoàn saùng maø chæ coù moät soá ít coù höôùng ñi ñuùng qua viewplane vaø tôùi maét ngöôøi xem. • Nhö theá maùy tính PC khoâng theå trong thôøi gian ngaén hoaøn thaønh ñöôïc coâng vieäc ñoà soä nhö vaäy.
Phương pháp tạo ảnh (cont.) • Baèng caùch thay phöông phaùp ñi cuûa tia saùng, ta ñöôïc moät kyõ thuaät taïo aûnh nhanh choùng hôn nhieàu thöôøng ñöôïc goïi laø Ray Casting hay Ray Tracing ngöôïc. • YÙ töôûng cuûa phöông phaùp naøy laø cho tia saùng xuaát phaùt töø vò trí maét vaø ñi qua töøng ñieåm treân viewplane vaøo hoaït caûnh 3 chieàu. • Khi tia saùng töông taùc vôùi caùc vaät theå trong hoaït caûnh, ñieåm treân viewplane (vaø ñieåm maøu treân buffer) töông öùng vôùi tia saùng ñoù seõ coù maøu cuûa giao ñieåm cuûa vaät theå gaàn nhaát maø tia saùng töông taùc.
Ray Casting Eyepoint Screen Scene
Lighting model • Maøu saéc cuûa moät ñieåm treân vaät theå bò aûnh höôûng bôûi nhöõng yeáu toá sau ñaây: • Giöõa ñieåm ñoù vaø nguoàn saùng coù vaät theå naøo che khuaát hay khoâng, neáu khoâng noù ñöôïc chieáu saùng hoaøn toaøn. • Söï phaûn xaï cuûa beà maët vaät theå. Ñieån hình laø caùi göông noù phaûn xaï hoaøn toaøn caùc tia saùng tôùi. Caùi göông khoâng heà coù maøu cuûa noù maø mang maøu cuûa nhöõng tia saùng ñi tôùi. • Söï khuùc xaï aùnh saùng cuûa beà maët vaät theå. Ví duï khi nhìn mieáng thuûy tinh ta khoâng heà thaáy maøu cuûa mieáng thuûy tinh maø chæ thaáy maøu cuûa nhöõng vaät theå phía sau noù.
Shadow – Bóng Đường thẳng nối giao điểm và nguồn sáng giao với vất thể khác.
Inter-object reflections – Phản xạ Tạo tia sáng phản xạ ra khỏi vật thể, Nếu nó tương tác với vật thể khác thì tính toán màu sắc của nó và phối hợp màu với giao điểm đầu tiên.
Refraction – Khúc xạ Vật thể trong suốt bẻ cong ánh sáng khi đi qua nó
Lighting model (cont.) • Do vaäy ñeå tính maøu taïi moät ñieåm ta phaûi toång hôïp maøu: • maøu do nguoàn saùng (local shading), • maøu do tia phaûn xaïvaø maøu do tia khuùc xaï mang tôùi (recursive shading). • Hai maøu do tia phaûn xaï vaø khuùc xaï taïo neân coù ñöôïc baèng caùch xaây döïng theâm hai tia phaûn xaï vaø khuùc xaï vaø tieáp tuïc tính maøu cuûa hai tia treân baèng phöông phaùp treân. Ñaây ñöôïc goïi laø söï ñeä qui trong caùch xaây döïng maøu cuûa vaät theå.
Ưu điểm và ngược điểm Ưu điểm: Transparency Reflection Shadow No clipping, no projections, no scan conversion Nhược điểm: Tính toán giao điểm phức tạp
Thuật toán Ray Tracing tổng quát • Vôùi moãi ñieåm aûnh treân buffer, • Xaùc ñònh ñieåm P töông öùng treân viewplane; • Xaây döïng tia Ray ñi töø maét qua P; • Xaùc ñònh giao ñieåm gaàn nhaát giöõa tia Ray vaø caùc vaät theå Objects trong khung caûnh; • Neáu khoâng toàn taïi giao ñieåm thì ñieåm aûnh coù maøu laø maøu neàn; • Ngöôïc laïi, • Tính vector tröïc chuaån cuûa vaät theå taïi giao ñieåm; • Maøu ñieåm aûnh laø maøu ambient; • Vôùi moãi nguoàn saùng, • Taïo tia ñi töø giao ñieåm ñeán nguoàn saùng; • Tính söï phaân phoái aùnh saùng diffuse tôùi vaät theå vaø coäng doàn vaøo maøu cuûa ñieåm aûnh; • Neáu vaät theå phaûn xaï, • Tính toaùn tia phaûn xaï; • Xaùc ñònh maøu cuûa tia phaûn xaï; • Coäng doàn vaøo maøu cuûa ñieåm aûnh; • Neáu vaät theå trong suoát, • Tính toaùn tia khuùc xaï; • Xaùc ñònh maøu cuûa tia khuùc xaï; • Coäng doàn vaøo maøu cuûa ñieåm aûnh;
Ứng dụng Ray Tracing Chuùng ta chæ caàn xaùc ñònh giao ñieåm cuûa tia vaø maët cong, vector tröïc chuaån cuûa maët cong taïi giao ñieåm ñoù: • Biểu diễn tia • Biểu diễn vật thể • Giao điểm của tia và vật thể • Vectơ pháp tuyến tại giao điểm
Biểu diễn tia • Tia ñoùng vai troø quan troïng trong thuaät toaùn ray tracing. Tia bao goàm goác vaø höôùng. Tia ñöôïc taïo bôûi hai vector, moät cho goác vaø moät cho höôùng cuûa tia. Ñeå moâ taû tia di chuyeån nhö theá naøo ta xem thôøi gian nhö tham soá t, ta coù phöông trình cuûa tia nhö sau: • R(t) laø taäp hôïp nhöõng ñieåm taïo neân ñöôøng ñi cuûa tia. Tia chæ ñi veà moät höoùng ñöôïc ñònh bôûi t>0. • Rd:höôùng cuûa tia. • R0:goác cuûa tia. Rd R0
Phương trình tham số của tia • Phöông trình R(t) ñöôïc xeùt trong khoâng gian 3 chieàu neân ta coù caùch khaùc: • höôùng cuûa tia ñöôïc moâ taû bôûi vector (xd, yd , zd) • goác cuûa tia moâ taû bôûi vector (xo, yo , zo) . • Nhö baïn ñaõ bieát, thuaät toaùn ray tracing lieân quan raát nhieàu ñeán vieäc xaùc ñònh giöõa tia vaø vaät theå coù giao vôùi nhau hay khoâng. Söû duïng phöông trình tham soá cuûa tia, chuùng ta deã daøng coù theå xaùc ñònh giao ñieåm giöõa tia vaø vaät theå. Rd R0
Hiển thị mặt ẩn – Implicit Surface • Maët aån (S) laø taäp hôïp ñieåm thoûa maõn phöông trình f(x,y,z)=0. Vector tröïc chuaån taïi moät ñieåm treân maët aån ñöôïc tính baèng vector gradient cuûa haøm f taïi ñieåm ñoù: • Phöông trình giao ñieåm cuûa tia R(t) vôùi maët (S) coù ñöôïc baèng caùch thay theá x,y,z trong phöông trình f(x,y,z)=0 vôùi x=x(t), y=y(t), z=z(t) ta ñöôïc moät phöông trình môùi theo bieán t: f*(t)=0 laø phöôngtrình giao ñieåm cuûa tia R(t) vôùi (S)
Hiển thị mặt ẩn – Implicit Surface • Neáu f*(t)=0 voâ nghieäm thì tia khoâng caét vaät theå, neáu noù khoâng coù nghieäm döông thì tia caét vaät theå ôû phía sau goác cuûa noù. • Nghieäm t0 > 0 nhoû nhaát xaùc ñònh ñieåm caét gaàn nhaát cuûa tia ñoái vôùi vaät theå. • Ñeå xaùc ñònh giao ñieåm gaàn nhaát cuûa tia ñoái vôùi vaät theå ta theá t0 vaøo phöông trình cuûa tia R(t): • vaø ñeå xaùc ñònh vector tröïc chuaån cuûa maët (S) taïi p ta theá toaï ñoä p vaøo phöông trình N(p).
Hiển thị mặt xác định – Explicit Surface • Maët xaùc ñònh (S) laø taäp hôïp nhöõng ñieåm {x,y,z} thoûa maõn phöông trình z=g(x,y). Neáu ñaët f(x,y,z) = z-g(x,y) thì ta coù theå xaùc ñònh maët (S) theo daïng aån thoûa ñieàu kieän f(x,y,z)=0 • Vector tröïc chuaån taïi moät ñieåm treân maët (S) ñöôïc tính nhö treân: • Caùch xaùc ñònh giao ñieåm cuûa tia vaø vaät theå coù theå aùp duïng nhö ñoái vôùi maët aån ôû treân.
Hiển thị mặt đại số • Nhieàu maët cong ñöôïc bieåu dieãn döôùi daïng ña thöùc (thöôøng laø ña thöùc baäc thaáp). Thöïc chaát maët ñaïi soá cuõng laø maët daïng aån vôùi f döôïc bieãu dieãn döôùi daïng ñathöùc P(x,y,z). Daïng toång quaùt cuûa P: • Baäc cuûa ña thöùc P:
Hiển thị mặt đại số (cont.) • Phöông trình giao ñieåm cuûa f*(t) giöõa tia vaø maët (S) trôû thaønh ña thöùc theo bieán t: • Neáu thì P*(t)=0 coù nghieäm ñöôïc xaùc ñònh baèng coâng thöùc chính xaùc. • Neáu d>4 thì nghieäm cuûa P*(t)=0 phaûi döïa treân phöông phaùp soá ñeå tìm nghieäm gaàn ñuùng. Tuy nhieân, muïc ñích cuûa chuùng ta laø tìm nghieäm döông beù nhaát neân phöông phaùp tính nghieäm ñôn giaûn.
Hiển thị mặt đại số (cont.) • Phöông trình giao ñieåm cuûa f*(t) giöõa tia vaø maët (S) trôû thaønh ña thöùc theo bieán t: • Neáu thì P*(t)=0 coù nghieäm ñöôïc xaùc ñònh baèng coâng thöùc chính xaùc. • Neáu d>4 thì nghieäm cuûa P*(t)=0 phaûi döïa treân phöông phaùp soá ñeå tìm nghieäm gaàn ñuùng. Tuy nhieân, muïc ñích cuûa chuùng ta laø tìm nghieäm döông beù nhaát neân phöông phaùp tính nghieäm ñôn giaûn.
Hiển thị mặt tham số • Haøm f(u,v) vôùi hai bieán u,v bieåu dieãn maët tham soá töông öùng vôùi caùc thaønh phaàn x=x(u,v), y=y(u,v), z=z(u,v) • ví duï: • maët phaúng ñi qua ñieåm f0 vaø chöùa hai ñöôøng thaúng f = f0 + u n1 vaø f = f0 + v n2 vôùi vaø u1 và u2laø hai vector ñôn vò ñöôïc ñònh nghóa baèng phöông trình: Vector tröïc chuaån taïi moät ñieåm treân maët tham soá hoùa ñöôïc xaùc ñònh baèng:
Hiển thị mặt tham số (cont.) • Khi tia giao vôùi maët tham soá hoùa thì toïa ñoä giao ñieåm thoûa heä phöông trình: • ñaây laø heä phöông trình phi tuyeán (tröø khi f(u,v) laø maët phaúng). Duøng phöông phaùp giaûi heä xaáp xæ ta coù theå tìm giao ñieåm
Khả năng của thuật toán • Vật thể ở bất cứ vị trí nào trong không gian • Nhiều nguồn sáng với nhiều màu sắc khác nhau • Điểm quan sát ở bất kì vụ trí nào • Bề mặt vật thể có nhiều tính chất: • Ambient • Diffuse • Specular • Reflection • Refraction • Thay đổi độ phân giải của bức ảnh tạo ra
Dữ liệu • VECTOR : tọa độ, • x • y • z • COLOR : màu sắc, • Red • Green • Blue • RAY : tia, • Gốc : Origin • Hướng của tia : Direction
Dữ liệu • VIEWPOINT : Viewing Geometry, • Vị trí quan sát : Location • Hướng nhìn : Direction • Hai vectơ đơn vị của viewplane : • Up • Right • SURFACE : tính chất bề mặt vật thể, • Màu sắc : Color • Ánh sáng xung quanh : Ambient • Ánh sáng khuếch tán : Diffuse và Brilliance, • Ánh sáng phản chiếu : Specular và Roughness • Mức độ phản xạ – Reflection • Mức độ khúc xạ – Refraction.
Dữ liệu • OBJECT : đối tượng, • Hàm xác định giao điểm của tia và vật thể – Intersect • Hàm tính vectơ trực chuẩn tại một điểm trên vật thể – Normal • Tính chất của bề mặt vật thể – Properties • Danh sách các đối tượng ObjectList • Danh sách các nguồn sáng LightList
Các bước chính • Thuật toán sẽ tạo bức ảnh có kích thước là Width và Height • 640x480 • 800x600 • 1024x768 • Do đó, có một vùng đệm Buffer tương ứng với bức ảnh Ray Buffer Mắt
Các bước chính (cont.) Quá trình tạo ảnh diễn ra như sau: Tính toán màu cho mỗi pixel của bức ảnh, bằng cách quét từng hàng và từng pixel một (tương ứng với 2 vòng lặp). Để tính màu cho mỗi pixel, ta cho một tia Ray đi từ Viewpoint qua Viewplane vào khung cảnh 3D, màu của pixel là màu của tia tương ứng. Quá trình này thông qua 3 bước: • MakeRay, tạo tia từ mắt qua Viewplane • Trace, dò theo đường đi của tia Ray để định màu Color của tia. Do tia có thể phản xạ hay khúc xạ nhiều lần, nên ta phải dùng hằng số MAXRECURSELEVEL để giới hạn số lần đệ qui. • Sau khi tính toán màu của tia, lưu trữ màu vào vị trí tương ứng trong Buffer.
Thuật toán CreateImage( Width, Height) { for( y = 0; y < Height; y ++) for( x = 0; x < Width; x++) { Ray = MakeRay( x, y); Color = Trace( Ray, 0); // 0 : mức đệ qui Buffer[x][y] = Color; } }
MakeRay - Tạo tia Up Width (x,y) (x’,y’) Height Right Buffer Viewplane
MakeRay - Tạo tia (cont.) Ray (x’,y’) Direction Location
Trace – Dò tìm theo tia • Sau khi tạo tia Ray bằng MakeRay, ta cho nó đi vào không gian để xác định màu của nó thông qua Trace. • Trace nhận đối số là tia Ray (tạo bởi MakeRay), trả về màu Color. Ngoài ra, nó còn nhận mức đệ qui RecurseLevel (nếu lớn hơn MAXRECURSELEVEL thì không tính toán màu tiếp tục).
Trace – Dò tìm theo tia Ray Point Normal MinT (khoảng cách nhỏ nhất) Direction Origin Point = Ray.Origin + MinT * Ray.Direction
Trace – Thuật toán Trace( Ray, Color, RecurseLevel) { Xác định giao điểm của tia Ray và vật thể gần nhất MinObject MinT = khoảng cách từ giao điểm đến mắt Nếu (MinT == INFINITY) { Color = màu nền; return; } Point là giao điểm gần nhất Normal là vectơ trực chuẩn của vật thể tại Point Tính màu cho tia Ray (Shade) }
TraceXác định giao điểm gần nhất MinT = INFINITY • Object ObjectList { // Tính khoảng cách từ gốc của tia và giao điểm với vật thể T = Object.Intersection(Ray) if (T > 0 && T < MinT) { MinT = T MinObject = Object } } Point = Ray.Origin + MinT * Ray.Direction Normal = MinObject.Normal(Point)
ShadeXác định màu cho tia Ray Kết hợp các qui luật và tính chất bề mặt vật thể để xác định màu của tia Shade(MinObject, Ray, Normal, Point, Color, RecurseLevel) • MinObject : Vật thể gần nhất mà tia Ray giao • Point : Giao điểm của tia Ray và MinObject • Normal : Pháp vectơ tại giao điểm Point của MinObject • RecurseLevel : mức đệ qui • Color : màu của tia Ray “cần phải xác định”
ShadeXác định màu cho tia Ray (cont.) Shade( MinObject, Ray, Normal, Point, Color, RecurseLevel) { // Xác định các tia phản xạ và khúc xạ ReflectedRay, RefractedRay // Xác định tô bóng địa phương Color = AmbientColor + DiffuseColor + SpecularColor // Xác định tô bóng đệ qui if (RecurseLevel < MAXRECURSELEVEL) { Color += ReflectedColor Color = (1 – K) * Color + K * RefractedColor } }
ShadeXác định tia phản xạ và khúc xạ ReflectedRay ReflectedRay.Origin = Point ReflectedRay.Direction = - 2 * Normal * (Ray.Direction dot Normal) + Ray.Direction RefractedRay C = Ray.Direction dot Normal