Tôi thấy một vài cách tiếp cận rộng rãi để thực hiện cel shading:
- Sao chép và mở rộng mô hình với các quy tắc lật (không phải là một tùy chọn cho tôi)
- Sobel bộ lọc / shader mảnh tiếp cận để phát hiện cạnh
- Cách tiếp cận bộ đệm stear để phát hiện cạnh
- Các cách tiếp cận shader hình học (hoặc đỉnh) tính toán các mặt chuẩn và cạnh
Tôi có đúng không khi giả sử cách tiếp cận tập trung vào hình học mang lại khả năng kiểm soát lớn nhất đối với ánh sáng và độ dày đường, ví dụ như. cho địa hình nơi bạn có thể thấy đường bóng của một ngọn đồi hòa nhập dần dần vào một đồng bằng?
Điều gì xảy ra nếu tôi không cần ánh sáng pixel trên bề mặt địa hình của mình? (Và có lẽ tôi sẽ không dự định sử dụng ánh sáng / bóng dựa trên đỉnh hoặc nền văn bản dựa trên tế bào.) Sau đó, tôi sẽ tốt hơn khi gắn bó với cách tiếp cận kiểu hình học, hoặc thay vào đó là cách tiếp cận không gian / phân đoạn màn hình để giữ cho mọi thứ đơn giản hơn? Nếu vậy, làm thế nào tôi có được "mực" của các ngọn đồi trong hình bóng lưới, thay vì chỉ đường viền của toàn bộ lưới (không có chi tiết "mực" bên trong đường viền đó? ( Đường viền gợi ý của AKA , nếp gấp ).
Cuối cùng, có thể mô phỏng một cách rẻ tiền cách tiếp cận quy tắc lật, sử dụng một shader hình học? Mối quan tâm của tôi với điều này là tôi chắc chắn có thể sao chép từng đỉnh đơn lẻ và chia tỷ lệ cho các đỉnh này cho phù hợp, nhưng làm thế nào tôi có thể tiếp cận các quy tắc lật và tô màu khác biệt trong shader mảnh?
Những gì tôi muốn - độ dày đường khác nhau với các đường xâm nhập bên trong hình bóng ...
Những gì tôi không muốn ...
EDIT: Nghiên cứu sâu hơn đã đưa ra ...
Vì tôi có số lượng đỉnh lớn trên địa hình, thậm chí xem xét LoD dựa trên khoảng cách, không phải phương pháp lật thông thường cũng như cách tiếp cận dựa trên shader hình học (ngay cả với việc loại bỏ bực bội) sẽ là một lựa chọn hợp lý do sự phức tạp tính toán tuyệt đối liên quan đến sao chép và nhân rộng tất cả đỉnh tải lên.
Xem xét rằng tôi không cần chiếu sáng theo pixel dưới dạng bóng mờ trên các bề mặt địa hình, nó cũng trở nên ít thận trọng hơn khi xem xét bất kỳ phương pháp tiếp cận dựa trên khuôn mặt thông thường nào - nếu không là yêu cầu về chiếu sáng bề mặt chính xác - vì những điều này Tự nhiên khá đắt để tính toán. Tuy nhiên, đúng là họ cho mức độ kiểm soát tốt nhất; ví dụ: khả năng tô bóng các cạnh bằng cách sử dụng các nét "nghệ thuật": Đẹp, nhưng một lần nữa, không thực sự khả thi đối với môi trường trò chơi phức tạp ồ ạt.
Bộ đệm stear là thứ tôi muốn tránh vì tôi thích làm tất cả các công việc trong shader. (Ví dụ trên với đường viền màu đỏ đã được thực hiện với bộ đệm stpson - trường học cũ.)
Điều này để lại các shader mảnh không gian hình ảnh tiếp cận. Độ phức tạp tính toán được giảm xuống theo số lượng mảnh thay vì số đỉnh (trong trường hợp của tôi, đây là hoạt động ít hơn 10 - 100 lần so với tôi phải làm trong trình tạo bóng hình học). Điều này đòi hỏi nhiều hơn một lần kết xuất để tạo bộ đệm g (bao gồm bộ đệm thông thường và tùy chọn bộ đệm độ sâu) mà chúng ta có thể áp dụng các bộ lọc gián đoạn (ví dụ: toán tử Sobel). Sự gián đoạn sâu là những gì cho phép đường viền gợi ý và nếp gấp. Điều khó hiểu duy nhất của tôi với cách tiếp cận này là không có khả năng cung cấp khả năng kiểm soát tốt hơn đối với độ rộng cạnh được in mực, mặc dù với thuật toán phù hợp trong trình tạo bóng mảnh, tôi chắc chắn điều này sẽ khả thi.
Vì vậy, câu hỏi bây giờ trở nên cụ thể hơn: Làm thế nào chính xác tôi sẽ đi về việc có được độ rộng cạnh thay đổi, đặc biệt là ở hình bóng bên ngoài, trong một shader mảnh?