115 const f32 x0 = -origin.x * size.
x, y0 = -origin.y * size.
y;
116 const f32 reach = std::sqrt(std::max(x0 * x0, (x0 + size.
x) * (x0 + size.
x)) + std::max(y0 * y0, (y0 + size.
y) * (y0 + size.
y)));
117 return light_occluder{{{x0, y0}, {x0 + size.
x, y0}, {x0 + size.
x, y0 + size.
y}, {x0, y0 + size.
y}},
true,
false, reach};
127 const i32 n = segments < 3 ? 3 : segments;
128 for (
i32 i = 0; i < n; i++) {
129 const f32 a = 6.28318530718f * (
f32)i / (
f32)n;
130 o.points.push_back({center.x + std::cos(a) * radii.
x, center.y + std::sin(a) * radii.
y});
132 o.reach = std::hypot(center.x, center.y) + std::max(radii.
x, radii.
y);
154 const f32 dx = b.
x - a.
x, dy = b.
y - a.
y;
155 const f32 len = std::sqrt(dx * dx + dy * dy);
156 const f32 base = len > 1e-6f ? std::atan2(dy, dx) : 0.0f;
157 const i32 n = arc_segments < 1 ? 1 : arc_segments;
159 for (
i32 i = 0; i <= n; i++) {
160 const f32 t = base - 1.57079632679f + 3.14159265359f * (
f32)i / (
f32)n;
161 o.
points.push_back({b.
x + std::cos(t) * radius, b.
y + std::sin(t) * radius});
163 for (
i32 i = 0; i <= n; i++) {
164 const f32 t = base + 1.57079632679f + 3.14159265359f * (
f32)i / (
f32)n;
165 o.
points.push_back({a.
x + std::cos(t) * radius, a.
y + std::sin(t) * radius});
167 o.
reach = std::max(std::hypot(a.
x, a.
y), std::hypot(b.
x, b.
y)) + radius;
230 f32 simplify = 0.0f);
light_occluder light_occluder_box(vec2 size, vec2 origin={0.5f, 0.5f})
Vật chắn hình chữ nhật.
Definition njin_light.h:114
void lighting_set(context &ctx, const lighting_desc &desc)
Đặt cài đặt ánh sáng.
light_kind
Loại đèn.
Definition njin_light.h:17
light_occluder light_occluder_capsule(vec2 a, vec2 b, f32 radius, i32 arc_segments=6)
Vật chắn hình viên thuốc (capsule): đoạn thẳng từ a đến b phình ra radius.
Definition njin_light.h:152
light_occluder light_occluder_ellipse(vec2 radii, vec2 center={0.0f, 0.0f}, i32 segments=16)
Vật chắn hình elip (đa giác đều đủ nhiều cạnh).
Definition njin_light.h:125
light_occluder light_occluder_line(std::vector< vec2 > points)
Vật chắn là một đường gấp khúc mỏng, chắn cả hai phía: tường, hàng rào, mép vách.
Definition njin_light.h:174
lighting_desc lighting_get(const context &ctx)
Cài đặt ánh sáng đang dùng.
light_tonemap
Cách nén ánh sáng HDR về màn hình. Đều chạy sau độ phơi sáng (lighting_desc::exposure).
Definition njin_light.h:233
rgba light_color_kelvin(f32 kelvin)
Màu của một vật đen phát sáng ở nhiệt độ cho trước.
std::vector< light_occluder > light_occluders_from_tiles(const tilemap &map, const std::function< bool(i32 tile)> &solid, f32 simplify=0.0f)
Viền các ô đặc của một tilemap thành các vật chắn, để tường và vách chặn sáng.
light_occluder light_occluder_circle(f32 radius, vec2 center={0.0f, 0.0f}, i32 segments=16)
Vật chắn hình tròn.
Definition njin_light.h:141
light_falloff
Đường cong tối dần theo khoảng cách của đèn điểm và đèn nón.
Definition njin_light.h:24
@ light_directional
Đèn hướng (mặt trời, trăng): sáng đều cả cảnh, từ một hướng, không có vị trí.
Definition njin_light.h:20
@ light_point
Đèn điểm: tỏa đều mọi hướng từ transform.pos, tối dần theo khoảng cách.
Definition njin_light.h:18
@ light_spot
Đèn nón (đèn pin, đèn sân khấu): chỉ sáng trong một góc quanh hướng angle.
Definition njin_light.h:19
@ tonemap_aces
ACES filmic (xấp xỉ của Narkowicz): tương phản điện ảnh, bão hòa vừa. Nên đặt exposure cao hơn.
Definition njin_light.h:238
@ tonemap_shoulder
Giữ nguyên các tông dưới 0.6, chỉ ép mượt phần sáng hơn về 1.
Definition njin_light.h:236
@ tonemap_reinhard
x / (1 + x): đơn giản, mềm, nhưng làm cả cảnh nhạt và tối đi.
Definition njin_light.h:237
@ falloff_none
Sáng đều trong radius rồi tắt hẳn ở rìa. Hợp với vùng sáng cố định.
Definition njin_light.h:32
@ falloff_physical
Theo vật lý: độ sáng giảm theo nghịch đảo bình phương khoảng cách, 1 / (1 + (d / size)^2),...
Definition njin_light.h:29
@ falloff_linear
Giảm tuyến tính từ tâm đến radius. Dễ đoán nhất.
Definition njin_light.h:30
@ falloff_smooth
Giảm mượt, phẳng ở tâm, tắt hẳn ở radius. Kiểu quầng sáng cổ điển.
Definition njin_light.h:31
std::int32_t i32
Số nguyên có dấu 32 bit.
Definition _types.h:14
float f32
Số thực 32 bit.
Definition _types.h:28
Một nguồn sáng 2D.
Definition njin_light.h:44
f32 cone
Đèn nón: góc mở toàn phần, độ.
Definition njin_light.h:68
f32 radius
Bán kính tối đa (đơn vị thế giới): ngoài đó đèn không chiếu tới.
Definition njin_light.h:57
f32 temperature
Nhiệt độ màu (kelvin).
Definition njin_light.h:52
rgba color
Màu đèn, kiểu sRGB như mọi màu khác trong njin (engine tự đổi sang tuyến tính).
Definition njin_light.h:48
light_falloff falloff
Đường cong tối dần.
Definition njin_light.h:63
f32 elevation
Đè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).
Definition njin_light.h:73
bool cast_shadows
Bị vật chắn (light_occluder) che và đổ bóng.
Definition njin_light.h:74
f32 softness
Đèn nón: độ mềm của rìa nón, 0 (gắt) đến 1 (mờ từ tâm).
Definition njin_light.h:69
f32 height
Độ cao của đèn so với mặt phẳng cảnh (đơn vị thế giới).
Definition njin_light.h:72
f32 size
Kích thước nguồn sáng (đơn vị thế giới).
Definition njin_light.h:62
f32 intensity
Cường độ bức xạ (không gian tuyến tính).
Definition njin_light.h:56
light_kind kind
Loại đèn.
Definition njin_light.h:45
f32 angle
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,...
Definition njin_light.h:67
bool enabled
Tắt mà không cần gỡ component.
Definition njin_light.h:75
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...
Definition njin_light.h:212
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.
Definition njin_light.h:216
Vật chắn theo hình sprite: viền của các pixel đủ đục trong frame đang hiện của sprite trên cùng entit...
Definition njin_light.h:189
f32 alpha
Pixel có alpha từ ngưỡng này trở lên là vật đặc, 0..1.
Definition njin_light.h:191
f32 simplify
Độ lệch tối đa (pixel ảnh) của viền so với viền pixel thật.
Definition njin_light.h:194
Vật chắn sáng: một hình chắn ánh sáng và đổ bóng.
Definition njin_light.h:95
bool hole
Đa giác đóng là một cái lỗ trong khối đặc: bên trong là khoảng trống, vật đặc nằm bên ngoài.
Definition njin_light.h:102
std::vector< vec2 > points
Các điểm theo thứ tự.
Definition njin_light.h:96
f32 reach
Khoảng xa nhất từ điểm neo đến một điểm của hình, cho engine loại nhanh vật chắn nằm ngoài tầm nhìn m...
Definition njin_light.h:107
bool closed
Đa giác đóng (đặc, chắn từ phía ngoài vào) hay đường mở (mỏng, chắn cả hai phía).
Definition njin_light.h:98
Cài đặt chung của ánh sáng. Đặt bằng lighting_set().
Definition njin_light.h:242
f32 occluder_lod
Mức chi tiết (LOD) của vật chắn, pixel màn hình.
Definition njin_light.h:283
i32 shadow_columns
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 ...
Definition njin_light.h:260
f32 scale
Kích thước ảnh ánh sáng so với ảnh thế giới, 0.25 đến 1.
Definition njin_light.h:269
f32 exposure
Hệ số nhân toàn bộ ánh sáng trước khi tonemap, gồm cả ambient.
Definition njin_light.h:253
rgba ambient
Á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 occlusio...
Definition njin_light.h:250
f32 shadow_reach
Độ 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...
Definition njin_light.h:275
f32 pixel_alpha
Ngưỡng alpha của light_occluder_pixels, 0..1: pixel từ ngưỡng này trở lên là vật đặc.
Definition njin_light.h:262
bool enabled
Bật ánh sáng.
Definition njin_light.h:246
light_tonemap tonemap
Cách nén ánh sáng HDR về màn hình.
Definition njin_light.h:255
f32 occluder_margin
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...
Definition njin_light.h:265
Màu gồm đỏ, xanh lá, xanh dương và alpha.
Definition _types.h:64
Định danh của một texture, tạo bởi texture_load().
Definition _types.h:146
Lưới ô vuông không giới hạn kích thước, vẽ từ một tileset, chia thành chunk.
Definition _tilemap.h:128
Vector 2 chiều. Dùng cho vị trí, kích thước, độ dời.
Definition _types.h:39
f32 y
Thành phần dọc (trong không gian màn hình, y tăng khi đi xuống).
Definition _types.h:41
f32 x
Thành phần ngang.
Definition _types.h:40