Kỹ thuật hiển thị mô hình Bump Mapping

Một phần của tài liệu (LUẬN văn THẠC sĩ) kỹ thuật hiển thị mô hình 3d và ứng dụng không gian di tích tháp luang viêng chăn cộng hòa dân chủ nhân dân lào​ (Trang 31 - 38)

Bên cạnh các kỹ thuật hiển thị truyền thống như chọn lọc có loại bỏ và thay thế ảnh 3D bằng ảnh 3D phần mềm mô phỏng còn sử dụng kỹ thuật hiển thị mới đó là bump mapping.

Bump mapping là một kỹ thuật đồ họa máy tính, trong đó một sự nhiễu loạn tới pháp tuyến bề mặt của đối tượng đang được biểu diễn được tìm kiếm trong một ánh xạ texture tại mỗi điểm ảnh và áp dụng trước khi việc tính toán sự chiếu sáng được thực hiện (hãy xem, chẳng hạn như Phong shading). Kết quả thì phong phú hơn, sự mô tả bề mặt được chi tiết hơn mà

giống với chi tiết vốn có trong tự nhiên hơn. Ánh xạ pháp tuyến và ánh xạ thị sai là các cách phổ biến nhất được sử dụng để thực hiện bump, sử dụng các kỹ

thuật mới mà tạo ra bump mapping bằng cách sử dụng thang màu xám cũ kỹ.

Bump mapping là một kỹ thuật đồ họa máy tính để tạo một bề mặt được biểu diễn nhìn thực tế hơn bằng cách mô hình hóa một texture bề mặt mấp mô cùng với các nguồn sáng trong môi trường. Ánh xạ bề mặt mấp mô làm điều này bằng cách thay đổi độ sáng của điểm ảnh trên bề mặt phản ứng lại với một ảnh raster heightmap được xác định cụ thể cho mỗi mặt.

Hình 2.9 Bề mặt các viên gạch trong văn miếu

Khi biểu diễn một cảnh 3D, ánh sáng và màu sắc của các điểm ảnh được xác định bởi sự tương tác của một mô hình 3D cùng với ánh sáng trong cảnh. Sau khi nó được xác định là một đối tượng có thể nhìn thấy, lượng giác học được sử dụng để tính toán pháp tuyến bề mặt hình học của đối tượng, được định nghĩa như một vector tại mỗi vị trí điểm ảnh trên đối tượng.Ví dụ, ánh xạ tẩm phủ tạo gạch cho hình ảnh 3D một bức tường đang rung chuyển (chỗ ánh xạ rung động cung cấpnhững ám hiệu ánh sáng và bóng tốt để làm viên gạch nhìn có vẻ như 3D hơn) có thể được mô tả như một sự kết hợp của một kết cấu căn hộ màu đỏ, hai hoặc ba trạng thái vẽ của va chạm ánh xạ (việc vẽ ánh sáng và bóng), ánh xạ ánh sáng cho các bóng toàn cục và có thể ánh xạ hiệu ứng chiếu sáng lóng lánh nếu đối tượng được gắn kính hoặc những mẩu kim loại nhỏ. Bóng có thể được biểu thị bằng lập trình, những giải thuật, hoặc bằng “cây đổ bóng” nơi các bóng nhỏ cấu thành được chia nhỏ dần trong mẫu phân cấp, giống như sự biến đổi không gian. Cây đổ bóng này có thể hiện, nếu

scenegraph cơ bản hỗ trợ những khái niệm cao cấp như vậy, hoặc nó có thể ẩn, như sự trình bày trừu tượng của một số đoạn mã được dịch trước.

Hình 2.10 Cây đổ bóng

Nó quan trọng để nhận thấy rằng cây đổ bóng có thể dễ dàng thay đổi từ nền phần cứng này đến nền tảng phần cứng kia, phụ thuộc vào những khả năng đồ họa và những hệ số khác. Ví dụ, phần cứng nào hỗ trợ ánh xạ va chạm cấp cao trong một quá trình đơn - như nút cây trạng thái trong trường hợp là một nút. Phần cứng khác có thể không hỗ trợ ánh xạ bề mặt mấp mô chút nào, nhưng vẫn có thể đạt được những hiệu ứng ánh xạ bề mặt mấp mô bằng một tác động đối với kết cấu, một cho những vùng sáng và một cho những vùng tối. Như vậy cây đổ bóng trong trường hợp đó có thể có một nút cha với ba nút con, đại diện cho ba sự chuyển đổi qua lại. (Ghi chú : ở đây, những cái hộp là những trạng thái và những vòng tròn đang vẽ những đối tượng). Các cây đổ bóng sẽ thay đổi từ phần mềm API đến phần mềm API. Nhưng từ đó phân ra khái niệm Spatial View (khung cảnh có trong không gian) từ State View (khung cảnh trạng thái), tạo điều kiện đặt điều khiển giao diện với các API đồ họa cơ sở có thể sử dụng (như Intrinsic Alchemy hay tiêu chuẩn, hay OpenGL hay Direct X).

Pháp tuyến bề mặt hình học sau đó định nghĩa cách đối tượng có khả năng tương tác với ánh sáng đến từ một hướng nhất định bằng cách sử dụng Phong shading hoặc một thuật toán chiếu sáng tương tự. Ánh sáng đi vuông góc với một bề mặt có khả năng tương tác nhiều hơn so với ánh sáng song song với bề

Simulated Bump-Mapping H/W hỗ trợ Bump-Mapping O1 O2 Pass 1: Kết cấu cơ bản Pass 2: Vùng sáng Pass 3: Vùng tối “Bump” O1 O2

mặt. Sau khi tính toán hình học ban đầu, một texture được tô màu thường xuyên được áp dụng cho mô hình để tạo đối tượng xuất hiện thực tế hơn.

Sau khi kiến tạo, một tính toán được thực hiện cho mỗi điểm ảnh trên bề mặt của đối tượng.

Thuật toán tính toán sự chiếu sáng tương tự trong cảnh tại mỗi điểm ảnh trên bề mặt của đối tượng:

Ở phần này sẽ đề cập chi tiết vào qui trình chiếu sáng trên điểm ảnh được các thư viện đồ họa hiện nay hỗ trợ. Qui trình chiếu sáng trên điểm ảnh chủ yếu phân ra làm 2 công đoạn riêng biệt: thực hiện tính toán màu chính (diffuse color) và tính toán màu phản chiếu (specular color).

 Tính toán màu diffuse (có bump bề mặt bằng normal map) Trước khi đi chi tiết vào thuật toán ta cần xem qua 1 số khái niệm mới dùng trong phần này Không gian tiếp tuyến của vật thể (tangent space). Tọa độ texture tại mỗi đỉnh (vertex) hình thành một hệ trục tọa độ 3 chiều với trục U (tiếp tuyến), trục W (pháp tuyến) và trục V (binormal = U x W). Hệ trục tọa độ này gọi là không gian tiếp tuyến hay không gian texture của vật thể tại các đỉnh(vertex).

 Normal map, Normal map là một texture nhưng có đặc tính khá đặc biệt, thay vì chứa thông tin về điểm màu như texture thông thường, normal map lai chứa thông tin về không gian tiếp tuyến (tangent space) hay không gian texture (texture space) của vật thể, hay nói cách khác nếu các điểm ảnh của texture biểu diễn màu sắc của vật thể tại 1 điểm thì normal map sẽ biểu diễn không gian tiếp tuyến của vật thể tại điểm đó. Mỗi điểm ảnh của normal map có định dạng là RGBA trong đó 3 thành phần RGB có giá trị [0..1] được ánh xạ từ 3 trục U, V, W có giá trị trong khoảng [-1, 1]. Normal map có thể tạo ra bằng 2 cách, dùngheight map (texture dạng graycale chứa thông tin độ sâu về bề mặt của vật thể trong đó màu sáng hơn biểu thị độ cao lớn hơn). Cách thứ 2 phức tạp hơn do phải tạo thêm 1 vật thể khác có độ chi tiết cao hơn, sau đó ta so sánh sự khác nhau giữa 2 vật thể để tạo ra normal map (quá trình này có thể được thực hiện bằng tool Melody của NVidia).

Hình 2.11 Không gian tiếp tuyến

 Bump bề mặt sử dụng normal map, Bump bề mặt chủ yếu được thực hiện trên Pixel Shader cho từng điểm ảnh. Thuật toán này sử dụng giá trị normal trong normal map để xác định mức độ của ánh sáng tác động vào điểm ảnh đó bằng cách nhân tích vô hướng giá trị normal trên với vector hướng ánh sáng trong không gian tiếp tuyến. Sau đó giá trị này được nhân với màu sắc của vertex và màu lấy mẫu từ texture để tính ra màu diffuse (màu của vertex được tính trong Vertex Shader) Trong đó:

- Normal. Vector pháp tuyến (normal vector) tại điểm đó, normal vector có được do lấy mẫu từ normal map.

- Light vector. Vector hướng ánh sáng trong không gian tiếp tuyến (tangent space), vector này được tính trong Vertex Shader và được truyền vào Pixel Shader để sử dụng. vertex color. Màu của vertex sau khi thực hiện chiếu sáng trên vertex (pervertex lighting) trong Vertex Shader. Texture color. Màu của texture chính, có được do lấy mẫu texture.

- Tính toán màu specular (sử dụng specular map), specular map là texture dạng grayscale, specular map có tác dụng cho biết vùng nào của vật thể phản chiếu nhiều ánh sáng vùng nào phản chiếu ít ánh sáng (tương ứng với màu trong specular map từ sáng tới tối).

- Tính độ phản chiếu của ánh sánh, Độ phản chiếu (phản xạ) của ánh sáng trên vật thể thì phụ thuộc vị trí của mắt (hay camera). Khi mắt nằm ngay trên đường phản xạ của ánh sáng thì mắt sẽ nhìn thấy một vùng ánh sáng chói do toàn bộ năng lượng của ánh sáng được truyền thẳng vào mắt. Muốn tính màu specular của điểm ảnh ta phải xác định được mức độ ánh sáng phản chiếu tại điểm đó. Công thức tính vector phản chiếu (phản xạ) như sau:

U W V

Hình 2.12 Sự phản xạ của tia sáng trên bề mặt R = 2(L dot N)N - L Trong đó: L. Light vector R. Reflection vector N. Normal

Mức độ phản chiếu của ánh sáng phụ thuộc rất nhiều vào chất liệu bề mặt của vật thể,các bề mặt nhẵn bóng có độ phản chiếu lớn trong khi các bề mặt gồ ghề lại có độ phảnchiếu thấp. Để tránh công việc phải phân rã vật thể ra thành nhiều thành phần để dựng hình với các mức phản chiếu khác nhau người ta dùng specular map như một lookup table để xác định mức độ phản chiếu của ánh sánh trên từng điểm ảnh.

Seflection vector = 2 * dotproduct (normal, light vector) * normal - light vector. Specular factor = dotproduct (reflection vector, view vector).

Specular color = (specular factor ^ specular constant) * specular lookup.

Trong đó:

- Normal. Vector pháp tuyến (normal vector) tại điểm đó, normal vector có được do lấy mẫu từ normal map.

- Light vector. Vector hướng ánh sáng trong không gian tiếp tuyến (tangent space), vector này được tính trong Vertex Shader và được truyền vào Pixel Shader để sử dụng.

- View vector. Vector tính từ mắt đến điểm nhìn (tọa độ trong không gian tiếp tuyến), vector này được tính trong Vertex Shader và truyền vào Pixel Shader

để sử dụng specular constant. Hằng phản chiếu, giá trị càng lớn thì vùng phản chiếu càng nhỏ.

- Specular lookup. Cho biết mức độ phản chiếu của điểm đó, giá trị này có được do lấy mẫu từ specular map. Sau khi thêm độ phản chiếu anh sáng vào xe trông như là được cấu tạo từ kim loại, do đó sự phản chiếu góp phần tăng đáng kể chất lượng đồ họa.

Bước 1: Tìm kiếm vị trí trên ảnh raster heightmap mà tương xứng với vị trí

trên bề mặt.

Bước 2: Tính toán pháp tuyến bề mặt của heightmap.

Bước 3: Thêm pháp tuyến bề mặt từ bước 2 tới pháp tuyến bề mặt hình

học miễn là pháp tuyến trỏ tới một hướng mới.

Bước 4: Tính toán sự tương tác của bề mặt mấp mô mới cùng với ánh sáng

trong cảnh sử dụng, ví dụ Phong shading.

Hình 2. 13 Ảnh hoa văn

Kết quả là một bề mặt xuất hiện có chiều sâu thực sự thuật toán cũng đảm bảo rằng sự xuất hiện bề mặt thay đổi như ánh sáng trong cảnh di chuyển xung quanh. Ánh xạ pháp tuyến là kỹ thuật ánh xạ bề mặt mấp mô được sử dụng phổ biến nhất, nhưng có một phương án thay thế khác, chẳng hạn như ánh xạ thị sai. Đối với mục đích của việc dựng hình trong thời gian thực, ánh xạ bề mặt mấp mô thường được hướng theo như một “sự chuyển tác”, trong việc dựng hình nhiều sự chuyển tác, và có thể được thực hiện như nhiều sự chuyển tác (thông thường là 3 hoặc 4) để giảm số lượng các phép tính lượng giácmàđượcyêucầu.

Các lập trình viên đồ họa 3D đôi khi sử dụng một chất lượng thấp hơn, kỹ thuật bump mapping nhanh hơn để mô phỏng bump mapping. Một trong những phương pháp sử dụng thay đổi chỉ số texel thay thế cho các pháp tuyến bề mặt thay đổi, thường được sử dụng cho ánh xạ bề mặt mấp mô '2D'. Kể từ đó các card GeForce 2 lớp kỹ thuật này được thực hiện trong phần cứng tăng tốc đồ họa.

Toàn màn hình ánh xạ bề mặt mấp mô 2D giả, có thể được thực hiện một cách dễ dàng cùng với một vòng lặp biểu diễn rất đơn giản và nhanh, là một hiệu ứng thị giác phổ biến ánh xạ bề mặt mấp mô được giới thiệu lần đầu tiên.

Ánh xạ bề mặt mấp mô có hai kỹ thuật chính là: Ánh xạ bề mặt chạm nổi và môi trường ánh xạ bump mapping.

Một phần của tài liệu (LUẬN văn THẠC sĩ) kỹ thuật hiển thị mô hình 3d và ứng dụng không gian di tích tháp luang viêng chăn cộng hòa dân chủ nhân dân lào​ (Trang 31 - 38)