
RENDER REALTIME CÓ THỰC SỰ LÀ BƯỚC TIẾN Ở THỜI ĐIỂM HIỆN TẠI???
Đã bao giờ các bạn thắc mắc, bằng cách nào mà máy tính của mình, xuất ra được 1 hình ảnh không có thật, mà lại có thể trông như thật chưa?
Về cơ bản, nhờ có máy tính, chúng ta đã tạo ra được một thế giới khác, như là chúa vậy!!
Nhờ đâu mà ra?!
Câu trả lời ở đây vô cùng dễ hiểu, nhưng không đơn giản.
Đó là TOÁN HỌC!!!
Cụ thể hơn thì đây là một nghệ thuật kết hợp giữa:
• Toán học
• Khoa học máy tính
• Lập trình
Tất cả công nghệ của chúng ta, đều bắt đầu chỉ từ 2 con số: 0 và 1
0 và 1 chính là Mã Nhị Phân – Binary (Nghe Delnary có quen quen không ạ? ?)
Nhờ sự kết hợp của 0 và 1, chúng ta cơ bản đã trở thành một Đấng, thật là thần kỳ!!!
VẬY THÌ CHÚNG TA CÙNG ĐI TÌM HIỂU VỀ TOÁN HỌC NÀO!!!
Lừa đấy, mình chưa đủ trình nói về toán học đâu, chuyện này có lẽ nên nhờ tới một nhân vật hoành tráng khác, đó chính là một người bạn của mình: Mời bạn đăng nhập để nhận link download!! Với vốn kiến thức cực kỳ sâu rộng về khoa học máy tính, cùng với sự quyết tâm và bền bỉ, Mạnh cùng InnerPiece chuẩn bị ra mắt một Game Engine 3D Vulkan và Đa nền tảng phát triển bởi người Việt, ra mắt ngày 26/06 này. Anh chị em quan tâm tới đồ họa và công nghệ nước nhà có thể ghé qua đây xem nhé!
Còn chuyên đề thực sự hôm nay là:
LƯỢC SỬ PHÁT TRIỂN CỦA ĐỒ HỌA MÁY TÍNH
-Part 01-
OK, Let’s go!!!
Trước tiên phải bắt đầu từ thực tế, câu hỏi đặt ra là:
Làm sao chúng ta nhìn thấy mọi vật?
Theo sách vật lý lớp nào đó em không nhớ rõ (hê hê). Thì, chúng ta nhìn thấy mọi vật, là nhờ có ánh sáng từ vật truyền vào mắt ta.
Ánh sáng này từ đâu ra? Chính là từ những nguồn sáng (Bóng đèn, Mặt trời, Bầu trời) truyền tới vật, sau đó vật phản xạ ánh sáng tới mắt, và ta nhìn thấy vật đó.
Tổng quát hơn, một nguồn sáng sẽ phát ra rất rất nhiều tia sáng, những tia này sẽ chạm tới các bề mặt, rồi từ đó tiếp tục nảy bật theo tất cả các hướng tới các bề mặt khác, quá trình này lặp đi lặp lại gần như vô tận, và một số trong đó tới mắt, giúp chúng ta nhìn thấy vật thể.
Điểm khủng khiếp ở đây là, từ một tia ban đầu, có thể nảy bật ra vô hạn số tia sau đó!!! Mà càng nhiều nguồn sáng thì sự khủng khiếp càng gia tăng!
Để giả lập số tia vô hạn này, chính là 1 thách thức với máy tính của chúng ta ở thời điểm hiện tại. Và là một điều không tưởng vào những năm 60 thế kỷ trước, khi kỉ nguyên CGI bắt đầu nhem nhóm, nhưng sức mạnh máy tính còn nhiều hạn chế.
Vấn đề này vô cùng nan giải với những nhà khoa học máy tính thời đó. Và cuối cùng, họ đã tìm ra được 1 phương pháp.
Từ đây, chúng ta có phương pháp đầu tiên để máy tính có thể xuất hình ảnh, đó là:
I. PROJECTION AND RASTERIZATION: Phép chiếu và vẽ hình ảnh từ không gian 3D ra 2D (màn hình)
Đây là một phương pháp được những nhà khoa học máy tính những năm 1970s nghiên cứu và phát triển. Và vẫn là một phần của Quy Trình Đồ Họa chạy trên GPU cho tới nay (thường thấy nhất chính là trong video game). Một trong những thành công nổi tiếng đình đám thời gian này, chính là Video về bàn tay chuyển động – “A computer animated hand” của Ed Catmull năm 1972 (Nghe Catmull có quen không ace Vray-er? hehe)
Họ bắt đầu khảo sát dựa trên một Tam Giác – Triangle trong không gian 3D, và tìm cách xuất nó ra 2D trên màn hình. Tại sao lại là tam giác? Rất đơn giản với lí do là, chỉ cần ba điểm bất kì, chúng ta sẽ có một mặt phẳng. Còn với 4 điểm trở lên? Rất dễ tạo ra mặt phẳng vô định hình (H1), và chúng ta cần tránh điều này.
Okie, vậy bh chúng ta sẽ có:
1. Một Tam Giác – Triangle
2. Một Camera – Coi như mắt nhìn trong thực tế
3. Một Lưới Pixel (lưới điểm ảnh) – Để xuất hình ảnh trên đó lên màn hình. Lưới này được chia ô vuông dọc ngang, mỗi ô vuông là 1 điểm ảnh (Chúng ta rất dễ dàng nhìn ra pixel của 1 bức ảnh, chỉ cần lăn con chuột phóng to ảnh lên hết cỡ thôi (H2))
Cả 3 sẽ lần lượt được xếp thứ tự như sau:
Camera -> Lưới Pixel -> Tam Giác (H3.a)
Bước 1: Họ gióng từ 3 điểm của tam giác, kẻ 3 đường tới camera. (H3.b)
Bước 2: Ba đường này giao tại 3 điểm nào trên Lưới Pixel thì đánh dấu chỗ đó lại (H3.c)
Bước 3: Nối 3 điểm đã được đánh dấu, và bắt đầu đổ màu cho tam giác đó (H3.d)
Woa, vậy là chúng ta đã xuất được hình ảnh Tam Giác đầu tiên từ không gian 3D ra 2D trên màn hình!
Bh chúng ta cùng phân tích 1 chút nhé!
Bản chất của phương pháp này là máy tính không tính toán theo dạng tia, mà chỉ chuyển dữ liệu từ vector sang pixel. Chính vì vậy:
Ưu: Giải quyết được vấn đề tia vô hạn, và chạy trên GPU. Dẫn đến cho kết quả cực nhanh, từ đó có thể Realtime và được ứng dụng trong làm game.
Nhược:
• Không thực tế với bóng đổ, phản xạ, khúc xạ, các tính chất vật lí. (vì chỉ chiếu điểm lên Lưới Pixel nên không giả lập tính chất đúng thực tế được, mà phải dùng nhiều thủ thuật ăn gian khác)
• Gặp vấn đề khi trong scene có nhiều đối tượng trước sau. Đối tượng nào được vẽ sau cùng sẽ xuất hiện sau cùng, chèn lên đối tượng khác, cho dù thực tế nó nằm sau. Để giải quyết vấn đề này, họ sử dụng Z-Buffer, tạo một Depth map (Kênh mà chúng ta bh vẫn dùng để làm DOF cho scene) để phân biệt thứ tự trước sau giữa các vật thể bằng sắc độ từ đen tới trắng, càng trắng sẽ càng gần màn hình.
Đọc tới đây rùi chúng ta có thể nhận ra được điều gì?
Tất cả những phần mềm Render Realtime (Enscape, UE4, Unity,…) và cả video game nữa, chính là dựa trên phương pháp Projection and Rasterization.
Vì vậy Render Realtime không thực sự là bước tiến trong thời đại này như nhiều người vẫn tưởng. Vì Render Realtime chỉ giải quyết được vấn đề nhanh, chứ không đúng thực tế (thậm chí cần nhiều thủ thuật để ăn gian). Và nó vẫn đang được dùng trong video game từ xưa tới này rồi.
Còn với Vray hay Corona? Phương pháp của chúng là gì? Có ưu và nhược điểm gì?
Chờ số tiếp theo nhé các bạn!!
Hẹn gặp lại các bạn!


