CHƯƠNG V CÂC THUẬT TOÂN VERTEX VĂ PIXEL SHADER
5.6. Khung cảnh bầu trờ
Trong câc Game hiện nay cac hậu cảnh lă điều không thể thiếu vì chúng mang lại chất lượng rất đồ hoạ rực rỡ, tạo tính thực cho bối cảnh. Câi lăm nền cho câc hậu cảnh lại chính lă khung cảnh bầu trời, nếu khong có chúng ta sẽ khó phđn biệt được đđu lă ngăy, đđu lă đím…
Nhằm góp phần lăm cho hậu cảnh gần hơn với thực tế, Nwfc Engine có hỗ trợ thím Vertex Shader đít thực hiện vẽ câc khong cảnh bầu trời.
5.7. Cơ sở lý thuyết
Câch biểu diễn bầu trời bằng hình khối vă texture.
Vì bầu trời lă khung cảnh đóng nín câc hình khối đóng được sử dụng khâ nhiều để thể hiện bầu trời. Câc hình khối thường được sử dụng lă hình khối vuông (box) hình cầu hay bân cầu (sphere). Câc texture được sử để tạo khung cảnh bầu trời thường lă câc texture biểu hiện 6 mặt của không gian xung quanh ( dùng cho box) hay câc texture liền nhau ở câc cạnh (dùng cho sphere)
Câc đặc tính của bầu trời trong thực tế
Khung cảnh bầu trời trong thực tế có câc đặc tính đđy mă ta cần quan tđm khi muốn thiết kế Vertex Shader.
Rất xa so với tầm nhìn, khi ta nhìn tập trung văo một hướng thì dù ta có di chuyển đến đđu đi nữa thì theo hướng nhìn ( với điều kiện khoảng câch không quâ lớn) thì hình ảnh mă ta nhận được từ bầu trời lă không đổi.
Tuy nhiín hình ảnh từ bầu trời mă ta nhận được sẽ thay đổi khi ta nhìn ở câc hướng khâc nhau.
Từ câc đặc tính trín của bầu trời ta xâc định được câch thức biểu diễn bầu trời trong 3D như sau:
Sử dụng một hình khối để lăm vật chứa vă sử dụng một texture có hình khong cảnh bầu trời
Vì ta không thể năo đi xuyín qua bầu trời, nín ta phải luôn cập nhật vị trí của hình khối bầu trời = vị trí hiện thời của camera ( hay vị trí của mắt) ( thoả mên tính chất 1).
Chỉ cập nhật vị trí mă không thay đổi góc xoay của hình khối bầu trời nhằm khiến cho hình khối bầu trời không thay đổi theo hướng xoay của camera ( thoả mên tính chất 2).
5.8. Vertex Shader cho skybox
Vertex shader cho skybox khâ đơn giản như sau:
Trước tiín ta phải biến đổi sky box bằng ma trận thế giới, việc năy có vể như lă không cần thiết vì ta sẽ sử dụng vị trí của mắt (hay camera) lăm vị trí cho skybox. Nhưng thực tế công việc năy cho phĩp ta triển khai một số thuộc tính ban đầu cho skybox như độ cao đối với tầm mắt, độ phóng đại…
Sau khi cộng thím toạ độ của mắt văo, ta phải biến đổi vertex văo không gian chiếu bằng câch nhđn với ma trận View * Projection.
Vì skybox ở rất xa nín ta cho đọ sđu=1.0f (để câc điểm ảnh của skybõ không thể vượt qua giâ trị độ sđu của câc điểm ảnh khâc khi kiểm tra độ sđu ( depth test) công đoạn năy phải nhđn với projpos. W vì để chuẩn bị cho giai đoạn chuẩn hoâ hệ toạ độ thuần nhất sau khi kết thúc Vertex Shader.
Khung cảnh bầu trời được vẽ ra đảm bảo đúng câc đặc tính của bầu trời trong thực tế, cho dù ta có di chuyển camẻa thế năo đi nữa, ta cũng không thể “đi xuyín” qua bầu trời được. Câc cảnh sau đđy được chụp từ Game demo.