nx_hairdyn_lib.nx
buildroot/runtime/nx_hairdyn_lib.nx
about
dependencies 5 imports · 68 importers
diagram shows first 10 each side; +0 more imports, +58 more importers in the complete lists below.
imports: nx_syscalls.nxnx_softdyn.nxnx_softbind.nxnx_ringdown_lib.nxnx_vecmath.nx
imported by: nx_game_page_affine_candidate_t361.nxnx_game_page_authored_material_t54.nxnx_game_page_body_t138.nxnx_game_page_canonical_t135.nxnx_game_page_catwalk_lighting_candidate_t316.nxnx_game_page_emit.nxnx_game_page_emit_sand_review.nxnx_game_page_eye_t138.nxnx_game_page_gait_candidate_t139.nxnx_game_page_garment_t132.nxnx_game_page_gpu_timing_current_candidate.nxnx_game_page_gpu_timing_pool_candidate.nxnx_game_page_hair_attachment_candidate_t263.nxnx_game_page_hair_attachment_t283.nxnx_game_page_hair_guides_candidate_t263.nxnx_game_page_hair_t138.nxnx_game_page_host_candidate_t341.nxnx_game_page_identity_candidate.nxnx_game_page_imported_body_t45.nxnx_game_page_imported_t262.nxnx_game_page_inspection_distance_t235.nxnx_game_page_inspection_t142.nxnx_game_page_integrated_t73.nxnx_game_page_knight_bind_t25.nxnx_game_page_knight_feedback_t28.nxnx_game_page_knight_feedback_t29.nxnx_game_page_knight_support_t31.nxnx_game_page_knight_support_t31_before_t44.nxnx_game_page_length_diag_t140.nxnx_game_page_lit_candidate_t181.nxnx_game_page_material_body_t61.nxnx_game_page_material_candidate_t181.nxnx_game_page_material_compose_t55.nxnx_game_page_material_schema_candidate_t181.nxnx_game_page_metadata_candidate_t220.nxnx_game_page_mip_candidate_t241.nxnx_game_page_motion_candidate_t328.nxnx_game_page_motion_inventory_candidate_t330.nxnx_game_page_move_t72.nxnx_game_page_owned_candidate_t181.nxnx_game_page_pipeline_t64.nxnx_game_page_pre_inspection_t142.nxnx_game_page_pre_toon_region_t143.nxnx_game_page_procedural_review_candidate_t333.nxnx_game_page_recovery_feedback_t28.nxnx_game_page_recovery_t23.nxnx_game_page_rig_comparison_t332.nxnx_game_page_rig_inspection_t230.nxnx_game_page_rig_observation_candidate_t331.nxnx_game_page_scene_light_candidate_t364.nxnx_game_page_search_t53.nxnx_game_page_shared_candidate_t340.nxnx_game_page_skin_t138.nxnx_game_page_static_candidate_t338.nxnx_game_page_toon_region_candidate_t143.nxnx_game_page_visitors_inspection_t142.nxnx_game_page_visitors_t140.nxnx_game_page_workbench_candidate_t342.nxnx_game_page_workspace_body_t49.nxnx_game_page_workspace_body_t59.nxnx_game_page_workspace_t48.nxnx_hairbake_probe.nxnx_haircollide_gate.nxnx_hairdyn_gate.nxnx_hairdyn_pose_batch_gate_t284.nxnx_hairdyn_pose_gate_t263.nxnx_movement_base_page_t139.nxnx_strand_groom_gate.nx
structs
| none |
consts
| 53 | const HD_FN_LO_MHZ: i64 = 2000 |
| 54 | const HD_FN_HI_MHZ: i64 = 5000 |
| 77 | const GR_MAXS: i64 = 512 // strands in the table |
| 78 | const GR_MAXG: i64 = 64 // guides |
| 79 | const GR_MAXSEG: i64 = 32 |
| 80 | const GR_KNN: i64 = 3 // guides a child interpolates |
| 81 | const GR_WQ: i64 = 1024 // weight scale |
| 82 | const GR_SWAY_PERMIL: i64 = 400 // a guide's sway at the tip, permil of seglen |
| 83 | const GR_HANG_PERMIL: i64 = 980 // vertical run per segment, permil of seglen (the rest is sway) |
| 84 | const GR_JIT_CAP_PERMIL: i64 = 300 // the most jitter a caller may ask for, permil of seglen at the tip |
| 85 | const GR_LCG_A: i64 = 48271 |
| 86 | const GR_LCG_M: i64 = 2147483647 |
| 87 | const GR_DIR_Q: i64 = 1024 |
| 88 | const GR_DIR_MIN2: i64 = 262144 // |p|^2 >= (0.5 Q)^2: rejection floor so a normalised direction is well conditioned |
| 89 | const GR_DIR_MAX2: i64 = 1048576 // |p|^2 <= Q^2 |
| 90 | const GR_ERRFD: i64 = 2 |
| 91 | const GR_E_ARG: i64 = 3 |
| 447 | const HD_RD_SAMPLES: i64 = 768 |
| 448 | const HD_RD_SETTLE: i64 = 240 |
| 454 | const HD_QUANT_Q8: i64 = 1 |
functions
| 63 | func hd_ticks_per_s() -> i64 { return sd_isqrt(SB_MHZ_TICK_SQ)/RD_MHZ_PER_HZ } |
| 64 | func hd_dt_us() -> i64 { return RD_US_PER_S/hd_ticks_per_s() } |
| 100 | func gr_err(s: *u8) -> i64 { var n: i64 = 0; while s[n] != (0 as u8) { n = n + 1 } sys_write(GR_ERRFD, s, n); return 0 } |
| 101 | func gr_rand() -> i64 |
| 106 | func gr_range(lo: i64, hi: i64) -> i64 { return lo + gr_rand() % (hi - lo + 1) } |
| 107 | func gr_alloc() -> i64 |
| 115 | func gr_count() -> i64 { return GR_N } |
| 116 | func gr_guides() -> i64 { return GR_NG } |
| 117 | func gr_nseg() -> i64 { return GR_NSEG } |
| 118 | func gr_level(k: i64) -> i64 { let l: *i64 = GR_LVL as *i64; return l[k] } called by 1: main |
| 119 | func gr_rootx(k: i64) -> i64 { let r: *i64 = GR_ROOT as *i64; return r[k*3] } |
| 120 | func gr_rooty(k: i64) -> i64 { let r: *i64 = GR_ROOT as *i64; return r[k*3+1] } |
| 121 | func gr_rootz(k: i64) -> i64 { let r: *i64 = GR_ROOT as *i64; return r[k*3+2] } |
| 122 | func gr_x(k: i64, j: i64) -> i64 { let b: *i64 = GR_BUF as *i64; return b[(k*GR_MAXSEG + j)*3] } |
| 123 | func gr_y(k: i64, j: i64) -> i64 { let b: *i64 = GR_BUF as *i64; return b[(k*GR_MAXSEG + j)*3 + 1] } |
| 124 | func gr_z(k: i64, j: i64) -> i64 { let b: *i64 = GR_BUF as *i64; return b[(k*GR_MAXSEG + j)*3 + 2] } |
| 125 | func gr_set(k: i64, j: i64, x: i64, y: i64, z: i64) -> i64 |
| 131 | func gr_scalp_root(cx: i64, cy: i64, cz: i64, r: i64, out: *i64) -> i64 |
| 154 | func gr_shape_guide(k: i64, nseg: i64, seglen: i64) -> i64 |
| 169 | func gr_child_at(rx: i64, ry: i64, rz: i64, jitter_permil: i64, jseed: i64, out: *i64) -> i64 |
| 238 | func gr_strand(seed: i64, cx: i64, cy: i64, cz: i64, scalp_r: i64, nguides: i64, nchild: i64, nseg: i64, seglen: i64, jitter_permil: i64) -> i64 |
| 282 | func gr_to_chain(st: *i64, k: i64) -> i64 |
| 297 | func gr_seglen_at(k: i64, j: i64) -> i64 |
| 309 | func hd_k(fn_mhz: i64) -> i64 { return sb_k_sym(fn_mhz) } |
| 310 | func hd_c(K: i64, zeta_permil: i64) -> i64 { return sb_c_for_zeta(K, zeta_permil) } |
| 314 | func hd_alloc(nseg: i64) -> *i64 { return sd_alloc(nseg) } called by 131: gpe_hair_cyclegpe_hair_chain_bakegpe_hair_cyclegpe_hair_chain_bakegpe_hair_cyclegpe_hair_chain_bake+125 calls 1: sd_alloc |
| 315 | func hd_x_q8(st: *i64, i: i64) -> i64 { return st[i*SD_STRIDE] } |
| 316 | func hd_y_q8(st: *i64, i: i64) -> i64 { return st[i*SD_STRIDE + 1] } |
| 317 | func hd_tip_x_q8(st: *i64, nseg: i64) -> i64 { return st[(nseg - 1)*SD_STRIDE] } |
| 320 | func hd_seat(st: *i64, nseg: i64, rx: i64, ry: i64, rz: i64, seglen: i64) -> i64 |
| 340 | func hd_tick(st: *i64, nseg: i64, rx: i64, ry: i64, rz: i64, seglen: i64, called by 188: gpe_hair_seedgpe_hair_cyclegpe_hair_chain_bakegpe_hair_seedgpe_hair_cyclegpe_hair_chain_bake+182 calls 1: sd_step_axq |
| 386 | func hd_tick_collide(st: *i64, nseg: i64, rx: i64, ry: i64, rz: i64, seglen: i64, |
| 425 | func hd_tick_rigid(st: *i64, nseg: i64, rx: i64, ry: i64, rz: i64, seglen: i64) -> i64 |
| 460 | func hd_amp_q8() -> i64 { return SB_MAXD_HAIR*SD_Q8/2 } |
| 467 | func hd_ringdown_kc_t(nseg: i64, seglen: i64, K: i64, C: i64, |
| 513 | func hd_ringdown_kc(nseg: i64, seglen: i64, K: i64, C: i64, out: *i64) -> i64 |
| 519 | func hd_ringdown_t(nseg: i64, seglen: i64, fn_mhz: i64, zeta_permil: i64, |
| 525 | func hd_ringdown(nseg: i64, seglen: i64, fn_mhz: i64, zeta_permil: i64, out: *i64) -> i64 |
| 530 | func hd_ringdown_rigid(nseg: i64, seglen: i64, out: *i64) -> i64 |