Làm cách nào để tạo nhiều đèn định vị 2D?


12

Tôi đang tìm cách tạo hiệu ứng "spotlight" 2D cho phép chiếu sáng trên nhiều thực thể. Tức là, như thể một số sprite đang cầm đuốc. Đối với một thực thể duy nhất (một đèn chiếu), tôi sử dụng một kỹ thuật trong đó tôi phủ lên một sprite gradient và có điểm trung tâm đuổi theo thực thể đó. Kỹ thuật này hoạt động tốt cho một đèn chiếu duy nhất. Đây là một ảnh chụp màn hình để minh họa những gì tôi đang nói về:

Điểm nhấn duy nhất - Công trình

Hiệu ứng nổi bật với một đèn chiếu

Vấn đề tôi gặp phải là kỹ thuật này không mở rộng ra nhiều thực thể. Nếu tôi che phủ một hình ảnh nổi bật khác, tôi gặp phải một số vấn đề. Đây là một ảnh chụp màn hình mô phỏng:

Nhiều đèn chiếu = Vấn đề

Hiệu ứng nổi bật với hai đèn sân khấu

Vấn đề rõ ràng nhất là các góc nhìn thấy được. Điều này có thể được giải quyết bằng cách làm cho hình ảnh nổi bật trở nên khổng lồ để bao quát toàn bộ cấp độ, nhưng điều đó không cảm thấy đúng. Vấn đề thứ hai và khó hiểu hơn là tôi nhân lên hiệu quả bóng tối với kỹ thuật này. Vì vậy, mỗi sprite được thêm vào có tác dụng làm tối mọi người khác. Rõ ràng tôi đang tiếp cận vấn đề này không chính xác.

Có ý kiến ​​gì không?


Nỗ lực không ngừng

Có một số thảo luận về các tùy chọn pha trộn trong các ý kiến. Đây là suy nghĩ hiện tại của tôi. Trong ví dụ nổi bật duy nhất của tôi ở trên, tôi sử dụng một tệp hình ảnh trông giống như thế này: (Tôi đã thay thế độ trong suốt bằng màu xanh lục để dễ minh họa hơn)

Phương pháp minh bạch

Như đã thảo luận ở trên, vấn đề là alpha trộn hình ảnh này với hình ảnh khác sẽ không tạo ra hiệu ứng mong muốn. Thay vào đó, nó sẽ tạo ra điều này:

Xếp chồng hai vòng tròn trong suốt

Điều đó không gây ấn tượng với tôi như là một vấn đề tùy chọn pha trộn. Vấn đề, dường như đối với tôi, đó là loại hình ảnh có mặt nạ trong suốt và hình ảnh (một hình vuông màu đen) được tích hợp, khi chúng nên được tách ra.

Vì vậy, thay vì một hình ảnh màu đen được tích hợp độ trong suốt, tôi nên sử dụng mặt nạ trong suốt được sử dụng trong thời gian chạy so với hình vuông màu đen. Khi làm điều đó, tôi vẫn không thể sử dụng mặt nạ trong suốt trắng và đen truyền thống hoặc nó sẽ gặp vấn đề tương tự. Đây là một ví dụ, lần này màu trắng và đen đại diện cho màu trắng và đen:

Mặt nạ trong suốt

Giải pháp, dường như, sẽ là áp dụng một mặt nạ trong suốt mà chính nó sử dụng tính minh bạch. Một cái gì đó như thế này: (xanh = trong suốt)

Mặt nạ trong suốt với độ trong suốt

Bằng cách đó, nhiều mặt nạ trong suốt có thể được trộn lẫn với nhau và THEN được sử dụng làm mặt nạ trong suốt so với hình vuông màu đen. Đây là một ví dụ về hai trong số các mặt nạ trong suốt alpha được pha trộn với nhau:

Hai mặt nạ minh bạch với tính minh bạch

Dù sao, đó là cách tiếp cận tôi đang thực hiện. Tôi sẽ đăng kết quả nếu điều này hoạt động. Những gì tôi không biết (hiện tại) là nếu tôi có thể sử dụng mặt nạ trong suốt mà chính nó có độ trong suốt.


Nghĩ về nó, có vẻ như tôi nên di chuyển mặt nạ trong suốt xung quanh và áp dụng chúng vào một kết cấu lớn màu đen. Không biết làm thế nào điều đó sẽ được thực hiện mặc dù.
Cameron Fredman

7
Không chắc chắn cách bạn tạo hoặc áp dụng độ dốc của mình, tuy nhiên đây có thể là một vấn đề pha trộn, trong đó nếu bạn sử dụng pha trộn đúng, nó sẽ hoạt động tốt. Chúng tôi cần thêm thông tin về kết cấu.
dennmat

Tôi đang sử dụng AndEngine làm khung, và phần lớn sự pha trộn đang diễn ra đằng sau hậu trường, mặc dù có sẵn "setBlendFunction ()" .
Cameron Fredman

Nhìn vào những gì bạn liên kết với tôi có thể bạn muốn giải pháp thứ hai được liệt kê ở dưới cùng hoặc thứ ba nếu điều đó không hiệu quả. Tôi không rõ về andEngine và dường như họ không có tài liệu, có lẽ nếu bạn không tìm thấy câu trả lời của mình trong chủ đề đó thì họ có thể giúp thêm, vì có vẻ như họ đã chơi xung quanh với sự pha trộn lựa chọn rất nhiều đằng sau hậu trường.
dennmat

Mặc dù chủ đề đó dường như đang khắc phục vấn đề của bạn ngay từ đầu, bạn có phiên bản bao gồm thay đổi đó không?
dennmat

Câu trả lời:


3

Về mặt khái niệm, giải pháp cho nhiều đèn sân khấu bao gồm:

  1. Bắt đầu với một mảng đen hoàn toàn để giữ các giá trị ánh sáng cho từng pixel trong cảnh.
    • Zero sẽ đại diện cho một khu vực của hình ảnh không có ánh sáng nào.
    • 100% sẽ đại diện cho một khu vực hoàn toàn bão hòa với ánh sáng ban ngày.
    • Nếu bạn muốn làm cho lạ mắt, bạn có thể có giá trị cao hơn 100% (giả sử, 200%) đại diện cho một khu vực của hình ảnh không bão hòa và làm mờ mọi thứ thành một đốm màu trắng chói mắt. Lo lắng về điều này sau đó, và đơn giản là giới hạn giá trị từ 0 đến 100% trong thời điểm hiện tại.
  2. Đối với mỗi nguồn sáng trong màn hình hoặc đủ gần với cạnh mà quầng sáng của nó sẽ thêm vào ánh sáng, hãy thêm các giá trị ánh sáng từ nguồn sáng đó vào mảng giá trị ánh sáng của bạn cho các pixel cảnh.
  3. Sử dụng mảng giá trị ánh sáng kết quả để sửa đổi các pixel cho cảnh của bạn sao cho:
    • Điểm ảnh được thắp sáng bởi 0% ánh sáng là màu đen.
    • Các pixel được thắp sáng bởi 100% ánh sáng có màu bình thường.
    • Các pixel khác là một phần giữa màu.
    • Bạn dường như đã biết cách thực hiện bước này, đánh giá bằng các ảnh chụp màn hình của bạn.

Bí quyết là hiểu rằng pha trộn alpha có thể thực hiện một hoặc nhiều bước trong số này. Pha trộn Alpha chỉ đề cập đến việc sử dụng bản đồ / hình ảnh alpha để sửa đổi các pixel của hình ảnh hoặc kết cấu một cách đơn giản. Điều này cũng thường có nghĩa là nó sẽ là một bộ chức năng nhanh, hoặc được thực hiện với các lệnh phần cứng đặc biệt, để làm cho nó nhanh. Bạn có thể làm điều đó với các mảng thông thường và các lệnh ngôn ngữ thông thường, nhưng sử dụng các hàm thư viện alpha / trộn đặc biệt có lẽ tốt hơn. ... Và sẽ không có lỗi. Đôi khi, điều này có nghĩa là làm cho các pixel trong suốt một phần, nhưng đối với trường hợp của bạn, điều này có nghĩa là:

  • Thêm giá trị alpha cho mỗi pixel, để xây dựng mảng giá trị ánh sáng từ # 1.
  • Sử dụng mảng giá trị ánh sáng từ # 1 để phân giải màu cuối cùng cho pixel từ bước # 3.

Tôi sẽ bắt đầu tìm tài liệu cho các chức năng trộn alpha của bạn để xem chúng cung cấp chức năng gì cho việc kết hợp các loại pixel. Tôi nghi ngờ họ sẽ có các chức năng cho từng bước bạn sẽ cần thực hiện, nhưng chúng có thể nằm dưới những cái tên không rõ ràng.


Tôi đang đào câu trả lời này và tôi sẽ cho nó một shot. Ý tưởng về ống kính flare / Blur cho các giá trị trên 100% là một phần thưởng tuyệt vời và đầy cảm hứng. Sẽ đăng cập nhật với các bài học kinh nghiệm trong quá trình. Cảm ơn ET
Cameron Fredman
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.