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

Bề mặt của các hình 3D vẽ sau material3d_set(). Tiếp...

#include <njin_3d.h>

Các thuộc tính Public

f32 specular = 0.25f
 Độ mạnh của điểm sáng bóng. 0 là mặt mờ (gỗ, vải).
f32 shininess = 32.0f
 Độ nhọn của điểm sáng bóng: lớn là mặt nhẵn (nhựa, kim loại).
rgba emission {0.0f, 0.0f, 0.0f, 0.0f}
 Màu tự phát sáng, cộng vào sau khi chiếu sáng; a là độ mạnh.
rgba rim {0.0f, 0.0f, 0.0f, 0.0f}
 Viền sáng ở mép hình, nơi bề mặt quay đi khỏi camera; a là độ mạnh.
bool unlit = false
 Bỏ qua ánh sáng, giữ nguyên màu (vệt đạn, tia laze, UI trong thế giới).
texture_handle texture {}
 Ảnh dán lên hình khối (draw_cube3d(), draw_plane3d()...), nhân với màu vẽ.
bool cast_shadows = true
 Đổ bóng khi njin::light3d bật shadows.
f32 clay = 0.0f
 Opt-in hand-shaped clay normal/albedo variation for SDF draws only.
f32 clay_detail = 9.0f
 Grain frequency relative to the largest SDF part radius.
texture_handle normal {}
 Normal map (tangent space, xanh lá hướng lên như glTF, tức OpenGL +Y) cho hình khối và draw_instanced3d().
f32 world_uv = 0.0f
 Lớn hơn 0: ảnh (texture, normal, và ảnh của vật liệu model) dán theo vị trí trong thế giới thay cho UV của lưới, mỗi ô ảnh world_uv đơn vị 3D.
texture_handle under {}
 Lớp dưới, chỉ khi world_uv > 0: ảnh màu và normal map của thứ nằm dưới lớp ảnh chính (gạch dưới lớp vữa), lộ ra từng mảng nơi lớp trên đã bong, nhiều hơn ở chân tường, mép mảng bong hơi tối.
texture_handle under_normal {}
 Normal map của lớp dưới, như normal.
f32 under_amount = 0.0f
 Phần lớp dưới lộ ra, 0 (không) đến 1 (toàn bộ, lớp trên bong hết).
f32 reflect = 0.0f
 Độ phản chiếu, 0..1, cho phản chiếu trên màn hình (post3d::ssr): 1 là gương ở mọi góc nhìn, nhỏ hơn thì chỉ phản chiếu rõ khi nhìn xiên (sàn bóng, mặt nước).

Mô tả chi tiết

Bề mặt của các hình 3D vẽ sau material3d_set().

Thông tin về Member Data

◆ emission

rgba njin::material3d::emission {0.0f, 0.0f, 0.0f, 0.0f}

Màu tự phát sáng, cộng vào sau khi chiếu sáng; a là độ mạnh.

Bật bloom (post_fx_set()) để màu này lan sáng ra xung quanh.

◆ rim

rgba njin::material3d::rim {0.0f, 0.0f, 0.0f, 0.0f}

Viền sáng ở mép hình, nơi bề mặt quay đi khỏi camera; a là độ mạnh.

Làm vật trông mềm và tách khỏi nền (nhựa, nhân vật hoạt hình).

◆ texture

texture_handle njin::material3d::texture {}

Ảnh dán lên hình khối (draw_cube3d(), draw_plane3d()...), nhân với màu vẽ.

Không hợp lệ là không dán ảnh. Ảnh đã xếp vào atlas bị bỏ qua.

◆ clay

f32 njin::material3d::clay = 0.0f

Opt-in hand-shaped clay normal/albedo variation for SDF draws only.

0 keeps the original smooth surface. Does not change hit depth or silhouette.

◆ normal

texture_handle njin::material3d::normal {}

Normal map (tangent space, xanh lá hướng lên như glTF, tức OpenGL +Y) cho hình khối và draw_instanced3d().

Không hợp lệ là không dùng. Với model, đặt model_material::normal.

◆ world_uv

f32 njin::material3d::world_uv = 0.0f

Lớn hơn 0: ảnh (texture, normal, và ảnh của vật liệu model) dán theo vị trí trong thế giới thay cho UV của lưới, mỗi ô ảnh world_uv đơn vị 3D.

Mặt đứng: u chạy ngang theo mặt, v hướng lên (đỉnh ảnh ở trên), nên vệt nước chảy thẳng xuống dù hình xoay thế nào; mặt nằm: u theo x, v theo z. Cho tường và sàn ghép từ nhiều khối: ảnh liền qua các khối, không giãn theo cỡ khối, và dùng được với lưới không có UV. Mặc định 0: UV của lưới. Ảnh dán theo cách này được trộn từ hai vị trí lệch nhau theo một nhiễu chậm, nên các ô ảnh không lộ thành lưới.

◆ under

texture_handle njin::material3d::under {}

Lớp dưới, chỉ khi world_uv > 0: ảnh màu và normal map của thứ nằm dưới lớp ảnh chính (gạch dưới lớp vữa), lộ ra từng mảng nơi lớp trên đã bong, nhiều hơn ở chân tường, mép mảng bong hơi tối.

Không nhân với màu vẽ. Lớp dưới chỉ dịch theo bước 1/8 ô, nên hoa văn lưới như gạch (lặp mỗi 1/8 ô) giữ nguyên mạch. Không hợp lệ là không có lớp dưới.

◆ reflect

f32 njin::material3d::reflect = 0.0f

Độ phản chiếu, 0..1, cho phản chiếu trên màn hình (post3d::ssr): 1 là gương ở mọi góc nhìn, nhỏ hơn thì chỉ phản chiếu rõ khi nhìn xiên (sàn bóng, mặt nước).

Chỉ có tác dụng khi post3d::ssr > 0. Hình SDF (draw_shape3d()) không phản chiếu.