Dịch bởi Võ Đức Huy
Toán học trân trọng giới thiệu…
Tất cả chúng ta đều bị cuốn hút bởi những hình
ảnh sống động trên phim tạo bởi máy tính. Điều mà phần lớn chúng ta không nhận
ra là những con khủng long trong Công viên kỉ Jura và những kỳ quan trong Chúa
tể những chiếc nhẫn sẽ không xuất hiện nếu không có toán học.
Nhưng những hình ảnh tuyệt vời này được tạo
nên như thế nào? Đồ họa vi tính và thị giác máy tính là những chủ đề lớn. Trong
bài viết này chúng ta sẽ xem giản lược một vài công cụ toán dùng để tạo ra sản
phẩm cuối cùng. Trước hết chúng ta tạo ra thế giới trong phim và cho nó sự sống.
Xây dựng khung cảnh
Bước đầu tiên để tạo ra một bộ phim từ máy
tính là tạo ra các nhân vật trong câu chuyện và thế giới mà họ sống. Mỗi đối tượng
trong số đó được mô hình hóa bởi những mặt tạo bởi các đa giác nối nhau (thường
là các tam giác). Các đỉnh của mỗi tam giác được chứa trong bộ nhớ máy tính. Cần
biết rằng mặt nào của tam giác nằm ở phía ngoài của đối tượng hay nhân vật.
Thông tin này được mã hóa bằng thứ tự các đỉnh được lưu, theo quy tắc bàn tay
phải (tương tự vật lý): cuộn ngón tay của bạn vòng quanh tam giác theo thứ tự
cho bởi các đỉnh. Chỉ có một cách để làm điều đó, và ngón trỏ của bạn sẽ chỉ ra
một mặt của tam giác- và đó là mặt ngoài. Nếu thử làm điều đó, bạn sẽ thấy hướng
ngoài của tam giác (A,B,C) sẽ đối với hướng ngoài của tam giác (A,C,B).
Bây giờ bề mặt của vật thể là một lưới các tam
giác, chúng ta có thể tô màu mỗi thành phần của nó. Ở đây điều quan trọng là nắm
được ánh sáng của cảnh mà chúng ta đang mô hình hóa, và điều này được làm bằng
một qui trình gọi là ray tracing. Từ điểm nhìn của chúng ta, ta lần các tia
sáng ngược lại phía vật thể và để chúng được phản xạ trên đó. Nếu tia từ mắt
chúng ta phản xạ từ một mặt (một tam giác trong lưới) về nguồn sáng, chúng ta
tô mặt đó bằng màu sáng và nó trông như là được rọi từ nguồn sáng. Nếu tia sáng
phản xạ không gặp nguồn sáng, ta tô mặt đó với màu tối hơn.
Để theo dõi một tia sáng ngược về một mặt, ta
cần mô tả toán học cho bề mặt, và giải các phương trình liên quan đến tia sáng
và mặt phẳng mô tả bởi mặt đó. Để làm điều đó, ta sử dụng vector. Chúng ta đặt
không gian vào một hệ trục tọa độ 3 chiều với tâm - điểm (0,0,0) - ở điểm nhìn
của ta. Một vector
$v= \left ( a,b,c \right )$ biểu diễn một
mũi tên bắt đầu từ tâm và kết thúc ở điểm với tọa độ a,b và c. Chúng ta có thể
nhân $v$
với một số, ví
dụ 2
, và được $2v=2\left ( a,b,c \right )= \left ( 2a,2b,2c \right )$
. Vậy $2v$
là mũi tên chỉ
cùng hướng với
nhưng dài gấp
đôi.
Giờ hãy xem xét biểu diễn $\lambda v$
, với $\lambda $
là một biến,
nói cách khác là bất kỳ số thực nào. Biểu diễn này không còn xác định duy nhất
một mũi tên với độ dài nhất định, vì độ dài đã trở thành biến số, nhưng nó chỉ
hướng của mũi tên. Nói cách khác, biểu diễn này mô tả đường thẳng chứa vector $v$
. Nó mô tả một đường thẳng - một tia - đi từ tâm - mắt
chúng ta - với hướng định bởi vector $v$
.
Mặt phẳng xác định bởi một mặt tam giác có thể
biểu diễn bởi ba thông tin: vị trí của một đỉnh, giả sử là đỉnh $a_{1}$
, cùng các vector biểu diễn đường thẳng từ
$a_{1}$ đến $a_{2}$ và từ $a_{1}$
đến $a_{3}$
.
Để biết tia sáng cắt mặt phẳng ở đâu và tính
toán phương trình của tia sáng bị phản xạ, ta cần giải các phương trình liên
quan đến hai cách biểu diễn vừa nói.
Phương trình của một tia, với $\lambda $ là số thực và v là vecto:
$r=\lambda v$
Phương trình mặt phẳng định bởi tam giác có ba đỉnh $a_{1}$, $a_{2}$, $a_{3}$
$r=a_{1}+\mu_{1}\left(a_{2}-a_{1}\right)+\mu_{2}\left(a_{3}-a_{1}\right)$
(Bạn có thể xem chi tiết toán học về ray
tracing trong bài báo đột phá của Turner Whitted, "An improved illumination model for shaded display", Communications
of the ACM, Volume 23, Issue 6.)
Ray tracing có thể
tạo ra những cảnh rất giống thực nhưng nó rất chậm. Điều này chấp nhận được cho
sản xuất phim, nhưng sẽ thành rắc rối nếu bạn cần hiệu ứng ánh sáng thời gian
thực, như trong game trên máy tính. Những hiện tượng phức tạp như đổ bóng, khúc
xạ và phản xạ đa hướng rất khó để được mô hình hóa động và những phương pháp
toán tiên tiến hơn, như precomputed radiance transfer và radiosity được dùng ở
đây.