Làm cách nào để triển khai bóng 2D giữa các lớp?


10

Làm thế nào tôi có thể thực hiện các bóng 2d được tạo bởi các đối tượng trong một lớp khác nhau?

KHÔNG thích ánh sáng động trong hướng dẫn nổi tiếng từ Catalin Zima :

nhập mô tả hình ảnh ở đây

Nhưng giống như bóng của các đường ống trong video này :

nhập mô tả hình ảnh ở đây

Và giống như cái bóng của nền tảng và nhân vật trong video này :

nhập mô tả hình ảnh ở đây

Tôi muốn sử dụng cùng một loại ánh sáng trong một cảnh có nhiều lớp và rất nhiều đèn với nhiều màu sắc khác nhau.

Tôi có thể tưởng tượng làm điều này bằng cách vẽ một bản sao màu đen của lớp trên các lớp phía sau lớp đó và điều chỉnh nó theo các lỗ trên các lớp mà bóng đổ lên. Nhưng tôi hy vọng có một cách tiếp cận dựa trên pixel-shader ít tốn kém hơn cho việc này.

Câu trả lời:


1

Điều này có thể được thực hiện với mặt nạ. Có nhiều cách để làm điều đó.

Một cách sẽ là có một cách để hiển thị một phiên bản bóng của các phần tử tiền cảnh. Vẽ nền. Sau đó vẽ các yếu tố tiền cảnh, bù nhẹ tùy thuộc vào cách bạn muốn ánh sáng di chuyển, theo cách mà bạn chỉ xuất ra màu đen. Sau đó vẽ tiền cảnh bình thường.

Một cách khác là kết xuất tiền cảnh vào bộ đệm, nhiều hơn một chút so với thực tế bạn thấy. Sau đó thực hiện một số vượt qua "sang màu đen" và có thể vượt qua mờ. Bây giờ kết xuất đầu ra của tập hợp này và sau đó là phần hiển thị của bộ đệm nền trước.

Để hỗ trợ nhiều đèn ở các góc khác nhau, bạn chỉ cần thực hiện bước trước nhiều lần hoặc tích lũy tất cả chúng trong một bộ đệm. Toán học sẽ thay đổi dựa trên những gì bạn đang cố gắng đạt được, nhưng phỏng đoán đầu tiên về những gì đang diễn ra trong video đầu tiên đó là họ chỉ đặt vị trí của ánh sáng so với vị trí của máy ảnh (trung tâm của vùng nhìn thấy) và sau đó sử dụng vectơ đó (chia tỷ lệ) để xác định cách bù bóng. Cái gì đó như:

draw background
for each light intersecting viewing bounds:
  offset = light.position - camera.position
  offset *= SCALE FACTOR (0.25 maybe)
  draw shadow foreground at offset
draw foreground

Đèn "gần" hơn với cảnh sẽ có hệ số tỷ lệ nhỏ hơn. Nếu bạn muốn có nhiều độ sâu, có một số phép toán để thực hiện, đó là những thứ hình học đơn giản.


Vâng, đây chính xác là những gì tôi nghĩ ra. Mặc dù vậy, không biết thuật ngữ chính xác cho nó là mặt nạ. Nhưng tôi hy vọng có thể có một thuật toán tương tự như cách các khối bóng hoạt động trong không gian 3D ..
Berry

Khi bạn đang đổ bóng lên các bề mặt có lỗ trên chúng, bạn phải đổ bóng cư trú lên trên lớp phía sau lớp đó. Ngoài ra, làm việc với tính minh bạch sẽ trở nên một chút khó khăn. Tôi đã nghĩ về tất cả các giải pháp cho những vấn đề này! Nhưng tôi nghĩ rằng nó sẽ trở nên quá đắt để áp dụng trong thời gian thực, đặc biệt là khi xử lý nhiều lớp (20) và rất nhiều đèn (50). Đó là lý do tại sao tôi hy vọng cho một cách tiếp cận khác.
Berry
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.