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::lighting_desc Struct Tham chiếu

Cài đặt chung của ánh sáng. Đặt bằng lighting_set(). Tiếp...

#include <njin_light.h>

Các thuộc tính Public

bool enabled = false
 Bật ánh sáng.
rgba ambient {0.12f, 0.14f, 0.24f, 1.0f}
 Ánh sáng nền, có ở mọi nơi kể cả chỗ không có đèn, nhân với màu gốc và độ che khuất (ambient occlusion) của bề mặt.
f32 exposure = 1.0f
 Hệ số nhân toàn bộ ánh sáng trước khi tonemap, gồm cả ambient.
light_tonemap tonemap = tonemap_shoulder
 Cách nén ánh sáng HDR về màn hình.
i32 shadow_columns = 0
 Số cột của bản đồ bóng mỗi đèn dùng light_occluder_pixels: số góc quanh một đèn điểm (số dải của đèn hướng).
f32 pixel_alpha = 0.5f
 Ngưỡng alpha của light_occluder_pixels, 0..1: pixel từ ngưỡng này trở lên là vật đặc.
f32 occluder_margin = 96.0f
 Vật chắn light_occluder_pixels được đọc trong ảnh màn hình mở rộng thêm khoảng này về mọi phía (đơn vị thế giới): vật chắn xa hơn thế không đổ bóng.
f32 scale = 1.0f
 Kích thước ảnh ánh sáng so với ảnh thế giới, 0.25 đến 1.
f32 shadow_reach = 600.0f
 Độ dài bóng của đèn hướng (đơn vị thế giới): vật chắn xa hơn thế phía sau không đổ bóng lên điểm đang xét.
f32 occluder_lod = 1.0f
 Mức chi tiết (LOD) của vật chắn, pixel màn hình.

Mô tả chi tiết

Cài đặt chung của ánh sáng. Đặt bằng lighting_set().

Thông tin về Member Data

◆ enabled

bool njin::lighting_desc::enabled = false

Bật ánh sáng.

Tắt thì cảnh vẽ như bình thường, không tốn gì. Bật làm cả thế giới đi qua các lượt ánh sáng và tonemap (trước post_fx và shader hậu kỳ của camera). Ánh sáng chỉ chạy khi có đèn, hoặc ambient làm tối cảnh.

◆ ambient

rgba njin::lighting_desc::ambient {0.12f, 0.14f, 0.24f, 1.0f}

Ánh sáng nền, có ở mọi nơi kể cả chỗ không có đèn, nhân với màu gốc và độ che khuất (ambient occlusion) của bề mặt.

Màu sRGB như mọi màu trong njin. Trắng là không tối đi chút nào, đen là tối hẳn. Ban đêm thường là một xanh sẫm.

◆ exposure

f32 njin::lighting_desc::exposure = 1.0f

Hệ số nhân toàn bộ ánh sáng trước khi tonemap, gồm cả ambient.

Để chỉnh độ sáng chung (ví dụ giảm dần lúc trời sáng), như độ phơi sáng của máy ảnh.

◆ shadow_columns

i32 njin::lighting_desc::shadow_columns = 0

Số cột của bản đồ bóng mỗi đèn dùng light_occluder_pixels: số góc quanh một đèn điểm (số dải của đèn hướng).

0 là tự chọn: đủ để mỗi tia cách nhau khoảng một pixel ở rìa đèn rộng nhất, nên vật chắn mảnh không lọt giữa hai tia (nếu ít hơn, bóng xa đèn vỡ thành các tia nan quạt). Đặt số cụ thể (256 đến 4096) để giới hạn chi phí.

◆ occluder_margin

f32 njin::lighting_desc::occluder_margin = 96.0f

Vật chắn light_occluder_pixels được đọc trong ảnh màn hình mở rộng thêm khoảng này về mọi phía (đơn vị thế giới): vật chắn xa hơn thế không đổ bóng.

Lớn hơn thì tốn bộ nhớ và fill nhiều hơn.

◆ scale

f32 njin::lighting_desc::scale = 1.0f

Kích thước ảnh ánh sáng so với ảnh thế giới, 0.25 đến 1.

1 là đầy đủ chi tiết (cần cho pixel art). Nhỏ hơn thì cả ảnh đã chiếu sáng được tính ở độ phân giải thấp rồi phóng lên: nhanh hơn nhiều, nhưng mờ, chỉ hợp máy yếu.

◆ shadow_reach

f32 njin::lighting_desc::shadow_reach = 600.0f

Độ dài bóng của đèn hướng (đơn vị thế giới): vật chắn xa hơn thế phía sau không đổ bóng lên điểm đang xét.

Một vật cao H bị mặt trời ở góc elevation chiếu thì bóng dài H / tan(elevation): với cây cao 24 và mặt trời 30 độ là khoảng 40. Mặc định 600 là bóng gần như vô hạn, chỉ hợp khi vật chắn thưa; ở khu rừng dày nó làm cả bản đồ chìm trong bóng. Áp dụng cho cả bóng đa giác và từng pixel.

◆ occluder_lod

f32 njin::lighting_desc::occluder_lod = 1.0f

Mức chi tiết (LOD) của vật chắn, pixel màn hình.

Mỗi frame, hình của mọi vật chắn (light_occluder và viền light_occluder_sprite) được giản lược sao cho lệch khỏi hình thật không quá chừng này, và vật chắn có bán kính trên màn hình nhỏ hơn thế thì bỏ hẳn. Nhìn gần thì giữ nguyên hình; nhìn xa (zoom nhỏ) thì cây, xe, vật nhỏ còn ít cạnh hơn, nên đèn đủ chỗ cho bóng của mọi thứ trên màn hình (mỗi dải của đèn hướng, mỗi ngăn góc của đèn điểm giữ tối đa 64 cạnh). 0 là tắt.