CÁC KỸ THUẬT CHIẾU SÁNG TRONG ĐỒ HỌA MÁY TÍNH

Một phần của tài liệu Tổng quan về kỹ thuật đồ họa (Trang 129)

8.2.1. Đỏnh giỏ về cường độ ỏnh sỏng

Khỏi niệm

Định nghĩa

N N là vectơ phỏp tuyến chuẩn hoỏ của bề mặt (vectơ trực chuẩn) tại điểm P Q Q: vị trớ của ỏnh sỏng

L L là vộcto ỏnh sỏng từ điểm Q tới P. Do vậy giỏ trị của L sẽ được tớnh như

sau:

L=P - Q V V là vectơ quan sỏt.

R R là giỏ trị phản chiếu xung quanh V, nú được tớnh toỏn như sau: R=NV *((N*V)*2)

H Trong thời gian trước, khi tốc độ của mỏy tớnh chưa nhanh được như ngày nay, để tớnh đựơc giỏ trị R đũi hỏi chi phớ nhiều về thời gian và tiền bạc nờn người ta dựng một giỏ trị xấp xỉđể thay thế là H:

2 ) (L V H = + 8.2.2. Cường độ ỏnh sỏng

Trong nghiờn cứu, thiết kế cường độ ỏnh sỏng cú hai phương phỏp:

Phương phỏp thứ nhất được đại diện bằng một bộ 3 vectơđơn, mỗi giỏ trịđược giới hạn từ 0-1. Trong phương phỏp này, cựng lỳc 3 vectơ được dựng để xỏc định tất cả cỏc thuộc tớnh màu của vật.

Phương phỏp thứ hai, mỗi thuộc tớnh ỏnh sỏng sẽđược biểu diễn bởi một bộ 3 vectơ. Do vậy mỗi một giỏ trị ỏnh sỏng sẽ bao gồm một giỏ trị màu bao quanh, một giỏ trị màu khuếch tỏn ...

Phương phỏp thứ nhất thỡ mụ tả thật hơn, trong khi phương phỏp thứ hai lại đạt hiệu quả cao trong việc tạo hiệu ứng nghệ thuật. Hiện nay thỡ xu hướng chung khụng cũn quỏ coi trọng việc mụ tả chớnh xỏc sự vật hiện tượng.

Hàm phõn phối phản xạ hai chiều – BRDF

Nếu nhỡn từ cạnh của vật, ỏnh sỏng nằm rải rỏc tại từng điểm đơn lẻ trờn khắp bề

mặt với cường độ sỏng sẽ thay đổi liờn tục qua cỏc gúc.

Hỡnh 8.5 BRDF

Việc cố gắng đưa một mụ hỡnh ỏnh sỏng về một mẫu chớnh là hàm phõn phối hệ số

) cos( ) , , ( ) , , , , ( ) , , , , ( " , , i i i i r i i r r r i i r r d r I r I r p ω θ φ θ λ φ θ φ θ λ φ θ φ θ λ λ λ λ =

Cỏc thuật ngữđược định nghĩa như sau : Khỏi niệm Định nghĩa

Ir Cường độ phản chiếu của ỏnh sỏng hướng ra Ii Cường độ phản chiếu của ỏnh sỏng hướng vào

λ Bước súng

ρ” Hệ số Quang Phổ của tia phản xạ

(θr,φr) hướng tia đi ra (θi,φi) Hướng tia đi vào

BRDF được định nghĩa là tỷ lệ của cường độ ỏnh sỏng đi ra theo một hướng đặc biệt và cường độ luồng sỏng đi vào được đỏnh dấu bằng điểm P.

Theo cụng thức ở trờn thỡ nú chưa hoàn toàn hữu ớch cho những cụng việc mang tớnh thực hành cao. Do vậy cỏc nhà nghiờn cứu đó bỏ nhiều cụng sức vào việc nghiờn cứu tỡm ra những mụ tả, ứng dụng mang tớnh thực tiễn cao hơn của BRDF.

Màu sắc truyền thống của mỗi vật chất tại điểm P sẽ được chia ra thành 3 yếu tố

riờng biệt: Bao quanh (ambient), phản chiếu (specular) và khuếch tỏn (diffuse).

8.2.3. Những thuộc tớnh bao quanh của vật chất

Thuộc tớnh bao quanh khụng phải là một thuộc tớnh reallife thực sự, nhưng nú thường (adsbygoogle = window.adsbygoogle || []).push({});

được ứng dụng cao trong nghệ thuật và việc gỡ lỗi (debug). Màu bao quanh cú thể được mụ tả bằng màu đồng nhất của chỳng, mà khụng thay đổi cường độ trờn toàn bộ bề mặt.

Vỡ thế giỏ trị ỏnh sỏng của một đối tượng bao quanh tại một bề mặt được xõy dựng trong đoạn giả mó sau:

Ambient Color Calculation

Surface S = Surface that P lies on; Color C = S.Material.Ambient;

return C;

Và chỳng ta cú thể nhận thấy rằng, ỏnh sỏng toàn cục là tổng thể của những tỏc động tự nhiờn của sự chiếu sỏng và cỏc điều kiện của bề mặt. Và là một ỏnh sỏng liờn tục.

8.2.4. Thuộc tớnh khuếch tỏn của vật chất

Màu khuếch tỏn là sự trải ra như nhau theo mọi phương hướng, và vỡ thế chỉ phụ thuộc trờn vectơ ỏnh sỏng đầu vào L, và vectỏ phỏp tuyến trực chuẩn N. Hỡnh vẽ sau cho thấy ý tưởng đú:

Hỡnh 8.7 Mụ tả ỏnh sỏng khuếch tỏn

Mụ hỡnh Phong sau khi thực hiện thành phần phản chiếu:

Specular Color Calculation

ReflectionVector R IntersectionNormal N IntersectionPoint P

Surface S = Surface P lies on

float glossiness = S.material.glossiness float angle = R.dot(N)

float intensity = Light.Color * S.material.specular return intensity * pow(angle,glossiness)

Hỡnh 8.8 hỡnh cầu Raytraced chỉ với thành phần phản chiếu

Mụ Hỡnh Phong:

Đa số vật thể khụng chỉ được mụ tả đơn thuần bằng mỗi thuộc tớnh phản xạ hay khuếch tỏn, mà nú là sự kết hợp của cả hai yếu tố này thậm chớ là cả cỏc thuộc tớnh bao quanh nếu cần.

Mụ hỡnh Phong được định nghĩa trong BRDF như sau:

Khỏi niệm Định nghĩa

Diffuse Phần nhỏ năng lượng phản chiếu

Specular Phần nhỏ của năng lượng khuyếch tỏn phản chiếu

Hỡnh 8.9 Phõn phối của Phong. Đa số việc mở rộng thực thi đều đưa tới: Đoạn mó rỳt gọn: Phong Calculation return AmbientColorCalculation()+DiffuseColorCalculation()+SpecularColorCalculation();

Lưu ý: nếu ta dựng màu sắc theo hướng trực quan hoỏ thỡ sẽ cần dựng đến phương phỏp chồng chất màu.

Hỡnh 8.10 Hỡnh cầu Raytraced với ỏnh sỏng Phong 8.2.5. Sự tương tỏc bề mặt/ỏnh sỏng

Mỗi bề mặt tương tỏc ỏnh sỏng theo những cỏch khỏc nhau tuỳ theo thuộc tớnh riờng của nú.

Absorbance

Trong thế giới thật một bề mặt luụn thu hỳt một vài luồng ỏnh sỏng khỏc nhau nào

đú. Điều đú lý giải cho sự tỏn sắc nhiệt. Và đa số những thuộc tớnh này đều bị bỏ qua khi render. Đụi khi quỏ trỡnh render cũng phải sử dụng một số vật thay thế ngẫu nhiờn (fake)

để trỏnh cỏc vũng đệ quy vụ hạn. (adsbygoogle = window.adsbygoogle || []).push({});

Reflectance

Một bề mặt phản chiếu ỏnh sỏng dựa trờn cỏc yếu tố như: bề mặt bỡnh thường của vật, hướng nhỡn, và gúc tới của ỏnh sỏng. Tham số hệ số phản xạ chớnh là giỏ trị cường độ

ỏnh sỏng trong khu vực xem xột được mụ tảở trờn.

8.2.6. Sự khỳc xạ và sự truyền sỏng

Bất kỳ một vật thể nào với một độ trong suốt nhất định thỡ đều truyền sỏng. Đú là hiện tượng ỏnh sỏng đi qua cỏc điểm cong P, tuõn theo luật Snell. Hiện tượng này dễ thấy nhất khi ta quan sỏt một cốc nước, nơi mà cỏc đối tượng ở một mặt khỏc hay ở dưới bề mặt

quan sỏt cú vẻđược chuyển vị trớ. Vỡ thế nếu một tia tới trong mụi trường vật chất m1 (lỳc này khụng khớ và chõn khụng đều được coi là vật chất) với hệ số khỳc xạ n1ở một gúc θ1,

đến mụi trường vật chất m2 cú hệ số khỳc xạ n2; thỡ luật Snell định nghĩa là:

Đõy được gọi là phương trỡnh khỳc xạ của tia T.

R là tia tới của ỏnh sỏng.

Biờn giới giữa hai mụi trường vật chất được gọi là giao diện.

8.3. CÁC CễNG NGH 8.3.1. Raytracing

8.3.1.1. Gii thiu

Raytracing bắt đầu được sử dụng trong đồ họa mỏy tớnh từ khoảng 1980 như là một sự thử

nghiệm sớm nhất trong việc giải quyết vấn đề chiếu sỏng tổng thể. Sau đú đó cú vụ số cải tiến được đưa ra, nhưng chỳng ta chỉ diễn tả một ý tưởng cơ bản và những phần liờn quan. Phần này cú nhiều ưu điểm hơn và cũng chứa một vài kỹ thuật mới hơn, tuy khụng cải thiện chất lượng hỡnh ảnh nhưng lại tăng tốc độ trong việc xử lý biểu diễn.

8.3.1.2. Thut toỏn

í tưởng cơ bản trong raytracing 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, vớ dụ từ mắt đến khung cảnh. Khi một tia sỏng tiếp xỳc với đối tượng trong khung cảnh cú ỏnh sỏng cường độ mạnh tại điểm giao nhau được tớnh toỏn cho phương đối diện với tia sỏng. Cường độ này chớnh là “màu” của tia sỏng.

Để tớnh toỏn cường độ, chỳng ta sử dụng cụng thức sau: I = Ilocal + kr*Ireflected + kt*Itransmitted

Trong đú:

Ilocal: ỏnh sỏng trực tiếp

Kr: nhõn tố phụ thuộc vật chất đại diện sự phản chiếu Ireflected: cường độ ỏnh sỏng đến từ nguồn phản chiếu Kt: nhõn tố phụ thuộc vật chất đại diện độ chắn sỏng Itransmitted: cường độ ỏnh sỏng truyền xuyờn qua đối tượng

Ilocal:(ỏnh sỏng trực tiếp) cú thểđược tớnh toỏn sử dụng bất kỳ sự phản chiếu mụ hỡnh cục bộ nào, nhưng trong thực tế điều này đa số luụn luụn là mụ hỡnh Phong được mụ tả

trong phần trước của tài liệu. Mụ hỡnh thường được tăng cường và được gọi là “búng nhạy sỏng”(Shadow feelers). Búng nhạy sỏng là tia sỏng được nộm xuyờn qua khung cảnh từ điểm giao nhau đến mỗi nguồn sỏng để xỏc định nếu cú tầm nhỡn (line of sight) hoặc nếu ỏnh sỏng bị chặn lại bởi một vài đối tượng khỏc. Nếu một nguồn sỏng bị chặn lại thỡ nú bị

bỏ qua trong mụ hỡnh cục bộ. Mụ hỡnh Phong cú thểđược tớnh toỏn từđiểm giao nhau và tại điểm bề mặt thụng thường.

Cả Ireflecttedvà Itransmittedđều được xỏc định bằng việc bắn một tia sỏng mới xuyờn qua khung cảnh cũng giống như tia sỏng được bắn xuyờn qua điểm ảnh của hỡnh ảnh. Điểm bắt đầu của chuỗi tia sỏng này là điểm giao nhau, cú phương là phương phản chiếu của Ireflected và hướng khỳc xạ của Itransmitted. Việc tớnh toỏn những phương hướng này được biểu diễn (covered) bờn dưới:

Phương hướng được tớnh toỏn như sau: R = 2(N*L)N - L

Trong đú: N : phỏp tuyến trực chuẩn tại điểm giao nhau L: phương đối diện với tia sỏng đến

Điều khiển việc truyền tia sỏng (khỳc xạ):

T = (n1/n2)L - (cos(φ) + (n1/n2)(L*N))N Trong đú: n1: chỉ số khỳc xạ của vật chất đến

n2: chỉ số khỳc xạ của vật chất đi φ: được xỏc định bằng cụng thức sau: (sin φ/sin θ) = (n1/n2) và θ là gúc giữa L và N

Một khi bắn một tia sỏng mới tới mỗi điểm giao nhau (để tớnh toỏn Ireflected và Itransmitted) raytracing sử dụng một hàm đệ quy. Điều kiện giới hạn cho đệ quy cú thể hoặc là định trước chiều sõu phộp đệ quy cực đại cú thểđạt đến hoặc khi tia sỏng khụng chạm tới bất kỳ đối tượng nào trong khung cảnh trong trường hợp nào đú được cấp phỏt một màu nền. (adsbygoogle = window.adsbygoogle || []).push({});

Rừ ràng độ sõu hơn mà ta cho phộp phộp đệ quy sẽ làm thời gian dịch lõu hơn nhưng chiều sõu phộp đệ quy cực tiểu cú thể làm cho một phần nhất định của hỡnh ảnh bị mất. Việc tỡm chớnh xỏc chiều sõu của phộp đệ quy cực đại để sử dụng là một vấn đề của việc vặn và kiểm tra cho đến khi kết quả hỡnh ảnh nhỡn được tốt.

Một vớ dụ làm cỏch nào để xỏc định trước chiều sõu phộp đệ quy cú thểảnh hưởng

đến hỡnh ảnh cuối cựng cú thể được nhỡn thấy trong ảnh dưới. Hỡnh ảnh đầu tiờn hiển thị

một cảnh tổng quan với độ sõu phộp đệ quy là 5. Trong những ảnh tiếp theo, ta cú cỏi nhỡn cận cảnh một phần bờn trong thỳ vị - tức là ởđõu cú 2 hỡnh cầu tương tỏc với nhau. Ảnh 2 cho thấy chiều sõu phộp đệ quy 0, vớ dụ chỉ mụ hỡnh phản xạ cục bộ (Phong trong trường hợp này) được sử dụng. Ảnh 3 biểu diễn chiều sõu phộp đệ quy 1. Ở đõy ta cú thể nhỡn thấy 2 hỡnh cầu phản chiều lẫn nhau một lần. Hỡnh cầu cực tả (leftmost) cũng sỏng hơn khi màu nền của cảnh được cho phộp nảy ra khỏi nú. Ảnh cũn lại cho thấy chiều sõu phộp đệ

quy 2, 3 và 4. Chỳ ý thụng số tương ứng của hỡnh cầu phản chiếu lẫn nhau và thật khú để

1 2 3

4 5 6

Hỡnh 8.11 Hỡnh cỏc quả cầu phản chiếu

Raytracing cú thểđược nhỡn như một cõy- xử lý tạo thành từ mỗi va chạm tia làm phỏt sinh ra nhiều hơn 2 tia: 1 phương phản chiếu và 1 phương khỳc xạ. Những tia này

được giả thiờt rất mỏng và khụng dàn trải. Kết quả này trong một số vấn đề được mụ tả

phớa dưới nhưng cũng cú nghĩa 1 raytracer cú thể phải đủ nhanh một khi số điểm giao nhau trờn 1 pixel cú hạn bởi 2n với n là chiều sõu của phộp đệ quy. Cú thể thấy chiều sõu của phộp đệ quy khụng phải rất cao- thụng thường giữa 4 và 8 là đủ. 256 điểm giao nhau bởi vậy là cực đại và trong trường hợp những đối tượng mờ đục chỉ cú 1 tia trờn 1 điểm giao nhau thỡ sinh ra 1 khối lượng lớn số giao điểm trờn 1 pixel tới 8. Điều này cú nghĩa là những cảnh cú độ phức tạp vừa phải cú thể biểu diễn lại trong 10 phần giõy (tens of second) trờn phần cứng hiện tại và thậm chớ khung hỡnh thời gian thực (realtime framerates) là cú thể nếu thuật giải được tối ưu húa.

Chỳ ý: cả 3 thành phần trong cụng thức tớnh cường độ cú thểđược tớnh toỏn từđiểm giao nhau và vectỏ phỏp tuyến trực chuẩn trờn điểm đú.

Mó giả cho toàn bộ thuật giải như sau:

Color traceRay(Vector start, Vector direction, int depth){ if (depth < 0) return BLACK;

Object hitObject; Vector hitPoint;

if (rayHit(start, direction, &hitObject, &hitPoint)) { Color result;

result = calculateLocalContribution(hitObject, hitPoint); result += calculateReflection(hitObject, hitPoint,

traceRay(hitPoint, reflectedDirection, depth - 1)); result += calculateRefraction(hitObject, hitPoint, traceRay(hitPoint, refractedDirection, depth - 1)); return result;

} else

return BACKGROUND_COLOR; }

Image image;

for(each scanline Y) { for(each pixel X) {

image[X][Y] = traceRay(eye,directionFromEyeToXY, RECURSION_DEPTH); }

}

return image; }

8.3.1.3. Màu gc (Primitives)

Cảnh raytraced phải bao gồm những đối tượng (được gọi là những màu gốc) mà cú thể

tớnh toỏn được giao điểm với một tia và vectỏ phỏp tuyến trực chuẩn tại điểm đú. Mặt khỏc chỳng yờu cầu một raytracer và bởi vậy nú dễ dàng được thờm vào những màu gốc- chỉ một trong sốđú phải viết hàm để thực hiện nhiệm vụ này.

8.3.1.4. Màu gc chớnh xỏc (Mathematical primitives)

Những đối tượng như những hỡnh cầu và mặt phẳng thỡ dễ dàng để điều khiển trong một raytracer từ tia sỏng – sự giao nhau và thụng thường rất dễ để tớnh toỏn. Những điều này cũng cú thểđược tớnh toỏn trong một khoảng thời gian khụng thay đổi và với độ chớnh xỏc tựy ý (đõy khụng phải là trường hợp cho màu gốc được mụ tả bờn dưới). Ởđõy khụng đi vào chi tiết về tia sỏng – tớnh toỏn cắt ngang (intersect), chỳng cú thểđược tỡm thấy trong [6] và việc thực hiện cú thểđược tỡm thấy trong code. (adsbygoogle = window.adsbygoogle || []).push({});

8.3.1.5. Lưới đa giỏc (Polygon meshes)

Lưới đa giỏc rất hữu ớch để mụ hỡnh húa những đối tượng tựy chọn và rất thớch hợp để hỗ

trợ như việc vẽ lại màu gốc trong một tia vạch nếu muốn vẽ lại khung cảnh hiển thị đối tượng từ thế giới thực như là ụ tụ, cỏi bàn, mỏy bay hay ngụi nhà… - tất cả những đối tượng khú hoặc khụng thể mụ hỡnh húa thực sự mà chỉ sử dụng một thuật toỏn đối tượng như là hỡnh cầu, mặt phẳng… Trong trường hợp ởđõy chỉ làm việc với những lưới đa giỏc nơi mà tất cả đa giỏc đều là tam giỏc. Đõy là cỏch truyền thống để biểu diễn một lưới đa giỏc và như vậy cũng khụng bị quỏ hạn chế.

Với bất kỳ màu gốc nào trong một tia vạch tất cả chỳng ta cần cú thể vẽ lại nú là một cỏch để tớnh toỏn điểm giao nhau với một tia sỏng đó cho và một bề mặt bỡnh thường mà cú điểm đú bờn trong. Với những đối tượng toỏn học được miờu tảở trờn ta cú thể nhanh chúng tớnh toỏn chớnh xỏc. Với một lưới đa giỏc cú phần khú hơn và ta sẽ hướng vào 2 nhiệm vụ lần lượt ở bờn dưới.

Vấn đề tớnh toỏn giao điểm giữa một lưới đa giỏc và một tia sỏng cú thể bị phỏ vỡ

trong việc tớnh toỏn giao điểm giữa tia sỏng và tất cả cỏc hỡnh tam giỏc mà tạo ra lưới. Cỏi gần nhất của những điều này là rất nhiều sự giao nhau là một cỏi mà chỳng ta sử dụng

điểm giao nhau giữa lưới và tia sỏng.

Như vậy chỳng ta gặp phải thỏch thức với việc tớnh toỏn giao điểm giữa một tam giỏc và một tia sỏng. Những đặc trưng được làm trước bởi việc tớnh toỏn giao điểm giữa tia sỏng và mặt phẳng mà cú tam giỏc ở đú. Một điểm như vậy sẽ luụn tồn tại trừ phi tia sỏng song song tuyệt đối với mặt phẳng tam giỏc. Nếu trường hợp chỳng ta cú thể quyết

Một phần của tài liệu Tổng quan về kỹ thuật đồ họa (Trang 129)