Xin chào tất cả mọi người. Các bài viết trước của tôi là và Lập trình phản ứng trong phát triển trò chơi: Chi tiết cụ thể về Unity . Phát triển trò chơi trên Unity: Kiểm tra các phương pháp tiếp cận để tổ chức kiến trúc Hôm nay tôi muốn đề cập đến một chủ đề như kết xuất và đổ bóng trong Unity. Shader (nói một cách đơn giản) là hướng dẫn cho thẻ video cho họ biết cách hiển thị và biến đổi các đối tượng trong trò chơi. Vì vậy, chào mừng đến với câu lạc bộ, anh bạn. Thận trọng! Bài này dài cả cây số nên mình chia làm 2 phần! Kết xuất trong Unity hoạt động như thế nào? Trong phiên bản hiện tại của , chúng tôi có ba quy trình kết xuất khác nhau - Tích hợp sẵn, HDRP và URP. Trước khi xử lý kết xuất, chúng ta cần hiểu khái niệm về quy trình kết xuất mà Unity cung cấp cho chúng ta. Unity Mỗi quy trình kết xuất thực hiện một số bước thực hiện một thao tác quan trọng hơn và tạo thành một quy trình kết xuất hoàn chỉnh. Và khi chúng tôi tải một mô hình (ví dụ: .fbx) lên sân khấu, trước khi đến màn hình của chúng tôi, nó sẽ đi một quãng đường dài, như thể đi từ Washington đến Los Angeles trên những con đường khác nhau. Mỗi đường dẫn kết xuất có các thuộc tính của nó mà chúng tôi sẽ làm việc với. Các thuộc tính vật liệu, nguồn sáng, kết cấu và tất cả các chức năng bên trong bộ đổ bóng sẽ ảnh hưởng đến sự xuất hiện và tối ưu hóa các đối tượng trên màn hình. Vậy quá trình này diễn ra như thế nào? Để làm được điều đó, chúng ta cần thảo luận về kiến trúc cơ bản của các đường ống kết xuất. Unity chia mọi thứ thành bốn giai đoạn: chức năng ứng dụng, làm việc với hình học, rasterization và xử lý pixel. chức năng ứng dụng Quá trình xử lý các chức năng bắt đầu trên CPU và diễn ra trong cảnh của chúng tôi. Điều này có thể bao gồm: Xử lý vật lý và tính toán sai va chạm Hoạt hình kết cấu Đầu vào bàn phím và chuột kịch bản của chúng tôi Đây là nơi ứng dụng của chúng tôi đọc dữ liệu được lưu trữ trong bộ nhớ để tiếp tục tạo ra các nguyên hàm của chúng tôi (hình tam giác, đỉnh, v.v.). Ở cuối giai đoạn ứng dụng, tất cả điều này được gửi đến giai đoạn xử lý hình học để thực hiện các phép biến đổi đỉnh bằng cách sử dụng phép biến đổi ma trận. xử lý hình học Khi máy tính yêu cầu thông qua CPU những hình ảnh mà chúng tôi nhìn thấy trên màn hình, quá trình này được thực hiện theo 2 giai đoạn: từ GPU của chúng tôi Khi trạng thái kết xuất được thiết lập và các bước từ xử lý hình học đến xử lý pixel đã được thông qua Khi đối tượng được hiển thị trên màn hình Giai đoạn xử lý hình học diễn ra trên GPU và chịu trách nhiệm xử lý đỉnh của đối tượng của chúng tôi. Giai đoạn này được chia thành bốn quy trình phụ: tô bóng đỉnh, chiếu, cắt và hiển thị trên màn hình. Khi các nguyên mẫu của chúng tôi đã được tải và lắp ráp thành công trong giai đoạn ứng dụng đầu tiên, chúng sẽ được gửi đến giai đoạn tô bóng đỉnh. Nó có hai nhiệm vụ: Tính vị trí của các đỉnh trong đối tượng Chuyển đổi vị trí sang các tọa độ không gian khác (ví dụ từ tọa độ cục bộ sang tọa độ thế giới) để chúng có thể được hiển thị trên màn hình Ngoài ra, trong bước này, chúng ta có thể chọn thêm các thuộc tính cần thiết cho các bước vẽ đồ họa tiếp theo. Chúng bao gồm các pháp tuyến, tiếp tuyến, cũng như tọa độ UV và các tham số khác. Phép chiếu và cắt xén hoạt động như các bước bổ sung và phụ thuộc vào cài đặt camera trong cảnh của chúng ta. Lưu ý rằng toàn bộ quá trình kết xuất được thực hiện liên quan đến Camera Frustum. Phép chiếu sẽ chịu trách nhiệm lập bản đồ phối cảnh hoặc chính tả, trong khi clipping cho phép chúng ta cắt hình học thừa bên ngoài Camera Frustum. Rasterization và làm việc với pixel là rasterization. Nó bao gồm việc tìm các pixel trong phép chiếu của chúng tôi tương ứng với tọa độ 2D của chúng tôi trên màn hình. Quá trình tìm kiếm tất cả các pixel bị chiếm bởi đối tượng màn hình được gọi là rasterization. Quá trình này có thể được coi là một bước đồng bộ hóa giữa các đối tượng trong cảnh của chúng tôi và các pixel trên màn hình. Giai đoạn tiếp theo của công việc kết xuất Các bước sau đây được thực hiện cho từng đối tượng trên màn hình: Thiết lập tam giác chịu trách nhiệm tạo dữ liệu trên các đối tượng của chúng tôi và truyền dữ liệu đó để truyền tải. Triangle Traversal liệt kê tất cả các pixel là một phần của nhóm đa giác; trong trường hợp này, nhóm pixel này được gọi là một đoạn. Bước cuối cùng tiếp theo khi chúng tôi đã thu thập tất cả dữ liệu và sẵn sàng hiển thị các pixel trên màn hình. Tại thời điểm này, trình đổ bóng phân đoạn được khởi chạy, chịu trách nhiệm về khả năng hiển thị của từng pixel. Nó chịu trách nhiệm về màu sắc của từng pixel được hiển thị trên màn hình. Chuyển tiếp và trì hoãn bóng Như chúng ta đã biết, Unity có ba loại quy trình kết xuất: Tích hợp sẵn, URP và HDRP. Một mặt, chúng tôi có Tích hợp (kiểu kết xuất lâu đời nhất đáp ứng tất cả các tiêu chí của Unity). Ngược lại, chúng ta có HDRP và URP hiện đại, được tối ưu hóa và linh hoạt hơn (được gọi là Scriptable RP). Mỗi quy trình kết xuất có các đường dẫn để xử lý đồ họa, tương ứng với tập hợp các thao tác cần thiết để chuyển từ tải hình học sang hiển thị trên màn hình. Điều này cho phép chúng tôi xử lý đồ họa một cảnh được chiếu sáng (ví dụ: cảnh có ánh sáng định hướng và phong cảnh). Ví dụ về đường dẫn kết xuất bao gồm đường dẫn chuyển tiếp, đường dẫn bị trì hoãn và đường dẫn bị hoãn lại và thắp sáng đỉnh kế thừa. Mỗi hỗ trợ các tính năng và hạn chế nhất định, có hiệu suất của nó. Trong Unity, đường dẫn chuyển tiếp là mặc định để hiển thị. Điều này là do số lượng thẻ video lớn nhất hỗ trợ nó. Nhưng con đường phía trước có những hạn chế về ánh sáng và các tính năng khác. Lưu ý rằng URP chỉ hỗ trợ đường dẫn chuyển tiếp, trong khi HDRP có nhiều lựa chọn hơn và có thể kết hợp cả đường dẫn chuyển tiếp và chuyển tiếp. Để hiểu rõ hơn về khái niệm này, chúng ta nên xem xét một ví dụ trong đó chúng ta có một đối tượng và một ánh sáng định hướng. Cách các đối tượng này tương tác sẽ xác định đường dẫn hiển thị của chúng ta (mô hình chiếu sáng). Ngoài ra, kết quả sẽ bị ảnh hưởng bởi: Đặc điểm vật liệu Đặc điểm của nguồn chiếu sáng Mô hình chiếu sáng cơ bản tương ứng với tổng của 3 thuộc tính khác nhau: màu xung quanh, phản xạ khuếch tán và phản xạ gương. Việc tính toán ánh sáng được thực hiện trong shader. Nó có thể được thực hiện trên mỗi đỉnh hoặc đoạn. Khi ánh sáng được tính trên mỗi đỉnh, nó được gọi là ánh sáng trên mỗi đỉnh và được thực hiện trong giai đoạn đổ bóng đỉnh. Tương tự, nếu ánh sáng được tính trên mỗi đoạn, thì nó được gọi là trình đổ bóng trên mỗi đoạn hoặc trên mỗi pixel và được thực hiện trong giai đoạn trình tạo bóng cho đoạn (pixel). Chiếu sáng đỉnh nhanh hơn nhiều so với chiếu sáng pixel, nhưng bạn phải cân nhắc rằng các mô hình của bạn phải có nhiều đa giác để đạt được kết quả đẹp. Ma trận trong Unity Vì vậy, hãy quay lại giai đoạn dựng hình của chúng ta, chính xác hơn là giai đoạn làm việc với các đỉnh. Ma trận được sử dụng để chuyển đổi của họ. Ma trận là một danh sách các phần tử số tuân theo các quy tắc số học nhất định và thường được sử dụng trong đồ họa máy tính. Trong Unity, ma trận đại diện cho các phép biến đổi không gian. Trong số đó, chúng ta có thể tìm thấy: UNITY_MATRIX_MVP UNITY_MATRIX_MV UNITY_MATRIX_V UNITY_MATRIX_P UNITY_MATRIX_VP UNITY_MATRIX_T_MV UNITY_MATRIX_IT_MV unity_ObjectToWorld unity_WorldToObject Tất cả chúng đều tương ứng với ma trận bốn nhân bốn (4x4). Mỗi ma trận có bốn hàng và bốn cột giá trị số. Một ví dụ về ma trận có thể là tùy chọn sau: Như đã nói trước đây - các đối tượng của chúng ta có hai nút (trong một số trình chỉnh sửa đồ họa, chúng được gọi là biến đổi và hình dạng) và cả hai đều chịu trách nhiệm về vị trí của các đỉnh của chúng ta trong không gian đối tượng. Không gian đối tượng xác định vị trí của các nút so với tâm của đối tượng. Và mỗi khi chúng ta thay đổi vị trí, xoay hoặc tỷ lệ của các đỉnh của đối tượng, chúng ta sẽ nhân từng đỉnh với ma trận mô hình (trong trường hợp Unity - UNITY_MATRIX_M). Để chuyển tọa độ từ không gian này sang không gian khác và làm việc trong đó, chúng tôi sẽ liên tục làm việc với các ma trận khác nhau. Thuộc tính của các đối tượng đa giác Tiếp tục chủ đề làm việc với các đối tượng đa giác, tôi có thể nói rằng trong thế giới đồ họa 3D, mọi đối tượng đều được tạo thành từ một lưới đa giác. Các đối tượng trong cảnh của chúng tôi có thuộc tính; mỗi cái luôn chứa các đỉnh, tiếp tuyến, pháp tuyến, tọa độ UV và màu sắc. Tất cả cùng nhau tạo thành một lưới. Tất cả điều này . được quản lý bởi shader Với shader, chúng ta có thể truy cập và sửa đổi từng tham số này. Chúng tôi thường sẽ sử dụng vectơ (float4) khi làm việc với các tham số này. Tiếp theo, hãy phân tích từng tham số của đối tượng của chúng ta. đỉnh Các đỉnh của một đối tượng tương ứng với một tập hợp các điểm xác định diện tích bề mặt trong không gian 2D hoặc 3D. Trong trình chỉnh sửa 3D, các đỉnh thường được biểu diễn dưới dạng các giao điểm giữa lưới và đối tượng. Các đỉnh được đặc trưng, theo quy luật, bởi 2 điểm: Chúng là các thành phần con của thành phần biến đổi Chúng có vị trí nhất định theo tâm đối tượng chung trong không gian cục bộ Điều này có nghĩa là mỗi đỉnh có thành phần biến đổi chịu trách nhiệm về kích thước, góc quay và vị trí của nó, cũng như các thuộc tính cho biết vị trí của các đỉnh này so với tâm của đối tượng của chúng ta. định mức Các định mức vốn đã giúp chúng ta xác định vị trí của bề mặt của các lát cắt đối tượng của chúng ta. Một pháp tuyến tương ứng với một vectơ vuông góc trên bề mặt của đa giác, được sử dụng để xác định hướng hoặc hướng của một mặt hoặc đỉnh. tiếp tuyến Tham khảo tài liệu Unity, chúng tôi nhận được mô tả sau: Tiếp tuyến là . Các tiếp tuyến trong Unity được biểu diễn dưới dạng Vector4, với các thành phần x,y,z xác định vectơ và w được sử dụng để lật nhị phân nếu cần - Hướng dẫn sử dụng Unity một vectơ có độ dài đơn vị đi theo bề mặt Lưới dọc theo hướng kết cấu nằm ngang (U) Tôi vừa đọc cái quái gì vậy? Nói một cách đơn giản, các tiếp tuyến theo tọa độ U trong UV cho mỗi hình dạng hình học. tọa độ tia cực tím Nhiều người đã xem xét giao diện trong và có thể, giống như tôi, thậm chí đã cố gắng vẽ một thứ gì đó của riêng họ. Và tọa độ UV chính xác liên quan đến điều này. Chúng ta có thể sử dụng chúng để đặt kết cấu 2D trên đối tượng 3D. GTA Vice City Các tọa độ này hoạt động như các điểm tham chiếu kiểm soát các texels trong bản đồ kết cấu tương ứng với từng đỉnh trong lưới. Diện tích tọa độ UV bằng một phạm vi giữa 0,0 (float) và 1,0 (float), trong đó "0" biểu thị điểm bắt đầu và "1" biểu thị điểm cuối. Màu đỉnh Ngoài vị trí, góc quay và kích thước, các đỉnh còn có màu sắc của chúng. Khi chúng ta xuất một đối tượng từ phần mềm 3D, nó sẽ gán một màu cho đối tượng cần tác động bằng ánh sáng hoặc sao chép màu khác. Màu của đỉnh mặc định là màu trắng (1,1,1,1,1,1) và các màu được mã hóa bằng RGBA. Ví dụ, với sự trợ giúp của các màu đỉnh, bạn có thể làm việc với pha trộn kết cấu, như thể hiện trong hình trên. kết luận nhỏ Đến đây là hết phần 1. Trong phần 2, tôi sẽ thảo luận về: bóng đổ là gì ngôn ngữ đổ bóng Các loại shader cơ bản trong Unity cấu trúc đổ bóng ShaderLab pha trộn Bộ đệm Z (Bộ đệm sâu) loại bỏ Cg/HLSL Biểu đồ đổ bóng Nếu bạn có bất kỳ câu hỏi nào, hãy để lại trong phần bình luận!