Photobucket Photobucket Photobucket Photobucket Photobucket Photobucket Photobucket Photobucket Photobucket

Akitru's News

Use the button "Translate" to read our posts on your language !!!

Saturday, July 2, 2011

Real-time rendering và bản chất.

Cụm từ real-time rendering có vẻ vẫn còn tương đối xa lạ với cộng đồng thiết đồ họa kiến trúc/ nội thất ở Việt Nam. Vì vậy, qua bài viết này cùng với một số demo mà chúng tôi thực hiện, trung tâm GigabIdea chúng tôi hy vọng các bạn sẽ hiểu rõ hơn về khái niệm này và những tiềm năng của nó đối với lĩnh vực thiết kế đồ họa kiến trúc/ nội thất.

Tại sao các bạn nên biết về real-time rendering? Đơn giản là vì đây chính là xu hướng tất yếu của lĩnh vực diễn họa kiến trúc (tiếng Anh gọi là architectural vizualization, hoặc gọi tắt là arch viz). Thế giới đã bắt đầu nghiên cứu và sử dụng real-time rendering một cách hiệu quả trong diễn họa kiến trúc từ vài năm trở lại đây. Autodesk đang đầu tư hàng triệu USD vào dự án Newport (Project Newport), một dự án nhằm nghiên cứu và thương mại hóa real-time rendering vào các phầm mềm tương lai của Autodesk. Một ví dụ khác là Chaos Group, công ty phát triển chương trình render V-Ray nổi tiếng, cũng đã bắt đầu nghiên cứu real-time rendering cho V-Ray trong những năm gần đây. Tại hội nghị SIGGRAPH 2009 (Hội nghị thường niên lớn nhất thế giới về đồ họa máy tính, chủ yếu tập trung vào khía cạnh khoa học kỹ thuật hơn là thiết kế/ nghệ thuật), Chaos Group đã công bố những kết quả nghiên cứu sơ bộ mà họ đã đạt được: các thuật toán render của V-Ray được triển khai trên card đồ họa, cho kết quả render nhanh đến gấp 10 lần.

Vậy real-time rendering là gì? Để trả lời điều này, chúng ta hãy so sánh giữa một đoạn phim (hoặc một bức ảnh tĩnh) được render bằng một phần mềm 3D như 3ds Max hay Maya và một trò chơi game trên máy tính.

* Với phim (hoặc ảnh tĩnh), người xem (cũng chính là khách hàng của chúng ta) chỉ có thể thường thức tác phẩm một cách thụ động. Cụ thể hơn, người xem không thể tương tác (interact) được với sản phẩm. Họ chỉ nhìn đoạn phim chiếu trên màn hình mà không tác động được đến đoạn phim đó. Nội dung của đoạn phim hoàn toàn do người thiết kế đoạn phim đó quyết định và người xem không thể thay đổi được gì.

* Với game (cụ thể hơn là “game hành động/ bắn súng ở góc nhìn người thứ nhất”, hay còn gọi là “first-person shooter game”) người xem có thể tương tác với môi trường 3D. Ví dụ, họ có thể đi lại tùy thích trong khung cảnh, thay đổi góc camera một cách tùy ý. Họ có thể mở của, bật đèn tùy ý. Đối với phim chúng ta không làm đuợc điều này. Trong phim, góc quay, vị trí di chuyển của camera, chuyển động của các vật thể đều được “lên kịch bản” bởi người thiết kế đoạn phim và người xem không thể thay đổi “kịch bản” này.

Trường hợp chúng ta render một đoạn phim, trong thuật ngữ tiếng Anh gọi là offline rendering. Còn đối với trường hợp của game, thuật ngữ tiếng Anh gọi là real-time rendering. Chúng ta hãy so sánh để thấy sự khác nhau giữa real-time rendering và offline-rendering.

* Về khả năng tương tác:
Real-time rendering cho phép người xem tương tác với môi trường 3D. Offline rendering không cho phép điều này
* Thời gian render một khung hình (frame):
Đối với offline rendering, thời gian render một khung hình bao lâu cũng được. Nhưng đối với real-time rendering, thời gian để render một khung hình phải không vượt quá 1/15 giây (nói cách khác, trong một giây, máy tính phải render được ít nhất 15 khung hình). Đây chính là điểm khác nhau mấu chốt giữa real-time rendering và offline-rendering. Chính vì thời gian render rất nhanh (chỉ trong vòng 1/15 giây) mà real-time rendering mới cho phép người xem tương tác với môi trường 3D. Ví dụ, khi người xem thay đổi góc camera, khung hình mới sẽ được render chỉ trong vòng 1/15 giây. Điều này khiến người xem cảm giác tương tác của họ có tác động “ngay lập tức” đến mội trường 3D. Đối với offline-rendering, người dùng sẽ không thể nào có được cảm giác “ngay lập tức” này vì thời gian render trong offline rendering thường nhanh nhất cũng phải khoảng vài giây tùy theo độ phức tạp của khung cảnh.
Ghi chú: Có lẽ các bạn đang thắc mắc vì sao có con số 1/15 ở trên. Chúng ta đều biết mắt người nhìn được 24 khung hình trong một giây, vậy thì đáng lẽ người ta phải chọn con số 1/24 (nghĩa là trong một giây máy tính phải render được ít nhất 24 khung hình) mới đúng. Thực ra, con số 1/15 chỉ là một mức chuẩn tối thiểu mà những người làm trong lĩnh vực nghiên cứu đồ họa máy tính đề ra. Nhìn chung. 1/15 giây vẫn tạo được cảm giác “render ngay lập tức” của real-time rendering, mặc dù hình ảnh mà người xem nhận được sẽ không mượt mà như 1/24. Thông thường, trong các môi trường real-time rendering, người ta thường nhắm tới con số 1/24 hoặc nhanh hơn.
* Về phần cứng máy tính:
Real-time rendering hầu như luôn được thực hiện bằng bộ vi xử lý của card đồ họa (GPU – Graphical Processing Unit). Vì vậy mà các bạn có thể thấy máy tính dùng để chơi game luôn sử dụng card đồ họa mạnh. Trong khi đó, offline rendering (ví dụ như khi render bằng V-Ray hoặc Mental Ray), hầu như luôn được thực hiện bằng bộ xử lý trung tâm của máy tính (CPU – Central Processing Unit). Card đồ họa hầu như không tham gia vào offline rendering.

Ghi chú: Đọc đến đây các bạn có thể ngạc nhiên vì người ta vẫn thường nói máy tính dành cho người thiết kế đồ họa cũng cần có card đồ họa mạnh. Trong khi chúng tôi vừa nói ở trên là card đồ họa không tham gia vào qua trình render của V-Ray hoặc Mental Ray. Để giải thích “nghịch lý” này, các bạn cần phải hiểu chính xác hơn về chữ “render”. Chúng tôi nhận thấy ở Việt Nam, rất ít người làm trong lĩnh vực thiết kế đồ họa kiến trúc có cách hiểu đúng về chữ render. Theo đúng như định nghĩa của những người làm trong lĩnh vực khoa học đồ họa máy tính, chữ “render” có nghĩa là thể hiện dữ liệu hình học ba chiều lên trên thiết bị hiển thị (ví dụ như màn hình máy tính). Vì vậy, không chỉ khi các bạn click vào nút render trên thanh menu của 3ds Max thì chúng ta mới gọi đó là render, mà những gì các bạn nhìn thấy trong của sổ làm việc của 3ds Max (nói cụ thể hơn, chính là các viewport), cũng gọi là render. Nhiệm vụ của card đồ họa là render những hình ảnh mà các bạn nhìn thấy trong viewport của 3ds Max. Chúng tôi xin nhấn mạnh lại một lần nữa: “render” có nghĩa là thể hiện dữ liệu hình học ba chiều lên trên màn hình máy tính, không nhất thiết là phải đợi đến khi chúng ta click vào lệnh render trong 3ds Max, Maya hay Revit … mới được gọi là render. Những hình ảnh 3D mà các bạn nhìn thấy trong môi trường làm việc của 3ds Max, Maya, hay bất kỳ phần mềm thiết kế đồ họa 3D nào cũng đều được gọi là render cả.

Hy vọng khi đọc đến đây các bạn đã phần nào hiểu được real-time rendering là gì. Có thể các bạn nhận thấy nó giống với khái niệm “virtual reality” (hay “thực tế ảo”) cho kiến trúc vì nó cho phép người xem đi lại và tương tác trong công trình. Tuy nhiên, thuật ngữ “virtual reality” này quá bao quát, vì vậy chúng tôi mới dùng thuật ngữ chính xác hơn là “real-time architectural visualization” (hay “diễn họa kiến trúc theo thời gian thực”).

Bây giờ chúng ta sẽ xem diễn họa kiến trúc theo thời gian thực có những ưu điểm gì so với kiểu diễn họa bằng những hình render phối cảnh hay những đoạn phim thực hiện bằng 3ds Max và V-Ray.

Nhìn chung, ưu điểm chính của real-time rendering là cho phép người xem tương tác với công trình kiến trúc. Điều này khiến họ cảm thấy như mình đang thực sự bước vào công trình kiến trúc đó. Họ có thể tùy ý đi lại trong công trình, nhìn theo những hướng mà mình muốn. Đối với offline rendering (tức là đối với một đoạn phim hoặc một bức ảnh tĩnh) thì người xem sẽ không có được cảm giác chủ động này vì đường đi của camera và góc camera hoàn toàn do người tạo lập đoạn phim quyết định. Chưa hết, trong real-time rendering, người xem có thể mở cửa, bật đèn một cách chủ động, và quan trong nhất, họ có thể thay đổi vật liệu, màu sắc, thậm chí cả hình dáng, của tường, nền nhà, đồ đạc nội thất ….

Tính năng thay đổi vật liệu, màu sắc (và hình dáng) này có giá trị rất lớn trong việc trình bày thiết kế cho khách hàng. Ví dụ, chúng ta đưa ra 3 phương án màu sắc cho tường của phòng khách. Khách hàng của chúng ta có thể click vào các nút trên bảng giao diện để lần lượt thay đổi màu tường theo 3 phương án mà chúng ta đề nghị. Điều tiện lợi nhất là khi khách hàng vừa click xong, thì khung cảnh mới (trong đó màu tường đã được thay đổi) sẽ được render “ngay lập tức” (trong vòng 1/15 giây)

Đọc đến này, một số bạn có thể thắc mắc “Ủa, cái trò thay đổi màu tường hay vật liệu này chỉ cần dùng 3ds Max hay V-Ray không thôi cũng làm được mà, cần gì phải dùng đến real-time rendering, chúng ta chỉ việc render 3 phương án với 3 màu tường khác nhau, sau đó đưa 3 cái file jpeg hoặc png cho khách hàng là xong?”. Các bạn nói không sai, offline rendering hoàn toàn có thể làm được điều đó, nhưng các bạn hãy tưởng tượng nếu chúng ta có 3 phương án màu tường, 3 phương án màu nền, 3 phương án màu cho bộ ghế salon, vậy chúng ta sẽ có tổng cổng 3 x 3 x 3 = 27 phương án tất cả. Liệu các bạn có muốn render hết cả 27 lần? Chưa hết, nếu các bạn có thêm vài phương án cho tấm thảm trải dưới bộ ghế salon, hoặc vài phương án cho màu rèm cửa, thì lúc này, số lượng phương án tổng cổng sẽ còn tăng lên rất nhiều.

GigabIdea

2 comments:

  1. RT dân chơi game mà chịu khó tìm hiểu tí là hiểu bản chất à.Thật ra mà nói, render RT mà render NT chưa đẹp hiện tại vẫn ko chính xác.Đơn giản vì Game hiện tại cũng là render RT.Mà rất nhiều game nó có cảnh NT quá tuyệt, từ hoa văn đến ánh sáng ban ngày cũng như ban đêm.........Muốn biết nó ntn thì xem đại mấy cái game Dead Rising, Hitman, Call of Duty,..........Chẳng qua là mỗi hãng phát hành game, khi ng ta đã sáng chế ra Engine làm game thì ém hàng hết, vì cái đó là mạng sống của mỗi nhà PT game.

    _Còn vụ Engine Unreal đc tung ra cho công chúng, cũng giống như thời Engine Quake mà vẫn ko thịnh hành trong giới KT thì đơn giản là do chưa có ai rảnh lấy cái engine đó chế 1 cái menu, giao diện để làm việc cho dễ dàng thôi.Dân KT làm sao bì đc cái đầu tính toán thông số bằng dân lập trình đc.

    _Cái này là khác biệt giữa 1 phần mềm nặng tính thị trường với 1 pm chuyên dụng hoặc đc chế tạo riêng cho 1 cty, đ tượng.

    ReplyDelete
  2. Nhận xét trên là hợp lý nếu dựa trên quan sát của một người thưởng thức game chứ không phải của một người thiết kế game. Mình đồng ý là các game bạn nói có cảnh đêm khá đẹp, nhưng nếu bạn tìm hiểu kỹ cách thức để họ đạt được điều đó và xem lại những gì mình trình bày ở trên thì bạn sẽ thấy nó không đơn giản như bạn nghĩ.

    Bạn nên hiểu những game đó có ánh sáng ban đêm đẹp không phải là vì bản thân các engine của các game đó có khả năng tính toán ánh sáng đẹp và chính xác, mà là nhờ vào các kỹ thuật pre-computed lighting. Phổ biến nhất là kỹ thuật bake ánh sáng tĩnh thành lightmap như mình giải thích ở mấy bài viết trước.

    Công việc bake các lightmap này thường được thực hiện ngay trong 3ds Max với các renderer như V-Ray. Có một số global illumination engine chuyên dùng để bake lightmap cho game như Beast của Illumination Lab thì được tích hợp trực tiếp vào một số 3D Engine như UDK, Unity (version 3) nên người dùng có thể bake trực tiếp ngay trong 3D Engine luôn.

    Nhìn chung trong các game hiện giờ, người ta phân ánh sáng ra làm hai loại. Tĩnh và động. Ánh sáng tĩnh thì người ta bake thành lightmap với global illumination cho các bề mặt có tính chất diffuse. Ánh sáng động thì người ta tính toán trong real-time luôn, nhưng chỉ tính phần ánh sáng trực tiếp (vì tính toán ánh sáng gián tiếp trong real-time rất là khó, CryEngine 3 là một trong những engine đầu tiên có khả năng thực hiện điều này, nhưng chỉ là một phép ước tính thô cho lần phản xạ gián tiếp đầu tiên thôi, và dĩ nhiên là cấu hình đòi hỏi của CryEngine 3 cũng không thấp).

    Screen-Space Ambient Occlusion là một trong những thuật toán để giúp cho phần ánh sáng động có chút hơi hướm của global illumination, cải thiện chất lượng ánh sáng một cách đáng kể. Vì vậy được hầu hết các engine sau này sử dụng. Nhưng nhìn chung nếu không có lightmap, thì khó có ánh sáng nội thất và ban đêm thuyết phục được.

    Một điều nữa, chúng ta nên nhớ là số lượng nguồn sáng cảng nhiều thì càng làm chậm máy. Đối với ngoại thất ban ngày thì chỉ có ánh sáng của mặt trời và bầu trời. Nhưng nội thất và ban đêm thì thường có rất nhiều nguồn sáng. Trong game thì người ta chủ động sử dụng ít nguồn sáng, thiết kết scene và đặt nguồn sáng một cách khéo léo, cộng với baked lightmap, để có kết quả tốt với tốc đô render hợp lý. Nhưng trong kiến trúc thì chúng ta không làm vậy được vì chúng ta phải tuân theo thiết kết có sẵn. Không hiếm khi chúng ta có một tầng lầu với vài chục cái đèn trần, lúc này, dùng lightmap là cách hiệu quả nhất.
    __________________

    ReplyDelete