From 8f09aec00b433506ab238de20d16ffcd3352ee1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dominik=20Madar=C3=A1sz?= Date: Sun, 25 Aug 2024 17:13:34 +0200 Subject: [PATCH] add u_global_alpha --- bind/v4k.lua | 1 + engine/art/shaderlib/model_fs.glsl | 1 + engine/art/shaderlib/surface.glsl | 1 + engine/joint/v4k.h | 15 +++++++++++++++ engine/split/v4k_render.c | 14 ++++++++++++++ engine/split/v4k_render.h | 1 + engine/v4k.c | 14 ++++++++++++++ engine/v4k.h | 1 + tools/ass2iqe.c | 2 +- tools/ass2iqe.exe | Bin 189440 -> 189440 bytes tools/assimp-vc143-mt.dll | Bin 5532160 -> 5532160 bytes tools/iqe2iqm.exe | Bin 304640 -> 304640 bytes 12 files changed, 49 insertions(+), 1 deletion(-) diff --git a/bind/v4k.lua b/bind/v4k.lua index cd2406c..f8ba368 100644 --- a/bind/v4k.lua +++ b/bind/v4k.lua @@ -1441,6 +1441,7 @@ enum BILLBOARD_MODE { void model_set_frustum(model_t *m, frustum f); void model_clear_frustum(model_t *m); bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out); + bool model_get_bone_position(model_t m, unsigned joint, mat44 M, vec3 *out); void model_destroy(model_t); unsigned model_getpass(); unsigned model_setpass(unsigned pass); diff --git a/engine/art/shaderlib/model_fs.glsl b/engine/art/shaderlib/model_fs.glsl index 778a805..7cdfb8b 100644 --- a/engine/art/shaderlib/model_fs.glsl +++ b/engine/art/shaderlib/model_fs.glsl @@ -43,6 +43,7 @@ vec4 shadowing() { return shadowmap(vpeye, vneye, v_texcoord, sc); } +uniform float u_global_alpha; /// set:1.0 uniform vec3 u_cam_pos; uniform vec3 u_cam_dir; uniform float frame_time; diff --git a/engine/art/shaderlib/surface.glsl b/engine/art/shaderlib/surface.glsl index e4b47aa..38cdff4 100644 --- a/engine/art/shaderlib/surface.glsl +++ b/engine/art/shaderlib/surface.glsl @@ -199,6 +199,7 @@ surface_t surface() { s.fragcolor.rgb += s.emissive; s.fragcolor *= shadowing(); s.fragcolor.rgb += get_rimlight(); + s.fragcolor.a *= u_global_alpha; #ifdef SHADING_PBR { diff --git a/engine/joint/v4k.h b/engine/joint/v4k.h index 2b5ef9d..3b52c93 100644 --- a/engine/joint/v4k.h +++ b/engine/joint/v4k.h @@ -17708,6 +17708,7 @@ API bool model_has_transparency(model_t m); API void model_set_frustum(model_t *m, frustum f); API void model_clear_frustum(model_t *m); API bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out); +API bool model_get_bone_position(model_t m, unsigned joint, mat44 M, vec3 *out); API void model_destroy(model_t); API unsigned model_getpass(); @@ -385793,6 +385794,20 @@ bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out) { return true; } +bool model_get_bone_position(model_t m, unsigned joint, mat44 M, vec3 *out) { + if(!m.iqm) return false; + iqm_t *q = m.iqm; + + mat34 f; + if (!model_get_bone_pose(m, joint, &f)) return false; + vec3 pos = vec3(f[3],f[7],f[11]); + + pos = transform344(M, pos); + *out = pos; + + return true; +} + anim_t clip(float minframe, float maxframe, float blendtime, unsigned flags) { return ((anim_t){minframe, maxframe, blendtime, flags, 1e6}); } diff --git a/engine/split/v4k_render.c b/engine/split/v4k_render.c index 73964ca..cce4aea 100644 --- a/engine/split/v4k_render.c +++ b/engine/split/v4k_render.c @@ -4127,6 +4127,20 @@ bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out) { return true; } +bool model_get_bone_position(model_t m, unsigned joint, mat44 M, vec3 *out) { + if(!m.iqm) return false; + iqm_t *q = m.iqm; + + mat34 f; + if (!model_get_bone_pose(m, joint, &f)) return false; + vec3 pos = vec3(f[3],f[7],f[11]); + + pos = transform344(M, pos); + *out = pos; + + return true; +} + anim_t clip(float minframe, float maxframe, float blendtime, unsigned flags) { return ((anim_t){minframe, maxframe, blendtime, flags, 1e6}); } diff --git a/engine/split/v4k_render.h b/engine/split/v4k_render.h index 78cc933..5911ab7 100644 --- a/engine/split/v4k_render.h +++ b/engine/split/v4k_render.h @@ -740,6 +740,7 @@ API bool model_has_transparency(model_t m); API void model_set_frustum(model_t *m, frustum f); API void model_clear_frustum(model_t *m); API bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out); +API bool model_get_bone_position(model_t m, unsigned joint, mat44 M, vec3 *out); API void model_destroy(model_t); API unsigned model_getpass(); diff --git a/engine/v4k.c b/engine/v4k.c index b106402..e4aa163 100644 --- a/engine/v4k.c +++ b/engine/v4k.c @@ -20926,6 +20926,20 @@ bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out) { return true; } +bool model_get_bone_position(model_t m, unsigned joint, mat44 M, vec3 *out) { + if(!m.iqm) return false; + iqm_t *q = m.iqm; + + mat34 f; + if (!model_get_bone_pose(m, joint, &f)) return false; + vec3 pos = vec3(f[3],f[7],f[11]); + + pos = transform344(M, pos); + *out = pos; + + return true; +} + anim_t clip(float minframe, float maxframe, float blendtime, unsigned flags) { return ((anim_t){minframe, maxframe, blendtime, flags, 1e6}); } diff --git a/engine/v4k.h b/engine/v4k.h index d2c7aff..e5418a7 100644 --- a/engine/v4k.h +++ b/engine/v4k.h @@ -3775,6 +3775,7 @@ API bool model_has_transparency(model_t m); API void model_set_frustum(model_t *m, frustum f); API void model_clear_frustum(model_t *m); API bool model_get_bone_pose(model_t m, unsigned joint, mat34 *out); +API bool model_get_bone_position(model_t m, unsigned joint, mat44 M, vec3 *out); API void model_destroy(model_t); API unsigned model_getpass(); diff --git a/tools/ass2iqe.c b/tools/ass2iqe.c index 0c32256..912c146 100644 --- a/tools/ass2iqe.c +++ b/tools/ass2iqe.c @@ -25,7 +25,7 @@ int verbose = 0; int need_to_bake_skin = 0; -int save_all_bones = 0; +int save_all_bones = 1; int dolowprec = 0; int dostatic = 0; // export without skeleton diff --git a/tools/ass2iqe.exe b/tools/ass2iqe.exe index 2929d7bc10e3f92d9fc670df2acdb9017d29de0c..a9e89e3b820ce50b79e6a57b1987756981bdb3ad 100644 GIT binary patch delta 1377 zcmY+Ee@s(X6vy9r_!L`98QK8@EMf}|ZHF2(4O9lw`KnCZ91MfbN*QhO=d{dVT>Mcx zc)noRjxzmY@yC`0=8tKf7E#7vjC6;0QljaXZo9zrE za&5$Xi~XM;Sf*4o-$0)sL$l)y%QWapZI(6IYB0cd=_7-gg_rPZvT-VRQJr6Zi)Dhn z4Z46`K8cT$A547|QsTz*;$XCA1w*kia&Thmhx#`1^DVlQH479kwxEGqS z%UI?pI7?xCkvw214>$BJQCuYY_HsfuH~oL&mT}QXVyT!9Bo?>400Q?Amu9{Ohp{8G z1MW&IXS~VMroWoG7T^}NbH<)u_E52vWgGP*)Df2)Hk zGT_&C$@CL+n+R?8S{fUs1P2=8ZFU#ger@!3E0tYWP9SnY?9NV^yMb&u%7HMC>Mu2j> zSNIoH!N!;Sft89@>RGslmtKD^-v1)Ph;OsH-9WrPZ|c=!XA<$s{=O z>NW%zeprQtKLax03vXk?;T z!cbFir*NIe0ByM4Q;<}w>guZ_UzX*7y%4|f_>Gr6%Cczz`x({HI>lk-VLDB{$p`Eg z@KvuDDzMjU0VCe^=E8kU^__&Bfqq|8zYjY5eeC8;nf-qtk>;#za~|OCl$kRM#B}Godq=lQCvLqj+DR;svN#e~wLcCbH;tiS zNxzU>MUo?FognQ>suZMwq!xxz!-so0=#{yY2^O}<-z**uf_^+;cEL@I&M?lO=%#d` zmaK95Iyiq>ih9Dg@u`d?xFB!KpptfA=Oe@6JzeTyt#I+3@`lWZb>NWq<}?DG%hZZL zpaOs9i@<}+R&Ijza@WebAeh3CykX$+i@aQRrUirZ--JdP^F>IyzK7`R+-AH~dIi?XC(72bw9K&na~77$=QpGR2spE`4cg?^^3!Z_cN5D@K1(I{a&9uI zg3P2I-LM=DLt88kys&J>El(UTwCr86~$ z)=;i4GQHg7mixInG&~=`-5OpF;5I^qJ4QHZ(-coYS*M{pfQ5uYjs8dCLTO%fp?Dx- zw6b~$ql^gcc_8Y~;`XYPrF%%u6NA(It#NAAeFC*$q9ExT$nV}rTla7NPY5I7862w; zX89XgM$DRzvDJ&W1NtVb>*;(e75Q)1%UyFGj z`3!rT>3`Bwkb~iMwbVOJb7*`@^b6&+l@kDW*ZW-#mo`?vXDFs<^t diff --git a/tools/assimp-vc143-mt.dll b/tools/assimp-vc143-mt.dll index 14d225ffde5a272001d1b1204afb5f548bced96e..9ed66a89a54a8e7f5ad97dc23b7af98b7a00d4a8 100644 GIT binary patch delta 426 zcmX}oxlRHB6ouiL!ClnR!F}8nTo46!aTig?eQBudjIEs|iOHq+c9xQ8Yez{Vm9Ze2 z_!7K;oj--%2CU~Xr=LLo4%Xy`@Lgk9J9=V4;83H6{=B#TGXK)el(yFO|a37 z7B~o?6>Vro2RhM(Zn)?{FZ$4r0SsaY!x%vjA&g=SeA9m;`8~jXNB_4|@y?cpWih804qKBeKqQ{~qqNk!~qUXR1`%Sj5AkYV=r!?Nt1u~zB?chOS|scM0F(= z5{WCY>%t}Yb-|ZB$(#4xeYwvMBZp^G_jps4yrmZ`z0QCKUNoQ)O=yM>Eog-wZD>aT zCOXgw3qf?D8zJvqi8;(;0gG5d z3d>l*D$-cPIyR8OCbqDREOxM4v~=g@HO+&rHO@c+wR=~q-MRHj``i5FAnXTMv*mv) zl&cQ*uwN`!50dZZ&v*FhrIOE<-fo{VaVMh0RdT50NXfC16D6lg&Xk-hxp