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

Một nguồn sáng 2D. Tiếp...

#include <njin_light.h>

Các thuộc tính Public

light_kind kind = light_point
 Loại đèn.
rgba color {1.0f, 1.0f, 1.0f, 1.0f}
 Màu đèn, kiểu sRGB như mọi màu khác trong njin (engine tự đổi sang tuyến tính).
f32 temperature = 0.0f
 Nhiệt độ màu (kelvin).
f32 intensity = 6.0f
 Cường độ bức xạ (không gian tuyến tính).
f32 radius = 200.0f
 Bán kính tối đa (đơn vị thế giới): ngoài đó đèn không chiếu tới.
f32 size = 32.0f
 Kích thước nguồn sáng (đơn vị thế giới).
light_falloff falloff = falloff_physical
 Đường cong tối dần.
f32 angle = 0.0f
 Hướng đèn nón chiếu, hoặc hướng ánh sáng đi tới của đèn hướng, tính bằng độ: 0 là sang phải, 90 là xuống dưới (theo chiều kim đồng hồ).
f32 cone = 60.0f
 Đèn nón: góc mở toàn phần, độ.
f32 softness = 0.3f
 Đèn nón: độ mềm của rìa nón, 0 (gắt) đến 1 (mờ từ tâm).
f32 height = 40.0f
 Độ cao của đèn so với mặt phẳng cảnh (đơn vị thế giới).
f32 elevation = 45.0f
 Đèn hướng: góc của đèn so với mặt phẳng cảnh, độ (90 là thẳng từ trên xuống).
bool cast_shadows = true
 Bị vật chắn (light_occluder) che và đổ bóng.
bool enabled = true
 Tắt mà không cần gỡ component.

Mô tả chi tiết

Một nguồn sáng 2D.

Cần transform trên cùng entity; transform.pos là vị trí đèn, transform.rot cộng vào angle. Chỉ có tác dụng khi ánh sáng đã được bật bằng lighting_set().

Ánh sáng là PBR (physically based rendering): mỗi pixel của cảnh có màu gốc (albedo, chính là ảnh sprite), pháp tuyến (normal map), độ kim loại, độ nhám và độ che khuất (bản đồ vật liệu), có thể thêm phát sáng, và mỗi đèn được tính bằng mô hình Cook-Torrance (GGX, Smith, Fresnel-Schlick, như pbr.fs trong ví dụ của raylib) trong không gian tuyến tính HDR, rồi tonemap. Xem trang Ánh sáng 2D trong docs.

Thông tin về Member Data

◆ color

rgba njin::light_2d::color {1.0f, 1.0f, 1.0f, 1.0f}

Màu đèn, kiểu sRGB như mọi màu khác trong njin (engine tự đổi sang tuyến tính).

Kênh alpha bị bỏ qua.

◆ temperature

f32 njin::light_2d::temperature = 0.0f

Nhiệt độ màu (kelvin).

Lớn hơn 0 thì màu đèn được nhân thêm màu của một vật đen phát sáng ở nhiệt độ đó: nến 1900, đèn dây tóc 2700, ban ngày 6500, trời xanh 10000. 0 là tắt.

◆ intensity

f32 njin::light_2d::intensity = 6.0f

Cường độ bức xạ (không gian tuyến tính).

Bề mặt nhám màu trắng ngay dưới đèn, đối diện đèn, sáng đúng bằng giá trị này; đèn theo vật lý giảm nhanh nên thường cần 4 đến 12. Có thể lớn hơn 1: ánh sáng là HDR, phần dư được tonemap.

◆ size

f32 njin::light_2d::size = 32.0f

Kích thước nguồn sáng (đơn vị thế giới).

Với falloff_physical đây là khoảng cách độ sáng còn một nửa. Với mọi kiểu, nó là bán kính của nguồn sáng khi đổ bóng: nguồn càng lớn, bóng càng mờ ở xa vật chắn (vùng nửa tối). 0 cho bóng sắc nét.

◆ falloff

light_falloff njin::light_2d::falloff = falloff_physical

Đường cong tối dần.

Bỏ qua với đèn hướng.

◆ angle

f32 njin::light_2d::angle = 0.0f

Hướng đèn nón chiếu, hoặc hướng ánh sáng đi tới của đèn hướng, tính bằng độ: 0 là sang phải, 90 là xuống dưới (theo chiều kim đồng hồ).

Cộng với transform.rot.

◆ height

f32 njin::light_2d::height = 40.0f

Độ cao của đèn so với mặt phẳng cảnh (đơn vị thế giới).

Đèn càng thấp, bề mặt nghiêng càng rõ và phản xạ gương càng lệch. Với đèn hướng thay bằng elevation.