3D Rendering là gì?


(Animation Apprentice) #1

Mong rằng qua bài viết này chúng ta sẽ hình dung được một số khái niệm về Đồ họa máy tính, bởi vì đây chính là nguồn gốc của những thứ mà mình và mọi người đều đam mê, yêu thích, và mong muốn cho nó phát triển hơn ở Việt Nam

  1. Mở đầu
    =========
    3D Rendering là một quá trình của đồ họa máy tính nhằm chuyển đổi sự bố trí của các Models trong không gian 3D thành hình ảnh 2D, những hình ảnh đó mang những hiệu ứng trông giống như vật thể thực được gọi là Photorealistic Rendering, hoặc mang những hiệu ứng không giống vật thể thực (giống kiểu của những tác phẩm 2D vẽ theo phong cách tự do, hoặc hình ảnh như của phim hoạt hình) thì được gọi là Non-photorealistic Rendering.

  2. Các cách thức Render
    =======================

a. Real-time (Method 1)

Sử dụng trong Game, Mô phỏng,…
Scene được tính toán và hiển thị theo thời gian thực (Real-time, khác với Run-time là trong lúc thực thi, Real-time có nghĩa là nó diễn ra theo một cách khiến người trải nghiệm cảm giác nó đang diễn ra như một sự việc gì đó trong đời thật, không có sự thiếu hụt thời gian khi sự việc diễn ra, ví dụ một game bóng đá, đồ họa của nó tuy là Real-time rendering, tốc độ hình ảnh phù hợp cho người chơi để có thể tương tác môi trường đó, nhưng Gameplay lại không phải là Real-time bởi 1 phút của trận đấu không phải là 1 phút của đời thực, các game dạng GTA cũng không phải là Real-time gameplay).
Mục tiêu chính của Real-time Rendering là đạt được một chất lượng render cao trong một thời gian ngắn nhất có thể (thường là render ra 24 hình ảnh trong một giây, hoặc là một tốc độ nào khác phù hợp với thị giác con người có thể nhận thức).

b. Non Real-time (Method 2)

Những hoạt cảnh dành cho phim, video được render chậm hơn rất nhiều so với Real-time Rendering.
Mục tiêu của phương pháp này là sự chân thực, nên những kỹ thuật cao cấp hơn sẽ được áp dụng, sử dụng những công đoạn tính toán phức tạp. Các renderer thường chỉ bắt đầu render các thành phần của một scene, và những Layer của một cảnh đó hoàn toàn có thể được render riêng biệt và tích hợp vào tác phẩm cuối cùng (quá trình Compositing).

c. Tùy trường hợp, yêu cầu và mục đích người ta sẽ sử dụng các cách thức render khác nhau (Method N)

  1. Một vài điểm khác nhau giữa Real-time và Non Real-time Rendering
    ===================================================================

Method 1: Mô phỏng đồ họa và hiệu ứng dựa trên những đặc tính hình ảnh của sự vật, hiện tượng khi nó diễn ra.
Method 2 mô phỏng lại những thành phần, đặc tính của một hiện tượng, hiệu ứng mà nó có ở ngoài đời thực (ví dụ như sự tương tác của tia sáng lên vật thể…). Phương pháp này sẽ mô phỏng lại từng thành phần của môi trường và rất nhiều sự tương tác phức tạp, dẫn đến chất lượng render có độ chân thực cao hơn.

Method 1: Với Đồ họa máy tính hiện nay, những công việc tính toán được diễn ra thông qua Shader, có một số loại shader như sau:
+Vertex Shader: tính toán cho từng vertex
+Fragment Shader: tính toán cho từng fragment (fragment sẽ được tự động chia ra), trong hình này là một ví dụ về một poly gồm 3 vertex, GPU chia ra các fragment như thế này để tính toán nó:

+…
Nhiều shader sẽ được kết hợp với nhau để mô phỏng đặc tính hình ảnh của một hiệu ứng nào đó.
Method 2: Xét về ánh sáng:
Kỹ thuật chủ yếu mà phương pháp này sử dụng là Ray Tracing, nên nó sẽ phải tính toán sự ảnh hưởng của tất cả các tia sáng lên từng pixel của bức ảnh ta đang cần render, điều này cần xét đến đường đi của tia sáng trong không gian 3 chiều đến 1 vật (Direct Illumination), sự phản xạ của các tia sáng khi chạm đến vật thể (hiệu ứng Global Illumination)…
Các hiệu ứng khác: rất nhiều các loại thuật toán phức tạp sẽ được áp dụng để mô phỏng từng thành phần của một hiệu ứng, dựng lại quá trình diễn ra của nó như ngoài đời thực và sử dụng những dữ liệu mô phỏng đó để tính toán cho từng pixel của tác phẩm render.
(Số samples mà chúng ta hay lựa chọn khi Render chính là số sample cho một pixel, sample này là cái gì thì mình cũng ko biết nữa :smile:)
Shader cũng có thể đc kết hợp với Method này để đạt được những hiệu ứng khác nhau, dường như công đoạn nặng nề nhất của Method này chính là tính toán ánh sáng, đặc biệt là khi thêm vào nhiều hiệu ứng khác như mưa, khói, sương mù,…ánh sáng ảnh hưởng đến tất cả mọi thứ trong một scene nên càng có nhiều vật thể thì càng phải tính toán nhiều thêm. Một scene sẽ render nhanh hơn rất nhiều khi được giảm bớt số nguồn sáng, số lần phản xạ của một tia sáng trong môi trường.

Method 1 được hoàn toàn thực hiện trên GPU, trước đây GPU chỉ có thể thực hiện được Method này, các đơn vị tính toán của GPU không hề có chức năng nào khác.
Method 2 phải sử dụng đến CPU nó là một phương pháp mô phỏng và tính toán, CPU thì nó vẫn luôn là bộ não của mọi loại máy tính, mọi sự tính toán đều được nó thực hiện.

Vậy như thế nào là GPU Rendering trong các phần mềm đồ họa?
Việc sử dụng các đơn vị tính toán của GPU để thực hiện các xử lý tương tự của CPU chưa hề được phát triển mãi cho tới sau này, vậy nên theo lý thuyết các thuật toán render của Method 2 có thể chạy được trên GPU giống như nó chạy trên CPU, hoặc là những loại thuật toán khác: thuật toán mã hóa, thuật toán nén dữ liệu, chương trình mô phỏng vật lý,…đều có thể chạy được trên GPU thông qua các API chuyên dụng (OpenCL, nVIDIA CUDA, AMD APP, Microsft DirectCompute,…).
(Tuy nói rằng đây là GPU rendering nhưng thực chất chỉ là tính toán trên GPU chứ không phải là thay thế Method 2 thành Method 1)


(Animator) #2

Hay bá cháy luôn! Rất chi tiết và rõ ràng, cảm ơn anh rất nhiều :kissing_smiling_eyes: :


(gà animator ) #3

Nếu là bài dịch thì bạn cho mình xin cái nguồn ,


(Animation Apprentice) #4

mình tự viết bạn ạ, đây là những kiến thức mình đã tìm hiểu từ lâu, nếu muốn nguồn thì chắc nó là google rồi, cái ảnh trong bài mình lấy từ bài này:


(Clouds) #5

Bài rất hay và đúng là 3D (đen lẫn bóng) :blush: