njin
Engine 2D gọn nhẹ để tự tay làm game theo ý mình. Vibe coding cũng ổn luôn
Loading...
Searching...
No Matches
njin::light_occluder_pixels Struct Tham chiếu

Vật chắn từng pixel: những pixel đủ đục của ảnh sprite (hoặc của mask) chắn sáng và đổ bóng đúng từng pixel, không cần dựng hình. Tiếp...

#include <njin_light.h>

Các thuộc tính Public

texture_handle mask {}
 Ảnh dùng làm vật chắn: pixel có alpha từ lighting_desc::pixel_alpha trở lên là vật đặc.

Mô tả chi tiết

Vật chắn từng pixel: những pixel đủ đục của ảnh sprite (hoặc của mask) chắn sáng và đổ bóng đúng từng pixel, không cần dựng hình.

Cần sprite và transform trên cùng entity.

Cách làm theo bài "2D Pixel-Perfect Shadows" của mattdesl: các vật chắn được vẽ vào một ảnh (bản đồ vật chắn), rồi với mỗi đèn, ray-march theo từng góc quanh đèn để biết vật chắn đầu tiên ở khoảng cách nào (bản đồ bóng 1D). Chi phí phụ thuộc vào cỡ vùng đèn chiếu tới, không phụ thuộc số vật chắn, nên hợp với hàng nghìn cây, cỏ, đá.

So với light_occluder và light_occluder_sprite (dựng bằng đa giác): bóng theo từng pixel của ảnh, hết cả chi tiết nhỏ và lỗ hổng; nhưng chỉ có vật chắn nằm trong ảnh màn hình mở rộng thêm lighting_desc::occluder_margin mới đổ bóng, và không có "đường mở" mỏng. Có thể dùng cả hai cùng lúc. Bóng mềm theo light_2d::size, mềm dần từ chỗ vật chắn.

Vật chắn tự nó vẫn sáng (điểm nằm trong vật chắn đầu tiên trên tia không bị chính nó che), và đèn nằm trong một vật chắn không bị vật chắn đó chặn.

Thông tin về Member Data

◆ mask

texture_handle njin::light_occluder_pixels::mask {}

Ảnh dùng làm vật chắn: pixel có alpha từ lighting_desc::pixel_alpha trở lên là vật đặc.

Cùng kích thước và cách xếp frame với sprite::texture. Trống thì dùng chính ảnh của sprite. Dùng để cho chỉ thân cây chắn sáng chứ không phải cả tán lá.