From 91478c567087c9fdabac7f221102dd6c17a67f90 Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Thu, 5 Jun 2025 11:56:46 -0400 Subject: [PATCH 1/3] Use FromUnitVectorsToRef for light direction calc --- .../src/glTF/2.0/Extensions/KHR_lights_punctual.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/packages/dev/serializers/src/glTF/2.0/Extensions/KHR_lights_punctual.ts b/packages/dev/serializers/src/glTF/2.0/Extensions/KHR_lights_punctual.ts index 121208f334c..4112deecd75 100644 --- a/packages/dev/serializers/src/glTF/2.0/Extensions/KHR_lights_punctual.ts +++ b/packages/dev/serializers/src/glTF/2.0/Extensions/KHR_lights_punctual.ts @@ -107,17 +107,17 @@ export class KHR_lights_punctual implements IGLTFExporterExtensionV2 { node.translation = translation.asArray(); } - // Babylon lights have "constant" rotation and variable direction, while - // glTF lights have variable rotation and constant direction. Therefore, - // compute a quaternion that aligns the Babylon light's direction with glTF's constant one. + // Represent the Babylon light's direction as a quaternion + // relative to glTF lights' forward direction, (0, 0, -1). if (lightType !== KHRLightsPunctual_LightType.POINT) { - const direction = babylonNode.direction.normalizeToRef(TmpVectors.Vector3[0]); + const direction = TmpVectors.Vector3[0]; + babylonNode.direction.normalizeToRef(direction); if (convertToRightHanded) { ConvertToRightHandedPosition(direction); } - const angle = Math.acos(Vector3.Dot(LIGHTDIRECTION, direction)); - const axis = Vector3.Cross(LIGHTDIRECTION, direction); - const lightRotationQuaternion = Quaternion.RotationAxisToRef(axis, angle, TmpVectors.Quaternion[0]); + + const lightRotationQuaternion = TmpVectors.Quaternion[0]; + Quaternion.FromUnitVectorsToRef(LIGHTDIRECTION, direction, lightRotationQuaternion); if (!Quaternion.IsIdentity(lightRotationQuaternion)) { node.rotation = lightRotationQuaternion.asArray(); } From f9c29511bf04e45e8628e3ed926fc935877043ee Mon Sep 17 00:00:00 2001 From: "Alex C. Huber" <91097647+alexchuber@users.noreply.github.com> Date: Thu, 5 Jun 2025 11:57:08 -0400 Subject: [PATCH 2/3] Update light vis test to use glTF falloff type for consistency --- .../glTFSerializerKHRPunctualLightLH.png | Bin 11484 -> 11479 bytes .../glTFSerializerKHRPunctualLightRH.png | Bin 11918 -> 11925 bytes .../tests/test/visualization/config.json | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/tools/tests/test/visualization/ReferenceImages/glTFSerializerKHRPunctualLightLH.png b/packages/tools/tests/test/visualization/ReferenceImages/glTFSerializerKHRPunctualLightLH.png index c7aea2bc650a3fd58180679bd831ad26d49e899c..487e06dd32f7057b9d23d86fec85182104002f47 100644 GIT binary patch delta 8395 zcmV;+AT;0HS=U*xz6gJ`#=%k$yxmlt(qeMqZ3H9^!aay^UB>>;PdU1&ld%>oTM z+@~$hV z6~dlzu(Z)AO3x4rcvN+et3)`!R{e(w8B-zCMY zzM^QbO?n)Rywrd1a`m(?IxI*=(59#%>>QEyWwy2r689HpHF zgDq3y;HG6HD_5N-pNUWu)myOY=DnhPGi8+8W2A6p7$aN=>j0rJc#}@>DEfVU7A#f& zgf&@lP;RV0N~9uMT5o!f%F^g<8#$F$rCU05=}c}ned8O?t7iz8fkX)Zq<=*ye#FE8 zr?;TBO(cH~YW$i~5mg@76bCgicfV%y5JhREa9=6iHU&uCi#<^_JT{ zQW15dERgE=YFZan?yfv%UyiqaCMX3&r3J}_OMwU>pBACh(OY_bvPB$p95kgas@&=b zg_;byKT7ErrnE*`gH>t|3oZ^KT!JsY_>b0yXjF0a^{EVk)|zA_+*A)_?cA5Es=HeQ zv^#&OJ-pPcF`cvH15n9=R7V#95rUJ}!;S84<3Z3ml2>X|y1fR&nf|OC)zSU>cBSL= z&rHG^M@5uexDGr%0b2Up7a~Vd?%OnJnaH}N$^pXQ$;3;$rfXY$fIk-7MM4M*c4S2BzJ zUl#0uvJgtWbTufAUYy&yXwOpTE$PQ~JWUvE5Fs-EV&KG|;34KAo@=R&ULF$R#W{a_ z>JY+dcYhXKEQfF9SkdlxVmDh!Aq<7OHahvRbeyktY_W8n@dBujD^> zb@X0NxBpff>p^}Cf(XG$2T#Q3>!<{G@*XS$;W@v^h9KH=($_MXIDH>1cnK(4T%trx%Q(J?VcvI z;;7$_8vIihJP&)gZEQ-7LO@imx3+-=L4@!X1Bb*q_tvhMIm%cA+5C;%&A;+qn$8cG zFfy!dHJi%Ao~K z_OhO;%!eO-rav^C3liZHTQ+C(Tun{FQ_dhI z2*M#G!pm}vXXk}OSod-_@I8~>`m#s*cgR4fE^4ZjLXlHGC1rKAw3i$uDVf4Oi13=c zeEG``N9kE#bss{r*Qn?7+EssI9cW6Ikz(UUX`1K%gz9KD6bk*j-`WQsd|GV-XN1xy zXcBcun2Tlj2(F@|Jiw=L8L|Qs}yeoZU z_tqBu3?X;$tW=+j*F}{Bg!)-CrIVL;fB*fzJ9>u6ArY>~@LTinP~{#qOq@QdoP#s) zhouaHaz#`#Wwd%4n`Mm@t4b#A!2^i!`dm_bkP@B5k^%)a3Y(~oUJnxC)#&`xV7Ft`TnW|uv!+WN|LaXY8pb3`&5nhK^uYT3-27T&r#NgZ+--GbeP9Jr5 zdnmu^vx9OR+_%}U5dvRu`b_EQhg-k?^}qi8@9zsO;Y5ER!s{^n>ss2;e}3kPqU|Bp z=hhR0;6w7;$HDZ+Cp5EO^&^_fYARe0LUw-*(Q~TlCo3o1B=Q)a|IR2o#(2s9i@US}Sh=a;R z7#u7V&PRWqiTdulpM3i12by;QlYKa}=g;kg3K*<+xxZ4sKfRU-~R) zHKJxETn0pVLFNowt%;mWb>GBT*$(&Dp=p{4e{Q#`KzAH0DNwec+?CaH$ZrLBp#BQH ze*K$vPsATS_CDn6yyX*%bP_oS_r6w2^Zu*tt1EwRH&s0$57FH(2+PW6>NhPlPuA-P z3lGmr`XT9yLRnR_hFe?$7N~7}1!?QYULv{3|Ai_(Lc#rOUyPw=H4@^6WRMuX6An?$I zrY}_Ueb(_M!pL}`W~K5aoCQR9dLnn&v*>3A=DAjmxiiXU`bjaGI9M{G^33Hm!o*SE zc;TiK{I?W{@O(UZ^7}`R%s1tE?&GIJe}Cyr7uh|Dw7OnisjQvO5C;$UmCYv%6S}3S ze0k3sZ~WKGm)~~1Q5Xgyyeubrj$+Oa)YkWFeVQU2$Ar@Oh+vC2*lw7x)PKs$Ie(2o z10uW*!Mp9i$Y{+*lblJ)j*U=;!s=G#^MbxO`0$0L)%Q|*8JsnvnPRGZ38w}To`0A% zpP-oV{2M(@p?RuLSeE-qiGaa4D7z$gm{6}hlO5%gfwO=JPsY=ye=rRYPNw6@T<_cco@dYg`0CYnN^b`y1QA}1^A<=?_i0*lt@@7+ z>it)3;Pc<@5ApCo`Zp!7aqBP`7Jr3PJ=ZTVJb(yK&y@xxFml^(n!}PqoRglWr zq5E2>5C=79tK6g?Ce&L{?!?ppP6r}96HlN1;eMgrH2s-zRMonjL%eY!asRa#8g%@a zf}wD~)iJHq;l;bVyQfe8@a31^wY*mt2_ifb${XwOu%aQ+Uhe4_DTnBZa)0`aX7@z@ zRcDH(%nDAQI~up0{!PK;Ai^u)xJ?hgv-hcjp5>VkAHiv*DgLWgM}t32d{M zfCx{+vuA(2eR+x+otwiGKGD4<>w=qRidw%=&9ST*8gysD!ybh74hsr>M!a~~;gcu7 zfBpJ<)%Gw0i118wD2=vOW`9IxXR%}T8YW(3M<`VG)-DT{tSOw8uqHBbMsv`h7vU5j z!qXt%$j%ZF)5r623vqEee3Fo_VWe2vCkrZnK-HNt?ogQSHq>}_5aBs^rR3yh@hqskGMWPB;hJD5Y%z{_zmn?cSwMs*Lw|EmnfA%TAy(@U z8OO%)YHoAXPTg5Bw|p%)=I~`}3p&mgP5~l32iLBP>hB;aR!eyvvD;=A z`h79gEZA+Pj5QSIs!kIJ;Y1+96Y%Dnf7-9?To-Nnv_nL1)|nTk(@3Y$Axr~@!Iw>+ zpg%nM>dM6VGHzLxdVhQT_&@LNzAx+uGk^$BM*57zlv{Ir5UARrX5UexgZ;6F!o-)= zEST~erObsT1)41A8~-B?UI|2a0cd^Sg4ckW`&P z+G6g^VgGvh&G0J+N)X{$Y4osK*3CLH-d5fBj8cqTSjSU-eAETR|x{@?y{HZ%u*0AgFv;BJ!z7Qx~N`yGWaIUo%}{>mQe}{>}Q*UhW{MOo6^Dsf=Ig zgN2TB5E@{|Q-BDk=Iyut{IDF9->6)u3=O4S;!p8u8R(Nj=~oKg}tn{YY`Ju@}&~TUw<4_K5_3Zfm(+HqKD)%|I zI!YY87>IC2Zf`f|3Wb_EqAm269uSqcuz!IW(fXGqG@F$9uk|mId@=h}M}-c3=0l1z zg9zs(7z#TlLPr+VY%;AMrNa~>I(`r>T-dW5df1_pKE}0sFV>;K()tebXmH!bK!kJg{`-Hwt&2wdr@3Lp zZ)(9f=r&?g9SZljhz{GKbYaRw7=IzzJ8+K<`V^R@I(H5B{^gfn{`%?DAD23Z{vg6h z+1y{IO@zTXD6g;D%Va+NRGO;oCe)$wJ4lsmMv z6Jfgn!blu+WWk6vg$Q^$9qL`EPkv2{y25cyTjSMHQ{#y0=J{=bTM*$ye1Gu4rw_}% zVZzdFYwQ4_DGs{jrwoF*l~PTEp6LHJg~^)tv>xenG|;T{RZx|^xgAM$bSesxxFS4>cgMlzZ72*4fnfrHlpTQxfR&Lg1)nbX+eauaDRK>X;&lFZ1wFT z3?Ny{p;oUGt^g2cfKfC#7H;l`An2;0q?5zOZU%H5!Lxvq93LVA-FcHhA0>b0QcP7Nbz89XE?&O; z!6uODT!PR~NrUem>&U1-w_B)=js+18CZa%J9Q0*D-%J^O z1k~#-D<)3j!d#TcYVmYL{B2fyXf#qdYVymqKLec$L^zVep}|}owkVL6V!l zg-Jv~ROg!)YOR8{aO6N2rkK*&!&J9m&B<65m~KJkAt--}o|Gq}PhefX^PN}s3%5Gl zFF*bV!m{vkqs$GyGZ#839rW;JaQU`RWdr?Zi0bEw#OX-Ee0I`X>fJxkG!wS!*GDYa zbd>R)moI;r+ac&75ssvEH&?FgTpiu84}bAQXi9sU2D!O#gFei)E0CVff?1VAlLFH% z7&*ile`HUffp;_gkyOgl+};v}diI>Nn}v$m=y*OPuI_YC2W- zU|~EUcGx$iG2}vNbPV79?w6%f-lq7uSy^4SR!8;eP~NviQPi>W_Hg^(eU03KQ-8c2#3)^fh}e>Rt1?gE*MwfR4%+^C`>%Plwr0REJz%@ z0EmBZ0N?xGYf~a@R2_9lQ7($kpunp3ZqMK9LK&qC=eOMhEzVQlr%!>?WHYZ@zZbQRSIGQ1YK%f%nU@7p)4c4kDWTXPQK+zl^0FhikIY z(Q^}0Qwy4C)Gc%d5stx^2uD>%H?%H_y3KzVbfJb01=9XBJ;UJ&wCbvJ{d4|bj}_qY ziQatw`*$0$?Vpz@JwfrXaJzNCEWA8?UgGe%2xa^I%FRj2%ks*Uh0U4ox5lHkytTz= zkrb@YHZ<*A`7JZnO{H$z1;_aH)SOZ4$cE296(8IS@UI-3C1Bs!GD4R59^Q;;Mggui+MKItnOs{>2ynp+7FfArW>(zM;E|qAjYU zrDoNlXz&>cd7)3$baNe23Z%nBVd8-zT`Bi%G+x+rJ)9Rr*c+?-TF>v$cyUwr+pm`u zm^&QUxoVnNARS1`nFKrOpuj|X4YcMwzc%YYX|x|d{9&cmrz{30R!8;e@Nj>xQvZj` zrSo@`K&@p@%^TeBo?f49RPd}4zp+MYs;2U3e+!PXPW8A{M|(md?1!%|+M+t@yD1;$ zLQPTBkqB@1vgX2vGmK}!!!V>c4wg<& zv-Pmg(g|qJUucv2(ZL!eH35Io^pT=}C=4dK4*RD3o%#taC@^6{T^vN%i68ywiG07- zNU^k_(V<)*jWp1lfNBmNU`<2#Ibl7IU9KXK{(_|jj_@>F+wh`vSRAN#F-+J85@8P_78G6zDX=<%WxW?ypPkSo!czWI20_!a z3f0FFgqRqA)?V1<0<_DTks#P2)L!YQ1_C6)PUt?yd3OQa-Odkm#O1?Sp@Ysf8nFsJ=oU5MgtE@{?!6-F&aTeVfC^LQzz% zVeU(v8aC%2QDD{aCi!i8HoY`0lsc@2@9L(3G__#j7s|A=V6L1Zb8btUsE&335jLk3 z`}S?zby2~KhyH&nou_82G7*+etQrJ0SD?DG`qHPRIc4Uik=3l7&uPIvLx3;|h_DmY z*rzFz3em7sDb*)JS%w;Q+ke;oy(!~R79%;5BL1} z$9d-h2Oz@cRBzdOHR=~iy1HE>m`{@k4`1fGu#pj~>y@D}oe4AIwB^u7Ge{?#2t!`% z03vKl)qf5P?(<(sMfyazZ(rTIf4NzIxFEkT`C1)r(qHguV=EJSOG#pAb2J`q!OlKw zBy30o5jKD1zAh^JuhhU74G$BHCK2x2%W<%DP-Dok7rjG?93{f4Pn*>DIil6=L&CQyU|1@DpQx|<$s3t;dC9riI6fRNq8VU^# zHz{Ar%upS5Flsib^0;veHVS-`=!)uSI}l+*s^*g$%PaLd+`qhC8H|J0v&xNw)gCq{ zph171Yc-u%QI=#I$#tLw<8As64YnSwoJ7DYfCyXRFrUMM4=OrzQaltMHZE01t)S!)~Zk-piAie=a*bmu!dR54FG=;+3O|l~otD}b}RyB9&YE&Vbys%>l6BMXnFTxa;O@L>IhX2a3lL!^^wChG4M!*xa-rtrO{Gy;f%1Xk z714cHhnwUbQxJX@?tXl9_M8khQ)7X%?S z3W!28%}VPj4NrArNmSSHd8F~9!|6bT$=uHuRnjgL%2`BH8Wlzgi+y znhPQvkMjOrDvE9zXyTgQ9CCl!(+96=C>&L*Tzr^thHr(Qr)nBxw!u`;g9vBGS`?M5 zqrOyR&7khaiTG-yxksObMmNnq#msre4*NXXh~b8S2-EP@MNQ?tstz@ceds+Wmq|@! z%tn>c&clSJ)0l@z?)%82#OI&?`{+}+4$nrPz;*ceOSk|4 delta 8399 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 diff --git a/packages/tools/tests/test/visualization/ReferenceImages/glTFSerializerKHRPunctualLightRH.png b/packages/tools/tests/test/visualization/ReferenceImages/glTFSerializerKHRPunctualLightRH.png index a3a149b1d3b656c2189064d9b675c9aa69f2d6df..0b623e379862b55e8ecae51f911f7ba11cadd1b6 100644 GIT binary patch delta 10271 zcmWk!bzD>L7ghwFAh9n{?ZxK(NP_!ftm1f znHpX;?eTN|EKd1n!3s2zdwsa6@t#2*o}#=W+v%&?b$?iRdtdZ7SCGHI-|5eH8@1F{ zBd!~671fKM8kFn4{#%^08_=jry$Za&P7GEE&wv2$nEH~K))VMA6%z4r@@Pr*+JP8t zRmKzNUzM)3o@pf`3<+oF8+a8SIA;vi_~YZBbCErMw)k_-{9i!bm6K1VNOzC7SUUJN znoU7%UkLH-j@WGo;`|QFZ4Cq+arSLnL<6zL?WzwXEWj<3&v@d)`>~^jyg5RQzNj>} zpv+E1fACu>_N&O&*4CmO5lM1HWUKxjItK|$Ct2IysK^@lS1-VGtkmU}K5ou^NRQGD zc{EJM0hc|z*v1DPW$VMU#Ec~QcuVgjlgH)$fKK#wtJsd0=kzprZX`M_6y#C0pDi!t z$y}F?0k3cCzX#z)7MAn%!Wua$8uRV5)PI_4JBs)B??BfkbZy7KInY;i1tfs}|5~4q zZr6g9F8qcRR(oSCCDffJ{iCQ+KcaR_NOa0dDU(
    A6K@MyKam+^d-uQ-w4=rOl= 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 delta 10232 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 y{g0!EaAGu)np77XJr0#Fx-%W5ZAY0000 Date: Mon, 9 Jun 2025 11:15:10 -0400 Subject: [PATCH 3/3] nit --- .../src/glTF/2.0/Extensions/KHR_lights_punctual.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/packages/dev/serializers/src/glTF/2.0/Extensions/KHR_lights_punctual.ts b/packages/dev/serializers/src/glTF/2.0/Extensions/KHR_lights_punctual.ts index 4112deecd75..d95aa6d7825 100644 --- a/packages/dev/serializers/src/glTF/2.0/Extensions/KHR_lights_punctual.ts +++ b/packages/dev/serializers/src/glTF/2.0/Extensions/KHR_lights_punctual.ts @@ -110,14 +110,12 @@ export class KHR_lights_punctual implements IGLTFExporterExtensionV2 { // Represent the Babylon light's direction as a quaternion // relative to glTF lights' forward direction, (0, 0, -1). if (lightType !== KHRLightsPunctual_LightType.POINT) { - const direction = TmpVectors.Vector3[0]; - babylonNode.direction.normalizeToRef(direction); + const direction = babylonNode.direction.normalizeToRef(TmpVectors.Vector3[0]); if (convertToRightHanded) { ConvertToRightHandedPosition(direction); } - const lightRotationQuaternion = TmpVectors.Quaternion[0]; - Quaternion.FromUnitVectorsToRef(LIGHTDIRECTION, direction, lightRotationQuaternion); + const lightRotationQuaternion = Quaternion.FromUnitVectorsToRef(LIGHTDIRECTION, direction, TmpVectors.Quaternion[0]); if (!Quaternion.IsIdentity(lightRotationQuaternion)) { node.rotation = lightRotationQuaternion.asArray(); }