From f3554b4de85e95f976e6caa55816a3b4a922c1d5 Mon Sep 17 00:00:00 2001 From: Lubos Lenco Date: Mon, 29 Aug 2016 09:56:34 +0200 Subject: [PATCH] Dual quaternion skinning, mirrors. --- Assets/hosek/hosek_radiance.hdr | Bin 0 -> 37680 bytes Assets/hosek/hosek_radiance_0.hdr | Bin 0 -> 32847 bytes Assets/hosek/hosek_radiance_1.hdr | Bin 0 -> 8270 bytes Assets/hosek/hosek_radiance_2.hdr | Bin 0 -> 2126 bytes Assets/hosek/hosek_radiance_3.hdr | Bin 0 -> 486 bytes Assets/hosek/hosek_radiance_4.hdr | Bin 0 -> 241 bytes Assets/hosek/hosek_radiance_5.hdr | Bin 0 -> 143 bytes Assets/hosek/hosek_radiance_6.hdr | Bin 0 -> 119 bytes Assets/hosek/hosek_radiance_7.hdr | Bin 0 -> 115 bytes Sources/armory/Root.hx | 3 - Sources/armory/Scene.hx | 52 +-- Sources/armory/logicnode/PickerNode.hx | 2 +- Sources/armory/renderpipeline/HosekWilkie.hx | 2 +- Sources/armory/trait/ArcBallCamera.hx | 3 +- Sources/armory/trait/FirstPersonController.hx | 2 +- Sources/armory/trait/MirrorTexture.hx | 23 + Sources/armory/trait/PhysicsDrag.hx | 2 +- Sources/armory/trait/SceneInstance.hx | 3 +- Sources/armory/trait/VehicleBody.hx | 6 +- Sources/armory/trait/WalkNavigation.hx | 3 +- Sources/armory/trait/internal/Animation.hx | 6 +- Sources/armory/trait/internal/Console.hx | 2 +- Sources/armory/trait/internal/JSScriptAPI.hx | 2 +- Sources/armory/trait/internal/PathTracer.hx | 5 +- Sources/armory/trait/internal/PhysicsWorld.hx | 8 +- Sources/armory/trait/internal/RigidBody.hx | 2 +- blender/data/data.blend | Bin 1340964 -> 1344208 bytes blender/exporter.py | 264 ++++++----- blender/nodes_renderpath.py | 48 +- blender/nodes_world.py | 19 +- blender/props.py | 107 ++++- blender/start.py | 9 +- blender/traits.py | 58 +-- blender/traits_action.py | 131 ++++++ .../{traits_animation.py => traits_clip.py} | 50 +- blender/write_data.py | 7 +- blender/write_probes.py | 430 +++++++++--------- .../blur_adaptive_pass.frag.glsl | 2 +- raw/compositor_pass/compositor_pass.frag.glsl | 55 ++- raw/debug_normals/debug_normals.frag.glsl | 6 +- raw/deferred/depthwrite.vert.glsl | 85 ++-- raw/deferred/mesh.frag.glsl | 10 +- raw/deferred/mesh.vert.glsl | 150 +++--- raw/deferred/overlay.vert.glsl | 92 ++-- raw/deferred/shadowmap.vert.glsl | 81 ++-- raw/deferred/translucent.vert.glsl | 92 ++-- .../deferred_indirect.frag.glsl | 14 +- raw/deferred_light/deferred_light.frag.glsl | 45 +- raw/forward/mesh.vert.glsl | 116 ++--- raw/forward/overlay.vert.glsl | 92 ++-- raw/forward/shadowmap.vert.glsl | 81 ++-- raw/hybrid/depthwrite.vert.glsl | 83 ++-- raw/hybrid/mesh.vert.glsl | 94 ++-- raw/hybrid/overlay.vert.glsl | 94 ++-- raw/hybrid/shadowmap.vert.glsl | 83 ++-- raw/ssr_pass/ssr_pass.frag.glsl | 2 +- 56 files changed, 1508 insertions(+), 1018 deletions(-) create mode 100644 Assets/hosek/hosek_radiance.hdr create mode 100644 Assets/hosek/hosek_radiance_0.hdr create mode 100644 Assets/hosek/hosek_radiance_1.hdr create mode 100644 Assets/hosek/hosek_radiance_2.hdr create mode 100644 Assets/hosek/hosek_radiance_3.hdr create mode 100644 Assets/hosek/hosek_radiance_4.hdr create mode 100644 Assets/hosek/hosek_radiance_5.hdr create mode 100644 Assets/hosek/hosek_radiance_6.hdr create mode 100644 Assets/hosek/hosek_radiance_7.hdr delete mode 100644 Sources/armory/Root.hx create mode 100644 Sources/armory/trait/MirrorTexture.hx create mode 100755 blender/traits_action.py rename blender/{traits_animation.py => traits_clip.py} (70%) diff --git a/Assets/hosek/hosek_radiance.hdr b/Assets/hosek/hosek_radiance.hdr new file mode 100644 index 0000000000000000000000000000000000000000..f6a444072390a692954663675a9054563addbcdb GIT binary patch literal 37680 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 ZWcapW`!cj)j__}02%m!NzuKSP`#%)sP|pAW literal 0 HcmV?d00001 diff --git a/Assets/hosek/hosek_radiance_0.hdr b/Assets/hosek/hosek_radiance_0.hdr new file mode 100644 index 0000000000000000000000000000000000000000..a9f3cb239b9f09eae89a363681fd7642c1c13086 GIT binary patch literal 32847 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 GCjSd@H`WON literal 0 HcmV?d00001 diff --git a/Assets/hosek/hosek_radiance_1.hdr b/Assets/hosek/hosek_radiance_1.hdr new file mode 100644 index 0000000000000000000000000000000000000000..44e1b7cb1a52c4a78a03744c176f0ad45ca8f9f2 GIT binary patch literal 8270 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 literal 0 HcmV?d00001 diff --git a/Assets/hosek/hosek_radiance_2.hdr b/Assets/hosek/hosek_radiance_2.hdr new file mode 100644 index 0000000000000000000000000000000000000000..5c5b2a0ddb0e1e0cfca3933583369665190efa56 GIT binary patch literal 2126 zcmc(f+fP$j6o=pYS2W>q;v{I|n_%UlqEZ8zffq3#FkA{)&ncxX?e7%u$vBzOC-FMT z%y=22BVf5`FW@D{5t4bJE$!*)MZiB}*4q0V+N#g`@MZ0@_gdd?pX9VP^=*#Ef&sVZZtV()X0y6io!KIKPSv$O4#?lEhXxxRyfCwIsTK-9+c*4Rp+`6Cd!?^uIWN z^}i~3kI$IS%j;sM=eMMATp$-a+07Z8W#uaOccA>WgG+yI!~MrL#(pmn1&rP^FnTwK zk-IuvcXSNj%3|nd21B!3RMTHFOMBuhL%kWeZf7wV1Reauw*bwvhYW!|)8xjz27rrzo84 z_CMKy-^}CeaAX@=1z7lq(0mEOxgsX#3YdIWK;T)P?kVw8^*=Sfj@cu6d4^_ro?XHD zBCt@Z%Hr&ql>(*(d8&C#E$0zl%0pW+pe-7}=R^#IB00%(s*L#zIurd|%{4pN#ZGo} zh6QKOyv!1rJ*H_r^&*R~iMEo3M2Gf5f)yQK!#daK+`{s(liihBoIM>)?lDE{sb~t} zXc}5{%OnFt%Y>p?NOY>7lciop_G?rv4?Dx;=8VcrEw%}ZU@VErSV|Czr4fv65gCCm zuEQ74nHUJfa#i@^M#Z^Kj;uMm1$IpeQnZ)c%i~-h`7I`BJwbEcm<}&xdC55*r*D|> z#Ob#nC{is#O_Zwe&@=B#=$ofro@0k_k(1q=VdZi42sisBD$S|vCzN;zO5&s7Qi6WB zd+flS*rjKQT+@F@f{}d+RWVBrRlrW`9m;uDf4N#7S>5DhzvL4xCO*;nOL)J0X7%&^ Rs(s}gdC#)DJo7F0{s;Pf;9CFy literal 0 HcmV?d00001 diff --git a/Assets/hosek/hosek_radiance_3.hdr b/Assets/hosek/hosek_radiance_3.hdr new file mode 100644 index 0000000000000000000000000000000000000000..d57d6a3201c8430f78778cef1609e54d9a39071b GIT binary patch literal 486 zcmY$k4{~(zbo6s}Sb`b`3LzrhS(Y# z=_X~C#24kH#uue0rE&BH!moHzsa{bor`wt-+ z+3ISmt12s6%GoL^DywVj*fww4ux{;|mep)))~?&IX|ur7r;i^#xPR~N-Fx@%KYaZ3 zDO6iaOH*S*LrXndLqlUzOAE{H-Me-*?_}Dsqh%-auHCyC@Acn>sAO$wtgo+Yt6{CH zuWxLcu#fHf^&7Wt-)Xtab_eL5>(`;GD$2{tO4~|UOUug3E1LIr9cbRq4z%;Z!$*&s opRhfC^x*zosDZ6TZH28xEeARdwj5x3`n363+wSb`b`3LzrhS(Y# z=_X~C#24kH#uue0rESb`b`3LzrhS(Y# z=_X~C#24kH#uue0rESb`b`3LzrhS(Y# z=_X~C#24kH#uue0rESb`b`3LzrhS(Y# z=_X~C#24kH#uue0rE; var loops:Array; var reflects:Array; + static var maxBones:Int; - public function new(startTrack:String, names:Array, starts:Array, ends:Array, speeds:Array, loops:Array, reflects:Array) { + public function new(startTrack:String, names:Array, starts:Array, ends:Array, speeds:Array, loops:Array, reflects:Array, _maxBones:Int) { super(); this.startTrack = startTrack; @@ -22,13 +23,14 @@ class Animation extends Trait { this.speeds = speeds; this.loops = loops; this.reflects = reflects; + maxBones = _maxBones; notifyOnAdd(add); notifyOnUpdate(update); } function add() { - object.setupAnimation(startTrack, names, starts, ends, speeds, loops, reflects); + object.setupAnimation(startTrack, names, starts, ends, speeds, loops, reflects, maxBones); } function update() { diff --git a/Sources/armory/trait/internal/Console.hx b/Sources/armory/trait/internal/Console.hx index 6a1d1093..b65364de 100644 --- a/Sources/armory/trait/internal/Console.hx +++ b/Sources/armory/trait/internal/Console.hx @@ -77,7 +77,7 @@ class Console extends Trait { } ui.separator(); if (ui.node(Id.node(), "Inspector", 0, false)) { - for (o in iron.Root.meshes) { + for (o in iron.Scene.active.meshes) { ui.text(o.name + " (" + Std.int(o.transform.absx() * 100) / 100 + ", " + Std.int(o.transform.absy() * 100) / 100 + ", " + Std.int(o.transform.absz() * 100) / 100 + ")"); } } diff --git a/Sources/armory/trait/internal/JSScriptAPI.hx b/Sources/armory/trait/internal/JSScriptAPI.hx index 13485038..18dcaf50 100644 --- a/Sources/armory/trait/internal/JSScriptAPI.hx +++ b/Sources/armory/trait/internal/JSScriptAPI.hx @@ -47,7 +47,7 @@ class JSScriptAPI { class JSScriptAPI { public static var App = iron.App; - public static var Root = iron.Root; + public static var Scene = iron.Scene; public static var Time = iron.sys.Time; public static var Object = iron.object.Object; public static var Data = iron.data.Data; diff --git a/Sources/armory/trait/internal/PathTracer.hx b/Sources/armory/trait/internal/PathTracer.hx index ddfca6e5..cba5c5de 100644 --- a/Sources/armory/trait/internal/PathTracer.hx +++ b/Sources/armory/trait/internal/PathTracer.hx @@ -3,7 +3,6 @@ package armory.trait.internal; import iron.math.Mat4; import iron.math.Vec4; import iron.Trait; -import iron.Root; import iron.object.Transform; import iron.object.MeshObject; import iron.data.Data; @@ -83,7 +82,7 @@ class PathTracer extends Trait { transformMap = new Map(); var sphereNum = 0; var cubeNum = 0; - for (n in Root.meshes) { + for (n in iron.Scene.active.meshes) { if (n.name.split(".")[0] == "Sphere") { context.raw.bind_constants.push( { @@ -144,7 +143,7 @@ class PathTracer extends Trait { } function update() { - var camera = Root.cameras[0]; + var camera = iron.Scene.active.camera; var eye = camera.transform.loc; // var jitter = Mat4.identity(); diff --git a/Sources/armory/trait/internal/PhysicsWorld.hx b/Sources/armory/trait/internal/PhysicsWorld.hx index fddb3bbe..cc51d61c 100644 --- a/Sources/armory/trait/internal/PhysicsWorld.hx +++ b/Sources/armory/trait/internal/PhysicsWorld.hx @@ -19,6 +19,8 @@ class ContactPair { class PhysicsWorld extends Trait { + public static var active:PhysicsWorld; + #if (!WITH_PHYSICS) public function new(gravity:Array = null) { super(); } #else @@ -39,6 +41,8 @@ class PhysicsWorld extends Trait { public function new(gravity:Array = null) { super(); + active = this; + rbMap = new Map(); //var min = BtVector3.create(-100, -100, -100); @@ -172,12 +176,12 @@ class PhysicsWorld extends Trait { } public function getRayFrom():BtVector3Pointer { - var camera = iron.Root.cameras[0]; + var camera = iron.Scene.active.camera; return BtVector3.create(camera.transform.loc.x, camera.transform.loc.y, camera.transform.loc.z); } public function getRayTo(inputX:Float, inputY:Float):BtVector3Pointer { - var camera = iron.Root.cameras[0]; + var camera = iron.Scene.active.camera; var start = new Vec4(); var end = new Vec4(); RayCaster.getDirection(start, end, inputX, inputY, camera); diff --git a/Sources/armory/trait/internal/RigidBody.hx b/Sources/armory/trait/internal/RigidBody.hx index 2fa90a83..aec0f82f 100644 --- a/Sources/armory/trait/internal/RigidBody.hx +++ b/Sources/armory/trait/internal/RigidBody.hx @@ -52,7 +52,7 @@ class RigidBody extends Trait { public function init() { transform = object.transform; - physics = armory.Scene.physics; + physics = armory.trait.internal.PhysicsWorld.active; if (bodyCreated) return; bodyCreated = true; diff --git a/blender/data/data.blend b/blender/data/data.blend index 210fcaf2574ced6a81ef143724dabd7f047179f4..928f089a98e72854ff5850ed8fc6e5c6ce5fc8f8 100644 GIT binary patch literal 1344208 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

WGlj&_tQS^moQRggC!kBV;2&lkwAqEGBylbgw9 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

X@2jZvAgSfvfXSJVkU ze?reWwdPq(Y&!#va1>)+b&7rcwqy14VX_o|!(~NZM^L_YV$3R~ ziULyf4oumM<(uHzfi>1>v)3S0?4Gz_RBK^yzysg5U;&He4VO050g$vp=ldPO3PMyD zYbfWERd`vWxm}CXRUEL!hL;L07QT5vxr$v177qlN*%Y-r{rD~_)EEGGUm*8vOw@+@ z4MWyi2-yf|6LZaesZvO|J#yYDyZX-i(~~Q~^e6Jq$_lD z5!US}gD*73Xdk0_z+WkV!%r4PdmRa7bSQ`QIhKfrUAN98aId2bcCkPb4a>f7N=KI?8JoS6Z3)hG1%TCzN$vZ2OXB8?<$qH;@3LB z!45S9-c9Po+;h%q?|6)3Ct$9u1<`NF9ut?lED%B;BjbPcv}j(m4Ht4K)mtr7M({Gc zz#aA;35SYDzQYA3Q5#ff8b{*NsNq5Yu@KhQ+1aM{s=2crSCC55~k!Cg>(=R$tti}BDr-B}r`?23?y%G_|?L zY&JEC#g)NCXCVzW4OtKhBAK%1r_w(%(RB#7)NM7%pxCMPlHm`exheIm!J{oAa#1K| z(nw^>s{CtF8qWvP`a(e*AuC{&E5WrKWFM-1>740;Vjk9DKwEso*B{VP=)hw^J3r_J zESyV6yN5FsoTjHk#^|8ZT1WK}mJl)NDB@`yc-NY~R-9)`TUv=_E3I^ka@@t0AcN<9 zsuWr<)|_?}tWQzM9U338}`WOrtd(f{PxZ3_RX~cre za_mUoI_QhB2%aIWwRovzZt;GT26BcQD%<8{DYE^G>49bR<2T{eR%{v$Z6<}~w3Eos zF_poJWK`!^E}UI8=c9Xf($JOSeuPP&h=9;=qM%2SD4uaPS#l@_i$bMfY2a%*8hpx4 z-Q4ey7!I8|6O<;_7)@xWTJhw$ts@YM!YVyK>v%I$ELj?IaNG@D8NPqnl&A%V@$1AV zrU_OA=Cxp&19FZDyFO$O?-wk~H%AZw9x-umhW5=1)!`0nxMI}pk zLd6QH&Z9YAtkPc2LH`T%RX9 zqcMDNiX%(+IJ0!GG!qqXqw>f4BK1Q0Ce#tM`WN!rKyghkqQvI+5;1|=nbc~@38K6& zTCP`Of2nN!#q`U%NMjoFqg2~{98;p6!Y+LOtbT_TVqg}%JQg}J9-Lm}l*5QU4nmcx zQYr>1`&+RnJC9`V4Ri)}G$@vBQO6Qi?IJ;E1crxu!thcPmI8M))%MQr@%IL1Q}nM= z2wE?08ivZz!SFRH0GI_VJtJo+H#N8)D*71g;uZ*Ej`je5X_V;72DKPT+8*H&?F_&m z*G3c%rquJLm$i>=ZfzIaO#Im(O5Kp6n9DFZDNvexC9gb(T#*<{ z(M}|2rn_0fR+6gpS_89WhA1dR!PX6(&_ZWwV_O8-7i>ejW(}H89|dvY6xLBuV#u~s87NgI@(I2Q! zF>*3hErM9!=D8~pHf79{jhPf5Jxdpy^3@LQn81eb5A{SCC&cf-IrxQl@Oux1@^^v{ zdbyS5M1+G(Fb^{XRTrEUv6}mQ2@e_9)$~#$9V-pCdtHdA2+o;4lD&IKF}+OZePQNe zp&~NC=h@w_rMhYq_q7nBY*|>DXh`bsXu|2EZF~{YP9DPXzLm&4q#Mf;4i#&%NY={2 z>510!38qdmdymXH0GwX@z9c6;(nkw){FP3wV~#Jvkb3x-*b6T^eRtToX;e?aE~KNcSIBMQRUZ_$v-U`GN)6d zfGHGHPSpdK46R}+&J$s|Kp&7LW~~Amsdx2dIf0n4-GBicsHI{P?VZK)9GcsVtlHzf zL94NU^TX;Io~q9~F!jP=0nZ&fsMn=YjXF&Cd*8T!SjBmB!uu(W*K-*?>nJ5{LQF%I zCc;Z`6C33hv?$(gg!N-OH7AgcOolNtv81GCUQhx!0tzCADBIM92UD&8~dI(WF?^T9Gwe}~cn zmXjK($H#Hz!zsrMoinDHMD|B#85M6R0Vu#03mIHlk>W5YRz__g-V?+~RG6{Dc}o;u zKAk}nlu7r9*oT*CqI~WvkhU0cGDixn+p`-s9LJeG!S>HXJ;|$e)#?XD&4%;O^}xDqc=_ z61o;zlcQ;{0Z%PCd+>X$LAar#W$NGtML&L*AogdDBok?VnyBtbH==Qkg~1JBInSw4At#N5-z+uqVBGZkiRcqE-|1?0Xx*OQjy+_#d#?-%m!?=QoY_ zl4T>=5eyKYNg%n&3Yo`Z{#uDF5v{H@vos#D^OwM?lC>>US6f-(AA}V}Q^{eHkwxLm zrm%8_N55h&?ILVZFXAF|GhY?qm(PmeEvkYX@E*|B_(*sisK^9yg~L14xo(8 zup`}w3mRO-2Ku(q`WSW}2ZD)fXnVT(jU-(OxrAO8#rNH!%pT9jElP-hYf!RFJVh|r zGjA&Ee1$B%^!A=KJ53JlmTzLEzIvtemKw8`sU|1R*4LrE0eH>uof!J1Qq1Vf+W)i{ zr1oIpSv$V1%9Zs9fKJHV*Pa|ABNQ72#+%q1&xmb}5nJw?A>(L{EJt!^dECQNH2fkQ zyK`7793HY3^eCR3z%cAuIXR)93$LDV^xdq4{T(BJ;X6i@WSw2G85iJJkCDRmiyyjP zsP7d|hOGn$hI?5oMzJ+G20`L9IsEuejMTZ>YgkgA!gJhO0O6{H8;UkJr7~_aO-=Mzqyrv7v z(Ft@+3F%CILzC=Vg&53B=v3Eh=2q^2>i)*INd70w>aFlVRZL(cK04zfuj9PM>}5ETaN8G>Nb z`X*|+v)|CqZ*pe%H~ISw{(e(0cqC=Av~Ikq4zm_n_8-1Lf^mj+a%Ov>#y6f-1s(YY zKH_uBWr9UGCYZl;7dztk=3S&^UMa>^K<3YQJkyT3ms)ul4Q2~lPuD5s`K>r5)Nx+> zmhjmN>dOxuzzp*z6%M2@l5GUHL=R@6zEl{8;B$IxUo_{-5xx0_0anEW@mS#fad93c(c6 zG5a#~JvD~DKY<}-wK6b|8O8n_P&6o4(`Jrzw>$zuO=&|V7ywuBIp1p3jv}Ao?}dV- z6&9{w{t@<@nbIYZ&WOA5?L5ESSe}pP8hGHS<@2^MENRz^QF-~61uGoDl&dcPa^OEb zHVGUM8!Mz3)d%9)FeQ69cYRy|r|BsQI^j#>`7w3$rEY8Rx;sU_+%4C8<@yF2y)eAX zeg)m6vlX<$vL%fv%MtcjZ1`C$&-4?{1hEY-W1NtRvVG5*Ky}cuHxfWOonyiIPr6(3 zXym*3V9dBGC1}JJ9s@5^0I*ne{>mnGny8`Xidz>7)7@^Yl+()Qo{$$wj~#tJLabO& zGdeupP>kv$0028LYLt4biN>fr{mX4>1olJ}6XQ!d{oM|%I%4-rv4_=a(ui{^A4p5y zRuPYms59^-HSITD^0ON8v(ZnSNUe6qIuz~@0l0evLSJOhz|l+0N$snqs)WEXpo6pW}tylT=qi`dAh87M6A8OUVLQ0Q~-x{p5T;&?@QZKvgoHaD5}F zqkj+^V&*90&~gOplkeqssugn@PSXn4j?97hUAzYK=|+3KnbanE*;Rsnz2kve86`S~Pl-Lq5@?150Z~N+#sD$b5tytlQ@S>O)WH@+AM8 z6kYi*v)O0mqcuPedXigl;Cu2vYjkU4c^=11X5- z&v3W?Mllb01Ll!(@nr~1ySq+pb#ux!o0+laxOb!^fEQox(2+bA& zv>FwTIWsEoa)lS4V^YE&Q1^vrb19vo&lMFtWTHXv7z0Y{fN+%Kz`~B*=PLNnpR`3u z?iGs{4-85TXMbx_>M`tf?0A!&M9PHTC>+Z`e8();bm%_oiAlnJAU$k7J~+@j$uAK2 zOhTDm^gXysoh)CDzG4ib?UF&a7R7NpB`@x0ak768pS&Z!aahL(Xhj$WMODVTT45iH zVbWw32b=jN1`GjJ9r6?kOxAj89v6S@CY19&GsY4RqI-C}i7YLZ=7gfvQyi}YP71;Ukr7iz8jh?dSZZmk5JVdns_PQAmdo>kTRt5d zL|=}3#Wv)@+a#C==531#dvG_8NQT(MP-DpsX`nbnA)GzbVdBRUcz6cj+r&0v`Lnv} z6~_XVT4NZBWY$gLLICsOv-bLCu?mjS?hq15b3~9(#WMQJg%tw2clWDOkP$RpS!EU` z!S@vq*_eVE+)8)z5$1YMj#gv}!qO6+yP~do(n$n3qz0GLBrXLn@>l z!*H$)OlPnU5M|MPen(09%^esL_aX{YVRxHG8$PeB&#nA1Nf}J_19}m0p#KrynU711 zY=<#w=+51CQtTqL4NcpyvUDdqGyNCBNah=AWo6enl9>(uAdXq&kQx3xt?t zXcjz1t?P%2U}JYsOAp%TQ$yANOeo-Bd<=z?o}fZNhCNpXTp@-4tW?gJT2_ben#>u&>#Fhr z-V*cs@rA)?gc#az$cIe$1bxE+ox$R}t-6-i`6ISuHobiybu1Af&E_mr=-&$1Xxd@p zMpJTxo39Sxy_e@t2{xO;EHm^`wBW+9FmY&G!I?EW)T1Q$0D``kqD{Fpk2mbg@KlPhkh*egx6!TQEZr9PWp6NE+(5sQ2d~DN#T0Yx}G`6@*W|z@gbpfZ9XE|RCC?9rH3I4v9suZ8y^<>GQ z=1Lj7GM*^c*<9zG>X7Cb+@ASQ#>;T;0sq>12_2$!YFwCQV&z>93pI^O7(l}rCGJOt zxJX*Z{7qnKvlcp=SBogAGPE>9PvsSweA@6T)LK-|g%xaQGDS;(Ar7~JY^Gv)N8hbw z9d1iYu8%31#CXWtXyg0ntzg!Vf+TC}BUY`AG<2crXtv_aeKr@s{HU=-wv4Y~*<>?- zY?JzBtg_?fD1;wv^7n#DRJSz6ebXQcz^<#b(&5jcL$vWeDt(X<cj7d3jQafbj+_Og^ZChDG}$YUR4(*r&CfB7$%~K0QOC>q$nh zJ9v528_h4paz2RE#In~@DcGTpVzT|02B2mwuAg?Dwijrm)XFztJhqTIp2nrYMyEKT z`z$x%$Edk>6mep$7b99=4N8y-d*=lkB+K!Z>3**|u_WTm7-Kv84mZ&~rxq-%vRvJO zEqv)7J}dU6j%hYvoFDqkXVQGrH9|)L5`gev!tAp2^+vO`um)K(%M7zlVOmL@%TA9e zT1<9j;0$o7Zb^9qQ9U=bF+Y&Fucbg^JA$x^>F*W*Ts z*wEo}HBu1SaelNGlI3GCe3!6q?R2$}W+{|yvTPa5-j@~@g}q1~VsND+wX`HE(KyKo zeHOs#29daHzn>UzgMNsR0 zIg%NCF|3+{vOd211~zli#yn7F%HUE#Px&$vkKLZqREk;P@&aLjObWUc%qCWkOqG0* z7w4g3c8&B*s}YJeZcIz|6T?vDda6>t+53Zh6#k z;h-p~j;g38LRpSnSC|&;Cq+WLO?2i;Ak|=vS!}IdL_C=6*`D9s-8+{F7aK)hW7~10 zG1lZYT#^=FmXuw1x5X$THL%g0@MCu0Iiu!F=~XjNB|6YMR1i}+OB0xCL|ws_|A3Gt zQR;;#mo&Gr3K*kjxuhe3gW)q!ZUTfEUaA^%0xPdSlvcJhMudzdxzTc2e*tR4Fen%5 z3+2%Y8T1t2F)E*Q<6{f{jE59Aj7k&+9s;TcRi$p6_69AzWC#uuK_5zt&MSKg=3b%3+L=EV|b*A9nGr)w^I63Y8OdDIrIm+&AXDRWro5hSu zRafVmIjfJfM`bAX1ZiXQ7%1i9GTe_-LTM@Nd>91KfJRUlQjFqCY;7|g`TXv*FWXdX2pN+NF zPs6uth15DjpYAU8^u9z?dOjrY&|h@b4pKlf&krYjc}283xl^6otxoPySR4x3Bc%!7 z6@c}GibFggB(_AKub|X.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%0A}DP`~Gt?ZsbL0eUN@U6aQHtd;WjHoegtfF3f{p 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 A%>V!Z literal 1340964 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 z zyNxP6a_t?FN3Q(=i|w`H8x#5C;g3wbJMzfHOwo1{enI_)e^7ddu2u0qy}505IqxY# z4yZ0ag_#pql zt?ttf_;}y8&e)OhX=(XnI40_?;x#zMLQ|UfNIis=5&6?FriD|v{JZr`xCJrI`7Wu4*Kbj1#dxcnj|3jT2jv&I zB|fL(qq{$-EVu=<9h2tMLFl}KGGMZW}ohTp*tJhC@B`Q3ZRWXJaV zRVDj9rRjIXWxLaK?BveM2Vy2zRt!$UZz>WA3Z#;dKn)W0!o^%}X+8-MnkY7&tPr zc6yKKFUWOgXWhJj-JhDV^Wi!dFNI%FZ{Z)LOMOwrTeqLD%MZKIkMQd`oBU}soD@lk z^5NWjm)f(xI3o8QW%+CIGx9qd`E+9eK2ndfCQ3)o*@)M!?W1V#qJpAc0awIdl1J;Z(H^3GtlKEs5y3xvi;8z@ zx_w;}pYb`hxzjC+j=yuRnsV84vZ#H0kX^}rPHv&kKp&4RzLUe@RhI4W9{O3nXak(igr-G=XK?4<04nS z77^`czIMWU8N(ZXLH&k*z%ld{6>r_|Z|U;GF2CDH@~1JdFq07F!@1T;?SWhMzTYMF zNKNcLqS;(S%^ctZJb(`@0B&_(Rq@eX7plt-`}|(_OZc>`J1aBt1nOns=Z?@P@7DUh zn$(lShsHqIAAMs@j)NeM*ztiM`oE^)qdOn2%MZK!-lu_L(FvbEGSiofn}zX#9pzH0 z7qsq7>dE2bAd2He?Ihy1TRVw%4;1wa_*&aZ3aV%yHnMEya(cSw=F7AlZ7|wgw84QP z(N>9P)!+uTO!@qbTI=A*l78BSd4kUc;~90T(gp_yc|Q6xoYwt7rNxv)MH>vdZs=o~ zXO8$PYlHEO8ghI_Ehe|v{asuVtQ&ePvyKfMJag|6>+9NtKqf{&jjWUg}Xa<;^t$ z58wk6fLr1Y2YhyjXHp?(!_-ML&{e%OWf(XY8+@~2_Eu_>0zf3D{#Ra(wshk1XugX*``!|S)( zTrlteJ}AGyEp@MokM7)-EZi1wvwzSm#<<<%D7+k_7QWd)_jb$ zeV^TQ$Km^j?W|QN967h@gpU^QM+m>5-X@>reu2E92UWav`vJQAu*>g$1o@MFskkwg z%YWf|o4Q?ZtXt|S(vJ}K03Vd!VS!uSw^V#|Jqv33JtpF^-S6;!@DV4!<8JxX&+_hP zKZ0WW9fv=_+7}#!;}KGoOVN)&yXM-D5dDIHpr{AHE3Y3R`VHtu#9rX-3i$iJt>PF8 z$#49g($%rLbK&Zq&ei4bg>UlKcw}bIYh(p4z-X2657Cd<%XneyH`q6od+T4h^~95g zf6eoes5!*bIG!D!>wojRNMg!{O^g0`0Bgf(zTA1deo^D%8eUdK=4evEhvWL+G|j#6 z%iXN)>mN)^sj)mSaN*bQ+dTKeGrEfRBZOa2Z)4A?{fNYORJ=JtO|!gaVae*QmgePg zBi`jz0_XF)og#nE44h-}W8r!mJY27xf}i1cluMM;Y}(Q9GrTUkjI?%lwlT-A()mz@ z>3V<1;mPk?ufKY5=(i|$h5eq@-1AiGQF|iWwq3D}{at}^I^Y3(P+EZ-u0flc;>jNN zx#6ZJ{IY%Mwrve8238rNpp45)I+mXw?>W7-t7mny_pi7jKZWr@s&Xm$oyNn_-k|-d zdr7oEqFqWqrq+v*N%l2c^exP#UCr&?oy}dP7j_GWr|)6XbL@32({jz$-pX@q-HSXQ zphLgs*P!M4YyFJVBA0G{oW-lc&#~poEj9i68NZ0EpE1I|L*10Qbn}UM^TO*N`c-88 zL&e{XfEs%Xp5Xz?;K7l7ye028&*5!wXsDI#Rzn;qa6O9Wj<=m;XLc4d0IEc81IGFki zj~9rK$pO{xe(fndXJL)jOOzA``JTd9H?xlt2ZJw*I5;fg-=9=k%ya!>JP-8YtA9Q? zBfbyogBOm2`uTFU?BT1IW*)wJH&!lQ+&CltWo8E*a^1|sS1)Au_pp>3o&x`)zX89X zp7p=N{epC{O)B2H<8iwDunT()`86*{{$zXdHTLE5U%7flaZu{vagaYeQY@rHu8jm9 zz^6`>U*I-0sN!R`GhRFEOtUV(X+HbU?{woBr^8Qrd)`JnCH3Sq z5jNsa;sZQ@59|PLb(+tu2;%a+)0R z84~u`@qs!0KXAYYH$6~4`+3xlNbhBTp7N%F+KL(RM7U10=Q*!=$YUWE)E}wGSretB zbxmkb-Nq5o9|1+Z0qi>y|Cz-6*-|Gw=XDh%dk`yG6w(8gE^hD1VwI zmmOXHoFF4p0epTO4v6?Fy(TqU&-y=cq*ncrdaRnL|9>%i4w3i(58wkEfLruw6(8Mq zn{@eMUzIUn;^Wsh)_MK;b~q*4J*(HC(+^7Zhu)2ndfYUrdyS$!w&Mhw(m&Zzaq{eB>G)$-h*GfQs5-@6xM|PCi*{a{Y~^AK~evJuf4yC{w4aGv48RQEyw>; z6?dQCGn?tvf7IVp-!q%0^fwc4@qCPoaN75dN{i_Y{e-W71O4vWw+G({{$^vb@v>ra zi`@r4_H^G}yC(D9wY4m^-p}kfYZJdO`IIEwNBa(lq#kEYXde-;-P%XAcc7?Oz!mYAqO`vwnc ze8JK_I`4&oy~4bHOW5r_?4xh^aORwSpBglJ?`L*=DzAM!`i4W<{b$*{zw<$OFJtW^ z{DS%o|A4FR*DBt+^;4H0cKO{tl0OaO+QEKNKAdZv)INOTJ$mEeIX#M|y!Z<|fDbGH zZvDS;z-NbOAN^hbMfhyJ{?@@dQEwHm!6_CR40&I7NA083BQetJrE6Zu5S|F85w;u6sWC zih~$ckHAhG$KVWa^Rn~b>d4GU9=&O4BFN?}N?P}9X3nQ&&&K?>Ue6r={8MZ%%|>R& zH%0p>^Em&a*D}YSyQS#!Bm98+otl91&1EHir{Zm9qUm_4sLZp*=I(fnw<$wK6U`U< zIUh;BobfnO61?kYxy>m{|oSudK66!T%yDWcmSX12RJ^!E&Y-cJ~KVn zpBz3lx-+x>E7AUJo%FrIsK~#Q*PvU60w1X-rzyAA&)Po#9>8a0GRFtF1%{pQnd$kxHGxkq zxOw?L9rsTq>d#LGvm*aFujzo{zzck&9w$vQz5x&5)3-av2e>8w}kA03WHxNt29kzytUM_u%*dx8XlK;Zy6m0|$Jxy9eU= z$It%T*6ZIH9GS}V@8q?j&MzSW@R53~ny}tn)*s*jeERp~_5rupt4{dLI-vwp9FvIk zKA1KjFfcfx0u=MLP$&gSK9hYC~yd`=E! z>O}sXyrz2E+ZFJUdYm-L`U52@>r{Dx8~8Q8ooJT_e#i?Rz{@T4 zV4e%#2Eg+&zRh8m2Y$$l33M37ZdWJ2jv;>rD1*u@2A=2fgkcxLLT(kQ3qFo;NAusqL zQT}Z5kZ(Lsr=*i_**oXXv&Ucmve#pxTc`;D2ZW3`2>qmx9b(RNy$O|4U{3qn0JY!u6 z=HswF#a^Dl4|y>m4|=j+;&$NM^VzTPYkY&=E)V>WmlE=zCz#~?{a@v@u9wr`*EzMz z13%q9{3?I zCFDU5?83g^`0fb4UtpI9e#pxTc`;Dz|2f3V2lj))e&lv};D8m^02=N^gs^!<*AQwId0Dj;D@~E z!+gIK=&{QS9nIyrJuiSC@~|H{^gv#&e|kKZ=hnXmKjbBj;`^IJ59FcV^$B@y{b%q) z9@fJ{59GnV;0fG5xBfHuArJcZ*?bfd2a0y z_#qGb>Ol|Wp&X9P;__VEBe5?ZoUxpsWP4|#aMA9^4M@i{w#%W;d( z;DUl!(uE zeD<+B!s9jYk$Rws)=0=dO1F&FAK(FeP~U)?-3*S8=V>YlSt_(hD(O%iTb|f62Nr8{lW7U+u z&Iot_pM>bI12?-l9G@Lw9dc#xiHiJNy+%Ipys*mVK;R?w*fkM@tUtg5_@Ms@+-%|v zj*sVMEIzJ7=J@#CKgf#yx7};w?2hnw4Sb}YoF>P0$iM^m;Q0!;+078~&GR}I|JEUM zeEe>I65{zX=QZJgqwJ3Gcny4{9;>GO_y#}H7g=D7ps-#TQDkKgsDPdtCxy>_785gxCB zkJMw;lwW^<2k^mo3UITV!SUG<)*)90pP(2|vU-ht@G-k1JYEAIsmH1*A0OZWd@%k4 z-0WtE_Q!Mm@oyb+W$@`2<6l;53VX~4~HhNwTDJ8=H3 zL#_-ybz(fx>NWC#=MIt0fxt)Vv1$T7vi$)bz-PFDw~xThCSLTfXL&Z)zjer!!DmS1 z-|98;f#(-bZ4LxJQjb*=@R93Wfd}w`IN*kBP*Hz8$2b4hA-pZadjr zVV}>i-FCese3miM@H6}l2H=5fP~rC-;QN98uFpsQVso9JYxY6{LGAOvw%e|kxq6Y) zW33m4f$s+{Sjxtv89qsoZXG+Pl8~+W;l4zpbNKwVUD1N2E8;EjuCDlsrp{*ea&c>W z+?YPStT1LyrI8M&Be=`crvC6Li&{J5ZA|>qu6TUunoiFC?S#FkF3Ol|ivb?hj=czdiiElU7aYH1~*d$+qjyiKk{vvF6jB za9if-%<;`jBNJxq7a9NTXW1T6p~g%9bNk?B7hJFG$+Vb#D>L3zv$VNuWxS``F2(!x z*RHu}^H=_I#OAqw`AlZrxSbW9rAQ^b$FqdU=M5~gl;0|&!9ZC6_9zP@ALnHOWhC{N z`wy`C$k(z^N+w*=B;Yf z>(*Wtx$la9nPp+>%;4O!{_y=ltGGoS-90s(T^-Bg-9DBC!}xjnmdJ$LJ~4OX&MPv# zOXh8~>MZ3PWdZqgDht3KWg$DCmj#rOx<6j2_{i6?z~X|}eqVlBs5W-~-i#B^c=$6P z^HLV-&MjOPYQA}I=H1vY8$WsHQIThRuQba-&2xti4xE0Ig3BrKj#crVt~E8C&At|f zYg$j*{GFqJ!s5YwgP#~TgXu5tKv_UOoyr2RM_EWO5N)D}579T*RkSR4{Tx|-Sr}(J z=eo~4?kO(BP8z?nHU8N>y~`u1OzX=Rg%A0~y^)t5zr!pGzg+NqIP$CiY_g_}h#pZ* z8-44fwVl2z>Bn*Jz^2UC{&Zu+Fn%)l*}u!Z=S!81vVeR#l?7mrvM{oQmj#rOzIP9< zvHB=pHI29$9Uly*jSkoNPHdYm-L zaXyq!H+&NRR_h~wUM|fRr&PN9km>h+M25g8CF-G**PvU60w1ZzNfXD1-s43)u&=9x z4Tz_psBgg4x{j2d*G5GC5P$2=?8qGU$4sg5mp!xid+a{= zMrQZH|7A9u%>EiZ$6xrvt$wGLs(9Kt(4!Vh^cGHW$ zQje1+8Glhe-S7#VuHvH`KXv)xBfsM>@Ck}~=;Sr%)}e^MQje1+8GjKE+~P0dDJbe2 zaJ9$Zq{tuQZ+bb8Q{YdYq2ld({5{s&$fS(F?~3t*1?zyO-H;NT#K?#&i6IKiukf>`WDJ-T0}?4`=xu zf3LdjF6PUFGDD(VIMq7nCYse8e~@~dG|Bjj^67@p&{--zy75z&A3pLs{sNzvsE1Bo zgKiy)_$&1|X_E05@xU$qBA$Yxz5!Qz{7sAeA^r|`@Hhqj;AR!?&{z5VJf9F<(6Pef z+&t&^?zvqIHdDNfe1-TMP~vYY&hrsiCGyj*(sDH)aP=jb&#%2C{Ng!vVH*D(Xl`h9 zlEH=_&U5-*_qPMCem66@_m#{S);=Hp(WdIW{`CRl-p;)I7n(P6KB$~6V-GU$3+i`Z zCHD)sMt-2;JugoaQkF(_`JrW^82|0tTh2d-bx=KB9;RF_{pLt!?&hjUVEv=J@aH@0 zQy#QRnhkpI{|3gh@!y;twSJrBCB9;1+}9apY4_OKmBgQZE%%Qw~IY4&ui~NqB7`j&wnTL>wo_{oD}(2qh%R_ ziX=t9OX|tf)XSCvUIBc72k;5~7sm&<5#K2&Vukx{U4BTOAlgm8@Y!kkyP20p z-V6ss{`0&B#e&ABd2ct(dDEPpJWUEdzytWC&KLDZl%wd6ReU1x&Yna~qd8e*Gr6Qo zU4AGTC+d%1>$?e`xl>bH?pJ@3;?}}lUk(R0l-8ew9pzH;yV;-2=~3&&;!_&u)OuZDRjx5(>Bl@U=7Al` z1BlCr!-&f;676E>X*Dh{V$aYui#j~7UDV}=ed9%34(w*{Pd0XRv>{dLl%Dgy*896~ z>?`BMTF=V0hwL%mka}cX1|~@{24%+txk>#*#YA_EOqU;ajT7Hu@~e-+$Fcr8Dt#1M zV}&tIjB$om^S&X*K9NsQ|L2&>dOr$g7;=sYYg~6$#yE#A;Q0WJb@OY`oFJEz;U1nI z^!)E%pSg9nHipagS>t;C>|HmXKYP;VTX!1{-@4lymh$0}0o%{0XYhwxJ+ra#cctw= zmT|qK&M}?;ee&h2;W|++WJGe#Tu}2_P3m#dB)E%i8Q zlJOVivs8R^+o%ss0ArQ$X_s^SopZkxuGP^$ibjD2&;xGJy`klUv`vrX2 z536|V&e7}g!!EzaWbeG~t;~{3_KO7W9;GqaoF27)o8{%aHnx)haymxGJTT^g_lpM* zml1~%m!ntkxQuum_^CSnr#nZl%MX0~oOfOFem- zlsRPJ0erH(93SA8{F#c6?i{@?KRo0&K1VHmCv(L^dq&bC|9M`6VnMT-_((l@niPD1 z2k?nrCF+kTN5jvm_~_2j>+-`*e$Vj}KF8KivGflsH>a_TiH4uycl5V`N9-4>-*xBc zb@}0Uzx$IEw;nxlQY7%eDD@|EdenL`HpdTy$LN>`-hUp*^(V!+2jVh3fp|UiOEoU* z&e7}g!#=;~_~|+S+zWS(1fMuo?D1E|hg&_f zOVgbr(&dLee$O$T7W*3W<5- zX2Ut`FP5>}TkIO~7yc-~Vh&XCByiS2*y{D2>VH^r-c_ z+bl1>7Z{wH?--qu1q!OZ|S2|IJmWWZs>* zA)FQYSED7g>QnT)q#lc=fGJ;@Lk1qer|-)gAK=zMSzQ~aJ4dg}4-ff`&%ATyWpEq(`YgnbTvb7c6s;xr>%YkM;Oa z1?P;>F%OJ+;63SqTz^uGdmt_&Gl7uTRn^Isp73WN2JRShxt9nG&1EI%$H|nQlebQhy;x) zjZM;<1!ChEMXlDn7dLQd;IuT z)$U6C?Z21jBls`IUlrMT;g^^VCuSah zAe0w>U*6-s$N@(_>$>(8&zbNG>UZ#d?iUy_Y#goNtvg4r%MZK!9+SQArE4N{?mHqA zcw&^sWOI7d`pw?sXIW(bjqTMBsK@A-2i`XxKwL%~MqKWHfX8LT>sYlKmv!gpb@>61 z-|vZk{IIJd>pMS^=@a=^qb0OTn$p}~Q0mFkq|EUH58zYxO^y$68yctLqdP~h%MTCv zjn9XUxhk?(_w-Cq3(caC0{A368CKS^=xh2gqPATvt+$($aw zUeJ5|$IV18$LN>`#ys$T@&Mv8;xOVee1Lcz45)EgcaC0{ANKh@$4}4s$3OV7Ox;~G zM&&(zsYk|TVA3bXpzN3+?|nO~nCQ;Y>+-`czvuY*IM$3&>7&pbKgKjM###4W-Z#Y9 zXW|8Q{{-LX_-A+<UHAGze1xg(cMpS$+e$;^&DT*orq@`HK?f4J4N=!+`ex^qOj{K${rb4(-e9>aXO zdn78#g^WnhsM6FPdUO0zkCP@j$At3fhEMwUDn7b%M7sR&lHYSoz$Yu}p_A93TZdA; zp!fKt9w$w5jtTL=ZH@`?6cqIhxZ3BK5N{EGlTV1aBj%byFR6I@AAgVc7 zK^~{TZ_k_W@prnnk4MV*i#h&1mG~PQ;Q0U@-pH>(?fJ4_CxstCuZjF2^YMo--)`~u zn#_vL*JPG&{`kZ1gzq}D%5(o0{&1_`c0cIGPhEc4<9GbMCbEM0@;~7rQ7)Wn9dr{7 zYJMw4>T%K}<1fl*srcx|PhEca$nW?Id}5*=I(ZGcbtvMm)Z?T{#$Ut(xA=>A3X1v$ zTJ2J%M6!`6V^FRLT?jwl!yO$DwQ=54{Ktn&|*P!-%*{{>W51@Cx^*@>Q zdvCvQ1>Skl^38W%bl&Fmdk=@#@9q6tf$&GE^;hc2@zvJ(nZ;>xw4F^QIaH@6C zO*Ez%f2AHLO)~zXe3pujZv52chmZV@zrZIY>YS%JaCJ@h^L^a zZ@|?ae@8_A5Pw6z;BgB4!M|5{jjOj$wK}YE-CK#j*&p$IM1Lmo^Q=niPT|)jWA~As zIhS2<6C0PuK32}(s#@OB*3nh6(9#p$^V|8G?|Hm&^SW^#$*da}w9F5185>vMy?NuC zU)$^^5#tZ=3+i`ti|U7wf2ertu2I$HM}GWXlW<1YCpLeeYFZ}nqfuIukkg~q@1A%P zSsbHd9vJh$`^*D~%ZS5>%h|0wE+bwi{;9@g-8HJZ{D8^tHIx%RIe+ttAMTe)i~Ot6 z5?UnMZ(2l6_vb&Om&r!1vvGflMuW^k{@m_zHG12fd{Eq%M@JPR-`dxR8sxCkL?stEZ z;#PlsC=+;Ql=_o7J!-ueTjL6Z$LN>`-hUp*^(V!+2jVh3fp{JIml~IK*Qo09!#=;) zxYBce)r2E6!CBRN^Omr1dk8zqrR4YVj7jQ|aT%DT#Tb+w6X;6)Tg60ojjAp`?DBh! zD<8)?sN_Bh>?oI#-)W62#xya;8GDZR4KenaoTB=@@1CdkrBY({@fugRw8XopTefsf zXS^&EtbN3zr%x|?q*K1f{~xi&bsuGnGw>^(k7Sn9;a{t?>@m)jf8Dh3=vx>re2jC$ z!nKWMWmq$D$8+ay{@awLo1eZgntA%d6D;L}3;xg_AKUz)m5&r1u9>?gI2gW?`{_+6&KZwJK z%kTo?_0S$_Twc->Z(rWphGb<^U4AI^yH9GyA!0_O1lZsp{&7)rjDNfWeIs6{8>m zgBTSBW)dA0SNJq_Wq`q;BST@R(Yj1saH_bYMnFZY5|=8jM5R{9i^eL}T3h38tDjBX zcT-&W-kp2@xw$VdBzfm%pdXpv56-+v&N=t~&%OV5?zwLXz9;@(=Dz!RKVKg|#&<(D zCoS}BDU1u<@>XMR;?_&fOuTZd&v@n5J#)qf_vE|n+=TD8GmGY=z@yMSYxk(}o;0no zxxCee+HeHF-*821z%`J_s@@pmj#_)V)=aEKKj0?#~B^oI4YmDF6eLd1o zuBWzf>(*Vk&ir>Fco5?h@xge7yUai}KGgj)sy^Dq_IK88)z#(eWsT2av&xT-%k`;Y zj`dUbHhf~f=As6lIwayF{p5L4_ID5u#0PCa+(J93@uBXYQT5Tjip1xg(MD37FY-`> zW1>WSq@O%b+4!*Y8O~ogpLsqLyf11kp3l_#X1uzemFV!f9v#t$=dYO=ExaUJCXuMEmQ=#IwRj5W|?KevZ4t{Yb;y5G%<1J!zUWqiD zlJ%p`$4ZSC;8vAY1gZ#Zya*tV1rLLllOJ+k249E1RC$@2hf?){sP5~Op1l9agb_Z) zh>HHJYzePYMu_ilkbd$!W%HydW}bw2AU?q~j}PLO`bv!tH4mlg10mhv)2RDC$neH|H#&y}Aw z<>ZI!uZMYh(XJx{&cNL#@@>Q;_N|IL^*S)BK5*BaPcq(ee>u}||Fe_w$*doBUR19m zLxiiciom9aKsKKgJPck265wm^_bM+_uLGm%qkX#f?ASWLaYeI{xwTuzb=oRh!Yf@e z+`F4*q#x-CF+mN=8WVVrWYm~Y_uQ!ZXqWCiJ6^|{R&tJlc9bg_?ySa%nkH(T4QqLB zh}x%nt%|$$8mF_@apmmUp~ktrQsc~g&ifJip3785m1WmBcWfJf@ZC`}F6+NnR@AJ@ zzAmm<{NDE;m3V(QeB){ug){v=}yW?vwkG^vA$Jmya2bVtRhfFVB;=Z)EXsKABgI%q18QcWFoXEY@|g0RknmzDLvHpBxe2Oc~WXo<0Jj#c~atocpyHRZ^ir(@%6dXYbmHT zN~%6!()~Ud7N3FbZ8`bj`fHqMN4XNb1)PC9@@>Q;+C{~kTBD@uqo2C-Nyb~p|Mnuo z{aGjFlUYCNyr|YV5#g$=BCzQp0A2_}bG=8^3Ib^b-4Tx^8i zadk?KQ~Hs-jF_MXWsM2?-rik}3AIK^)knK@*Em@n>+-)}&?z|zt8t>Hi5h3J`?DSQ z!lL$>>7n8tyPw~ea46wES%#g^cYI@lypHonaj)zSN{!R|BhPWuU3hx*8;30yGGB0q7Q z(B9N$YP|V8sd0Q=Dpeot(tW+d;`qLalW#jF2gmiV1%jK?u6F>=z}>x$+=ykCEEr{NBqfjjzz zctrZx;_mQnitKoItdI8T#+~uI_qo$L4R_=hR@~7)_f~ee&&9`OOFrJ6>%*b${Iw%T z=_HmOLS`Cwz=<~!%iOSE|X66Y1*QD~ld zu2JJneIEc-AHCB3K7rvbhGmW65#vIxsNqqS!7ZHUuk5~B>Br8Ke4hZuXQBACU#rH4 z`aS@vK2XyAJ^{ohD(0abYVb{wY+iKS_nh@(=SjX#0DMsBeFET9NX$3H)%rdG@Gbba zVJpEqqK=TcPK~#A{;hSEYD@mb`wVwd_&2=;?+0YK4?l)1#=mZX17yE_?9w_sTAWdy~zu$y)8 z&7@}=8vjZ^cAg~vVtf{gPs5FBe5m|M)dxnp`4{m?Z^`Ga9cu7Rk>FqH$Ig@FU+_U8 z{so^xV!k1+R{jOwf`8ll@%}>^dkzdwllcV~rvz1#49K*sv=W5{Cs z+aPd&eDbC}1OGhf$PLE7t%ttjZ$0!qe=O5z#4@Ki=3n4ZXnqH8RpU+NPpUrVmTvxS zJ@j1@%hQaA7#DW44!)W65T1L^@+;}b&XeR{jL$;xN#3T$hsvK+ePE=Ue-R(An1^<# z!8b*Mf2AKgPm+JZ2Zi_-d>jg zp#i)fkeTiHF=R3RZ5KE|K78#CfvyivF3P`^y5@WGK6m>k?-TWB?woC8?re65NPvrv56?^NSM z#K!ykNW5{Cs>lQdbPQPtr z;KPG9T>W>)89)2CtaSyRSvk~rX5}7^`4@N;n%`kVjW?A)srr~(y7_m<8SDJdtlZNG zig95#>)@No6tVsw{n&Yu{EP8fC_d?g8XqcuQuTq6ZvI7l(!26`Ylj+qQzZCT`mysQ z`4@aph=0MSkeF|XtCfGjx8UFQJ$ZkjAAC-Yw|4#=Nv%I*ME!TL!oS`jydRLUJ@_$X zG5&23I6!8SqXH|84R`&+nE71-W9D}aO#RbfW9pxrU;h9+3e9id^J=`Q{7Kcv+|tdz zV|p?yYmA5(7k0A_zL`uBuYZt!>^w>S#rP}~pXi^|_)z(ist=5G^DpA#74y&zHTb4T z@UQe^=SlJ}_@EH~f=?ka-w;nY_RoxayMnqV)$+|MgSGgq`mF@4xQ9|NS@pTOWRuvGw7HJI;TB zN1^$hS)<0A%AZtyV4<6T?|=Ud6U&K4N{kD;SqI-trnaJ8{~-O?d6N8#@mVN7p+Bqf zq4FnH9~kN8U&JRQ=Aj*G@J*56U+KrrljL9UK_UJHpF(23A+A>bO^W`3f8C=wPeDKR zvKnvg{5xWdBlu+f0rlVA6#k8l;QfH~jpE0U#rQW_%fAmf+suE*pHck!2f@E19Cd0v zN<%K~5*Tu6*FbCksYYx6Qyud!@F+CDW3Q<3rt&9MACTzg-yuC1mQxIm7#DW44!)W6 z5c6N@$Ig@FUyRQ}@$tT@#)rzERDEEin|~3XsF;U#sKGZyf`6qSJ5Q2-!3Tx-7kmnd z`G&Y!`4@Z({%t>4@Q&c+$lug>hxX<74Y;0Qj( zzw6d9tiBTUhuszaP46rC_dqT^2U%p1`!B4GTJ+hzfzKEIC0^_qiB>&b$LAjF4xIa! zfdNZsFnD^TN7tHVAejFEkFZ`Ms?@6tVr<2}m zM$|{Ubl*SB@N~HjGvkS$_1{128Q?tsWw--p;GXnx+!2p-O2wVuABMJ-FRA+QSP9%0 z4QwqL_aG5>;0)Y-2XNdGkKh|B?)5FrEzTH;BSzJ)B<^b#TwOBm5hCuu8MsFU4fb=MCbIGbU)i;)uJ!fw?F z-%JLH_peDmcAjMY0OPYzd?Nd*@u9B&srtZ3cl`kI35j`VhZ=lSBbFJ`y{XW$+>g5!>OMCPct*EKiInohu-s$Wsu zd%ssQ?hzvHz!|vX{D*kBTUFet^)9M@MR8y7ZRxlZc?LKGck~PK2+vb-KfbBCW!lWv zbMU=#B~>5(bU*iv@%xPVJ#yBE>p!oe9py^whaj)B;tqT1U#YlnJo(Icm(IEk%MI_o z=ZccYJMbx2qHcqA0@e-gNu1xYp75Nn;+}qpuNw}T(|A_X)Oj;zG|ef0)6r~fj=rO3 z7t3|S&tl!+Rn`qwJR-;PenFPIZWw>^gusa(ylBQ{!>k*g9X2TN?ENFmb;02H?7gnd z+jo4nxhC*z^FBq_4d{QNd6v0Ajkog*ibsH|k2tdYRp&foSS~qy%TAkTm{*u*4M9F0 zG5=B@sJLsdkB+2XU-cg`&-PU2S$Z<>2W0qoehgV`p1B1Mkl%T|fvNEgS0A0eAmyLF z;0=H5xxq&4Ip_Bm0FOfREcT%qZ)$y$s*ic5yFNO7!RscLHAYa33%jZqd@~s#USB2s z*m;umQH;+*@$shB_)zPcRDEEiyFQBeq)*`U)($oJrbyIBr5`&_vOWqvC{!N>pF(23 zA+FZ?DEJoq+kOh~FZ3h-R^zRme`}p>&9XeFrwM!)7oIP(m%_i^6L~)%V<+)r$YT84 zAaH;TzQ0?b*H0tOynp@AS2R;U%5W&C`^mf){GZHQ<98o8)Nmi@{Qg?tQD}aLKUU*S zi5ed&e^T{`zTP zj&HU_uU+)=23u#Id}G=_ z{DmIop2}D8;LZ=^tus#^@UegR72S)jGl2`{cWMg91^xA`P~*Mv)N}mixweb8>u?yJ zE?1!Bb!KWu+Wr)92JQ`0Iqrx@drZZhx<04sV?5~IpJKQ#8aTUj-22mT2hPAfHjU$s zcx0YXai4&WJCsy?xUB^4YZhEtGVT%Lcn8kF-P^=*M?6ALskqmn;|?WNA8spxd+*--z|vFlD`#Y!>~P!)0c!D$8B3`ERZXOnrI7-H*8B$fx{Ej(o>lWBe(; z{PI}ddTq&?KlqoddDHyd{)feTin+B9Trkgkvp6o$irlZpdt;hsI@fCqPnYZPlIK~F zn7;yN;2v$^xFa6!2UOgt>n*B2#)IzsmEpc<;JlJ?_YlwLz!|uEe#vo1Ji-sExKr0# zRQ*cgzNYszCF33>p3i|ZaBmkpjCiD%tGH9wTU7mu;=Z8t`w@f0@eZ7UJNkuq1Rqv$ zr>?iC`e|2O9QM7|-sPXu@rnrFT*)Ob_(YpMFcNB4g3{l~5`v7BYZ z#JI5A<%4e~J-waRMYcBer5`&_a=#bjvrv4ZU#jt;?$=WFfsyY0Uc{$C%tJfW;F}_` z-z)vtd6N6R;DbW@z2H+w%s0fft7t6vH!AuE{`FqUc?$a0zGXh*^#lK$#byM_M)(^fE^@HIG|F)ke`1c|%V;8Hk82?%uFm~~Tz_%m6G|!70 z=DOmi?;R9)dascI*ZA(noiF?%=lslD`t(ONfu}zzeqAwe!Tipg&vCK#7sne@o};sV z!0>dnmA((-A>NM&oPm4jLXJD)0lXop>wl^~+MzqIXSlEF{Y1|AHH%v7`H2v52hPAf z)y8p0Jgly%>mjN>+EWqS7nHFNL&P081NR2O!-xm^3F&W|-5SDy14-3~%ZlLM`-76l zdvIsxdEOLrDgkHUj(#B?IEFl`WzJcR&2w>BwxsIAVMTCX@Sl=#_YiSMeqqHO{jAb45e!y~+e?MIMbJMK2lzNQ(75OUi*U;sh-;vjP-c#2r+Uo}+YD;ah@;zBU!1Ivz zQSw*!WxOAdk#>FzSuB6`3LGHEU2VP(q^aI0cD=aLNR0tV z2)xs6yTCEgql{ys&iNO36q?`GcvJb4s*m>Q=HGWN9$;cQ(TIt0VK?jGo5=_vzwD^r zX8qWClKhMDS!#T!{7KaZM!NYI@o5nA&<-{DrbzIw^ke5q@-O(H5dVTtAu-<&S1bQU zMgPFR>4lu9pdV^e&$rt7cjPEX@a6OGNQHmfujT!K^jy!6v$DwZ=%WG$$ZxMdDDdfR z#oq_ws52!fjo5L!z=$0^ftT8*8ZWgue;)|&C^WwtE>h!7LeCOv(f*Hsw*N!T37K%^oVl_Tg{-o*yBi;Oq__T|8XonhnQzZCT z`mysQ`4@aph=0MSkeF|XtCfG#qJQ9D&tg6vp&xws!JTp|+?kui{gO?syhQKlsXQ*% zq^4HF)7x^N=ZWhVMk)N8ypi|A7ZLrrS(TZ?6WizZt7r^g+_rA?KQCLoq4v+7*=qO1 zGgoh$aJgPtebuK+>a6X3=Fht(p80b>^K<(jHqNG)9R@C#-@pf2zDLz~Z%lPQo%?4D zPqWWvJn^&s(U2nKzYKTa4BX)r@rXXA;!fTFqUxi4y6f5u_uASUOU6Coc7EPtxJSjj zx8jcec~+>nZ%pG|XI-0dhwt%j6VPwFvyA-A`EQJ8*mL@E9>IAf73KVk^G)VX75B)M z{Jc`%+|)RSaAxVy7iShHH{`Rtp1)@bb?sW^ypmbM`;oef%g{1amU~|L<}!c%l>5eS zu=C2`owiB%4_If`)fdEX?D3L4N|tQSEE>35yg~HeZX}m%Y&~COT-7mWvVL+swT)Z1?!tBE zzYD=>hzH_>{0DQ#{eT*uNv%z@rpGYYi9M&_L%{r!UHD1QCTzleKXB)CHEYVxMa^g&Gph1@#97>${8OVv`c30pSWb^UPafQzy zyVrISFK7LzynGfBU*J=fRRpRC{P!UMUIq_?m)#F?UIt%Vd&b@j-g36{d#tGXXisH$ z`Loq-*NV=`m$QCUUY^^5?^%tr(b1}`B2YzOlR*Hy3?2qAhnI6+247nNnLMX)*4*ZK z)0!MrO2jvDaya%H_ss2_4dFSxMN%*9`FNM-!iMUDeUB`Hg18ck9O!@3ozVg z%;>k;-M5q00$D$5gsXd+h;UU_5!mz)!1)k73|BsroTh25<-TIk zFZ63*01ir&vL5igcrU^jr5@1mH19`bHJ5Hfm8ps4J=bODg9rH!NYt3mS>7=3Mfh&d z>x@q(vFB+$v-;HW!|SaueRt2*=I7Ij)&qbG=2`5I92cuS98>2BRUhrpT@PS*n$HL> zd7h=Vr_}?1GjR8=;~Vp!_R-^Xx#w9XJDb@B!ih zKak=*$2croQuX1m61cB&&Crx$@NUFPF^kXh*pc`zpwrkVj?y%=sPp zRpiNGHMyBwcn6+Gv2j~&?v&d`>bRGAR7T`c`zd);@HyTO&l)b>Uoi>k9INKb>^=uNAaKhV#()Kw4+>!{1y2s@>lQQIlm*X4PUR~uK)SY z=0m#1l-v5;=R1EZ@>iddzo!1e`_b@ME@Q8%vfTXj%)ia?zkb1#4VJ&&dHC9R!wn~! z{@wAm(Ff*?502fPhks#yKHL1<{s;AT;DUJue4rJ)L5(+co>2ACF5Udb@N~J(E1BO? z#QYUF19$Wb@krjN;!e#!srqPNC2+5;eYJGliO)a9ytm?x{`n#*?$q&0)knK@pH~=n zw7pPz9T4p(SK_>a^9ar>>GwJR;(QamS;f5)&v!1j?daH${AYJ#Yr@={Gp;h(~6Lio3HX^#U!I zi>ePxy6m-OqRC zb7odNDEe?bow&ChI5HQ~vXv5f8)%`48e2yF-l+_4&+HeRR4Kb7swg1@YkE z9-Z=hXX!`ACwra|IVfU+J|kA%JJpzA&isFSzB8LMYkJ=i4~kq|A_YYB$n2cS`pNU8 zJl`2>18aQHn#f&he5g4sRUhrrz4m15i`l`yl)QI>c9bhweAvB?SZiYKnfZjDORy%j z+KtXtuWg(-^Yl>J7dDzkv)49u7%2bc19I*8l~{WopsYQU|I7Q~`H0K*k5yUj+VkKO z9`#3mf5rw|doCULcKyo>Mw@$9bK+Z{_ty#5xGWv`FZ1(#3hrrv2Z0ObneSg57ppxS zQ|Ad)AMMb+_GEavTz9XA{XBM(A9VZ{siEyr0%zbJO>^844~sh&wI)f`M|&!Pdu{EH zCFAZPUQ-I3fjjsB@jyQzsn;e__0f(>;J#?!o+f|chpi|I{{)G+183k4PlyMOA^CGH zYmRjK;6|!G+EE$YCzp(Sgor!Nb5`8ZKdYqjGgTk$>1NhbbnXqabLEdUdzZ{JXh*pc zc@**{Z1{p7LzbIIUA_Oa{yWaxX@lia{RWKj_Zx7YnJ3lMUG?>7GY3$A`VBbH{QT^q zc@*#{G|z&+QR7XWCscj(Qa8UbJk9rA*1>+UJjz4NqcH9Y;hwx`M~oZn7pY;BrDxOlrmzq}?Z-=@-fyUj0B7Ky7JPtsWZG5Sse8Lree|*te5%w#MJ8%Z> z@QZkaE?04->QOk)S#d}IQdg+BQ~8;yk9O%^C$e*8 zuM6(z6n^h`wxGzHkVj=)JdVh(&`-$Fn>>%2*wQk4V&hq}9X?vn#q?`B48U@EQszTP_rL}B zpJ;x*wfVXI56&yVqtHCFYE$P4RUhrq&2J1(m+P9GeT((iA0xzTh%x?vJH{dUXO;CW zXU%SIYIXcrN2)&B!*JKRPGn=a=Qo{mkHi!+q`(=tqhE*zjv*N@;ddvJst=!)zKta_tun9==!3_z;o#Rj+#2fqyVRxBtO;1-M|IHFW2= z*lW?BIlHl*S32-?%`Z8B3sUQk0%zbJ6XO!`u;NdB<}6ho?a}>gM2359?OUteJ9pBv z5wm{O6>0T-Z-{VJRuS0r5Wx8mJPck25{1r-)Mw68_0hgc@baR81LN-9I*FIFepFtr zKC>1PuF5I`n;rt-Wvth%yj%zo>NBZOU@Z-6b>jB5qVqsrAlf&9R=)+!6*n=PM-?%>doqnAk2h&_y z?Li;*BEla0ctn5O`*Hly-_QX2ct9WaQo>$P$ndGW9m#=QKi$ZWqdV~9p4Rav^kC1k zg}_hz9sSHq5_UvbRyANC@`9{e=yChT<= z_Vy6=dfMBAKJ2B0y`Yf5%{__h`*z|oJ=xwK^kL7_Ti_?`!4BFPKAzk04&l-|UZ4+q zL17PmFit}AxPE3kE*s9~(i&gr!(K$#gP+tDJdO>w2zfP^-rKme+JipqrG&j8fU#k{{aJgFfs9g+2HQiuPra!j5QP!;ALzpbvWy zVGn++_Rzl68hd-thrN`r7ZeihiXFxEV}Io`a*Vw_=)<08OM#!T2Rq;e?{VBtaEiS> z=)+!6*n=PR7rce|hQ7472YuL!2z&5jwFmq%U)kG(KJ2B0y`YfbXWuWlKKR*llD$3X z!yfkk;Rklw@8J5;lerAtX>Skuuoo296TlDbU|%|O7q^4!HLUXk`mh%f_Tb0&1lLd2 z^Z6fL$&cF`?D+utu$L0{f=TLil(1$%d%MpH%w?wbz`o2+IwqI*+5Bjhd5$%H?@C%-G2Y$h`9`nYZ(1*R0 zIEEk057@)}z%wPS_Mi`YcxGrs*bSY_$1m)8FXhL0_Nvt$^kFY3owyQ|m-FM)V_aJEA?U-Nr=OU= z!XEOp_EY%yNQJqKO|u^_(1*RCum?ZLPt#{`edMRUS@!mz4|@?|4}QQ`um`^K{L;;7^)V}sP_V%C;d!GIRKVc8&4d9m<#_dFA*xQ3X>;;8A_`!Jt_OSkNhwSY^ zANC@`9{eC52Y$%Mqb>IKpbvW~VJ|2o)(dD~cD>MKZx8yg=NTaID`GD-#oiwDVJ|4` z!4KNy9?kW`Gr3IfYi|$wuon^b;3s=Nf<19Q3hrlb5Bji|683^ZVx5Kd#l(6r>9e;7 zec1DCC-4*Yyq9u4*o(CDW8VQ>TKNF_uoo2e;0Naq*u(iFdZ2y#pbvWyVGn*VKhRFh z5BFvE_Mi`YDPb=tq<0?YIq-fY%#UN|7vMjk2YVimz)$==-J;qH&gI7q7uwr{KI{dB zy=*(h`Yrr4*T?!J_zXX`@;&rnFCy&057r;CIM>JeBa*PU2YuK}341{y(JtVaUd8RW z&$hP*ec1C16!-~yu!Hj);t^@Gw+DUL3krMigMK0|-siZT0JiKUhcO{!`S~ zaNm30_!IXX!yfKKh9A^jU@x|mw+r`kTkSy~_EN%rP)O7}VGs3A+&6Bu2YuMXJCEQ8 zc^}>-f@fso-BDJ1(1*RCc&7~fpdJBxs7K(PNLG8$hrNif2R~V!5_uc)({Q_ee4!6} zDPb=tB=SGB5BVS7DP(OQ^kL5<-dzMgsEeb{hW&upmGwvZuDHP?>UIe_VeuRK_B)a!XEs<4%U~ki@BX>z}_D8VJ{`@ z1%|vb`d*MFZPUu2=d(elyps)u&Sogx7=X!3Z;UX@r z`4IGBFCy&0Pv~;42Yab2`Ejbv-X8Q}FD2{+g+v|%yU5oX7I1sk`2l^{^N8!?;U^X4 zde}D$KEjWaH`?2SKI{dBJ@~=C8{TmlTE^`}AGfy$eb|c#d+-B0;Ay>j z_ATV7$ltqO)5X=p{Em6ofVf}4~)%VQ=HAhYnV*(f2n^YiyotZ-esJz9XMC-kjgZym#vH zy6+!-Q}J1fT^8@|<`>b=E6v!maofc;zTn%*?0hTmGRaZFt8dpdF8EjJ|oxaH->*mo|E+qbgtUojTYPrI>z*kdgC zynHNRj99Jf9t-T+B_}`mW1*{S?zfj5IH2ErM`OYB{3!99XZzNC(`AUUa-X;3@7a>HLoFh`lub&ro zakUw5FL|$i@^vrzZ`@@wGZx;uzN0;X#|QmEnWM+F%x$fiJ*Q<_(_D?L;Bs{fjR*`o z|LH)FXU{N}eACAqi{<@bETEruV*#QU=hF!P04tAi4c^T$GW*XB=- z8hgScR~+bMEJXgX{(NEBr~MLB{&Z%2Xzbp8W2=ihc%kjhJ>$h{}ScRUu*PrI>z*kdfD_U2;&VRsW)K#@rqX zU+0`7tk98;TVqX$>6fiBT&|U?Gn1X?j_9Y|SU~JC7GnGGv4AmR?SSsF;PmAeFk*Xi*@yYsPte%g%%#2#ZIGn$VDj1g<|y@TbN^0=ls zE%O{cenIFCA2HI|t3lbbO<451xPBCC%FUE}&?6&xKOnue{20>OFY9qk-~gFCDH``p ze>iTgQ6{)t$vT!VSasO(=~L&;n9(%HS*Pp_ioYdK+RI3uG{o>tA8q~{Ve&(HKP+FE zVh(oT(PsW`H}-uueY8XF-w&HLdtPgKu9R<6^0^HIk6U))hD{}wXq`0sl+ z|Jm5Pd5zhI-OPVAj`b1>b^y!{Y?+WY0Tl@3ix8?S86*5|1SR{v`6>%@zLjjOG1+j2^^~A&a^32^=7o zKUiZtc;dpM{9DYf)6bVbc)PLu!Q0F>3^4!ob$$^Y8Kp zmzp^CGup+tu$y)8&1Cdz8vjZ^cAg~vVtf{gPxuHmK2-js>H{O){EPT_#5}Y^4ZbN7 z{44#~d6N7KJ}AV$;8RGs^yL<(_T*r`)rhzg)X) zoJ}#;JHVsR{7xS+Xp`XIx&;i&{{EyG7k0BQ7h^9m|CN61JW2k=_$(BkhT)q={)_ko z#XPh_EjK<+e+U0cKX#rZ|AG$+@h|uk67vmlweoLF^bhSoTG z&M%g5_7WtfFE-b$E=oFP{L7y~`laCCEfoHZ93uL0nBd*RRf%hg@38f=Ar7NUAmub&G2-!%{OC-pWLb{{w8JgGw1p56w@?t2JT@oE)kE^Q!4J% zcYILw(ep~+K4V5>$+)Kp>kfuHa0c$^7vjj0}=?e&%s&aNDn^%h+3(Ob#)eMj+r zKqimo$B@>3S&xGP2gnhZFOPes+z>BTZ>iMzY{ccGj1iX)H#}3eGyiQ{Ft4}v1IL(W zz@yMS!}lSn^=hg<+M&DNJ>v2aCXW4$s2CS&Rsye5dcSv`@3ZSYq#rv^vfhI6S!#T! z^=hg<5Yk=mMtpo?9@?P>-xSH_1&fdLW9LcMTfhf}>Mh_?NX$3H)mm?fi2i|plP7SV zg1)tHp>|$xVegFQ_bWN8w{*O7nsCFDthan2>MeZ~{tZv!{YXz1{W)Hh<G|YPFlWiRYb@np!E_d@fU8 zZ1XvLfPl<9zY=-pmP+0k{RQub=OixMPgZ5Qd8cvE5Tk3)oz1vxn0>y!4?S)4eQ2?n zR~}q{=H~f%XWx-4jlLsqEt+=%7tAx@gE%+5|IW6#85nh*Q1#I+-TO@pPnWCoywkfi ze^vp~N0cYS2eZ(X7fr>kIpN^`J_EiG+88c2UncqUh{Z-6+EAHrDw05hFc3)fP zyMq~bJl?(Y&MP>N;Jo6S#`zcL8{iMAy`DVE*{yc@_2jLT^GfP8-Vex7BR_^je+tRW zRQ`R)r| zsy^DIyPo{?-MgAN9&a>=aiOku;Z@4$&$N27^ke5q){`+lON|e;9!%8-Lb~h8h)+t) zLp#*qnN!3R`bo1|+M;MkD_}j&}u$y)8&7^lT=XpJw-_nnrC&|AU zpQXl!%AZtyV5FOW5g(73hjysJH${Sfr5`&_l7GPmh4>eI3W@oKxLWx)Ecyrjjka>0 zg1)tH-dlKGg;Z2AjdFdnrsC{!3Rf=|uAc_~ZlmyT@C@FM~C^#;r+ZyJwIb{d|6`gBX=a8{LpJW`C-4j{CDxL%M!osbDQ}LCi@@o zFL1&9PM*nefmZnEPu1sVl+E<8#N}Z`eOS}IuQYedWr=Yg^f%mNI%!`i>qnj6l^QR= zttzVsR1w&C5dbfPhr!Fivp6qiq7aQ?DHljli^58{FN1ZRu+ zBgRp(s~R7F)9ltzO5!@qC%X47SbQ35aUw0MvLt5sX)kv5ZRDJYZcRtB@>#f1N8}6~4luu^;sPp2uL+d7tak!=eHdR?g zpo+kMCj!V=!y;#9ZaIMtp1jNo_o zG(W$mc#RXdV4h{p=D5IBEPd**+!05uQBw8MF5Nllihj!y@AnvKxa&G8C(Zhi+{gM> zsqq5bscl*WQm*UZ&P4sro=vcMWZ;OO_?ZzF2F7ME_N` zgjXq}-#M?*u)TljC(n~oLqj|eAJ4COd=R(D$7+12HA<>J5Yio=*HD;?sVfm_K41xj$9oL#c)1;`eBM0df*J)k#8d&;m=gusWnQfK5*2XPcq(W^N%;&4V{!vX8ox1qFUob zgsZZOz@~>lHlGxA5AZUO0AHs+S9zIQqonGieY$I$Y@PpluX@AVcgs$xaY{dumk|@x zpsX=L--BPOF`?EdsrqP_?iwerV;#^bISQ+BqNa%&XYdN18>04!enQ6X=htx_%D2Fs zJ(R^XCiKk&*B8Bx6S!cWc`xC(puM4kdn@+~@_AC@ z>}E65C{-Wr(tW+dfxlgx81a`aa&RoNRwLf037mm@i@W1mxxn4Aex-1a zeZDv`pvP7v?3c@1NV8B*X3+})RP+!2q^_Ma%%UkTitk&+zmj`b^rJL8W5O}Wq0 zTmN|X_HcgR2*VvX19$K+;*r|H7I&wwP6p37)|a@CcjbsKnBf5}F z&yA`qH-B{vTR#4a-#%#0hxO;LV$YR){<7l!+C$3{uibt}V#rOW8AEP5B4=LmZ{Cwx zmbfRpv}pbcTrkg~S8-h6Fa4o8`0h_~YG)`xZ_#+(&g%O*QLBuH9MR zDm7k!TUAyOs3NfOB7nRTJPcm;UBh`9d>u@yyiDC=r|JVy-Fv{BH7`qaKj~=0Bl@qh zCA>fWKuC9d{<<#D%9!GNPjY zd8om$klz2$;v@a!c~atocpyH$>&5)RJo;FT4|R{7st=fSuiIFB*1UW|PJX!lItAKM zt^{uZXW))}8}W#KqT){7W2fq)pStr&##;@4J;`uS?xcJ&>qngz)jfJdxGJj%YR-lJ#h{M&Cn)o8f1i`bW|-1)G(*$L@K@-kwA8k99A z=)31YyFDy?TE65p&hquF8oFzoypHuhosy%l8YgO+sBy-A$8$sM)m!_kyT&;}TaB~7 zQsWHW%=?jA%4NeHsw}(4`TfKRpZ)P#GcN0|aZYP#Zkb~RO~dhbW0xhq8+J!x>^m>V z$G#IapLweOteSUsV%4{|7Oimt7tFKNB905Jg?g#nN3Bs(_0cZfIq6H6-JLk(^?T#) z6FVs<&H9nt$NJXV6h;@TvWh?zflUknE!Fr?Ym`)dz@+=yLl&Paj$M_L zAFh8*7y7|@4SI@c8aM-Y~1bNush_mob`C$oOkc~Px# zBEnT!MPSoIAe&E$x(9d}NPw>++o-%utx;0-(LUWZPPWb;_5Mq7?_WEo#wq->sH#5>lbxuwy{YYL$Opr5J zV}ia%j#Ohp%_*t+XqWDsv?K4hxLc>~yCVlhP8wd$b2a3u=qF_GTk-DbX>*#IW;wn! z-ZiO1-|?;SIqx_^PP(0vlP2%u{eTSqo*$6WN^9eCt@J=A>5# zS0=9Z#S(wK>LTNUoqm-wK6qr-b~_-k_To`Rb5h_@Xr2Z8elRFEC!I8{vAGGscOa?y z(&cy;yJt1i-TIuYLz-J0JT#x-dBH8`8$K~EBqK?WI(}pP#;#$PesVpvjWb`P!Cs{y z-=!higZN;)qAkg7)%Z~Nxn7u(-q?>g4?u9L@uvBU*$pJOD&e9c7-K6OaMNBYV0 zr0nk?9*7Ux0DkfHSK~w7KcniSeU*sMA0KElg5rFUhZ-CcCE_Ff~6rNd7xhJ<9nk_%QDWWcm@&FCne{vL1&84v_AT#v~5iCB0`Di+k?@YxwEj2#Wcb-!9fspQZrXoH;F%RufgKvt=@@3YKohSLu zRPaHeccy|*Au-<&*RGZ`8kcvd`q;WZg53<89XyQ|HZ?TCVLE4WyPG?y#+~(}&hL)#(lq__Cg+b`0Yp_$sZQ|SJ@I?rA%+`{F!j9&LjQgdCIO+r%?U@uAiMsQN%icYNmWa!Zde_ZkaJlS?|J>cffdXBDvcj68HwPJWo1&A}^Og13M(a7Vt4cm(%Vai?B~ zOVvlub?1|ew;uN&?RU@VqZ?!Pm(# zDlb#7!=>t@eY&riVC(!-E|}=|{oJin-X|daNM1%v!lDLcjS2eh^QkeRUh_cJN4s=i zGr{Xv|I;Zs3afFVrimJ-_c@*$#&T+|=qr=@_n6AQgtwzPa*qk`6WCsXZiOb`;Xfu@$lwfZm>P3{uf@G=)dk7vkfi&hc};_Gd}EEpZ_<^GvHBZ zo>?`idqh-yv`6zh((9(J)ubOgPjZh5Sz^9OyZ-}dPj|qGW{tdk-ct`9tS^K7+ zf1NFe^7(fMg@4`8^L{`^{=|}DN&Gnppxuk>T*N%AkoXQ}a_@+Vav z80qF;#K$e>p&e@QO_AVV>Br8K5Yio=wpCXqdfd8$KPLL0hZ-CU86~b;q@O%bN_-Fx#HZm^F@MB3O08Do zL*1jN>H{X-d;BauEB4whCqJz09zSpf?#QOzF8vWmc_hd?%;6m<{qGLQgY#}Xi-J$|;%f4^~SzwesP zc`kzVBY7Dy@roLhH74l0_c=8t)IEBtKH8;wkDu4E26jr0!uI%4(?pFk`2o)jQTs$c zA+^^yoozAYJQo2q&YhGRXZQ`?kMuvd48CuXW!5-%`bE;%YuAZIYn+YKrp-GGU}==S ze}847_bu&-$bez~$bj)VU~I5eY8t= zPWr+33liH79Orjm(n&dK){o>q*0)NH7vNTvRRpRCY`h2{{{at!m&0#!UIt&sUQv0O zTBD@u15w>Iw6UjOnRxQJvHqawzsi>IDy5fL&nEqV|@PfJIEW>UqcHKYn;;0`s0ImAU@&u#QYKCDDpQoKGYf|RUh$T z>j(C{r{H$h=RHjdHBN6T`_)z~K3~37o0A`|KR)R%XzwEc&cGe{HsaxaO~svBqonEs zcis6Ux4v5((5o z(_Q0a>-?Si?d=b~+Br2&=|}Q1VuBi!H74kL@Cx-h25OCxs*iT*u5t1@)|irW6ttsU z$#7>iPSi9}<81hx=Z2_#TJ6T}=g)pUl<+PBW>e@}&6j*Euj9nCns!!doY4zBm zGjMPJH^&|E@Fi_=cXpGX#NDxerEtIU+H(`L=Wky!?r9?Kz!|t_KH|6|9?|D*ad)`$ zk{$1k^(F4(T{_pkj6Y@%8Bj9rXh*pc=X2l;+`+?$hvx-b+-uAAhwlrXajXwJy05G1 z81K(+(`mQ^XW)*0As+27+TuPM-z!%N+#Tz~pKjb4zh8dcmYs$>@(U~O=wD`y9q!H_ z(8qCiu8(%<&R;unluqIqmcJrjMgH3U4d-{{wdg0L{`)|kQI5P16npf8l>F8ECGQ7h z>??i@iT)Il4FU(q7i+$YkNM!+4R#;si#1{6#hO-Q%m;J*V?H=LXI>WSf%-xSH_1-lPl`mysQ?*j!N6uJ)-d}DN&GwCHhvr_u8^CbBfT*N%AlFpb-CpPa!ei5LYYzCPn|iznLD%?O7!Y z`qsW_zed$r`kQl&D(bhpDEu4!f%C1Wo9It>Ra*O1?6`;jjd*&@H`!`Rw$@ zVz!)o-ot;Q(Zd*Nq{lS*(__xb%YU!?WW3=&@9m<`+6OL}-=3d1PH0p3ksXx#38~kZ zQuWa;-PaVv7fm*%?H~5Luj!;~3bKCG`Q0&IrZzXtnvR}UWfg%c0-Fi~s7ru{!OPK~ zIWL2+(~qjWOufdGs*m{Sz6SE5{z0SH+ z}chWzduJ1L*c`cdaa^;!Ffa8*_j*z^zpFN24{%RmBrom{ByCsVI6rRt-7y01}X z>-@7u&+vPFopX(<^dos0F=-byC~Hj6ci)X_O!yu>J}qBT_2E(X9zU;RwRB33!uI%4 z(?pHaw*}7)QTs$cA@%Pu?F-XoNx8>_8s}i8#+llT_X9GtIX{Lh<}A~Te;@LM1s|^- zcHiA*4Y6$kd!J~b8fP)PPCq|k!QA)>3#P?~-RCui-M5=jt{u!X;8AFvS?yByh^YE# zkM2FD6Be9lVmZWU5aU8J5Sz^9OyZ-}dPj|qGW{ta&}ct`9tS^K7)e@9UH7wzu>X!%{IJi{(G(9UXryR zI0pX$k5cD1l|QNaXuod$z2LE%OdQ{gw~KLMH|yY=N$+>g?-5}0Tl%r{B>5NPv()%d z`ID*-jCAua;^PtX&<-{DrbzIw^ke5q@-O(H5dVTtAu-<&S1bR9MgPFRvHqN=pl|J) zcK#hb#_FP^W10W{M?7nPH-&$LeR)41)7$c6$YM^y0td)DPw5#yr2ez|4VC}idCKMS zJ5RaDY(umEkows<>!V^l;h%$lfk&zHo64V5ee_N@|K54Zd=txA{-hWecC!w?nGE%& z<-gL8ohQk^7@wuahsvK+ePE=Ue-WRcn1^<#!8b*Mf2AKgPm+JZ2Zi_-d^O9c?$a0zG>&*T5A3a{@q>S-^g~nACTUG{20>OFY9qk-~jnrW>5bG7u{Dh z|2^HjXl6$Fk8iQM&pUoC6ZOBAxz}vN-o^zN?diDw06YrK@7R?e?U1`GN99kdK7i28 zzprKPF|izKxW%}zn|1KbWaw*J{ww|1d6N8#@mVN7-mBI4Q2CRp4~%s4FX9ss^Uw}8 z_@+qkuk>T*N%AlFpb-CpPa!ei5LYYzW<>wMzrGsIQ_#2eO*{XNbas)e%ztr@*ARt& zQ#3S&uV=`1c``M-KA0-Z!l%|F$-Tt){dbCy%_Q=HKLzx0zVJA8!!j!fw{VHT*N%AlFpb-CpPa!ei5LYYzf^WgU;oSxAWY0Tl@AUI8 zHU9^w>S1s@dRU+^g;<{RQ_<=?RAANV)67w0MH zTl=P+e@8fboQ=$XGot?MRroi!2k!@D+RKk2t^KkdhXoFhFYkVy|Hm7ysV`RlZJpCN zYi{$rX-%_QttLswFYo??|K;6(GTX4F`LD0@`meyH(EJYV{MjZ^e|UNKA59#$_9w-- zu$y(c0rP%I<6r5=&XeR{jL$;xNexotL*-AZJ}}bFzlcvz%tJfW;F}`BztWGLC&|Cy zgF^fZK83XMkClI8qJQAu^cc=l(6{zY`#rYKw%=U6x^!`^TgR|kC-`?yg?}T%ct6~u zMSu2HrL|whj$=bkt7{InoBWG+U9)S@@_*RVyIan#IkItf{%4fG#D=_E_rUXa)u)z! zRo@)!lgGc`?b%TOL%*eF`|N+%IGbV?c7Y4#w|h9p1zO%+uia6p|K@qZH%pTn>piy9 zeLd^{bz*P7dr2qV6Or|!&hNP$<3;;$DJ?kFZ&eYfBCtUb055}w!OM|-I4^^*BfF`* zOua{zst?e5y2hL5;4Us-FY9|O4s)~u`SYSL>aJS2xj!uWud*e)(k1dP=_kjNyTiV6 z4=3V*_;^S1_#kfXA!>Z6_sCN9fspR_jPm}YZrkg6_}!xaIjF&<7K!*sKRKRk;)8e~ zK9Nyk{)llDocFhFbMqSNJ+f4NfTa5#TNaQ-s3-QB*XGj!zadtWF&Z0WvD0Z9s}ve&Xe3@!uTvT zKGZ!TsymC#M7W^BU zAb3aYHCg+npMR;((FXqxRruF^Fz*LsWE?++wD!w->=igbUe$85f8pw`MfrE`w8rKp zt1%77SAFgYT=n_Dz{1rR8w*$e#xef_k5cD1l|QNafKE66Ue&^|yvPWPabY*>;G0P= zk$9kEkj z)w*sb?}~z`RkpBV~%_WXHO04P5f`Zwz;|lWMYAKkEE$ZEQpr ztFnqf6@g6*0q`<-7`)tY2^i+McM|XU-pL9#$)2WvlG131#)ZkdiC^0_L zPo5_wK8Oe6({PxWKiP4lHjKJQPt`|jbno%A_}sAMvYhpKW%u}jGjK<~jd-A+kkmbT zsy^DGJD+5{^~x>3HQWz$Qa+jWqt1)!bF>lRs;nZg=^>EKCq>-@ybL73*Eoix?$J~A z(GJ~v{A`{7v+D}OcmJrZ`I)eC=fm!1C!`}LEo*Cx<^mdM|*Vd@$)*? z{7%VH*d9M>ny7Imf5CG@)IQNqNZmEg5&Oe(c{0Doxwlf|3?I$=kv^WwU{ICid2_i| zO}X9wW!pLN_fGbi_X-t$j<)$2t8z`3^!-&+b_uL%8yW~dvxV_x+vjnsQv0k?f!)>~ zQnbbiTrkhl$8cO=&$Dpv{<$nbtx;0-(JtLN={7G64y^t4mvQ%_os^Si{YdU(edFWB z95i#$)2gf@P(@%+y=co@7KK92J;_`3ZDm6xeCN~%8Mqq~MS^^;u!_qo512Sxu? zwuDzHqr|;`=_k*VQbR*L5Fhts9v{Rle3KdK#8Yiz~b?KBGh1EDw(?pHaeHzaVQTs$cA+=veKgwB=Q{KmfXXOo7YMjxN zct0S0r|@G)^rw(ap31)u`TNNO14CnPoAu2N^RB?(_q#dp`-L}~Z8*t4Gh{J}?$bj-iNqty9L;G4-Pk$^w>S1s@dRU+^g;<{RQ_eI z3W@oKxLWzQUGxw9o1DdY3i{T*>E~bSv--ak{5w+N-_V)7ACQ@5ehgWRf7=BPkmn7Z z5g765@S^-%sdrU1e|%S<`OLcmJ%9akyyvgK%e%(P8Yk;9_!oGTI=`v>N!3R`bn|cX zP=@8&cuI^5yIBX{OorCd_*eR|^CbBf~r0*-h1m zPe{x|JJjHtBEi4XkDVvUzu<#H{0lyX#C$_st^Au5{R98HTRBfb-`Y3r{5xW#)kR6i zvi^Ylca*}v(b>EokiI$mI4g_fzsb4$`;gNPIw`RH)4hxGZ%K`J@TKE^S`;|${KbKu z=dX?TJpU`l{0lrvo!?acr0N4I-TZspK@7|9;vO+B>}DN&Ga34k#=p{!ohQk^7@wua zhsvK+ePEW-yIlIw=D4S zb-yq^zV3e<*B^jKsq>r4pHzK}KHdB~q$|Vn1S2TMh25-!ZziL}{8#$1^CbBf_IvqvhXoc)`qa!j@vbUwo%K7FJYM?UZv#sozs|ge>%I6FXB@HG z>TBtZmj{*(V4vInp#A_{Fux<`aa`=RT&_v2ji;9vS=AC%AJ*7)M(mv^!R@T;TlRLa zrm~+J#_)8xYI4>Q>)Q=5>%V=RKQCp9X&N}UnZGkn?h82XhzI%!>1@>wZI_Fx4@6$YxF=sN} zt>=$Jnp+ynf3Gi_Gi!R^9S@8C+l^!u31>&yIg|C1>#1$rx^)+>Gyh$P_#hsLk6YwF zm^;>1OlobKHEm|I_0J_AQ}yAfGIQpsc>3i|y0$y(N5%&+K@1QR^ck_jF(l@Uvzr&xRL ztE@fK?Ytk!E4cJsX^}Ud3$)|~Od zTRQCgM+3utdaCH!6S!cW1uy5gSo@1(>O7(9qaC`}o(xZyYiQ|f&+nb@y-YFZ8E^*f z7?+3#`Uy$BH;Af_c2olQMFWp78TV+0hC6Tu?&ufdfn!MOnw_eTc2olQH4EBG$DMGk z9UJf9TPyD9pH)(Mf~t@9u>1YlH5|HXT#U2tbag8kceJBi$?`3BKF9eR=kxUSoZoSt zx7yXdmp9U9by3o>yq4m7aXufToX^{@;r)R0T*r?gi`9~&0tZM}T~lD{#NyWySL%6T zUv#-E@WpTL3jFJb&5eKkz}`((-VfF_z@yZ8M%{~}>Z6ys_wv4&z_8rR$Xttj#+(f6 z`3VvDjoqsy{p77{%ui+g4CAxZ_)z!asQQ3R_g)_2(=O(r9cu7Rkyv+1KX#tvULN?M z&|V(+6cY0daqTJ^3;s=u{(*nJH}mlbeQV$J^KaSPcpXj3=imJl{!QM%`vDoei6282 zL6;Y|m{G4m`KTIf3~nWa9Hr_#)^0Y>klpG58mF6q?`OW7Kz_ zQu&jrkKX9!-{-Cfn^=Am_la>~H|yY=$uYWME>hj_}9Id_X9Grgdal|<6p190rJV4_6+>1F|9M$;Up zTlZGDv&Z$n8xyGi-F|^Ro;%#wlf2AKgPm+HzJ`2SsHeHPml|QNaz(_a$B0ddb9@?P>-xLY{m456z zN&W>N6yjg-DJ13_;%epJsOTT~Hy!0X1$}GZH1n_3e96Z$|6MEc-vbo>ZNH261JbjM zA43-7->AR=vhU>W1FwHQv?%{p>R#q<-qC?>-hBi2-tblY-Wxu0Tz>!_h30qrsp|Zu z@+Vav141|dc8iWSvHUEaxtos*yIBX{Oh$?PEB)AclKhMDStvf4)71D-`ID*-jCAua z;?pkXp&e@QO_AVV>Br8K5$o9lEbC zV0gM*6Ia8&-K>+JnfG$^qTR~@oPm4v_Z)Y`Bi9%Eoq9bCRUhrC1n#x9D@(>bm5h6uh&%ENEAHr@RZ`E3 zRDHCE;jZ)gF_xn&ojrUN>=!$)%I}r;8_S#7^<&6ak-sLN;rx!g)@s!~l;^LLCLKq} zUd?-4Cmlz)L&@cm`Rl(${yJ94UmG41{rCfy!9S|9-2AomYJ$5qNGusA&EQTrkgKk8@nCamF!qo>2AC4&D65@HDR~C_Rtr zN;{teXW;IQaoiCP^b?Yre^T|)j!NKOTl;XyxO<7X183kKd4l7Pc%Yw<)cljGk9Jf7 z_eBG{mwY~t5^)F4z}@{6#~txNKOyr74Ih*!srqnJ8Qk|N8Fw!+j{?rXJ-m|Rj(DJ- zkktH>s*iS52KN(7#yw43uK{P^o)∨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%0DpOAr_f2Uy%U4=+~&;fUhb&5{L^N;c%tfr3m(jB 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

3)9Y^m{^APQTBz;hm0IKYgm` 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 begin_frame: # Cap frames to timeline bounds + begin_frame = self.beginFrame + if self.endFrame > end_frame: + end_frame = self.endFrame + return begin_frame, end_frame + + def ExportBoneSampledAnimation(self, poseBone, scene, o, action): # This function exports bone animation as full 4x4 matrices for each frame. currentFrame = scene.frame_current currentSubframe = scene.frame_subframe + # Frame range + begin_frame, end_frame = self.get_action_framerange(action) + animationFlag = False m1 = poseBone.matrix.copy() - for i in range(self.beginFrame, self.endFrame): + for i in range(begin_frame, end_frame): scene.frame_set(i) m2 = poseBone.matrix if (ArmoryExporter.MatricesDifferent(m1, m2)): @@ -656,28 +669,28 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): tracko['time'] = {} tracko['time']['values'] = [] - for i in range(self.beginFrame, self.endFrame): - tracko['time']['values'].append(((i - self.beginFrame) * self.frameTime)) + for i in range(begin_frame, end_frame): + tracko['time']['values'].append(((i - begin_frame) * self.frameTime)) - tracko['time']['values'].append((self.endFrame * self.frameTime)) + tracko['time']['values'].append((end_frame * self.frameTime)) tracko['value'] = {} tracko['value']['values'] = [] parent = poseBone.parent if (parent): - for i in range(self.beginFrame, self.endFrame): + for i in range(begin_frame, end_frame): scene.frame_set(i) tracko['value']['values'].append(self.WriteMatrix(parent.matrix.inverted() * poseBone.matrix)) - scene.frame_set(self.endFrame) + scene.frame_set(end_frame) tracko['value']['values'].append(self.WriteMatrix(parent.matrix.inverted() * poseBone.matrix)) else: - for i in range(self.beginFrame, self.endFrame): + for i in range(begin_frame, end_frame): scene.frame_set(i) tracko['value']['values'].append(self.WriteMatrix(poseBone.matrix)) - scene.frame_set(self.endFrame) + scene.frame_set(end_frame) tracko['value']['values'].append(self.WriteMatrix(poseBone.matrix)) o['animation']['tracks'] = [tracko] @@ -1325,7 +1338,7 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): # If an object is used as a bone, then we force its type to be a bone. boneRef[1]["objectType"] = kNodeTypeBone - def ExportBoneTransform(self, armature, bone, scene, o): + def ExportBoneTransform(self, armature, bone, scene, o, action): curveArray = self.CollectBoneAnimation(armature, bone.name) animation = ((len(curveArray) != 0) or (ArmoryExporter.sampleAnimationFlag)) @@ -1341,7 +1354,6 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): if (parentPoseBone): transform = parentPoseBone.matrix.inverted() * transform - o['transform'] = {} #if (animation): @@ -1350,7 +1362,7 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): o['transform']['values'] = self.WriteMatrix(transform) if ((animation) and (poseBone)): - self.ExportBoneSampledAnimation(poseBone, scene, o) + self.ExportBoneSampledAnimation(poseBone, scene, o, action) def ExportMaterialRef(self, material, index, o): if material == None: @@ -1475,7 +1487,7 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): self.ExportObjectTransform(bobject, scene, o) # Viewport Camera - overwrite active camera matrix with viewport matrix - if type == kNodeTypeCamera and bpy.data.worlds[0].ArmPlayViewportCamera: + if type == kNodeTypeCamera and bpy.data.worlds[0].ArmPlayViewportCamera and bobject.name == self.scene.camera.name: viewport_matrix = self.get_viewport_view_matrix() if viewport_matrix != None: o['transform']['values'] = self.WriteMatrix(viewport_matrix.inverted()) @@ -1483,29 +1495,41 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): o['local_transform_only'] = True if (bobject.type == "ARMATURE"): - skeleton = bobject.data # Armature data - if (skeleton): - armatureid = utils.safe_filename(skeleton.name) - o['bones_ref'] = 'bones_' + armatureid + armdata = bobject.data # Armature data + if (armdata): + # Reference start action + if bobject.edit_actions_prop: + action = bpy.data.actions[bobject.start_action_name_prop] + else: # Use default + action = bobject.animation_data.action + armatureid = utils.safe_filename(armdata.name) + o['bones_ref'] = 'bones_' + armatureid + '_' + action.name - # TODO: use option_mesh_per_file - fp = self.get_meshes_file_path(o['bones_ref']) - assets.add(fp) + # Write bones + if armdata.edit_actions: + export_actions = [] + for t in my_actiontraitlist: + export_actions.append(t.name) + else: # Use default + export_actions = [action] - if bobject.data.armature_cached == False or not os.path.exists(fp): - bones = [] - for bone in skeleton.bones: - if (not bone.parent): - boneo = {} - self.ExportBone(bobject, bone, scene, boneo) - #o.objects.append(boneo) - bones.append(boneo) - - # Save bones separately - bones_obj = {} - bones_obj['objects'] = bones - utils.write_arm(fp, bones_obj) - bobject.data.armature_cached = True + for action in export_actions: + armdata.animation_data.action = action + fp = self.get_meshes_file_path('bones_' + armatureid + '_' + action.name) + assets.add(fp) + if armdata.armature_cached == False or not os.path.exists(fp): + bones = [] + for bone in armdata.bones: + if (not bone.parent): + boneo = {} + self.ExportBone(bobject, bone, scene, boneo, action) + #o.objects.append(boneo) + bones.append(boneo) + # Save bones separately + bones_obj = {} + bones_obj['objects'] = bones + utils.write_arm(fp, bones_obj) + armdata.armature_cached = True if (parento == None): self.output['objects'].append(o) @@ -1544,9 +1568,6 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): boneArray = armature.data.bones boneCount = len(boneArray) - #self.IndentWrite(B"ref\t\t\t// ") - #self.WriteInt(boneCount) - for i in range(boneCount): boneRef = self.FindNode(boneArray[i].name) if (boneRef): @@ -1554,16 +1575,12 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): else: oskel['bone_ref_array'].append("null") - # Write the bind pose transform array. + # Write the bind pose transform array oskel['transforms'] = [] - - #self.IndentWrite(B"float[16]\t// ") - #self.WriteInt(boneCount) - for i in range(boneCount): oskel['transforms'].append(self.WriteMatrix(armature.matrix_world * boneArray[i].matrix_local)) - # Export the per-vertex bone influence data. + # Export the per-vertex bone influence data groupRemap = [] for group in bobject.vertex_groups: @@ -2149,8 +2166,23 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): o['type'] = 'perspective' else: o['type'] = 'orthographic' + + if objref.is_mirror: + o['is_mirror'] = True + o['mirror_resolution_x'] = int(objref.mirror_resolution_x) + o['mirror_resolution_y'] = int(objref.mirror_resolution_y) + + o['frustum_culling'] = objref.frustum_culling + o['pipeline'] = objref.pipeline_path + '/' + objref.pipeline_path # Same file name and id - self.cb_export_camera(objref, o) + if 'Background' in bpy.data.worlds[0].node_tree.nodes: # TODO: parse node tree + background_node = bpy.data.worlds[0].node_tree.nodes['Background'] + col = background_node.inputs[0].default_value + strength = background_node.inputs[1].default_value + o['clear_color'] = [col[0] * strength, col[1] * strength, col[2] * strength, col[3]] + else: + o['clear_color'] = [0.0, 0.0, 0.0, 1.0] + self.output['camera_datas'].append(o) def ExportSpeaker(self, objectRef): @@ -2286,14 +2318,14 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): self.output = {} - scene = context.scene - originalFrame = scene.frame_current - originalSubframe = scene.frame_subframe + self.scene = context.scene + originalFrame = self.scene.frame_current + originalSubframe = self.scene.frame_subframe self.restoreFrame = False - self.beginFrame = scene.frame_start - self.endFrame = scene.frame_end - self.frameTime = 1.0 / (scene.render.fps_base * scene.render.fps) + self.beginFrame = self.scene.frame_start + self.endFrame = self.scene.frame_end + self.frameTime = 1.0 / (self.scene.render.fps_base * self.scene.render.fps) self.bobjectArray = {} self.meshArray = {} @@ -2322,18 +2354,21 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): self.cb_preprocess() - for bobject in scene.objects: + for bobject in self.scene.objects: if (not bobject.parent): self.ProcessBObject(bobject) self.ProcessSkinnedMeshes() + self.output['name'] = self.scene.name self.output['objects'] = [] - for object in scene.objects: + for object in self.scene.objects: if (not object.parent): - self.ExportObject(object, scene) + self.ExportObject(object, self.scene) if not ArmoryExporter.option_mesh_only: + self.output['camera_ref'] = self.scene.camera.name + self.output['material_datas'] = [] self.ExportMaterials() @@ -2342,16 +2377,16 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): self.output['world_datas'] = [] self.ExportWorlds() - self.output['world_ref'] = scene.world.name + self.output['world_ref'] = self.scene.world.name - self.output['gravity'] = [scene.gravity[0], scene.gravity[1], scene.gravity[2]] + self.output['gravity'] = [self.scene.gravity[0], self.scene.gravity[1], self.scene.gravity[2]] - self.ExportObjects(scene) + self.ExportObjects(self.scene) self.cb_postprocess() if (self.restoreFrame): - scene.frame_set(originalFrame, originalSubframe) + self.scene.frame_set(originalFrame, originalSubframe) # Write .arm utils.write_arm(self.filepath, self.output) @@ -2471,7 +2506,6 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): break def cb_export_object(self, bobject, o, type): - #return # Export traits o['traits'] = [] for t in bobject.my_traitlist: @@ -2481,24 +2515,6 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): if t.type_prop == 'Logic Nodes' and t.nodes_name_prop != '': x['type'] = 'Script' x['class_name'] = bpy.data.worlds[0].ArmProjectPackage + '.node.' + utils.safe_filename(t.nodes_name_prop) - elif t.type_prop == 'Animation': - x['type'] = 'Script' - x['class_name'] = 'armory.trait.internal.Animation' - names = [] - starts = [] - ends = [] - speeds = [] - loops = [] - reflects = [] - for at in t.my_animationtraitlist: - if at.enabled_prop: - names.append(at.name) - starts.append(at.start_prop) - ends.append(at.end_prop) - speeds.append(at.speed_prop) - loops.append(at.loop_prop) - reflects.append(at.reflect_prop) - x['parameters'] = [t.start_track_name_prop, names, starts, ends, speeds, loops, reflects] elif t.type_prop == 'JS Script' or t.type_prop == 'Python Script': x['type'] = 'Script' x['class_name'] = 'armory.trait.internal.JSScript' @@ -2551,7 +2567,37 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): x['parameters'] = [] for pt in t.my_paramstraitlist: # Append parameters x['parameters'].append(ast.literal_eval(pt.name)) - + o['traits'].append(x) + + # Animation trait + if self.is_bone_animation_enabled(bobject) or self.is_object_animation_enabled(bobject): + x = {} + x['type'] = 'Script' + x['class_name'] = 'armory.trait.internal.Animation' + if len(bobject.my_cliptraitlist) > 0: + # Edit clips enabled + names = [] + starts = [] + ends = [] + speeds = [] + loops = [] + reflects = [] + for at in bobject.my_cliptraitlist: + if at.enabled_prop: + names.append(at.name) + starts.append(at.start_prop) + ends.append(at.end_prop) + speeds.append(at.speed_prop) + loops.append(at.loop_prop) + reflects.append(at.reflect_prop) + x['parameters'] = [bobject.start_track_name_prop, names, starts, ends, speeds, loops, reflects, bpy.data.worlds[0].generate_gpu_skin_max_bones] + else: + # Export default clip, taking full action + if self.is_bone_animation_enabled(bobject): + begin_frame, end_frame = self.get_action_framerange(bobject.parent.animation_data.action) + else: + begin_frame, end_frame = self.get_action_framerange(bobject.animation_data.action) + x['parameters'] = ['default', ['default'], [begin_frame], [end_frame], [1.0], [True], [False], bpy.data.worlds[0].generate_gpu_skin_max_bones] o['traits'].append(x) # Rigid body trait @@ -2592,8 +2638,8 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): console_trait['class_name'] = 'armory.trait.internal.Console' console_trait['parameters'] = [] o['traits'].append(console_trait) - # Viewport camera enabled, attach navigation if enabled - if bpy.data.worlds[0].ArmPlayViewportCamera and bpy.data.worlds[0].ArmPlayViewportNavigation == 'Walk': + # Viewport camera enabled, attach navigation to active camera if enabled + if bobject.name == self.scene.camera.name and bpy.data.worlds[0].ArmPlayViewportCamera and bpy.data.worlds[0].ArmPlayViewportNavigation == 'Walk': navigation_trait = {} navigation_trait['type'] = 'Script' navigation_trait['class_name'] = 'armory.trait.WalkNavigation' @@ -2613,23 +2659,20 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): self.materialToObjectDict[mat] = [bobject] self.materialToGameObjectDict[mat] = [o] - def cb_export_camera(self, object, o): - #return - o['frustum_culling'] = object.frustum_culling - o['pipeline'] = object.pipeline_path + '/' + object.pipeline_path # Same file name and id - - if 'Background' in bpy.data.worlds[0].node_tree.nodes: # TODO: parse node tree - background_node = bpy.data.worlds[0].node_tree.nodes['Background'] - col = background_node.inputs[0].default_value - strength = background_node.inputs[1].default_value - o['clear_color'] = [col[0] * strength, col[1] * strength, col[2] * strength, col[3]] - else: - o['clear_color'] = [0.0, 0.0, 0.0, 1.0] + def is_object_animation_enabled(self, bobject): + # Checks if animation is present and enabled + if bobject.object_animation_enabled == False or bobject.type == 'ARMATURE' or bobject.type == 'BONE': + return False + if bobject.animation_data and bobject.animation_data.action: + return True + return False - def find_anim_trait(self, ob): - # Checks if animation trait is attached - for t in ob.my_traitlist: - if t.type_prop == 'Animation' and t.enabled_prop == True: + def is_bone_animation_enabled(self, bobject): + # Checks if animation is present and enabled for parented armature + if bobject.parent and bobject.parent.type == 'ARMATURE': + if bobject.parent.bone_animation_enabled == False: + return False + if bobject.parent.animation_data and bobject.parent.animation_data.action: return True return False @@ -2733,7 +2776,7 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): if ob.instanced_children or len(ob.particle_systems) > 0: defs.append('_Instancing') # GPU Skinning - if ob.find_armature() and self.find_anim_trait(ob) and bpy.data.worlds[0].generate_gpu_skin == True: + if ob.find_armature() and self.is_bone_animation_enabled(ob) and bpy.data.worlds[0].generate_gpu_skin == True: defs.append('_Skinning') # Billboarding if len(ob.constraints) > 0 and ob.constraints[0].target != None and \ @@ -2762,13 +2805,20 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): # Main probe world_generate_radiance = False defs = bpy.data.worlds[0].world_defs - if '_EnvTex' in defs: # Radiance only for texture - world_generate_radiance = bpy.data.worlds[0].generate_radiance generate_irradiance = True #'_EnvTex' in defs or '_EnvSky' in defs or '_EnvCon' in defs - envtex = bpy.data.cameras[0].world_envtex_name.rsplit('.', 1)[0] + irrtex = bpy.data.cameras[0].world_envtex_name.rsplit('.', 1)[0] + radtex = irrtex + + # Radiance + if '_EnvTex' in defs: + world_generate_radiance = bpy.data.worlds[0].generate_radiance + elif '_EnvSky' in defs and bpy.data.worlds[0].generate_radiance_sky: + world_generate_radiance = bpy.data.worlds[0].generate_radiance + radtex = 'hosek' + num_mips = bpy.data.cameras[0].world_envtex_num_mips strength = bpy.data.cameras[0].world_envtex_strength - po = self.make_probe('world', envtex, num_mips, strength, 1.0, [0, 0, 0], [0, 0, 0], world_generate_radiance, generate_irradiance) + po = self.make_probe('world', irrtex, radtex, num_mips, strength, 1.0, [0, 0, 0], [0, 0, 0], world_generate_radiance, generate_irradiance) o['probes'].append(po) if '_EnvSky' in defs: @@ -2793,17 +2843,17 @@ class ArmoryExporter(bpy.types.Operator, ExportHelper): texture_path = '//' + cam.probe_texture cam.probe_num_mips = write_probes.write_probes(texture_path, disable_hdr, cam.probe_num_mips, generate_radiance=generate_radiance) base_name = cam.probe_texture.rsplit('.', 1)[0] - po = self.make_probe(cam.name, base_name, cam.probe_num_mips, cam.probe_strength, cam.probe_blending, volume, volume_center, generate_radiance, generate_irradiance) + po = self.make_probe(cam.name, base_name, base_name, cam.probe_num_mips, cam.probe_strength, cam.probe_blending, volume, volume_center, generate_radiance, generate_irradiance) o['probes'].append(po) - def make_probe(self, id, envtex, mipmaps, strength, blending, volume, volume_center, generate_radiance, generate_irradiance): + def make_probe(self, id, irrtex, radtex, mipmaps, strength, blending, volume, volume_center, generate_radiance, generate_irradiance): po = {} po['name'] = id if generate_radiance: - po['radiance'] = envtex + '_radiance' + po['radiance'] = radtex + '_radiance' po['radiance_mipmaps'] = mipmaps if generate_irradiance: - po['irradiance'] = envtex + '_irradiance' + po['irradiance'] = irrtex + '_irradiance' else: po['irradiance'] = '' # No irradiance data, fallback to default at runtime po['strength'] = strength diff --git a/blender/nodes_renderpath.py b/blender/nodes_renderpath.py index ad480344..4de08618 100755 --- a/blender/nodes_renderpath.py +++ b/blender/nodes_renderpath.py @@ -796,13 +796,19 @@ def buildNodeTrees(shader_references, asset_references, assets_path): # Always include buildNodeTrees.linked_assets.append(buildNodeTrees.assets_path + 'brdf.png') - # Export selected pipeline - node_group = bpy.data.node_groups[bpy.data.cameras[0].pipeline_path] - buildNodeTree(node_group, shader_references, asset_references) + # Export pipeline for each camera + parsed_paths = [] + for cam in bpy.data.cameras: + # if cam.game_export + if cam.pipeline_path not in parsed_paths: + node_group = bpy.data.node_groups[cam.pipeline_path] + buildNodeTree(cam, node_group, shader_references, asset_references) + parsed_paths.append(cam.pipeline_path) return buildNodeTrees.linked_assets -def buildNodeTree(node_group, shader_references, asset_references): +def buildNodeTree(cam, node_group, shader_references, asset_references): + buildNodeTree.cam = cam output = {} dat = {} output['pipeline_datas'] = [dat] @@ -817,8 +823,8 @@ def buildNodeTree(node_group, shader_references, asset_references): dat['name'] = node_group_name # Store main context names - dat['mesh_context'] = bpy.data.cameras[0].mesh_context - dat['shadows_context'] = bpy.data.cameras[0].shadows_context + dat['mesh_context'] = buildNodeTree.cam.mesh_context + dat['shadows_context'] = buildNodeTree.cam.shadows_context dat['render_targets'], dat['depth_buffers'] = preprocess_pipeline(rn, node_group) dat['stages'] = [] @@ -878,7 +884,7 @@ def make_draw_meshes(stage, node_group, node): # Context context = node.inputs[1].default_value # Store shadowmap size - if context == bpy.data.cameras[0].shadows_context: + if context == buildNodeTree.cam.shadows_context: bpy.data.worlds[0].shadowmap_size = buildNode.last_set_target_w stage['params'].append(context) # Order @@ -889,7 +895,7 @@ def make_draw_decals(stage, node_group, node, shader_references, asset_reference stage['command'] = 'draw_decals' context = node.inputs[1].default_value stage['params'].append(context) # Context - bpy.data.cameras[0].last_decal_context = context + buildNodeTree.cam.last_decal_context = context def make_bind_target(stage, node_group, node, constant_name, currentNode=None, target_index=1): if currentNode == None: @@ -985,7 +991,7 @@ def make_draw_compositor(stage, node_group, node, shader_references, asset_refer if wrd.generate_fog: compositor_defs += '_CompoFog' compo_pos = True - if bpy.data.cameras[0].cycles.aperture_size > 0.0: + if buildNodeTree.cam.cycles.aperture_size > 0.0: compositor_defs += '_CompoDOF' compo_depth = True if compo_pos: @@ -1186,7 +1192,7 @@ def buildNode(stages, node, node_group, shader_references, asset_references): stencil_val = None if node.inputs[1].default_value == True: if node.inputs[2].is_linked: # Assume background color node is linked - color_val = bpy.data.cameras[0].world_envtex_color + color_val = buildNodeTree.cam.world_envtex_color else: color_val = node.inputs[2].default_value if node.inputs[3].default_value == True: @@ -1237,7 +1243,7 @@ def buildNode(stages, node, node_group, shader_references, asset_references): make_set_target(stage, node_group, node) stages.append(stage) # Bind targets - if node.inputs[2].is_linked or node.inputs[3].is_linked: + if node.inputs[2].is_linked or node.inputs[3].is_linked or node.inputs[4].is_linked: stage = {} stage['params'] = [] buildNode.last_bind_target = stage @@ -1390,14 +1396,14 @@ def get_root_node(node_group): for n in node_group.nodes: if n.bl_idname == 'BeginNodeType': # Store contexts - bpy.data.cameras[0].pipeline_id = n.inputs[0].default_value + buildNodeTree.cam.pipeline_id = n.inputs[0].default_value mesh_contexts = n.inputs[1].default_value.split(',') - bpy.data.cameras[0].mesh_context = mesh_contexts[0] + buildNodeTree.cam.mesh_context = mesh_contexts[0] if len(mesh_contexts) > 1: - bpy.data.cameras[0].mesh_context_empty = mesh_contexts[1] - bpy.data.cameras[0].shadows_context = n.inputs[2].default_value - bpy.data.cameras[0].translucent_context = n.inputs[3].default_value - bpy.data.cameras[0].overlay_context = n.inputs[4].default_value + buildNodeTree.cam.mesh_context_empty = mesh_contexts[1] + buildNodeTree.cam.shadows_context = n.inputs[2].default_value + buildNodeTree.cam.translucent_context = n.inputs[3].default_value + buildNodeTree.cam.overlay_context = n.inputs[4].default_value if n.inputs[5].default_value == False: # No HDR space lighting, append def bpy.data.worlds[0].world_defs += '_LDR' rn = findNodeByLinkFrom(node_group, n, n.outputs[0]) @@ -1408,16 +1414,16 @@ def preprocess_pipeline(root_node, node_group): render_targets = [] depth_buffers = [] preprocess_pipeline.velocity_def_added = False - bpy.data.cameras[0].pipeline_passes = '' + buildNodeTree.cam.pipeline_passes = '' traverse_pipeline(root_node, node_group, render_targets, depth_buffers) return render_targets, depth_buffers def traverse_pipeline(node, node_group, render_targets, depth_buffers): # Gather linked draw geometry contexts if node.bl_idname == 'DrawMeshesNodeType': - if bpy.data.cameras[0].pipeline_passes != '': - bpy.data.cameras[0].pipeline_passes += '_' # Separator - bpy.data.cameras[0].pipeline_passes += node.inputs[1].default_value + if buildNodeTree.cam.pipeline_passes != '': + buildNodeTree.cam.pipeline_passes += '_' # Separator + buildNodeTree.cam.pipeline_passes += node.inputs[1].default_value # Gather defs from linked nodes if node.bl_idname == 'TAAPassNodeType' or node.bl_idname == 'MotionBlurVelocityPassNodeType' or node.bl_idname == 'SSAOReprojectPassNodeType': diff --git a/blender/nodes_world.py b/blender/nodes_world.py index ac726577..7c2ed416 100755 --- a/blender/nodes_world.py +++ b/blender/nodes_world.py @@ -77,6 +77,10 @@ def buildNodeTree(world_name, node_group): if wrd.generate_shadows == False: wrd.world_defs += '_NoShadows' + # Percentage closer soft shadows + if wrd.generate_pcss: + wrd.world_defs += '_PCSS' + # Enable probes for cam in bpy.data.cameras: if cam.is_probe: @@ -166,7 +170,7 @@ def parse_color(node_group, node, context, envmap_strength_const): # Append LDR define if disable_hdr: bpy.data.worlds[0].world_defs += '_EnvLDR' - # Append radiance degine + # Append radiance define if generate_radiance: bpy.data.worlds[0].world_defs += '_Rad' @@ -191,5 +195,18 @@ def parse_color(node_group, node, context, envmap_strength_const): write_probes.write_sky_irradiance(base_name) + # Radiance + if bpy.data.worlds[0].generate_radiance_sky and bpy.data.worlds[0].generate_radiance: + bpy.data.worlds[0].world_defs += '_Rad' + + user_preferences = bpy.context.user_preferences + addon_prefs = user_preferences.addons['armory'].preferences + sdk_path = addon_prefs.sdk_path + assets.add(sdk_path + 'armory/Assets/hosek/hosek_radiance.hdr') + for i in range(0, 8): + assets.add(sdk_path + 'armory/Assets/hosek/hosek_radiance_' + str(i) + '.hdr') + + bpy.data.cameras[0].world_envtex_num_mips = 8 + # Adjust strength to match Cycles envmap_strength_const['float'] *= 0.25 diff --git a/blender/props.py b/blender/props.py index 2f38da9b..cbc0cf09 100755 --- a/blender/props.py +++ b/blender/props.py @@ -5,6 +5,8 @@ import json import nodes_renderpath from bpy.types import Menu, Panel, UIList from bpy.props import * +from traits_clip import * +from traits_action import * import utils def on_scene_update(context): @@ -15,10 +17,6 @@ def on_scene_update(context): elif edit_obj.type == 'ARMATURE': edit_obj.data.armature_cached = False - for text in bpy.data.texts: - if text.is_updated: - print('ASDASDASDASDASD') - def invalidate_shader_cache(self, context): # compiled.glsl changed, recompile all shaders next time fp = utils.get_fp() @@ -91,6 +89,16 @@ def initProperties(): bpy.types.Object.override_material_name = bpy.props.StringProperty(name="Name", default="") bpy.types.Object.game_export = bpy.props.BoolProperty(name="Export", default=True) bpy.types.Object.spawn = bpy.props.BoolProperty(name="Spawn", description="Auto-add this object when creating scene", default=True) + # - Clips + bpy.types.Object.bone_animation_enabled = bpy.props.BoolProperty(name="Bone Animation", default=True) + bpy.types.Object.object_animation_enabled = bpy.props.BoolProperty(name="Object Animation", default=True) + bpy.types.Object.edit_tracks_prop = bpy.props.BoolProperty(name="Edit Clips", description="A name for this item", default=False) + bpy.types.Object.start_track_name_prop = bpy.props.StringProperty(name="Start Track", description="A name for this item", default="") + bpy.types.Object.my_cliptraitlist = bpy.props.CollectionProperty(type=ListClipTraitItem) + bpy.types.Object.cliptraitlist_index = bpy.props.IntProperty(name="Index for my_list", default=0) + # - Actions + bpy.types.Object.edit_actions_prop = bpy.props.BoolProperty(name="Edit Actions", description="A name for this item", default=False) + bpy.types.Object.start_action_name_prop = bpy.props.StringProperty(name="Start Action", description="A name for this item", default="") # For mesh bpy.types.Mesh.mesh_cached = bpy.props.BoolProperty(name="Mesh Cached", default=False) bpy.types.Mesh.mesh_cached_verts = bpy.props.IntProperty(name="Last Verts", default=0) @@ -99,6 +107,10 @@ def initProperties(): bpy.types.Curve.static_usage = bpy.props.BoolProperty(name="Static Usage", default=True) # For armature bpy.types.Armature.armature_cached = bpy.props.BoolProperty(name="Armature Cached", default=False) + # Actions + bpy.types.Armature.edit_actions = bpy.props.BoolProperty(name="Edit Actions", default=False) + bpy.types.Armature.my_actiontraitlist = bpy.props.CollectionProperty(type=ListActionTraitItem) + bpy.types.Armature.actiontraitlist_index = bpy.props.IntProperty(name="Index for my_list", default=0) # For camera bpy.types.Camera.frustum_culling = bpy.props.BoolProperty(name="Frustum Culling", default=True) bpy.types.Camera.pipeline_path = bpy.props.StringProperty(name="Render Path", default="deferred_path") @@ -117,6 +129,9 @@ def initProperties(): bpy.types.Camera.probe_volume = bpy.props.StringProperty(name="Volume", default="") bpy.types.Camera.probe_strength = bpy.props.FloatProperty(name="Strength", default=1.0) bpy.types.Camera.probe_blending = bpy.props.FloatProperty(name="Blending", default=0.0) + bpy.types.Camera.is_mirror = bpy.props.BoolProperty(name="Mirror", default=False) + bpy.types.Camera.mirror_resolution_x = bpy.props.FloatProperty(name="X", default=512.0) + bpy.types.Camera.mirror_resolution_y = bpy.props.FloatProperty(name="Y", default=256.0) # TODO: move to world bpy.types.Camera.world_envtex_name = bpy.props.StringProperty(name="Environment Texture", default='') bpy.types.Camera.world_envtex_num_mips = bpy.props.IntProperty(name="Number of mips", default=0) @@ -127,7 +142,8 @@ def initProperties(): bpy.types.Camera.world_envtex_ground_albedo = bpy.props.FloatProperty(name="Ground Albedo", default=0.0) bpy.types.Camera.last_decal_context = bpy.props.StringProperty(name="Decal Context", default='') bpy.types.World.world_defs = bpy.props.StringProperty(name="World Shader Defs", default='') - bpy.types.World.generate_radiance = bpy.props.BoolProperty(name="Radiance Probes", default=True, update=invalidate_shader_cache) + bpy.types.World.generate_radiance = bpy.props.BoolProperty(name="Probe Radiance", default=True, update=invalidate_shader_cache) + bpy.types.World.generate_radiance_sky = bpy.props.BoolProperty(name="Sky Radiance", default=False, update=invalidate_shader_cache) bpy.types.World.generate_clouds = bpy.props.BoolProperty(name="Clouds", default=False, update=invalidate_shader_cache) bpy.types.World.generate_clouds_density = bpy.props.FloatProperty(name="Density", default=0.5, min=0.0, max=10.0, update=invalidate_shader_cache) bpy.types.World.generate_clouds_size = bpy.props.FloatProperty(name="Size", default=1.0, min=0.0, max=10.0, update=invalidate_shader_cache) @@ -167,6 +183,8 @@ def initProperties(): bpy.types.World.generate_ssr_falloff_exp = bpy.props.FloatProperty(name="Falloff Exp", default=5.0, update=invalidate_shader_cache) bpy.types.World.generate_ssr_jitter = bpy.props.FloatProperty(name="Jitter", default=0.6, update=invalidate_shader_cache) bpy.types.World.generate_ssr_texture_scale = bpy.props.FloatProperty(name="Texture Scale", default=0.5, min=0.0, max=1.0, update=invalidate_shader_cache) + bpy.types.World.generate_pcss = bpy.props.BoolProperty(name="PCSS", description="Percentage Closer Soft Shadows", default=False, update=invalidate_shader_cache) + # Compositor bpy.types.World.generate_letterbox = bpy.props.BoolProperty(name="Letterbox", default=False, update=invalidate_shader_cache) bpy.types.World.generate_letterbox_size = bpy.props.FloatProperty(name="Size", default=0.1, update=invalidate_shader_cache) bpy.types.World.generate_grain = bpy.props.BoolProperty(name="Film Grain", default=False, update=invalidate_shader_cache) @@ -175,6 +193,7 @@ def initProperties(): bpy.types.World.generate_fog_color = bpy.props.FloatVectorProperty(name="Color", size=3, subtype='COLOR', default=[0.5, 0.6, 0.7], update=invalidate_shader_cache) bpy.types.World.generate_fog_amounta = bpy.props.FloatProperty(name="Amount A", default=0.25, update=invalidate_shader_cache) bpy.types.World.generate_fog_amountb = bpy.props.FloatProperty(name="Amount B", default=0.5, update=invalidate_shader_cache) + # Skin bpy.types.World.generate_gpu_skin = bpy.props.BoolProperty(name="GPU Skinning", default=True, update=invalidate_shader_cache) bpy.types.World.generate_gpu_skin_max_bones = bpy.props.IntProperty(name="Max Bones", default=50, min=1, max=84, update=invalidate_shader_cache) # For material @@ -246,6 +265,47 @@ class ObjectPropsPanel(bpy.types.Panel): if obj.override_material: layout.prop(obj, 'override_material_name') + if obj.type == 'ARMATURE': + layout.prop(obj, 'bone_animation_enabled') + if obj.bone_animation_enabled: + layout.prop(obj, 'edit_actions_prop') + if obj.edit_actions_prop: + layout.prop_search(obj, "start_action_name_prop", obj.data, "my_actiontraitlist", "Start Action") + else: + layout.prop(obj, 'object_animation_enabled') + + if (obj.type == 'ARMATURE' and obj.bone_animation_enabled) or (obj.type != 'ARMATURE' and obj.object_animation_enabled): + layout.prop(obj, 'edit_tracks_prop') + if obj.edit_tracks_prop: + layout.prop_search(obj, "start_track_name_prop", obj, "my_cliptraitlist", "Start Clip") + # Tracks list + layout.label("Clips") + animrow = layout.row() + animrows = 2 + if len(obj.my_cliptraitlist) > 1: + animrows = 4 + + row = layout.row() + row.template_list("MY_UL_ClipTraitList", "The_List", obj, "my_cliptraitlist", obj, "cliptraitlist_index", rows=animrows) + + col = row.column(align=True) + col.operator("my_cliptraitlist.new_item", icon='ZOOMIN', text="") + col.operator("my_cliptraitlist.delete_item", icon='ZOOMOUT', text="") + + if len(obj.my_cliptraitlist) > 1: + col.separator() + col.operator("my_cliptraitlist.move_item", icon='TRIA_UP', text="").direction = 'UP' + col.operator("my_cliptraitlist.move_item", icon='TRIA_DOWN', text="").direction = 'DOWN' + + if obj.cliptraitlist_index >= 0 and len(obj.my_cliptraitlist) > 0: + animitem = obj.my_cliptraitlist[obj.cliptraitlist_index] + row = layout.row() + row.prop(animitem, "start_prop") + row.prop(animitem, "end_prop") + layout.prop(animitem, "speed_prop") + layout.prop(animitem, "loop_prop") + layout.prop(animitem, "reflect_prop") + # Menu in modifiers region class ModifiersPropsPanel(bpy.types.Panel): bl_label = "Armory Props" @@ -281,6 +341,11 @@ class DataPropsPanel(bpy.types.Panel): layout.prop_search(obj.data, "probe_volume", bpy.data, "objects") layout.prop(obj.data, 'probe_strength') layout.prop(obj.data, 'probe_blending') + layout.prop(obj.data, 'is_mirror') + if obj.data.is_mirror == True: + layout.label('Resolution') + layout.prop(obj.data, 'mirror_resolution_x') + layout.prop(obj.data, 'mirror_resolution_y') layout.prop(obj.data, 'frustum_culling') layout.prop_search(obj.data, "pipeline_path", bpy.data, "node_groups") layout.operator("arm.reimport_paths_menu") @@ -292,6 +357,33 @@ class DataPropsPanel(bpy.types.Panel): layout.prop(obj.data, 'lamp_clip_end') layout.prop(obj.data, 'lamp_fov') layout.prop(obj.data, 'lamp_shadows_bias') + elif obj.type == 'ARMATURE': + layout.prop(obj.data, 'edit_actions') + if obj.data.edit_actions: + # Actions list + layout.label("Actions") + animrow = layout.row() + animrows = 2 + if len(obj.data.my_actiontraitlist) > 1: + animrows = 4 + + row = layout.row() + row.template_list("MY_UL_ActionTraitList", "The_List", obj.data, "my_actiontraitlist", obj.data, "actiontraitlist_index", rows=animrows) + + col = row.column(align=True) + col.operator("my_actiontraitlist.new_item", icon='ZOOMIN', text="") + col.operator("my_actiontraitlist.delete_item", icon='ZOOMOUT', text="") + + if len(obj.data.my_actiontraitlist) > 1: + col.separator() + col.operator("my_actiontraitlist.move_item", icon='TRIA_UP', text="").direction = 'UP' + col.operator("my_actiontraitlist.move_item", icon='TRIA_DOWN', text="").direction = 'DOWN' + + if obj.data.actiontraitlist_index >= 0 and len(obj.data.my_actiontraitlist) > 0: + item = obj.data.my_actiontraitlist[obj.data.actiontraitlist_index] + item.name = item.action_name_prop + row = layout.row() + row.prop_search(item, "action_name_prop", bpy.data, "actions", "Action") class ScenePropsPanel(bpy.types.Panel): bl_label = "Armory Props" @@ -379,6 +471,8 @@ class WorldPropsPanel(bpy.types.Panel): wrd = bpy.context.world layout.prop(wrd, 'generate_shadows') layout.prop(wrd, 'generate_radiance') + if wrd.generate_radiance: + layout.prop(wrd, 'generate_radiance_sky') layout.prop(wrd, 'generate_clouds') if wrd.generate_clouds: layout.prop(wrd, 'generate_clouds_density') @@ -409,7 +503,8 @@ class WorldPropsPanel(bpy.types.Panel): layout.prop(wrd, 'generate_ssr_falloff_exp') layout.prop(wrd, 'generate_ssr_jitter') layout.prop(wrd, 'generate_ssr_texture_scale') - + layout.prop(wrd, 'generate_pcss') + layout.label('Compositor') layout.prop(wrd, 'generate_letterbox') if wrd.generate_letterbox: diff --git a/blender/start.py b/blender/start.py index 15505350..4c439e5e 100755 --- a/blender/start.py +++ b/blender/start.py @@ -3,20 +3,22 @@ import nodes_logic import nodes_renderpath import nodes_world import exporter -import traits_animation +import traits_action +import traits_clip import traits_params import traits import props import lib.drop_to_ground def register(): + traits_action.register() + traits_clip.register() props.register() project.register() nodes_logic.register() nodes_renderpath.register() nodes_world.register() exporter.register() - traits_animation.register() traits_params.register() traits.register() lib.drop_to_ground.register() @@ -27,8 +29,9 @@ def unregister(): nodes_renderpath.unregister() nodes_world.unregister() exporter.unregister() - traits_animation.unregister() traits_params.unregister() traits.unregister() props.unregister() + traits_action.unregister() + traits_clip.unregister() lib.drop_to_ground.unregister() diff --git a/blender/traits.py b/blender/traits.py index 4bcd98d4..e13c66b0 100755 --- a/blender/traits.py +++ b/blender/traits.py @@ -2,7 +2,6 @@ import shutil import bpy import os import json -from traits_animation import * from traits_params import * from bpy.types import Menu, Panel, UIList from bpy.props import * @@ -27,15 +26,14 @@ class ListTraitItem(bpy.types.PropertyGroup): ('Python Script', 'Python Script', 'Python Script'), ('JS Script', 'JS Script', 'JS Script'), ('Bundled Script', 'Bundled Script', 'Bundled Script'), - ('Logic Nodes', 'Logic Nodes', 'Logic Nodes'), - ('Animation', 'Animation', 'Animation') + ('Logic Nodes', 'Logic Nodes', 'Logic Nodes') ], name = "Type") - data_prop = bpy.props.StringProperty( - name="Data", - description="A name for this item", - default="") + # data_prop = bpy.props.StringProperty( + # name="Data", + # description="A name for this item", + # default="") class_name_prop = bpy.props.StringProperty( name="Class", @@ -52,17 +50,9 @@ class ListTraitItem(bpy.types.PropertyGroup): description="A name for this item", default="") - start_track_name_prop = bpy.props.StringProperty( - name="Start Track", - description="A name for this item", - default="") - my_paramstraitlist = bpy.props.CollectionProperty(type=ListParamsTraitItem) paramstraitlist_index = bpy.props.IntProperty(name="Index for my_list", default=0) - my_animationtraitlist = bpy.props.CollectionProperty(type=ListAnimationTraitItem) - animationtraitlist_index = bpy.props.IntProperty(name="Index for my_list", default=0) - class MY_UL_TraitList(bpy.types.UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): # We could write some code to decide which icon to use here... @@ -71,7 +61,7 @@ class MY_UL_TraitList(bpy.types.UIList): # Make sure your code supports all 3 layout types if self.layout_type in {'DEFAULT', 'COMPACT'}: layout.prop(item, "enabled_prop") - layout.label(item.name, icon = custom_icon) + layout.label(item.name, icon=custom_icon) elif self.layout_type in {'GRID'}: layout.alignment = 'CENTER' @@ -239,7 +229,7 @@ class ToolsTraitsPanel(bpy.types.Panel): col.operator("my_traitlist.move_item", icon='TRIA_DOWN', text="").direction = 'DOWN' if obj.traitlist_index >= 0 and len(obj.my_traitlist) > 0: - item = obj.my_traitlist[obj.traitlist_index] + item = obj.my_traitlist[obj.traitlist_index] # Default props row = layout.row() row.prop(item, "type_prop") @@ -299,40 +289,6 @@ class ToolsTraitsPanel(bpy.types.Panel): row = layout.row() row.prop_search(item, "nodes_name_prop", bpy.data, "node_groups", "Tree") - # Animation - elif item.type_prop == 'Animation': - item.name = item.type_prop - row = layout.row() - row.prop_search(item, "start_track_name_prop", item, "my_animationtraitlist", "Start Track") - # Tracks list - layout.label("Tracks") - animrow = layout.row() - animrows = 2 - if len(item.my_animationtraitlist) > 1: - animrows = 4 - - row = layout.row() - row.template_list("MY_UL_AnimationTraitList", "The_List", item, "my_animationtraitlist", item, "animationtraitlist_index", rows=animrows) - - col = row.column(align=True) - col.operator("my_animationtraitlist.new_item", icon='ZOOMIN', text="") - col.operator("my_animationtraitlist.delete_item", icon='ZOOMOUT', text="") - - if len(item.my_animationtraitlist) > 1: - col.separator() - col.operator("my_animationtraitlist.move_item", icon='TRIA_UP', text="").direction = 'UP' - col.operator("my_animationtraitlist.move_item", icon='TRIA_DOWN', text="").direction = 'DOWN' - - if item.animationtraitlist_index >= 0 and len(item.my_animationtraitlist) > 0: - animitem = item.my_animationtraitlist[item.animationtraitlist_index] - - row = layout.row() - row.prop(animitem, "start_prop") - row.prop(animitem, "end_prop") - layout.prop(animitem, "speed_prop") - layout.prop(animitem, "loop_prop") - layout.prop(animitem, "reflect_prop") - # Registration def register(): bpy.utils.register_module(__name__) diff --git a/blender/traits_action.py b/blender/traits_action.py new file mode 100755 index 00000000..81d7b77f --- /dev/null +++ b/blender/traits_action.py @@ -0,0 +1,131 @@ +import shutil +import bpy +import os +import json +from bpy.types import Menu, Panel, UIList +from bpy.props import * + +class ListActionTraitItem(bpy.types.PropertyGroup): + # Group of properties representing an item in the list + name = bpy.props.StringProperty( + name="Name", + description="A name for this item", + default="") + + enabled_prop = bpy.props.BoolProperty( + name="", + description="A name for this item", + default=True) + + action_name_prop = bpy.props.StringProperty( + name="Action", + description="A name for this item", + default="") + +class MY_UL_ActionTraitList(bpy.types.UIList): + def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): + # We could write some code to decide which icon to use here... + custom_icon = 'OBJECT_DATAMODE' + + # Make sure your code supports all 3 layout types + if self.layout_type in {'DEFAULT', 'COMPACT'}: + layout.prop(item, "enabled_prop") + layout.label(item.name, icon=custom_icon) + # layout.prop(item, "name", text="", emboss=False, icon=custom_icon) + + elif self.layout_type in {'GRID'}: + layout.alignment = 'CENTER' + layout.label("", icon = custom_icon) + +class LIST_OT_ActionTraitNewItem(bpy.types.Operator): + # Add a new item to the list + bl_idname = "my_actiontraitlist.new_item" + bl_label = "Add a new item" + + def execute(self, context): + trait = context.object.data + trait.my_actiontraitlist.add() + trait.actiontraitlist_index = len(trait.my_actiontraitlist) - 1 + return{'FINISHED'} + + +class LIST_OT_ActionTraitDeleteItem(bpy.types.Operator): + # Delete the selected item from the list + bl_idname = "my_actiontraitlist.delete_item" + bl_label = "Deletes an item" + + @classmethod + def poll(self, context): + """ Enable if there's something in the list """ + trait = context.object.data + return len(trait.my_actiontraitlist) > 0 + + def execute(self, context): + trait = context.object.data + list = trait.my_actiontraitlist + index = trait.actiontraitlist_index + + list.remove(index) + + if index > 0: + index = index - 1 + + trait.actiontraitlist_index = index + return{'FINISHED'} + + +class LIST_OT_ActionTraitMoveItem(bpy.types.Operator): + # Move an item in the list + bl_idname = "my_actiontraitlist.move_item" + bl_label = "Move an item in the list" + direction = bpy.props.EnumProperty( + items=( + ('UP', 'Up', ""), + ('DOWN', 'Down', ""),)) + + @classmethod + def poll(self, context): + """ Enable if there's something in the list. """ + trait = context.object.data + return len(trait.my_actiontraitlist) > 0 + + + def move_index(self): + # Move index of an item render queue while clamping it + trait = context.object.data + index = trait.actiontraitlist_index + list_length = len(trait.my_actiontraitlist) - 1 + new_index = 0 + + if self.direction == 'UP': + new_index = index - 1 + elif self.direction == 'DOWN': + new_index = index + 1 + + new_index = max(0, min(new_index, list_length)) + index = new_index + + + def execute(self, context): + trait = context.object.data + list = trait.my_actiontraitlist + index = trait.actiontraitlist_index + + if self.direction == 'DOWN': + neighbor = index + 1 + #queue.move(index,neighbor) + self.move_index() + + elif self.direction == 'UP': + neighbor = index - 1 + #queue.move(neighbor, index) + self.move_index() + else: + return{'CANCELLED'} + return{'FINISHED'} + +def register(): + bpy.utils.register_module(__name__) + +def unregister(): + bpy.utils.unregister_module(__name__) diff --git a/blender/traits_animation.py b/blender/traits_clip.py similarity index 70% rename from blender/traits_animation.py rename to blender/traits_clip.py index 27f39185..d84c3736 100755 --- a/blender/traits_animation.py +++ b/blender/traits_clip.py @@ -5,7 +5,7 @@ import json from bpy.types import Menu, Panel, UIList from bpy.props import * -class ListAnimationTraitItem(bpy.types.PropertyGroup): +class ListClipTraitItem(bpy.types.PropertyGroup): # Group of properties representing an item in the list name = bpy.props.StringProperty( name="Name", @@ -43,7 +43,7 @@ class ListAnimationTraitItem(bpy.types.PropertyGroup): default=False) -class MY_UL_AnimationTraitList(bpy.types.UIList): +class MY_UL_ClipTraitList(bpy.types.UIList): def draw_item(self, context, layout, data, item, icon, active_data, active_propname, index): # We could write some code to decide which icon to use here... custom_icon = 'OBJECT_DATAMODE' @@ -58,46 +58,46 @@ class MY_UL_AnimationTraitList(bpy.types.UIList): layout.alignment = 'CENTER' layout.label("", icon = custom_icon) -class LIST_OT_AnimationTraitNewItem(bpy.types.Operator): +class LIST_OT_ClipTraitNewItem(bpy.types.Operator): # Add a new item to the list - bl_idname = "my_animationtraitlist.new_item" + bl_idname = "my_cliptraitlist.new_item" bl_label = "Add a new item" def execute(self, context): - trait = context.object.my_traitlist[context.object.traitlist_index] - trait.my_animationtraitlist.add() - trait.animationtraitlist_index = len(trait.my_animationtraitlist) - 1 + trait = context.object + trait.my_cliptraitlist.add() + trait.cliptraitlist_index = len(trait.my_cliptraitlist) - 1 return{'FINISHED'} -class LIST_OT_AnimationTraitDeleteItem(bpy.types.Operator): +class LIST_OT_ClipTraitDeleteItem(bpy.types.Operator): # Delete the selected item from the list - bl_idname = "my_animationtraitlist.delete_item" + bl_idname = "my_cliptraitlist.delete_item" bl_label = "Deletes an item" @classmethod def poll(self, context): """ Enable if there's something in the list """ - trait = context.object.my_traitlist[context.object.traitlist_index] - return len(trait.my_animationtraitlist) > 0 + trait = context.object + return len(trait.my_cliptraitlist) > 0 def execute(self, context): - trait = context.object.my_traitlist[context.object.traitlist_index] - list = trait.my_animationtraitlist - index = trait.animationtraitlist_index + trait = context.object + list = trait.my_cliptraitlist + index = trait.cliptraitlist_index list.remove(index) if index > 0: index = index - 1 - trait.animationtraitlist_index = index + trait.cliptraitlist_index = index return{'FINISHED'} -class LIST_OT_AnimationTraitMoveItem(bpy.types.Operator): +class LIST_OT_ClipTraitMoveItem(bpy.types.Operator): # Move an item in the list - bl_idname = "my_animationtraitlist.move_item" + bl_idname = "my_cliptraitlist.move_item" bl_label = "Move an item in the list" direction = bpy.props.EnumProperty( items=( @@ -107,15 +107,15 @@ class LIST_OT_AnimationTraitMoveItem(bpy.types.Operator): @classmethod def poll(self, context): """ Enable if there's something in the list. """ - trait = context.object.my_traitlist[context.object.traitlist_index] - return len(trait.my_animationtraitlist) > 0 + trait = context.object + return len(trait.my_cliptraitlist) > 0 def move_index(self): # Move index of an item render queue while clamping it - trait = context.object.my_traitlist[context.object.traitlist_index] - index = trait.animationtraitlist_index - list_length = len(trait.my_animationtraitlist) - 1 + trait = context.object + index = trait.cliptraitlist_index + list_length = len(trait.my_cliptraitlist) - 1 new_index = 0 if self.direction == 'UP': @@ -128,9 +128,9 @@ class LIST_OT_AnimationTraitMoveItem(bpy.types.Operator): def execute(self, context): - trait = context.object.my_traitlist[context.object.traitlist_index] - list = trait.my_animationtraitlist - index = trait.animationtraitlist_index + trait = context.object + list = trait.my_cliptraitlist + index = trait.cliptraitlist_index if self.direction == 'DOWN': neighbor = index + 1 diff --git a/blender/write_data.py b/blender/write_data.py index 56391b8d..2c10322f 100644 --- a/blender/write_data.py +++ b/blender/write_data.py @@ -123,7 +123,12 @@ class Main { f.write(""" kha.System.init({title: projectName, width: projectWidth, height: projectHeight, samplesPerPixel: projectSamplesPerPixel}, function() { iron.App.init(function() { - new armory.Scene(projectScene); + var raw = iron.data.Data.getSceneRaw(projectScene); + var scene = iron.Scene.create(raw); + scene.addTrait(new armory.trait.internal.PhysicsWorld(raw.gravity)); + iron.App.notifyOnRender(function(g:kha.graphics4.Graphics) { + iron.Scene.active.renderFrame(g); + }); }); }); } diff --git a/blender/write_probes.py b/blender/write_probes.py index c6041b7e..0b342d6a 100644 --- a/blender/write_probes.py +++ b/blender/write_probes.py @@ -8,240 +8,244 @@ import utils import assets def add_irr_assets(output_file_irr): - assets.add(output_file_irr + '.arm') + assets.add(output_file_irr + '.arm') def add_rad_assets(output_file_rad, rad_format, num_mips): - assets.add(output_file_rad + '.' + rad_format) - for i in range(0, num_mips): - assets.add(output_file_rad + '_' + str(i) + '.' + rad_format) + assets.add(output_file_rad + '.' + rad_format) + for i in range(0, num_mips): + assets.add(output_file_rad + '_' + str(i) + '.' + rad_format) # Generate probes from environment map def write_probes(image_filepath, disable_hdr, cached_num_mips, generate_radiance=True): - if not os.path.exists('build/compiled/Assets/envmaps'): - os.makedirs('build/compiled/Assets/envmaps') - - base_name = image_filepath.rsplit('/', 1)[1].rsplit('.', 1)[0] # Extract file name without extension - - # Assets to be generated - output_file_irr = 'build/compiled/Assets/envmaps/' + base_name + '_irradiance' - if generate_radiance: - output_file_rad = 'build/compiled/Assets/envmaps/' + base_name + '_radiance' - rad_format = 'jpg' if disable_hdr else 'hdr' + if not os.path.exists('build/compiled/Assets/envmaps'): + os.makedirs('build/compiled/Assets/envmaps') + + base_name = image_filepath.rsplit('/', 1)[1].rsplit('.', 1)[0] # Extract file name without extension + + # Assets to be generated + output_file_irr = 'build/compiled/Assets/envmaps/' + base_name + '_irradiance' + if generate_radiance: + output_file_rad = 'build/compiled/Assets/envmaps/' + base_name + '_radiance' + rad_format = 'jpg' if disable_hdr else 'hdr' - # Assume irradiance has to exist - if os.path.exists('build/compiled/Assets/envmaps/' + base_name + '_irradiance.arm'): - # Cached assets - add_irr_assets(output_file_irr) - if generate_radiance: - add_rad_assets(output_file_rad, rad_format, cached_num_mips) - return cached_num_mips - - # Get paths - user_preferences = bpy.context.user_preferences - addon_prefs = user_preferences.addons['armory'].preferences - sdk_path = addon_prefs.sdk_path + # Assume irradiance has to exist + if os.path.exists('build/compiled/Assets/envmaps/' + base_name + '_irradiance.arm'): + # Cached assets + add_irr_assets(output_file_irr) + if generate_radiance: + add_rad_assets(output_file_rad, rad_format, cached_num_mips) + return cached_num_mips + + # Get paths + user_preferences = bpy.context.user_preferences + addon_prefs = user_preferences.addons['armory'].preferences + sdk_path = addon_prefs.sdk_path - if utils.get_os() == 'win': - cmft_path = sdk_path + '/armory/tools/cmft/cmft.exe' - kraffiti_path = sdk_path + '/kode_studio/KodeStudio-win32/resources/app/extensions/kha/Kha/Kore/Tools/kraffiti/kraffiti.exe' - elif utils.get_os() == 'mac': - cmft_path = sdk_path + '/armory/tools/cmft/cmft-osx' - kraffiti_path = sdk_path + '/kode_studio/"Kode Studio.app"/Contents/Resources/app/extensions/kha/Kha/Kore/Tools/kraffiti/kraffiti-osx' - else: - cmft_path = sdk_path + '/armory/tools/cmft/cmft-linux64' - kraffiti_path = sdk_path + '/kode_studio/KodeStudio-linux64/resources/app/extensions/kha/Kha/Kore/Tools/kraffiti/kraffiti-linux64' - - generated_files = [] - output_gama_numerator = '1.0' if disable_hdr else '2.2' - input_file = utils.get_fp() + image_filepath #'Assets/' + image_name - - # Get input size - output = subprocess.check_output([ \ - kraffiti_path + \ - ' from=' + input_file + \ - ' donothing'], shell=True) - # #%ix%i - image_w = str(output).split("'")[1] - image_w = image_w[1:] - image_w = image_w.split('x')[0] - image_w = int(image_w) - image_h = image_w / 2 - - # 4096 = 256 face - 6 mips - 1024 latlong - # 2048 = 128 face - 5 mips - 512 latlong - # 1024 = 64 face - 4 mips - # 512 = 32 face - 3 mips - # 256 = 16 face - 2 mips - # 128 = 8 face - 1 mip - mip_count = 1 - num = 128 - while num < image_w: - num *= 2 - mip_count += 1 + if utils.get_os() == 'win': + cmft_path = sdk_path + '/armory/tools/cmft/cmft.exe' + kraffiti_path = sdk_path + '/kode_studio/KodeStudio-win32/resources/app/extensions/kha/Kha/Kore/Tools/kraffiti/kraffiti.exe' + elif utils.get_os() == 'mac': + cmft_path = sdk_path + '/armory/tools/cmft/cmft-osx' + kraffiti_path = sdk_path + '/kode_studio/"Kode Studio.app"/Contents/Resources/app/extensions/kha/Kha/Kore/Tools/kraffiti/kraffiti-osx' + else: + cmft_path = sdk_path + '/armory/tools/cmft/cmft-linux64' + kraffiti_path = sdk_path + '/kode_studio/KodeStudio-linux64/resources/app/extensions/kha/Kha/Kore/Tools/kraffiti/kraffiti-linux64' + + generated_files = [] + output_gama_numerator = '1.0' if disable_hdr else '2.2' + input_file = utils.get_fp() + image_filepath #'Assets/' + image_name + + # Get input size + output = subprocess.check_output([ \ + kraffiti_path + \ + ' from=' + input_file + \ + ' donothing'], shell=True) + # #%ix%i + image_w = str(output).split("'")[1] + image_w = image_w[1:] + image_w = image_w.split('x')[0] + image_w = int(image_w) + image_h = image_w / 2 + + # 4096 = 256 face - 6 mips - 1024 latlong + # 2048 = 128 face - 5 mips - 512 latlong + # 1024 = 64 face - 4 mips + # 512 = 32 face - 3 mips + # 256 = 16 face - 2 mips + # 128 = 8 face - 1 mip + mip_count = 1 + num = 128 + while num < image_w: + num *= 2 + mip_count += 1 - face_size = image_w / 16 - src_face_size = str(face_size) - dst_face_size = str(face_size) - - # Generate irradiance - gama_options = '' - if disable_hdr: - gama_options = \ - ' --inputGammaNumerator 2.2' + \ - ' --inputGammaDenominator 1.0' + \ - ' --outputGammaNumerator 1.0' + \ - ' --outputGammaDenominator ' + output_gama_numerator - - # Irradiance spherical harmonics - subprocess.call([ \ - cmft_path + \ - ' --input ' + input_file + \ - ' --filter shcoeffs' + \ - #gama_options + \ - ' --outputNum 1' + \ - ' --output0 ' + output_file_irr], shell=True) - - sh_to_json(output_file_irr) - # Non cached assets - add_irr_assets(output_file_irr) - - # Mip-mapped radiance image - if generate_radiance == False: - return cached_num_mips + face_size = image_w / 16 + src_face_size = str(face_size) + dst_face_size = str(face_size) + + # Generate irradiance + gama_options = '' + if disable_hdr: + gama_options = \ + ' --inputGammaNumerator 2.2' + \ + ' --inputGammaDenominator 1.0' + \ + ' --outputGammaNumerator 1.0' + \ + ' --outputGammaDenominator ' + output_gama_numerator + + # Irradiance spherical harmonics + subprocess.call([ \ + cmft_path + \ + ' --input ' + input_file + \ + ' --filter shcoeffs' + \ + #gama_options + \ + ' --outputNum 1' + \ + ' --output0 ' + output_file_irr], shell=True) + + sh_to_json(output_file_irr) + # Non cached assets + add_irr_assets(output_file_irr) + + # Mip-mapped radiance image + if generate_radiance == False: + return cached_num_mips - output = subprocess.check_output([ \ - kraffiti_path + \ - ' from=' + input_file + \ - ' to=' + output_file_rad + '.' + rad_format + \ - ' format=' + rad_format + \ - ' scale=0.5'], shell=True) + output = subprocess.check_output([ \ + kraffiti_path + \ + ' from=' + input_file + \ + ' to=' + output_file_rad + '.' + rad_format + \ + ' format=' + rad_format + \ + ' scale=0.5'], shell=True) - subprocess.call([ \ - cmft_path + \ - ' --input ' + input_file + \ - ' --filter radiance' + \ - ' --dstFaceSize ' + dst_face_size + \ - ' --srcFaceSize ' + src_face_size + \ - ' --excludeBase false' + \ - ' --mipCount ' + str(mip_count) + \ - ' --glossScale 7' + \ - ' --glossBias 3' + \ - ' --lightingModel blinnbrdf' + \ - ' --edgeFixup none' + \ - ' --numCpuProcessingThreads 4' + \ - ' --useOpenCL true' + \ - ' --clVendor anyGpuVendor' + \ - ' --deviceType gpu' + \ - ' --deviceIndex 0' + \ - ' --generateMipChain false' + \ - ' --inputGammaNumerator 2.2' + \ - ' --inputGammaDenominator 1.0' + \ - ' --outputGammaNumerator 1.0' + \ - ' --outputGammaDenominator ' + output_gama_numerator + \ - ' --outputNum 1' + \ - ' --output0 ' + output_file_rad + \ - ' --output0params hdr,rgbe,latlong'], shell=True) - - # Remove size extensions in file name - mip_w = int(face_size * 4) - mip_h = int(face_size * 2) - mip_base = output_file_rad + '_' - mip_num = 0 - while mip_w >= 32: - mip_name = mip_base + str(mip_num) - os.rename( - mip_name + '_' + str(mip_w) + 'x' + str(mip_h) + '.hdr', - mip_name + '.hdr') - mip_w = int(mip_w / 2) - mip_h = int(mip_h / 2) - mip_num += 1 + subprocess.call([ \ + cmft_path + \ + ' --input ' + input_file + \ + ' --filter radiance' + \ + ' --dstFaceSize ' + dst_face_size + \ + ' --srcFaceSize ' + src_face_size + \ + ' --excludeBase false' + \ + ' --mipCount ' + str(mip_count) + \ + ' --glossScale 7' + \ + ' --glossBias 3' + \ + ' --lightingModel blinnbrdf' + \ + ' --edgeFixup none' + \ + ' --numCpuProcessingThreads 4' + \ + ' --useOpenCL true' + \ + ' --clVendor anyGpuVendor' + \ + ' --deviceType gpu' + \ + ' --deviceIndex 0' + \ + ' --generateMipChain false' + \ + ' --inputGammaNumerator 2.2' + \ + ' --inputGammaDenominator 1.0' + \ + ' --outputGammaNumerator 1.0' + \ + ' --outputGammaDenominator ' + output_gama_numerator + \ + ' --outputNum 1' + \ + ' --output0 ' + output_file_rad + \ + ' --output0params hdr,rgbe,latlong'], shell=True) + + # Remove size extensions in file name + mip_w = int(face_size * 4) + mip_h = int(face_size * 2) + mip_base = output_file_rad + '_' + mip_num = 0 + while mip_w >= 32: + mip_name = mip_base + str(mip_num) + os.rename( + mip_name + '_' + str(mip_w) + 'x' + str(mip_h) + '.hdr', + mip_name + '.hdr') + mip_w = int(mip_w / 2) + mip_h = int(mip_h / 2) + mip_num += 1 - # Append mips - for i in range(0, mip_count): - generated_files.append(output_file_rad + '_' + str(i)) - - # Convert to jpgs - if disable_hdr is True: - for f in generated_files: - subprocess.call([ \ - kraffiti_path + \ - ' from=' + f + '.hdr' + \ - ' to=' + f + '.jpg' + \ - ' format=jpg'], shell=True) - os.remove(f + '.hdr') - - # Scale from (32x16 to 1x1> - for i in range (0, 5): - last = generated_files[-1] - out = output_file_rad + '_' + str(mip_count + i) - subprocess.call([ \ - kraffiti_path + \ - ' from=' + last + '.' + rad_format + \ - ' to=' + out + '.' + rad_format + \ - ' scale=0.5' + \ - ' format=' + rad_format], shell=True) - generated_files.append(out) - - mip_count += 5 + # Append mips + for i in range(0, mip_count): + generated_files.append(output_file_rad + '_' + str(i)) + + # Convert to jpgs + if disable_hdr is True: + for f in generated_files: + subprocess.call([ \ + kraffiti_path + \ + ' from=' + f + '.hdr' + \ + ' to=' + f + '.jpg' + \ + ' format=jpg'], shell=True) + os.remove(f + '.hdr') + + # Scale from (32x16 to 1x1> + for i in range (0, 5): + last = generated_files[-1] + out = output_file_rad + '_' + str(mip_count + i) + subprocess.call([ \ + kraffiti_path + \ + ' from=' + last + '.' + rad_format + \ + ' to=' + out + '.' + rad_format + \ + ' scale=0.5' + \ + ' format=' + rad_format], shell=True) + generated_files.append(out) + + mip_count += 5 - # Non cached assets - add_rad_assets(output_file_rad, rad_format, mip_count) + # Non cached assets + add_rad_assets(output_file_rad, rad_format, mip_count) - return mip_count + return mip_count # Parse sh coefs produced by cmft into json array def sh_to_json(sh_file): - sh_lines = open(sh_file + '.c').read().splitlines() - band0_line = sh_lines[5] - band1_line = sh_lines[6] - band2_line = sh_lines[7] - - irradiance_floats = [] - parse_band_floats(irradiance_floats, band0_line) - parse_band_floats(irradiance_floats, band1_line) - parse_band_floats(irradiance_floats, band2_line) - - sh_json = {} - sh_json['irradiance'] = irradiance_floats - utils.write_arm(sh_file + '.arm', sh_json) - - # Clean up .c - os.remove(sh_file + '.c') + sh_lines = open(sh_file + '.c').read().splitlines() + band0_line = sh_lines[5] + band1_line = sh_lines[6] + band2_line = sh_lines[7] + + irradiance_floats = [] + parse_band_floats(irradiance_floats, band0_line) + parse_band_floats(irradiance_floats, band1_line) + parse_band_floats(irradiance_floats, band2_line) + + sh_json = {} + sh_json['irradiance'] = irradiance_floats + utils.write_arm(sh_file + '.arm', sh_json) + + # Clean up .c + os.remove(sh_file + '.c') def parse_band_floats(irradiance_floats, band_line): - string_floats = re.findall(r'[-+]?\d*\.\d+|\d+', band_line) - string_floats = string_floats[1:] # Remove 'Band 0/1/2' number - for s in string_floats: - irradiance_floats.append(float(s)) + string_floats = re.findall(r'[-+]?\d*\.\d+|\d+', band_line) + string_floats = string_floats[1:] # Remove 'Band 0/1/2' number + for s in string_floats: + irradiance_floats.append(float(s)) def write_sky_irradiance(base_name): - # Predefined fake spherical harmonics for now - irradiance_floats = [1.0281457342829743,1.1617608778901902,1.3886220898440544,-0.13044863139637752,-0.2794659158733846,-0.5736106907295643,0.04065421813873111,0.0434367391348577,0.03567450494792305,0.10964557605577738,0.1129839085793664,0.11261660812141877,-0.08271974283263238,-0.08068091195339556,-0.06432614970480094,-0.12517787967665814,-0.11638582546310804,-0.09743696224655113,0.20068697715947176,0.2158788783296805,0.2109374396869599,0.19636637427150455,0.19445523113118082,0.17825330699680575,0.31440860839538637,0.33041120060402407,0.30867788630062676] - - if not os.path.exists('build/compiled/Assets/envmaps'): - os.makedirs('build/compiled/Assets/envmaps') - - output_file = 'build/compiled/Assets/envmaps/' + base_name + '_irradiance' - - sh_json = {} - sh_json['irradiance'] = irradiance_floats - utils.write_arm(output_file + '.arm', sh_json) + # Predefined fake spherical harmonics for now + irradiance_floats = [1.0281457342829743,1.1617608778901902,1.3886220898440544,-0.13044863139637752,-0.2794659158733846,-0.5736106907295643,0.04065421813873111,0.0434367391348577,0.03567450494792305,0.10964557605577738,0.1129839085793664,0.11261660812141877,-0.08271974283263238,-0.08068091195339556,-0.06432614970480094,-0.12517787967665814,-0.11638582546310804,-0.09743696224655113,0.20068697715947176,0.2158788783296805,0.2109374396869599,0.19636637427150455,0.19445523113118082,0.17825330699680575,0.31440860839538637,0.33041120060402407,0.30867788630062676] + # Hosek + # irradiance_floats = [1.5519331988822218,2.3352207154503266,2.997277451988076,0.2673894962434794,0.4305630474135794,0.11331825259716752,-0.04453633521758638,-0.038753175134160295,-0.021302768541875794,0.00055858020486499,0.000371654770334503,0.000126606145406403,-0.000135708721978705,-0.000787399554583089,-0.001550090690860059,0.021947399048903773,0.05453650591711572,0.08783641266630278,0.17053593578630663,0.14734127083304463,0.07775404698816404,-2.6924363189795e-05,-7.9350169701934e-05,-7.559914435231e-05,0.27035455385870993,0.23122918445556914,0.12158817295211832] + # for i in range(0, len(irradiance_floats)): + # irradiance_floats[i] /= 2; - assets.add(output_file + '.arm') + if not os.path.exists('build/compiled/Assets/envmaps'): + os.makedirs('build/compiled/Assets/envmaps') + + output_file = 'build/compiled/Assets/envmaps/' + base_name + '_irradiance' + + sh_json = {} + sh_json['irradiance'] = irradiance_floats + utils.write_arm(output_file + '.arm', sh_json) + + assets.add(output_file + '.arm') def write_color_irradiance(base_name, col): - # Constant color - irradiance_floats = [col[0], col[1], col[2]] - for i in range(0, 24): - irradiance_floats.append(0.0) - - if not os.path.exists('build/compiled/Assets/envmaps'): - os.makedirs('build/compiled/Assets/envmaps') - - output_file = 'build/compiled/Assets/envmaps/' + base_name + '_irradiance' - - sh_json = {} - sh_json['irradiance'] = irradiance_floats - utils.write_arm(output_file + '.arm', sh_json) + # Constant color + irradiance_floats = [col[0], col[1], col[2]] + for i in range(0, 24): + irradiance_floats.append(0.0) + + if not os.path.exists('build/compiled/Assets/envmaps'): + os.makedirs('build/compiled/Assets/envmaps') + + output_file = 'build/compiled/Assets/envmaps/' + base_name + '_irradiance' + + sh_json = {} + sh_json['irradiance'] = irradiance_floats + utils.write_arm(output_file + '.arm', sh_json) - assets.add(output_file + '.arm') + assets.add(output_file + '.arm') diff --git a/raw/blur_adaptive_pass/blur_adaptive_pass.frag.glsl b/raw/blur_adaptive_pass/blur_adaptive_pass.frag.glsl index 0d07f7da..a2674a72 100644 --- a/raw/blur_adaptive_pass/blur_adaptive_pass.frag.glsl +++ b/raw/blur_adaptive_pass/blur_adaptive_pass.frag.glsl @@ -22,7 +22,7 @@ vec2 unpackFloat(float f) { void main() { vec2 tc = texCoord * ssrTextureScale; - float roughness = unpackFloat(texture(gbuffer0, texCoord).b).x; + float roughness = unpackFloat(texture(gbuffer0, texCoord).b).y; if (roughness == 0.0) { outColor = texture(tex, tc); // outColor = vec4(0.0, 0.0, 0.0, 1.0); diff --git a/raw/compositor_pass/compositor_pass.frag.glsl b/raw/compositor_pass/compositor_pass.frag.glsl index 812e7c99..11893c18 100644 --- a/raw/compositor_pass/compositor_pass.frag.glsl +++ b/raw/compositor_pass/compositor_pass.frag.glsl @@ -60,17 +60,19 @@ vec3 getPos(float depth) { // const vec3 compoFogColor = vec3(0.5, 0.6, 0.7); // const float compoFogAmountA = 1.0; // b = 0.01 // const float compoFogAmountB = 1.0; // c = 0.1 -vec3 applyFog(vec3 rgb, // original color of the pixel - float distance, // camera to point distance - vec3 rayOri, // camera position - vec3 rayDir) { // camera to point vector - float fogAmount = compoFogAmountB * exp(-rayOri.y * compoFogAmountA) * (1.0 - exp(-distance * rayDir.y * compoFogAmountA)) / rayDir.y; - return mix(rgb, compoFogColor, fogAmount); -} -// vec3 applyFog(vec3 rgb, float distance) { -// float fogAmount = 1.0 - exp(-distance * compoFogAmountA); -// return mix(rgb, compoFogColor, fogAmount); +// vec3 applyFog(vec3 rgb, // original color of the pixel + // float distance, // camera to point distance + // vec3 rayOri, // camera position + // vec3 rayDir) { // camera to point vector + // float fogAmount = compoFogAmountB * exp(-rayOri.y * compoFogAmountA) * (1.0 - exp(-distance * rayDir.y * compoFogAmountA)) / rayDir.y; + // return mix(rgb, compoFogColor, fogAmount); // } +vec3 applyFog(vec3 rgb, float distance) { + // float fogAmount = 1.0 - exp(-distance * compoFogAmountA); + float fogAmount = 1.0 - exp(-distance * 0.0055); + return mix(rgb, vec3(0.4, 0.7, 0.2), fogAmount); + // return mix(rgb, compoFogColor, fogAmount); +} #endif float vignette() { @@ -78,10 +80,11 @@ float vignette() { // dist = smoothstep(vignout + (fstop / vignfade), vignin + (fstop / vignfade), dist); // return clamp(dist, 0.0, 1.0); // vignetting from iq - return 0.4 + 0.6 * pow(16.0 * texCoord.x * texCoord.y * (1.0 - texCoord.x) * (1.0 - texCoord.y), 0.2); + // return 0.4 + 0.6 * pow(16.0 * texCoord.x * texCoord.y * (1.0 - texCoord.x) * (1.0 - texCoord.y), 0.2); + return 0.3 + 0.7 * pow(16.0 * texCoord.x * texCoord.y * (1.0 - texCoord.x) * (1.0 - texCoord.y), 0.2); } -#ifdef _CompoDOF +// #ifdef _CompoDOF vec3 sampleBox(float size) { vec3 color = vec3(texture(tex, vec2(texCoord.x - size, texCoord.y - size)).rgb) * 0.075; color += texture(tex, vec2(texCoord.x, texCoord.y - size)).rgb * 0.1; @@ -94,7 +97,7 @@ vec3 sampleBox(float size) { color += texture(tex, vec2(texCoord.x + size, texCoord.y + size)).rgb * 0.075; return color; } -#endif +// #endif float linearize(float depth) { return -cameraPlane.y * cameraPlane.x / (depth * (cameraPlane.y - cameraPlane.x) - cameraPlane.y); @@ -232,19 +235,25 @@ void main() { #endif #ifdef _CompoDOF - float linDepth = linearize(depth); - float blur_amount = abs(linDepth - compoDOFDistance) / cameraPlane.y; - blur_amount = clamp(blur_amount, 0.0, 1.0); - float blurSize = compoDOFSize * 10000.0 * blur_amount; - vec3 blurredColor = 0.75 * sampleBox(blurSize * 0.5) + 0.25 * sampleBox(blurSize * 1.0); - col.rgb *= (1.0 - blur_amount) + blurredColor * blur_amount; + if (depth < 1.0) { + float linDepth = linearize(depth); + float blur_amount = abs(linDepth - compoDOFDistance) / cameraPlane.y; + // float blur_amount = abs(linDepth - 4.0); + float blurSize = compoDOFSize * blur_amount; + // float blurSize = 0.0005 * blur_amount; + col.rgb = 0.75 * sampleBox(blurSize * 0.5) + 0.25 * sampleBox(blurSize * 1.0); + } #endif #ifdef _CompoFog - vec3 pos = getPos(depth); - float dist = distance(pos, eye); - vec3 eyedir = eyeLook;// normalize(eye + pos); - col.rgb = applyFog(col.rgb, dist, eye, eyedir); + // if (depth < 1.0) { + // vec3 pos = getPos(depth); + // float dist = distance(pos, eye); + float dist = linearize(depth); + // vec3 eyedir = eyeLook;// normalize(eye + pos); + // col.rgb = applyFog(col.rgb, dist, eye, eyedir); + col.rgb = applyFog(col.rgb, dist); + // } #endif #ifdef _CompoGlare diff --git a/raw/debug_normals/debug_normals.frag.glsl b/raw/debug_normals/debug_normals.frag.glsl index 8b826c99..30d9256d 100644 --- a/raw/debug_normals/debug_normals.frag.glsl +++ b/raw/debug_normals/debug_normals.frag.glsl @@ -48,7 +48,7 @@ void main() { // vec3 p = getPos(depth); // vec3 baseColor = g1.rgb; - // vec2 roughmet = unpackFloat(g1.a); - // float roughness = roughmet.x; - // float metalness = roughmet.y; + // vec2 metrough = unpackFloat(g1.a); + // float metalness = metrough.x; + // float roughness = metrough.y; } diff --git a/raw/deferred/depthwrite.vert.glsl b/raw/deferred/depthwrite.vert.glsl index 958ef6db..7281cc5d 100644 --- a/raw/deferred/depthwrite.vert.glsl +++ b/raw/deferred/depthwrite.vert.glsl @@ -31,54 +31,73 @@ in vec3 nor; uniform mat4 LWVP; #ifdef _Skinning - uniform float skinBones[skinMaxBones * 12]; + uniform float skinBones[skinMaxBones * 8]; #endif // out vec4 position; #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif void main() { - #ifdef _Instancing +#ifdef _Instancing vec4 sPos = (vec4(pos + off, 1.0)); #else vec4 sPos = (vec4(pos, 1.0)); #endif #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate #endif gl_Position = LWVP * sPos; diff --git a/raw/deferred/mesh.frag.glsl b/raw/deferred/mesh.frag.glsl index d3f1e9b9..45ac5565 100644 --- a/raw/deferred/mesh.frag.glsl +++ b/raw/deferred/mesh.frag.glsl @@ -77,8 +77,8 @@ in vec4 matColor; #endif float packFloat(float f1, float f2) { - int index = int(f1 * 1000); - float alpha = f2 == 0.0 ? f2 : (f2 - 0.0001); + float index = floor(f1 * 1000.0); // Temporary + float alpha = clamp(f2, 0.0, 1.0 - 0.001); return index + alpha; } @@ -179,7 +179,7 @@ float parallaxShadow(vec3 L, vec2 initialTexCoord, float initialHeight) { // ... // Shadowing factor should be 1 if there were no points under the surface - if(numSamplesUnderSurface < 1) shadowMultiplier = 1; + if (numSamplesUnderSurface < 1) shadowMultiplier = 1; else shadowMultiplier = 1.0 - shadowMultiplier; } return shadowMultiplier; @@ -259,9 +259,9 @@ void main() { } if (dist > 0) mask_probe = 0; } - outColor[0] = vec4(n.xy, packFloat(roughness, metalness), mask_probe); + outColor[0] = vec4(n.xy, packFloat(metalness, roughness), mask_probe); #else - outColor[0] = vec4(n.xy, packFloat(roughness, metalness), mask); + outColor[0] = vec4(n.xy, packFloat(metalness, roughness), mask); #endif outColor[1] = vec4(baseColor.rgb, occ); diff --git a/raw/deferred/mesh.vert.glsl b/raw/deferred/mesh.vert.glsl index e50bec41..0fbd1ea6 100644 --- a/raw/deferred/mesh.vert.glsl +++ b/raw/deferred/mesh.vert.glsl @@ -45,7 +45,8 @@ uniform vec4 albedo_color; uniform mat4 W; #endif #ifdef _Skinning - uniform float skinBones[skinMaxBones * 12]; // Default to 50 + // uniform float skinBones[skinMaxBones * 12]; // Defaults to 50 + uniform float skinBones[skinMaxBones * 8]; // Dual quat #endif #ifdef _Probes uniform mat4 W; // TODO: Conflicts with _HeightTex @@ -78,60 +79,79 @@ out vec4 matColor; #ifdef _Skinning // Geometric Skinning with Approximate Dual Quaternion Blending, Kavan // Based on https://github.com/tcoppex/aer-engine/blob/master/demos/aura/data/shaders/Skinning.glsl -// void getSkinningDualQuat(vec4 weights, inout vec3 v, inout vec3 n) { -// // Retrieve the real and dual part of the dual-quaternions -// mat4 matA, matB; -// vec4 indices = vec4(2.0) * bone; -// matA[0] = skinBones[int(indices.x) + 0]; -// matB[0] = skinBones[int(indices.x) + 1]; -// matA[1] = skinBones[int(indices.y) + 0]; -// matB[1] = skinBones[int(indices.y) + 1]; -// matA[2] = skinBones[int(indices.z) + 0]; -// matB[2] = skinBones[int(indices.z) + 1]; -// matA[3] = skinBones[int(indices.w) + 0]; -// matB[3] = skinBones[int(indices.w) + 1]; -// // Handles antipodality by sticking joints in the same neighbourhood -// weights.xyz *= sign(matA[3] * mat3x4(matA)); -// // Apply weights -// vec4 A = matA * weights; // Real part -// vec4 B = matB * weights; // Dual part -// // Normalize -// float invNormA = 1.0 / length(A); -// A *= invNormA; -// B *= invNormA; -// // Position -// v += 2.0 * cross(A.xyz, cross(A.xyz, v) + A.w * v); // Rotate -// v += 2.0 * (A.w * B.xyz - B.w * A.xyz + cross(A.xyz, B.xyz)); // Translate -// // Normal -// n += 2.0 * cross(A.xyz, cross(A.xyz, n) + A.w * n); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; +} +// mat4 getBoneMat(const int boneIndex) { +// vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], +// skinBones[boneIndex * 12 + 1], +// skinBones[boneIndex * 12 + 2], +// skinBones[boneIndex * 12 + 3]); +// vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], +// skinBones[boneIndex * 12 + 5], +// skinBones[boneIndex * 12 + 6], +// skinBones[boneIndex * 12 + 7]); +// vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], +// skinBones[boneIndex * 12 + 9], +// skinBones[boneIndex * 12 + 10], +// skinBones[boneIndex * 12 + 11]); +// return mat4(v0.x, v0.y, v0.z, v0.w, +// v1.x, v1.y, v1.z, v1.w, +// v2.x, v2.y, v2.z, v2.w, +// 0, 0, 0, 1); +// } +// mat4 getSkinningMat() { +// return weight.x * getBoneMat(int(bone.x)) + +// weight.y * getBoneMat(int(bone.y)) + +// weight.z * getBoneMat(int(bone.z)) + +// weight.w * getBoneMat(int(bone.w)); +// } +// mat3 getSkinningMatVec(const mat4 skinningMat) { +// return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); // } -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); -} #endif void main() { @@ -142,9 +162,19 @@ void main() { vec4 sPos = (vec4(pos, 1.0)); #endif #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + // mat4 skinningMat = getSkinningMat(); + // mat3 skinningMatVec = getSkinningMatVec(skinningMat); + // sPos = sPos * skinningMat; + // vec3 _normal = normalize(mat3(N) * (nor * skinningMatVec)); + + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate + vec3 _normal = normalize(mat3(N) * (nor + 2.0 * cross(skinA.xyz, cross(skinA.xyz, nor) + skinA.w * nor))); +#else + vec3 _normal = normalize(mat3(N) * nor); #endif #ifdef _Probes @@ -173,12 +203,6 @@ void main() { texCoord = tex; #endif -#ifdef _Skinning - vec3 _normal = normalize(mat3(N) * (nor * skinningMatVec)); -#else - vec3 _normal = normalize(mat3(N) * nor); -#endif - matColor = albedo_color; #ifdef _VCols diff --git a/raw/deferred/overlay.vert.glsl b/raw/deferred/overlay.vert.glsl index 5e85ed9c..d2d29f0e 100644 --- a/raw/deferred/overlay.vert.glsl +++ b/raw/deferred/overlay.vert.glsl @@ -54,34 +54,51 @@ out vec3 eyeDir; #endif #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif @@ -92,11 +109,18 @@ void main() { #else vec4 sPos = (vec4(pos, 1.0)); #endif + #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate + vec3 _normal = normalize(mat3(N) * (nor + 2.0 * cross(skinA.xyz, cross(skinA.xyz, nor) + skinA.w * nor))); +#else + vec3 _normal = normalize(mat3(N) * nor); #endif + lPos = LWVP * sPos; mat4 WV = V * W; @@ -117,12 +141,6 @@ void main() { texCoord = tex; #endif -#ifdef _Skinning - vec3 _normal = normalize(mat3(N) * (nor * skinningMatVec)); -#else - vec3 _normal = normalize(mat3(N) * nor); -#endif - matColor = albedo_color; #ifdef _VCols diff --git a/raw/deferred/shadowmap.vert.glsl b/raw/deferred/shadowmap.vert.glsl index a2377afd..6df56803 100644 --- a/raw/deferred/shadowmap.vert.glsl +++ b/raw/deferred/shadowmap.vert.glsl @@ -38,34 +38,51 @@ uniform mat4 LWVP; // out vec4 position; #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif @@ -77,9 +94,11 @@ void main() { #endif #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate #endif gl_Position = LWVP * sPos; diff --git a/raw/deferred/translucent.vert.glsl b/raw/deferred/translucent.vert.glsl index 943c0e0e..e2b7d776 100644 --- a/raw/deferred/translucent.vert.glsl +++ b/raw/deferred/translucent.vert.glsl @@ -53,34 +53,51 @@ out vec4 matColor; #endif #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif @@ -91,11 +108,18 @@ void main() { #else vec4 sPos = (vec4(pos, 1.0)); #endif + #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate + vec3 _normal = normalize(mat3(N) * (nor + 2.0 * cross(skinA.xyz, cross(skinA.xyz, nor) + skinA.w * nor))); +#else + vec3 _normal = normalize(mat3(N) * nor); #endif + lPos = LWVP * sPos; #ifdef _Billboard @@ -115,12 +139,6 @@ void main() { texCoord = tex; #endif -#ifdef _Skinning - vec3 _normal = normalize(mat3(N) * (nor * skinningMatVec)); -#else - vec3 _normal = normalize(mat3(N) * nor); -#endif - matColor = albedo_color; #ifdef _VCols diff --git a/raw/deferred_indirect/deferred_indirect.frag.glsl b/raw/deferred_indirect/deferred_indirect.frag.glsl index 7967b43f..69fdfa43 100644 --- a/raw/deferred_indirect/deferred_indirect.frag.glsl +++ b/raw/deferred_indirect/deferred_indirect.frag.glsl @@ -133,14 +133,14 @@ vec3 shIrradiance(vec3 nor, float scale) { } void main() { - vec4 g0 = texture(gbuffer0, texCoord); // Normal.xy, roughness/metallic, mask + vec4 g0 = texture(gbuffer0, texCoord); // Normal.xy, metallic/roughness, mask vec3 n; n.z = 1.0 - abs(g0.x) - abs(g0.y); n.xy = n.z >= 0.0 ? g0.xy : octahedronWrap(g0.xy); n = normalize(n); - vec2 roughmet = unpackFloat(g0.b); + vec2 metrough = unpackFloat(g0.b); #ifdef _Rad float depth = texture(gbufferD, texCoord).r * 2.0 - 1.0; @@ -155,7 +155,7 @@ void main() { float probeFract = fract(probeFactor); vec3 indirect; #ifdef _Rad - float lod = getMipLevelFromRoughness(roughmet.x); + float lod = getMipLevelFromRoughness(metrough.y); vec3 reflectionWorld = reflect(-v, n); vec2 envCoordRefl = envMapEquirect(reflectionWorld); vec3 prefilteredColor = textureLod(senvmapRadiance, envCoordRefl, lod).rgb; @@ -178,7 +178,7 @@ void main() { vec3 indirect = shIrradiance(n, 2.2) / PI; #ifdef _Rad vec3 reflectionWorld = reflect(-v, n); - float lod = getMipLevelFromRoughness(roughmet.x); + float lod = getMipLevelFromRoughness(metrough.y); vec3 prefilteredColor = textureLod(senvmapRadiance, envMapEquirect(reflectionWorld), lod).rgb; #endif #endif @@ -191,16 +191,16 @@ void main() { #endif vec4 g1 = texture(gbuffer1, texCoord); // Basecolor.rgb, occlusion - vec3 albedo = surfaceAlbedo(g1.rgb, roughmet.y); // g1.rgb - basecolor + vec3 albedo = surfaceAlbedo(g1.rgb, metrough.x); // g1.rgb - basecolor indirect *= albedo; #ifdef _Rad // Indirect specular float dotNV = max(dot(n, v), 0.0); - vec3 f0 = surfaceF0(g1.rgb, roughmet.y); + vec3 f0 = surfaceF0(g1.rgb, metrough.x); - vec2 envBRDF = texture(senvmapBrdf, vec2(roughmet.x, 1.0 - dotNV)).xy; + vec2 envBRDF = texture(senvmapBrdf, vec2(metrough.y, 1.0 - dotNV)).xy; indirect += prefilteredColor * (f0 * envBRDF.x + envBRDF.y);; #endif diff --git a/raw/deferred_light/deferred_light.frag.glsl b/raw/deferred_light/deferred_light.frag.glsl index fb2cbfee..163e441f 100644 --- a/raw/deferred_light/deferred_light.frag.glsl +++ b/raw/deferred_light/deferred_light.frag.glsl @@ -131,7 +131,24 @@ vec3 specularBRDF(vec3 f0, float roughness, float nl, float nh, float nv, float float a = roughness * roughness; return d_ggx(nh, a) * clamp(v_smithschlick(nl, nv, a), 0.0, 1.0) * f_schlick(f0, vh) / 4.0; } - +// vec3 burleyDiffuseBRDF(vec3 albedo, float roughness, float nv, float nl, float vh) { +// float FD90 = 0.5 + 2.0 * vh * vh * roughness; +// float FdV = 1.0 + (FD90 - 1.0) * pow(1.0 - nv, 5.0); +// float FdL = 1.0 + (FD90 - 1.0) * pow(1.0 - nl, 5.0); +// return albedo * ((1.0 / 3.1415926535) * FdV * FdL); +// } +// vec3 orenNayarDiffuseBRDF(vec3 albedo, float roughness, float nv, float nl, float vh) { +// float a = roughness * roughness; +// float s = a;// / (1.29 + 0.5 * a); +// float s2 = s * s; +// float vl = 2.0 * vh * vh - 1.0; // double angle identity +// float Cosri = vl - nv * nl; +// float C1 = 1.0 - 0.5 * s2 / (s2 + 0.33); +// float test = 1.0; +// if (Cosri >= 0.0) test = (1.0 / (max(nl, nv))); +// float C2 = 0.45 * s2 / (s2 + 0.09) * Cosri * test; +// return albedo / PI * (C1 + C2) * (1.0 + roughness * 0.5); +// } vec3 diffuseBRDF(vec3 albedo, float nl) { // lambert return albedo * nl; // // albedo * max(0.0, nl); @@ -684,7 +701,7 @@ void main() { texCoord += vec2(0.5 / screenSize); // Half pixel offset float depth = texture(gbufferD, texCoord).r * 2.0 - 1.0; - vec4 g0 = texture(gbuffer0, texCoord); // Normal.xy, roughness/metallic, mask + vec4 g0 = texture(gbuffer0, texCoord); // Normal.xy, metallic/roughness, mask vec4 g1 = texture(gbuffer1, texCoord); // Basecolor.rgb, occlusion vec3 n; @@ -694,13 +711,13 @@ void main() { vec3 p = getPos(depth, texCoord); // vec3 p = getPos(depth); - vec2 roughmet = unpackFloat(g0.b); + vec2 metrough = unpackFloat(g0.b); vec3 v = normalize(eye - p.xyz); float dotNV = max(dot(n, v), 0.0); - vec3 albedo = surfaceAlbedo(g1.rgb, roughmet.y); // g1.rgb - basecolor - vec3 f0 = surfaceF0(g1.rgb, roughmet.y); + vec3 albedo = surfaceAlbedo(g1.rgb, metrough.x); // g1.rgb - basecolor + vec3 f0 = surfaceF0(g1.rgb, metrough.x); // Per-light vec3 l; @@ -727,8 +744,10 @@ void main() { #endif // Direct - vec3 direct = diffuseBRDF(albedo, dotNL) + specularBRDF(f0, roughmet.x, dotNL, dotNH, dotNV, dotVH); - + vec3 direct = diffuseBRDF(albedo, dotNL) + specularBRDF(f0, metrough.y, dotNL, dotNH, dotNV, dotVH); + // vec3 direct = orenNayarDiffuseBRDF(albedo, metrough.y, dotNV, dotNL, dotVH) + specularBRDF(f0, metrough.y, dotNL, dotNH, dotNV, dotVH); + // vec3 direct = burleyDiffuseBRDF(albedo, metrough.y, dotNV, dotNL, dotVH) + specularBRDF(f0, metrough.y, dotNL, dotNH, dotNV, dotVH); + if (lightType == 2) { // Spot float spotEffect = dot(lightDir, l); if (spotEffect < spotlightCutoff) { @@ -738,10 +757,10 @@ void main() { } // Aniso spec - // float shinyParallel = roughmet.x; + // float shinyParallel = metrough.y; // float shinyPerpendicular = 0.08; // vec3 fiberDirection = vec3(0.0, 1.0, 8.0); - // vec3 direct = diffuseBRDF(albedo, roughmet.x, dotNV, dotNL, dotVH, dotLV) + wardSpecular(n, h, dotNL, dotNV, dotNH, fiberDirection, shinyParallel, shinyPerpendicular); + // vec3 direct = diffuseBRDF(albedo, metrough.y, dotNV, dotNL, dotVH, dotLV) + wardSpecular(n, h, dotNL, dotNV, dotNH, fiberDirection, shinyParallel, shinyPerpendicular); direct = direct * lightColor * lightStrength; @@ -763,7 +782,7 @@ void main() { // float probeFract = fract(probeFactor); // vec3 indirect; // #ifdef _Rad -// float lod = getMipLevelFromRoughness(roughmet.x); +// float lod = getMipLevelFromRoughness(metrough.y); // vec3 reflectionWorld = reflect(-v, n); // vec2 envCoordRefl = envMapEquirect(reflectionWorld); // vec3 prefilteredColor = textureLod(senvmapRadiance, envCoordRefl, lod).rgb; @@ -786,7 +805,7 @@ void main() { // vec3 indirect = shIrradiance(n, 2.2) / PI; // #ifdef _Rad // vec3 reflectionWorld = reflect(-v, n); -// float lod = getMipLevelFromRoughness(roughmet.x); +// float lod = getMipLevelFromRoughness(metrough.y); // vec3 prefilteredColor = textureLod(senvmapRadiance, envMapEquirect(reflectionWorld), lod).rgb; // #endif // #endif @@ -801,7 +820,7 @@ void main() { // #ifdef _Rad // // Indirect specular -// vec2 envBRDF = texture(senvmapBrdf, vec2(roughmet.x, 1.0 - dotNV)).xy; +// vec2 envBRDF = texture(senvmapBrdf, vec2(metrough.y, 1.0 - dotNV)).xy; // indirect += prefilteredColor * (f0 * envBRDF.x + envBRDF.y);; // #endif // indirect = indirect * envmapStrength;// * lightColor * lightStrength; @@ -832,7 +851,7 @@ void main() { // vec3 p3 = lightPos + ex - ey; // vec3 p4 = lightPos - ex - ey; // float theta = acos(dotNV); - // vec2 tuv = vec2(roughmet.x, theta/(0.5*PI)); + // vec2 tuv = vec2(metrough.y, theta/(0.5*PI)); // tuv = tuv*LUT_SCALE + LUT_BIAS; // vec4 t = texture(sltcMat, tuv); diff --git a/raw/forward/mesh.vert.glsl b/raw/forward/mesh.vert.glsl index fc5c1d42..c7a9597b 100644 --- a/raw/forward/mesh.vert.glsl +++ b/raw/forward/mesh.vert.glsl @@ -6,10 +6,6 @@ precision highp float; #include "../compiled.glsl" -#ifdef _NorTex -#define _Tex -#endif - in vec3 pos; in vec3 nor; #ifdef _BaseTex @@ -37,7 +33,7 @@ uniform mat4 LWVP; uniform vec4 albedo_color; uniform vec3 eye; #ifdef _Skinning - uniform float skinBones[skinMaxBones * 12]; + uniform float skinBones[skinMaxBones * 8]; #endif #ifdef _VR uniform mat4 U; // Undistortion @@ -58,34 +54,51 @@ out vec3 eyeDir; #endif #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif @@ -103,15 +116,15 @@ float distortionFactor(float rSquared) { } // Convert point from world space to undistorted camera space vec4 undistort(mat4 WV, vec4 pos) { - // Go to camera space - pos = WV * pos; - const float nearClip = 0.1; - if (pos.z <= -nearClip) { // Reminder: Forward is -Z - // Undistort the point's coordinates in XY - float r2 = clamp(dot(pos.xy, pos.xy) / (pos.z * pos.z), 0.0, maxRadSq); - pos.xy *= distortionFactor(r2); - } - return pos; + // Go to camera space + pos = WV * pos; + const float nearClip = 0.1; + if (pos.z <= -nearClip) { // Reminder: Forward is -Z + // Undistort the point's coordinates in XY + float r2 = clamp(dot(pos.xy, pos.xy) / (pos.z * pos.z), 0.0, maxRadSq); + pos.xy *= distortionFactor(r2); + } + return pos; } #endif @@ -122,11 +135,18 @@ void main() { #else vec4 sPos = (vec4(pos, 1.0)); #endif + #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate + vec3 _normal = normalize(mat3(N) * (nor + 2.0 * cross(skinA.xyz, cross(skinA.xyz, nor) + skinA.w * nor))); +#else + vec3 _normal = normalize(mat3(N) * nor); #endif + lPos = LWVP * sPos; mat4 WV = V * W; @@ -151,12 +171,6 @@ void main() { texCoord = tex; #endif -#ifdef _Skinning - vec3 _normal = normalize(mat3(N) * (nor * skinningMatVec)); -#else - vec3 _normal = normalize(mat3(N) * nor); -#endif - matColor = albedo_color; #ifdef _VCols diff --git a/raw/forward/overlay.vert.glsl b/raw/forward/overlay.vert.glsl index 5e85ed9c..d2d29f0e 100644 --- a/raw/forward/overlay.vert.glsl +++ b/raw/forward/overlay.vert.glsl @@ -54,34 +54,51 @@ out vec3 eyeDir; #endif #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif @@ -92,11 +109,18 @@ void main() { #else vec4 sPos = (vec4(pos, 1.0)); #endif + #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate + vec3 _normal = normalize(mat3(N) * (nor + 2.0 * cross(skinA.xyz, cross(skinA.xyz, nor) + skinA.w * nor))); +#else + vec3 _normal = normalize(mat3(N) * nor); #endif + lPos = LWVP * sPos; mat4 WV = V * W; @@ -117,12 +141,6 @@ void main() { texCoord = tex; #endif -#ifdef _Skinning - vec3 _normal = normalize(mat3(N) * (nor * skinningMatVec)); -#else - vec3 _normal = normalize(mat3(N) * nor); -#endif - matColor = albedo_color; #ifdef _VCols diff --git a/raw/forward/shadowmap.vert.glsl b/raw/forward/shadowmap.vert.glsl index a2377afd..6df56803 100644 --- a/raw/forward/shadowmap.vert.glsl +++ b/raw/forward/shadowmap.vert.glsl @@ -38,34 +38,51 @@ uniform mat4 LWVP; // out vec4 position; #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif @@ -77,9 +94,11 @@ void main() { #endif #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate #endif gl_Position = LWVP * sPos; diff --git a/raw/hybrid/depthwrite.vert.glsl b/raw/hybrid/depthwrite.vert.glsl index 3a3851d7..2b794b86 100644 --- a/raw/hybrid/depthwrite.vert.glsl +++ b/raw/hybrid/depthwrite.vert.glsl @@ -27,38 +27,55 @@ in vec3 nor; uniform mat4 WVP; #ifdef _Skinning - uniform float skinBones[skinMaxBones * 12]; + uniform float skinBones[skinMaxBones * 8]; #endif #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif @@ -70,9 +87,11 @@ void main() { #endif #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate #endif gl_Position = WVP * sPos; diff --git a/raw/hybrid/mesh.vert.glsl b/raw/hybrid/mesh.vert.glsl index 8a66534c..9c96286f 100644 --- a/raw/hybrid/mesh.vert.glsl +++ b/raw/hybrid/mesh.vert.glsl @@ -34,7 +34,7 @@ uniform mat4 LWVP; uniform vec4 albedo_color; uniform vec3 eye; #ifdef _Skinning - uniform float skinBones[skinMaxBones * 12]; + uniform float skinBones[skinMaxBones * 8]; #endif out vec3 position; @@ -51,34 +51,51 @@ out vec3 eyeDir; #endif #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif @@ -89,11 +106,18 @@ void main() { #else vec4 sPos = (vec4(pos, 1.0)); #endif + #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate + vec3 _normal = normalize(mat3(N) * (nor + 2.0 * cross(skinA.xyz, cross(skinA.xyz, nor) + skinA.w * nor))); +#else + vec3 _normal = normalize(mat3(N) * nor); #endif + lPos = LWVP * sPos; mat4 WV = V * W; @@ -115,12 +139,6 @@ void main() { texCoord = tex; #endif -#ifdef _Skinning - vec3 _normal = normalize(mat3(N) * (nor * skinningMatVec)); -#else - vec3 _normal = normalize(mat3(N) * nor); -#endif - matColor = albedo_color; #ifdef _VCols diff --git a/raw/hybrid/overlay.vert.glsl b/raw/hybrid/overlay.vert.glsl index 5e85ed9c..4f1c3c5d 100644 --- a/raw/hybrid/overlay.vert.glsl +++ b/raw/hybrid/overlay.vert.glsl @@ -37,7 +37,7 @@ uniform mat4 LWVP; uniform vec4 albedo_color; uniform vec3 eye; #ifdef _Skinning - uniform float skinBones[skinMaxBones * 12]; + uniform float skinBones[skinMaxBones * 8]; #endif out vec3 position; @@ -54,34 +54,51 @@ out vec3 eyeDir; #endif #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif @@ -92,11 +109,18 @@ void main() { #else vec4 sPos = (vec4(pos, 1.0)); #endif + #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate + vec3 _normal = normalize(mat3(N) * (nor + 2.0 * cross(skinA.xyz, cross(skinA.xyz, nor) + skinA.w * nor))); +#else + vec3 _normal = normalize(mat3(N) * nor); #endif + lPos = LWVP * sPos; mat4 WV = V * W; @@ -117,12 +141,6 @@ void main() { texCoord = tex; #endif -#ifdef _Skinning - vec3 _normal = normalize(mat3(N) * (nor * skinningMatVec)); -#else - vec3 _normal = normalize(mat3(N) * nor); -#endif - matColor = albedo_color; #ifdef _VCols diff --git a/raw/hybrid/shadowmap.vert.glsl b/raw/hybrid/shadowmap.vert.glsl index 8810d7e0..0527094a 100644 --- a/raw/hybrid/shadowmap.vert.glsl +++ b/raw/hybrid/shadowmap.vert.glsl @@ -28,38 +28,55 @@ in vec3 nor; uniform mat4 LWVP; #ifdef _Skinning - uniform float skinBones[skinMaxBones * 12]; + uniform float skinBones[skinMaxBones * 8]; #endif #ifdef _Skinning -mat4 getBoneMat(const int boneIndex) { - vec4 v0 = vec4(skinBones[boneIndex * 12 + 0], - skinBones[boneIndex * 12 + 1], - skinBones[boneIndex * 12 + 2], - skinBones[boneIndex * 12 + 3]); - vec4 v1 = vec4(skinBones[boneIndex * 12 + 4], - skinBones[boneIndex * 12 + 5], - skinBones[boneIndex * 12 + 6], - skinBones[boneIndex * 12 + 7]); - vec4 v2 = vec4(skinBones[boneIndex * 12 + 8], - skinBones[boneIndex * 12 + 9], - skinBones[boneIndex * 12 + 10], - skinBones[boneIndex * 12 + 11]); - return mat4(v0.x, v0.y, v0.z, v0.w, - v1.x, v1.y, v1.z, v1.w, - v2.x, v2.y, v2.z, v2.w, - 0, 0, 0, 1); -} - -mat4 getSkinningMat() { - return weight.x * getBoneMat(int(bone.x)) + - weight.y * getBoneMat(int(bone.y)) + - weight.z * getBoneMat(int(bone.z)) + - weight.w * getBoneMat(int(bone.w)); -} - -mat3 getSkinningMatVec(const mat4 skinningMat) { - return mat3(skinningMat[0].xyz, skinningMat[1].xyz, skinningMat[2].xyz); +void getSkinningDualQuat(vec4 weights, out vec4 A, inout vec4 B) { + // Retrieve the real and dual part of the dual-quaternions + mat4 matA, matB; + matA[0][0] = skinBones[int(bone.x) * 8 + 0]; + matA[0][1] = skinBones[int(bone.x) * 8 + 1]; + matA[0][2] = skinBones[int(bone.x) * 8 + 2]; + matA[0][3] = skinBones[int(bone.x) * 8 + 3]; + matB[0][0] = skinBones[int(bone.x) * 8 + 4]; + matB[0][1] = skinBones[int(bone.x) * 8 + 5]; + matB[0][2] = skinBones[int(bone.x) * 8 + 6]; + matB[0][3] = skinBones[int(bone.x) * 8 + 7]; + matA[1][0] = skinBones[int(bone.y) * 8 + 0]; + matA[1][1] = skinBones[int(bone.y) * 8 + 1]; + matA[1][2] = skinBones[int(bone.y) * 8 + 2]; + matA[1][3] = skinBones[int(bone.y) * 8 + 3]; + matB[1][0] = skinBones[int(bone.y) * 8 + 4]; + matB[1][1] = skinBones[int(bone.y) * 8 + 5]; + matB[1][2] = skinBones[int(bone.y) * 8 + 6]; + matB[1][3] = skinBones[int(bone.y) * 8 + 7]; + matA[2][0] = skinBones[int(bone.z) * 8 + 0]; + matA[2][1] = skinBones[int(bone.z) * 8 + 1]; + matA[2][2] = skinBones[int(bone.z) * 8 + 2]; + matA[2][3] = skinBones[int(bone.z) * 8 + 3]; + matB[2][0] = skinBones[int(bone.z) * 8 + 4]; + matB[2][1] = skinBones[int(bone.z) * 8 + 5]; + matB[2][2] = skinBones[int(bone.z) * 8 + 6]; + matB[2][3] = skinBones[int(bone.z) * 8 + 7]; + matA[3][0] = skinBones[int(bone.w) * 8 + 0]; + matA[3][1] = skinBones[int(bone.w) * 8 + 1]; + matA[3][2] = skinBones[int(bone.w) * 8 + 2]; + matA[3][3] = skinBones[int(bone.w) * 8 + 3]; + matB[3][0] = skinBones[int(bone.w) * 8 + 4]; + matB[3][1] = skinBones[int(bone.w) * 8 + 5]; + matB[3][2] = skinBones[int(bone.w) * 8 + 6]; + matB[3][3] = skinBones[int(bone.w) * 8 + 7]; + // Handles antipodality by sticking joints in the same neighbourhood + // weights.xyz *= sign(matA[3] * mat3x4(matA)).xyz; + weights.xyz *= sign(matA[3] * matA).xyz; + // Apply weights + A = matA * weights; // Real part + B = matB * weights; // Dual part + // Normalize + float invNormA = 1.0 / length(A); + A *= invNormA; + B *= invNormA; } #endif @@ -71,9 +88,11 @@ void main() { #endif #ifdef _Skinning - mat4 skinningMat = getSkinningMat(); - mat3 skinningMatVec = getSkinningMatVec(skinningMat); - sPos = sPos * skinningMat; + vec4 skinA; + vec4 skinB; + getSkinningDualQuat(weight, skinA, skinB); + sPos.xyz += 2.0 * cross(skinA.xyz, cross(skinA.xyz, sPos.xyz) + skinA.w * sPos.xyz); // Rotate + sPos.xyz += 2.0 * (skinA.w * skinB.xyz - skinB.w * skinA.xyz + cross(skinA.xyz, skinB.xyz)); // Translate #endif gl_Position = LWVP * sPos; diff --git a/raw/ssr_pass/ssr_pass.frag.glsl b/raw/ssr_pass/ssr_pass.frag.glsl index 18cac288..612d02da 100644 --- a/raw/ssr_pass/ssr_pass.frag.glsl +++ b/raw/ssr_pass/ssr_pass.frag.glsl @@ -187,7 +187,7 @@ vec2 unpackFloat(float f) { void main() { vec4 g0 = texture(gbuffer0, texCoord); - float roughness = unpackFloat(g0.b).x; + float roughness = unpackFloat(g0.b).y; if (roughness == 1.0) { outColor = vec4(0.0);