Xương lò xo (tóc, đuôi, áo choàng) và chép animation sang bộ xương khác (retarget).
Tiếp...
|
| spring3d_handle | njin::spring3d_create (context &ctx, const spring3d_desc &desc) |
| | Tạo một bộ xương lò xo cho một nhân vật.
|
| i32 | njin::spring3d_update (context &ctx, spring3d_handle handle, const model_pose &pose, const transform3d &transform, f32 dt, bone_pose3d *out, i32 count) |
| | Chạy lò xo dt giây và ghi tư thế cuối của mọi xương vào out: tư thế pose (animation, hay xương game đặt), với các xương lò xo đã trễ và đung đưa.
|
| void | njin::spring3d_reset (context &ctx, spring3d_handle handle) |
| | Đặt lại: lần spring3d_update() sau, mọi xương lò xo bắt đầu đứng yên ở tư thế của animation.
|
| void | njin::spring3d_destroy (context &ctx, spring3d_handle handle) |
| | Hủy bộ lò xo.
|
| const char * | njin::bone_humanoid_name (const char *name) |
| | Tên chuẩn của một xương người (humanoid) từ tên của nó trong file: hiểu cách đặt tên của Mixamo (mixamorig:LeftForeArm), Unreal (lowerarm_l, spine_02), Unity và VRM (LeftLowerArm, UpperChest) và Blender (forearm.L, thigh.R).
|
| retarget3d_handle | njin::retarget3d_create (context &ctx, const retarget3d_desc &desc) |
| | Chuẩn bị chép animation từ desc.source sang desc.target.
|
| i32 | njin::retarget3d_pose (const context &ctx, retarget3d_handle handle, const model_pose &pose, bone_pose3d *out, i32 count) |
| | Tư thế của model đích khi model nguồn ở tư thế pose.
|
| i32 | njin::retarget3d_source_bone (const context &ctx, retarget3d_handle handle, i32 bone) |
| | Xương nguồn được ghép với xương bone của model đích, để kiểm tra cách ghép.
|
| void | njin::retarget3d_destroy (context &ctx, retarget3d_handle handle) |
| | Hủy cách chép.
|
| foot3d_handle | njin::foot3d_create (context &ctx, const foot3d_desc &desc) |
| | Tạo một bộ đặt chân cho một nhân vật: mỗi frame, mỗi bàn chân của animation được đặt lên mặt đất ngay dưới nó (bậc thang, dốc, đá), hông hạ xuống cho bàn chân thấp hơn với tới, đầu gối gập bằng IK hai xương, lòng bàn chân nghiêng theo mặt đất.
|
| i32 | njin::foot3d_update (context &ctx, foot3d_handle handle, const model_pose &pose, const transform3d &transform, f32 dt, bone_pose3d *out, i32 count, f32 weight=1.0f) |
| | Đặt chân lên mặt đất và ghi tư thế cuối vào out, dò đất bằng physics3d_raycast() thẳng xuống dưới mỗi cổ chân (trúng body tĩnh, động, kinematic và height field của địa hình; không trúng nhân vật character3d).
|
| i32 | njin::foot3d_update (context &ctx, foot3d_handle handle, const model_pose &pose, const transform3d &transform, f32 dt, bone_pose3d *out, i32 count, const foot3d_ground &ground, f32 weight=1.0f) |
| | Như bản trên, nhưng mặt đất do game cho bằng ground (địa hình, lưới ô, bất kỳ hình gì không có trong physics3d).
|
| f32 | njin::foot3d_hip_offset (const context &ctx, foot3d_handle handle) |
| | Hông đang hạ bao nhiêu (đơn vị thế giới, âm là hạ xuống) sau lần foot3d_update() cuối, để camera hay vật cầm tay đi theo.
|
| void | njin::foot3d_reset (context &ctx, foot3d_handle handle) |
| | Đặt lại: lần foot3d_update() sau đặt chân ngay, không làm mượt từ chỗ cũ.
|
| void | njin::foot3d_destroy (context &ctx, foot3d_handle handle) |
| | Hủy bộ đặt chân.
|
Xương lò xo (tóc, đuôi, áo choàng) và chép animation sang bộ xương khác (retarget).
Chạy lò xo dt giây và ghi tư thế cuối của mọi xương vào out: tư thế pose (animation, hay xương game đặt), với các xương lò xo đã trễ và đung đưa.
Mô phỏng trong thế giới, theo transform của lần vẽ, nên nhân vật chạy thì tóc bay ra sau. Truyền out cho model_pose::bones để vẽ.
Gọi mỗi frame một lần cho mỗi nhân vật, trước khi vẽ. Lò xo chạy theo bước 1/60 giây (nhiều bước khi dt lớn, dt trên 0.1 giây bị cắt); dt 0 (game tạm dừng) không mô phỏng, chỉ đặt xương theo đầu xương hiện tại.
void draw_model_anim(const context &ctx, model_handle handle, const transform3d &transform, const model_pose &pose, rgba tint=colors::white)
Vẽ model có xương ở tư thế pose.
i32 spring3d_update(context &ctx, spring3d_handle handle, const model_pose &pose, const transform3d &transform, f32 dt, bone_pose3d *out, i32 count)
Chạy lò xo dt giây và ghi tư thế cuối của mọi xương vào out: tư thế pose (animation,...
Một xương ở một tư thế: vị trí và ba trục của nó trong không gian của model (trước transform của lần ...
Definition njin_3d.h:771
Tư thế của một model có xương khi vẽ: animation nào, ở giây thứ mấy, và (tùy chọn) trộn với animation...
Definition njin_3d.h:620
- Các tham số
-
| ctx | Context của engine. |
| handle | Bộ lò xo. |
| pose | Tư thế trước lò xo. |
| transform | Vị trí, hướng và tỉ lệ của lần vẽ (tỉ lệ nên đều ba trục). |
| dt | Thời gian trôi qua, giây (thường là delta()). |
| out | Mảng nhận model_bone_count() xương, trong không gian của model như model_bone_pose(). |
| count | Số phần tử của out. |
- Giá trị trả về
- Số xương đã ghi; 0 nếu handle không hợp lệ hay count nhỏ hơn số xương.
| const char * njin::bone_humanoid_name |
( |
const char * | name | ) |
|
Tên chuẩn của một xương người (humanoid) từ tên của nó trong file: hiểu cách đặt tên của Mixamo (mixamorig:LeftForeArm), Unreal (lowerarm_l, spine_02), Unity và VRM (LeftLowerArm, UpperChest) và Blender (forearm.L, thigh.R).
Kết quả là một trong: hips, spine, chest, upper_chest, neck, head, và theo hai bên (left_, right_): shoulder, upper_arm, lower_arm, hand, upper_leg, lower_leg, foot, toes, thumb_1..thumb_3, index_1..index_3, middle_1.., ring_1.., little_1.. (đốt ngón tính từ bàn tay).
- Các tham số
-
- Giá trị trả về
- Tên chuẩn (chuỗi tĩnh), hoặc chuỗi rỗng nếu không nhận ra.
Chuẩn bị chép animation từ desc.source sang desc.target.
Mỗi xương được ghép xoay so với tư thế gốc: xương đích xoay đúng góc mà xương nguồn xoay khỏi tư thế gốc của nó, trong không gian của model. Nên hai model cần cùng trục (cùng hướng lên, cùng hướng nhìn) và tư thế gốc giống nhau (cùng là chữ T hay cùng chữ A); nếu không, tay sẽ lệch đúng bằng độ lệch của hai tư thế gốc. Xương đích không được ghép đi theo xương cha của nó như ở tư thế gốc. Hông (hips) còn được dời theo hông nguồn, nhân với tỉ lệ độ cao hông (chiều dài chân) của hai model, nên người lùn bước ngắn hơn và chân không trượt.
- Các tham số
-
| ctx | Context của engine. |
| desc | Hai model và cách ghép xương. |
- Giá trị trả về
- Handle; không hợp lệ nếu một model không có xương hay không xương nào ghép được (cảnh báo nói vì sao). Giải phóng bằng retarget3d_destroy().
Tạo một bộ đặt chân cho một nhân vật: mỗi frame, mỗi bàn chân của animation được đặt lên mặt đất ngay dưới nó (bậc thang, dốc, đá), hông hạ xuống cho bàn chân thấp hơn với tới, đầu gối gập bằng IK hai xương, lòng bàn chân nghiêng theo mặt đất.
Bàn chân đang nhấc trong animation (bước đi) vẫn nhấc, cao hơn mặt đất dưới nó bấy nhiêu. Mỗi nhân vật một bộ (nó nhớ độ cao để làm mượt).
- Các tham số
-
| ctx | Context của engine. |
| desc | Model và các chân. |
- Giá trị trả về
- Handle; không hợp lệ nếu model không có xương hay không chân nào đủ ba xương (cảnh báo nói vì sao). Giải phóng bằng foot3d_destroy().
Đặt chân lên mặt đất và ghi tư thế cuối vào out, dò đất bằng physics3d_raycast() thẳng xuống dưới mỗi cổ chân (trúng body tĩnh, động, kinematic và height field của địa hình; không trúng nhân vật character3d).
Thứ tự với các bước khác: retarget3d_pose() trước (nếu có), rồi foot3d_update() với pose.bones là kết quả đó, rồi spring3d_update() với pose.bones là kết quả của foot3d, rồi vẽ. Gốc của lần vẽ (transform) là chỗ nhân vật đứng (đáy capsule của character3d).
i32 foot3d_update(context &ctx, foot3d_handle handle, const model_pose &pose, const transform3d &transform, f32 dt, bone_pose3d *out, i32 count, f32 weight=1.0f)
Đặt chân lên mặt đất và ghi tư thế cuối vào out, dò đất bằng physics3d_raycast() thẳng xuống dưới mỗi...
- Các tham số
-
| ctx | Context của engine. |
| handle | Bộ đặt chân. |
| pose | Tư thế trước khi đặt chân (animation, hay xương đã tính). |
| transform | Vị trí, hướng và tỉ lệ của lần vẽ (tỉ lệ nên đều ba trục). |
| dt | Thời gian trôi qua, giây, để làm mượt. 0: đặt ngay, không làm mượt. |
| out | Mảng nhận model_bone_count() xương, như model_bone_pose(). |
| count | Số phần tử của out. |
| weight | Mức áp, 0..1: 0 là đúng animation, 1 là chân đặt hẳn lên đất (giảm dần khi nhân vật nhảy lên). |
- Giá trị trả về
- Số xương đã ghi; 0 nếu handle không hợp lệ hay count nhỏ hơn số xương.