From 96d7fdaf824e24323df391f5d915c851ce184d9e Mon Sep 17 00:00:00 2001 From: luboslenco Date: Thu, 9 Jan 2025 22:30:02 +0100 Subject: [PATCH] Add fake sss --- armorpaint/sources/make_paint.ts | 12 ++++-------- .../raytrace/raytrace_brute_forge_full.spirv | Bin 22888 -> 23236 bytes .../raytrace/raytrace_brute_full.spirv | Bin 22604 -> 22952 bytes base/shaders/raytrace/src/raytrace_brute.hlsl | 18 ++++++++++++------ 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/armorpaint/sources/make_paint.ts b/armorpaint/sources/make_paint.ts index 979e336fa..12f1395f4 100644 --- a/armorpaint/sources/make_paint.ts +++ b/armorpaint/sources/make_paint.ts @@ -275,12 +275,8 @@ function make_paint_run(data: material_t, matcon: material_context_t): node_shad // Height used for the first time, also rebuild vertex shader return make_paint_run(data, matcon); } - if (emis != "0.0" && emis != "0") { - make_material_emis_used = true; - } - if (subs != "0.0" && subs != "0") { - make_material_subs_used = true; - } + make_material_emis_used = emis != "0.0" && emis != "0"; + make_material_subs_used = subs != "0.0" && subs != "0"; } if (context_raw.brush_mask_image != null && context_raw.tool == workspace_tool_t.DECAL) { @@ -391,13 +387,13 @@ function make_paint_run(data: material_t, matcon: material_context_t): node_shad node_shader_write(frag, "float matid = " + matid_string + ";"); // matid % 3 == 0 - normal, 1 - emission, 2 - subsurface - if (context_raw.material.paint_emis) { + if (context_raw.material.paint_emis && make_material_emis_used) { node_shader_write(frag, "if (emis > 0.0) {"); node_shader_write(frag, " matid += 1.0 / 255.0;"); node_shader_write(frag, " if (str == 0.0) discard;"); node_shader_write(frag, "}"); } - else if (context_raw.material.paint_subs) { + else if (context_raw.material.paint_subs && make_material_subs_used) { node_shader_write(frag, "if (subs > 0.0) {"); node_shader_write(frag, " matid += 2.0 / 255.0;"); node_shader_write(frag, " if (str == 0.0) discard;"); diff --git a/base/shaders/raytrace/raytrace_brute_forge_full.spirv b/base/shaders/raytrace/raytrace_brute_forge_full.spirv index 82bbaa19d1abf80eb20f6aa44267de239b465af7..dce7e210aaa4efc262f590df4497bd403f9605ff 100644 GIT binary patch literal 23236 zcmaKz2b`7FwZ(@rpok(^5G(c??23v=QL%#!yJQ%yI0`d3GZ3*v1bd6U_t+C#V$>Lo zV%Jz=Ok$$Z#Ppt+L}Q8Z{r`8qHJ&$be(%Kn&RT2lbG~!-Dfhc~c>VgWJ+Ps%PeVh) zG7SUzQ&EOC^ldnPXjgqoRd0bls9`|E{!^w-+jF=5rnNWCpLX2bTKoK7^v?FC=9bo( z4NDPk&y)7rf3Hy;oij#lwe@CDp488(?i<3>7BAnx6B`=nb7rlz*51_F($)$$${{sk z1F(VE64;X1AZ#gYFgB!NM8nhcu{5}OR$E7{qx0yN&Mv=k#xGNk>*{M+Fw?5{H;j5Y zjOGn1U_NI>Y&ft80{wK`utc{;BqrKMAF=6geN7dTxuYY|`Ev++Jnrj{KK@DprzPsZY zUE!mq*4jI3$K$TITZ=l%02H}pPFu(Eu6H!o7VU&D)wTZhIM=bYt(}-I?p*Dz z0~@9{wa;fO<87{=CHwX)Hqk)8+%xt0vj+5fM>y}E=iavEIh_Re?l6zfafapI8}jEX z?!Dr9wdnVL&~H2Waut8IiucUxf3f1;5%Sk7?!6&@rQ+Tt@)s)J51eyl|8mc#_m$jx zuk_3HTlCY-|MJWAyRP~@Yh`=6e%DvOXQA}V^*cuW-hriGuHSL$_Z*adxqio~-!oDA z<@(*T`aK_|U#{PA==YqIe!2dvhj}Xfa{aEO?VU&Im+QA5{p(ZvEXTVWqZ&zV@!qiP zhG%3Qb$t#@V&?L`nDOcR^Y|{U4}P`uYn*M=99!DwP($Z!$*uLe?V>_(O!}bNYza22jxQum7oi5lZ z&)5;JrX^-9c=$uFjSk-l&P_ET&m0H)j1vEN-3{ZO2%k{r4Nol3Y$k#?V#L-vV~N=X z+%~M=j>*xkaJ5+CCZSQrCvG>0S}bw98`ZF2Y~uESsl|*lUwdMMvGBdX<~;rE4IcEy z+GE1^fxrCH;Bo19GF&YdeF|FgSmttH^oE90CZ@mrU~R(|Z6CgW-M`>*x%>J6Y)LHq zK(Kd5_*C#I1wRP-vd48O894k>y8W=F)y_Ykc~e2|jW8Q9Fho4S#s`)4R`a3!E`NmcEXGJ1^TAt3Pdz1;2a3 z@{7Y~!RhPqoTu4vHQS9~CH+iyte#Q#S&CR~B(rF(L}TAxzHj|KT)nN**PvdFGqgUn zYqmOgB(>bQIn;yeSl@v9XM=I2*?t4GwJ_VSNiDbian!a~TM6DyZBEVa>eW3ik8Ya| zxN}$=bDrx^_cqTy=oZ^_cENhAd@kHO+HtzB^D5krTEFl0wpVu?>ry)o?^Mm0H z8w;q{;`Sjwz2fFteg?H`lN_B1_MR|D_J3Bz?cXt< zP3@TV?*Mmii7j&Xl=HF3-8-bD{tUT$!FM&EDes_mjqG3ENxdRw2_Mo$yZJIb_^Lhl zl0CTZPL}lNeP@xoM;bB5Aa_p;#QGH6v4*=JmcZN-#=9Su#oQBe_rNgBeIR!a48_u3 zzFfiG6T=Jc9$2~H?tu{n_j#*fd7kZ8s{DOe3D@QvEceH`;D&|;V{)&a2UCkB?tH@< z7VI#JKHNJOVDWuLSD%K_xq~i*s%eS22u$hzT)PU&ZuqgnhtVZlTt1 z`53PMR!rS_h<8NyKDrHaA5P}~E~LJ_($p>Pr#ZxW_uPT$Kb7ao@2s?KsrN|d+&#C*MqvG2s(4OVwt_Hz$rp5wo_(#E4M0^f&umdwd`&}r277usmBeYwWp zsC=!}c)nR_`qu$JfO(d~zXcvt@CU(5VW;tI=kpL|9|vFyD(zvg^VFBPZ-b3H5KG)6 zVCSmuxvK4Vz_y=SXpe%8Ew#tsuJb`y+I|;oZq)MJ$HBHg7|U~?0Q($$iCYYQ0y_jt z+>>DY)OSubzNf(I_UC%IK2KxnXI3%KfP2O~i>5w>^_fTg9A-Op&yRhbN&P&g&pqhp zzzdb8ZgHQucg+2Zn0jAq8u2yi?_sWy?bMAi-nD-T({DMw(q0Cu?~7$myaHB#wtCL1 zVDqh>e0?9RekhiFy#_X4`jW37fYpslzFr5bCtp7V_l)@wntJl}W3cVi%Y3~7*Oz?# z1gxf6%6$D4u3qNrO}KmBcIw6?UvGi+TavGzfz``=y$x5-oZkVPhjK6d9IjsOrC-3+ z%f0k2Ts^t@CAeqIuh7(!n_q)%r(WjfH*kH)&2PbKnx)Lm@8IfXZhjB<{M%05nB?XU zVEvZl=8s_YGB?>HBY$em-@^@OSW?m?drB z1FIXK`|}^*M$CP>3H3iQwe7HchN&g~Utr^N-@Xr4%RTb}SnVJzd;i~H^>TebgsYe9 z`w?6{>-%vpF`uBRXMO(zww-#pzMsPNWqtn(R?{ry`hEsiFW1+A2hnV&ZcK99$Hp2Z zYtR?2UaoIHxO&#NKlm})sOPR|1gjs4o_q~}n=gGiHv_@y#^tV90Sex$!PPV8 z<-q2lyepPRQ(ugpxE0{)H1*_W1lV@!Wo}l6>q~A{0jp^itK??Y zN-uM>8k%>7?bMA)ZdM2Dw}J!i^yM&#L;{ z7;K;F7gX9NVD%knx2V#-09W4;&F9vrN5Su-p3JwOEvYw!t7#T1bM1TJ>C~Gc44~c~ zvyXP_&C%4e7F&RQ7XR^Gx9k4h5~7}%t-!`urd010Tf^1svFKy4i+HZ%+y>p}7?VD> z1*`X~_tEv6>1eomEc4o~iZ$M1<-E+H^WGl87~7}K4q){Q@LPcOHs;edV-SonXM@R# z+KyoUtN$LUKYNNVKn*vcXRbTJonK79-*3iI`<=ns?=a4NJlObK!4s$_RzB~LoxxjE z>)WO9IhI}FS69ACJ$$>tud95!_weljcTV=%v)!KP&QV|4&av!;p0Vr=cAWQ1I0V*kx*?+3Q{T}$8on40ax`HVdP+(=wL zV-JL@krX@5MvpSnkC`dx<#=O+EMG;b7aTm-pfkaDBNK zj|8h}7AyC>Ii6PO?%lkPe-Z6Lxb5mXbO3YlH8mES1)t3 z0Ir_BbSl_>}{y^sAn}PXnv_8T)8;7n}}PH`cr046wz!K;M~|ns|NsLrFXJ@ea5+Ha`RlHJ`b*DQS&aJRB6i5ynl^zow7#f!)@

A(%0b9(Oz6&umb0*H`-$h{i(kxa!%QbUM7bDz2ZCsgW`^vK~0sHI; z#QE$?!4{vb?=noyXN&Kz#(X(=XKWO)_MI4OKNtN>xxyG~pJ%-7ea4m47N23vRhXL3 z5bwv@n&+#*W3l8b-y5z$^Vz=REMz?1yVt_^sx-%w{;cykeI3}o9HV{vEPb}$1#F-C z?7#F~54Uf9K1W~H^9Hc}x}FbLxw#Rpz6F}|y$Nh_zWQ#))SR#QuBzQv!9L5+XxrTa zw%AVJt(cna#QB}?Hn8t}e*W6lee0RI9bI3>bq83@ahap^Wt}y<6YQEfF5`WUW4Vjk z;#iFN8m8u0#FP2O&^7xy*nI2?_RKY6j?Mh|%(Su2y4+p0aU8bq>aXj4_a3-@&0^&q zA6&f;-;1E;dyBDKQSXN34BUt288FW0Po{Rv=0E4?ez0TKELJ|lcXiLvHxP{R4$3?y zfQ{GJ+dLa(uFyvy`idq;Y=cCF}AKT%TsKa$WrVF;@>GIG6LVoP}?rx!*ho zqp_TYN6_`<-un(%&9mTV$raR(!qsDb_V}E~(DeB{$CSPIT`>RE??7Yp?*Y%<@HpHU zOSC5{O*z`)N^@@c{_!N5?Ty#(IFrAp;O4KHJc!Mk@s>{+(P%7xvst=J<~($*>(j*L z_bxy8>~me}XV90Wc1)h*XW?oVW7ea74nB<9`{4P?_X*g3UVyuAtc~|Kwim%eseM0{ ze-Eyr2}of^Azq_eb!w)t|OM2J0KoDR6vmfLEY)A3CP&Md$bvxc;ZB`TZ2E zb{M{V7kU$}{uD8OKD`B2^Yhm4NA~kGxa|%v+Pw`|PrG-(YPQR}-Ou6n7yb*daryn@ zU9d6go;80H`6XEWLU88zD|qH;?#em-8m>Qc{0&&Goa1ld>KW_rz-r|je-F1^ImbW1 z)zj{eV6}3Ne}daz=J;o@ahc;^z{aR&j(-KKmvj6ZJacr7%Q^lXu0L~p53E+s@gH#Y zjP;*jwQ`RCg4?c~Ier8-Mm=-<7_9CbJ?pORCveZU zWl^R52W~!G_uNyTf{nH0cdY-yjn(I8uKj%mww=E8=f&-_%l`VH*&qLP_t)1;5Yw0b z`ho3JU+($-VDEX~c{I=AX4H-7`ZB%&VB4!3vkox>!7EbFWV{Qhmw>BzR%a8Vwj|uP z`Au&SSS|Bes`9HRW-!>klIx|x#;GTV%YfA_(S}r-dGPt3?Pbx74Ic_NF5fSQfsIl3 z4)oqQlX^M0zI?yrpB>dTb&JpNx!x%&R6bq#tzt!pxv-tOF&XD@uzo*#@_lb5xcc5` zelCmvTYOK{w=$;YXM@-^@H2H4@NnwzRpBdD+;vxWHNdvhm$;E& zdSYFwZIdI@pCTkrhcY5PRE-&Zf$VRzxR0dnrpNUKK(iW>w?wF^S>Tk zJ?D6Ruv&TkH-Ou&JpUWQ)zfYxuv&TkH-_6^&i^K0<8uDL05(QFdvX+5y}aW#g_m>m zJtXqQB%CT+*SI^kC247D9>KWTMVD;Qh?t^XN>h9aD z$!K`S>*r3nCfniDpEcPYtX8hc4si91cMMpqT$3H)wkzj37OtLlJAu{8d5(kIU)E$i z*tpDl0@xV!%zGkOy;pH65HQ5E9{;bKaV6}3rli=zZ>uzARa;&?<)ibs|z^;jU z#UrNVZgv%; zFKt`F_FJ}XgRA$!^4Ty4YAp#&bM4m=oY?TchQj^p81{wR<}eux6;ZSoQGy?a&SJ_ zxa8mhurcao4!#1{mmFLOR?{qH4lb&6UCF`45a(q(bz|~7$tB%i_4&0?G|_r~=QV|GBx9dQF(eF|F6 z+Kq7AdiM3__r9CJ_N~7^zDCUNAHF+gzua8;ZJ)oZe-%wV@13`R)$Gr>jQ>`+KFyNx z=f1cN-8q{B=Y3IiU)&DXXM4}YJlfs?_P034dW6U zp9ZVjpX=fJJOfuhvzo)Ry~I3+rk*?Pd9dx&%RB7_xW3$JFM`!Hi+jnvW3Ike>AG^K zy##TMY^QEa_S(x}{TAdDs|VB4ve`T7Z5U-I=+u$pEm^Yvz>>q@@fg1F~xr*2I0 z^)s-3OY-$LT)oWKJ8<>P`R8EsQ0}E)z}3sW^e$Yz+)KZNt0yLupaXzIz$Z@{)w zFLU!-xW44(cVIQmQs(COm98tf`2)oBZ##8klAAw*^;?pgKf%?@-254?p1t%Ju=!HY zcZa`%)qQ_-PyP+OIkkHF{ySLxeDvIl@4>wn-G83Lf56rJT{^$VtL5|HpJ4A=&0>Yr z{kOb-L55>K%imqz*Gchr7kwY7WB#5Yb{xJ7d;4NjPA%u}Gq`%W$NVr=FZWmE2^Ypgn|OJ9T5S$Cd=^w`3m-f~%K%Y$>>U_Sj&s zIaAMlwKQ10yswsln=gGiyFl*Oz>)09Mm1 zWxiIdbn}ukIULRV%696;Bws6m^;?p!5peY~Un|4aGv`&n=Apc=Rz*`U_tI)`^>Qz* z4p&cZ*61Z>B$|41vnJSf>Sb=$g6m6e)&{F-mNGZ%RC<}4bWeXLwV% zdYSjl;Ob@GH;1by?_2Z|vn85(^1c<=cIsu`w}$IW-nRj(X_hkY+g5s+_t9vcVcV%2 zle}*S)^ADPw}-2jdEWu9p1h9%dxq6>hIa(3muGk^+1Dnqp?QXFr*2I0wHsK!CHdMNu3qMA54d{f zyeHT^lxKJ^xO%yl_J*sMduboIdU7+lmzXJN>dDQ%VB4vex!Dh{FS*$ttfpDY+#FEp zWo`~c^9FtBG>J$)Yz_H18- z?)O{YO^$%8k157*B;58F7uqzqv0B=G5o|ks`EK6?HYaOf`lC;;bbp7j|BR^_Y#aTF zodLFwrF+EIs#yK5o9`+|f$c+|V{`uMGr_l$aQ*q-el*yAcd7j4`;G58{#zs4wh-q# zkncpc@!co?KI#~_?^EX1cdBFI7T>A#&BA75zB7q4&sMPSd*(iUwV@41(`R3Es4e!T z?>MX-voCSp&pN<)KeLT~Cpim%ta( z*1j^Yr+!*!jlT*R=qc6YtECl;(ec3yUz&_u-qyN(C{G0|hpZd+W z&po}0odVYHzspGu&w!gl=aGD!iKZS)zRp5RzM6=?lt#unAM~?|jtG0jnPa z&NI)2t6Q>e=fTyrXy=2EHHJE8@dB`8SPj#kIew+m{hiRhj7vWkg7w>X#&8kXG1yn` zsEgso>T^!p;JXAon_8cDuG*zw+iK>Gs@{jb%OJKfCeOMYtZvELUja9t`Vw~~*f__O zwYUnd9?L$t8qGfRJ5TS4YruX7)0f`>uLb*kOkaOu8nOHa=$Shf-Sg@lk#SrH?ztzf zM^lewPuzg!cs)bzhpniM&6sWkJ0{~YrklWyN#FlBCdZb4Z+SD=xp+6&-tp#+_$t`5 ztj{y7FK6}^ux&MqV|C4v-&@hW^J1CTZRnYoJJU-r)3VCP)^dx3l4#_G#D-U~jRu~T)Qh5I1t`=aGH%KPE! zdDr;{SZy>hcd=t8QhyV!zCGB_h6lhFKO6LY3sZA1iIe{a!RF|KuJG>sXD$!nGiE3J z$?d~%bE~gsZu6V;xABdqjj{Y!|NO}Ft+Q_)0lQZ2CEGZ*%;`H|=j7jgoztUWi*wTV z7^dc&#JNwt3wDkCT|W2E<8b$j_m6(xL;U{(^ZtDTehIZPiC-Y0JIeQZBxHU`m zY;yJ#x-s^Vee!gr=}R7;0o#YZo_Tb>&!SuMuJ9aO&H0M+yywC0OW!l1y#QC=kMH9u>mCEON)91ahF6~|e+pq17^Y^f2E4}BxXI%x|aw=wS ze?Yu*wVU;c6B&$M~a4b00+eaiuZ5`rdt`YLkE4`V+X%vd(?*Q?UK> zU-!Q$eiNcTzUt>KofP+kzMo-g_9ZsQK1;5iyY6kUcU%5G@($e38PAq?M&5ybj;=3b z`UTjw&Lf}k@4}tyP)vVfe_6%q%ipSgg{GdEUso}Nbf2}~pxMT|)_7ywv!2c0g7r@W zNBbRI-LdA({~oM=YO#WTzu4jHz`w-1}*{;4{sdLwT1lF%v?8}(!qmR+EkIYN< z(I@EovS3R5gNm96VvDi&-n+&UYm7$h zC6*WyH5!ek_rxT&H2=?Y=UwB;eDnKG+&OElz0Y~i*{8hs-l6v*YxJ-6?NzJQmaKi= zn~E~Hwn**x!JYNVRlOPdfLg!WK9iuR`e1#repr8O zQEV}60Jbm0mH;=-nAP6g-f?70N2lL7Mn;9zlqP1128yXv%XH+TJr=x97W5=Af<~^t2?^Dl3 zdm|aD;)he$`yV&Aqj_voQ(JR;`?xtr9MRlne|_q6YH4k1X>4wX52&q{_^ytdI>Sdy zX>RLiJ|1_y-Rjg)`k}}zvuCv*?|Mgb{m@Q0uCDc|$GMKJv)YL1~Ydn`|? z4+z|s6H#W2YWFyK{VM zj%9X3TfhCZ?}M47_ITHTo$DM15!x-<@o zeY!Wgw5iRl$HLX!i(l#Ov!>0Of!@Eqp9{T_QBRw}LfgiD{*|w-q4j9>K3J{R-rU?o z1@2p0i<-PmYM47?Rs*W*q-JTHHG@@A>sQyzmuGlZTg&to4qIZ)nR-)88?F1)&)e*( zL%Cy1($G46M)NMM9nEd+&5fSou^k<4Ez{<7umgQY|9U*I zHm#v;E?XIIWBn}Iw`Z||2Kwcmsjr^Zug5#Wd3Qhewk^-;M7Vc{d3=F0Ecf1!zgTha z70;_hzxRWF+sT)y`0G`?XI}ry759#izgcnb4*5$J_a2eIR`K58oGbg6dp^Cdi4Xb?dAGiU;Uni(l6KV81;JxmVUW@$En|QQ2OQi9jAWJMCq67 zchBnge3X8BIJL!l!?H7; z;dRvc9+=3?<%?j(r|+-gJGEZ;)zYtVwo!9zY1_Nf+=q^5U24bU`7&lTYRgys_vzBy zTaL$=j3;ra?L(aLq~B=fu~X~Q73bQdUB)~K&1cz8Z8^re9`$g{zBj1&`rt7I-vI1< zjNg!YIA$?kzEPch)qVur@ua_v!9H&Y&)$T3IHpg`wQJcSoGZ6pmdC$2$e7;PhKxYI z1!hbv&)5>pV!N%VZRayLBzN+yF`uQS%}B6)%bmwISeb`y3vPegVU#f$>-KdzZ-+c% z6kJV9%xLiPkGwH5d zW+(8hrF)M`&L+auVu{-sjWRZIyFk=piQCnv+Pu+;+YP1`GtT_&jt#`Z_W-*F>1R*y zfVbD!K723utFH_klYS?`)nd{2MoV7H+)hTX)lMFt{`RT!c~8pS*ZX4L5#jrRy*t9E zfKM*?{@^bQegJr0!4Cv4TJVFwZW#M>{s+rhy^Q-1SoW#oj(%vRtLeAB`|B|5y+ON- z37-llUtQ~XI9x53xCXR)CVupI_%!(CtxMPQV84yn0oy#dy=S8dtkwtHkQ-RujF~(8 zv90mx>j?0P%Z?ZoJ{|t(u+zHE>ydEA_(b|@fjckT8LK~Sj{<*m!m>|=9}TCkCv$#g zz}0Lwl$G-x?pR52eIHTPi+f6KIJ219Db-`&Uv`oD=Wg}ZN?(y)UMGm@NjCm zakHr1v%|4r+%c1o(*}1AYhccE zP3oTJ*$drboAypvkCk`8`(cjLb)8e;-qiY!rMA7g<5-K@ad?Mn#`szPT|R8+lOIq0 zLB*Zt+HmhqeSTMX51*R+1nORx&zGNAar-t8CsB*dgZ{5k8?P?^dc~dhGGyaq>eYDW zJZiCXnon*2=E^pwRM>gQ7gXFng=E(lfsJQ(*<};}sv;OVi z?k%xJ?w)c!7P)(el+>RgcP}hgaM#&2vVZ;U)I%^!_@GYO#h2{HSMJ8W&n#&_pp$lS z?>CG74(h&`W01Qi`eVHcZhpeu4~t^%3FF-lOJVK_xqDz~%zYqt4-CfAUcOAh-4n|f z+&!>j!R>z)Ed3k5Lg9Ch46S%CR>HOU2Il?Ynx2LE{M;ws1lMZww$D9#HcTy+xN{7v z&D(ASeY%&<#o{|pSFhU0+)3v{)wIN10H$=k$1a4tH|V7{Ka*C<7nsL zUcCf!|6NKw0dtRS#Y(yF-7A)P*ypgzs7DjwI&Or0fp&T2v;Kq?H7{3S=EnFdv8%B7 zt_H_8I8Pkn2psaxDnvx)WYxee1lpXbVNue7bH_eOIc+<~R-Nwjn9cUF30 z?y6$!J27{I)g71pd<*M~#eYwwjYT~Ld@tr%GACm}3#jiaw2@%@a*gk=e67`ZzFleh z*91R+Erx|Z2=*+8KLlPJJC$cUpNBE~*cY2uX^()Nr@q8J3N~&(EOFlfJ6C-#RBayv z+kQ%+eHUzOsXY$A9@`&F+b6*0MlH|%9@zE=V0rG7V4tHeaSOrf2V#kP3T&SXv9qf2 zJq=d3Ki9+cc?MHIql$SJ+&$(wH1$cWk9+NT%y#OYANx9;`UOm%d+-eE7b{KO;y!Wj znERJ7^+m9$#5YmDjJZa(Q#ZzV*Z%vMe#>c<_6k^iGL}8@Dp>vb>N&50&9{2;^*UJn zAT0U%0oZ)$OTOL!s~eYm{Sd64e7yc%8r?}GJPlCSr`>Sexu3RlmZ-v^tAaxZ-VS6_%F?q^{2axZ-dS5Iy} z0(X!3IhuNM^9%5Yn0lF;U&8ezH@^a_X_hiKzlN)qx%my;^KUzKW0ITSg7sUHo8N)e z%iR1PuAaU02eA24pT(YcU;YtO_b!$H3ELD?Pv3v8^mC{)hQEMs$1G|4SFpPA-dP(` ze~k6T+^6!tRoXVxd55Vb{_kMpbKm|0td@J`6R?{1O!oe#VD*Jq*7q~8dbz%z!_~9C zU-S_3Pc-$c@4vvdQ!m%|-*A0d-~WKsG)uX@|AniU>-#1AARI33;KvD5&t1_6tbP!B^5vg{%$L68s~=e1xZD-};p)lPqCLbchNhl;4FKCt zz0B9*aDBI=~mw=7(}+)K;B)svecJ;W@Jrk>oa0JfcanVX?-eaX#=U^UHRmE5dU>1A$K zM)R()ow_l}%_?C1mgHs_T)oWAs&Mt}rQu-nrJlQDHL!Zl`|4ot3ib5823WnkE7pX2 zS5S4eT??Xa{3OJe}?&0=M){Tz5I^~MPOsJF%J;~45q z(A2XQn}U57|M9uL^ZwloqMn$|!Nyo7Ri7)ifU6t38T$6v1w7YrZi(h|j7c9`fz^B0 z`{?|QbZfYJEb|&!#Tsw1a$e@pd2fSYjP28ATd?}M_$|PC8}n(K?GTJHX9LNK+V)`n ztN$jcKYMBv_ zIhGyaS5&^8y7?x;udaMMck}H6cTV=%z1^cAWQ9-&?hv1h(zQ#D2zV?+v#2T}$6&OwD%UykqwPm+#np;c9uu z?gv&Y-?3BR>I>;V_u~F=_3~ak0Ir^U@xUHp4nkAUy?8L#cIxH5cnDly?!`mFYMRB$ zJ#UT=tMu|-oQn1kKHI4qlQVKSSidEAR|8zVycegz)pIX4f_=xT=N;PwRxjVN&2aOj zFZntGtX{rjr^D5guOoYiX+cv@zK#OhPQA?6(Qtjq*9@?lX0b}XW>$KcuU51Nh_Riz zG0E2~uzpMOH5;y8=Ia=^dgj~)HV@@HwjHj%kiHVv0aq{g(j2&Ya&v4CF~^~)CpX7~ zZKq!5W-eS`a&rP$O|w`fHz!tlnVXZ)e8<{O-I(O&YheABQJ;x62HO$y&h)eVqLuDFvnu!-=zXXU9Xzm(&jOFdT$gRC z+BtP+oQd=PJ0EOcn#Iazxn_>(0)%U+jVtqPUwQV0V4ppnIG=qH*y6MG zU5u&uZ1Mfom@fg3$3_rq--)sIz34mTQt*z{KF@gD`;5z|Ek47T%P}>dA)d_In&&IP zqp;*F-y5z(^VxpJIfe0f?_LGpt3TKGi|K1E_YXL9Ea^Y`|JF?`z^SB&0^&qA6R`Jz6U|g z&n?DoLA?u>GjK1OXTUh0zbCb0Hvc(C_kkU=X0h@aepdG!-H%|5cTnaz7Hqt}p5{3Y z-RD?m-|h}}eciW?Wrr%pF@3@>sy^#V%)3mVwRfa?%>3H zAHEFSy=KfSaO2dUuC!Od>U-dKolm2F4ZbY3&(@#*UI*(-e?I{0_dTDsZ@|-5f7<>K ztS@cf1lzWJ?vLPUt3Pdj4AwW6Q{edC0xw7HK6Fgki_YH8-p*uH~s{! z{tPj`pWX$l`M&l0k^Q^}x81=-yPv|<)9!t+n(gx0?gO~}h5rm}Tz>!f5NwRPXU*S4 zJ_4(s56&Ea4$mCTT{*{J!1ZU2zXYp|p?&7~E4X^b`fIRSImh3?ZCB3mw{Z2e`yE)V zoa67|_Ln*S0c>36_(!lY>Y3x8!0P23{|wI@UE^|&e}U`I9RCVdE9dwzTs>p`8(6KJ zc*@|Oh51t>gkMkK6QV%nrC$;F=~s#ZJXcp76Yqg zJ_9PhdSVs_+gEZu5Nw=!a<~Lo-4bodN^{yi-?Kdk&Dijzz{chKfV8#sne;K zhU?4s%Vof7n#E`MT<;YANm52Qe46Q#U5#90JzwyC>iGmWQkFiROD@1+c}> ziTZ|OYQ7u9u7U5=6~W6>hp%K@#a+jh;X|qO8Eh4}ZPfGGZW!2h`VzM)*tpTOP26y} zvHJ4eVm0u1VtmgzA3yu}PIH`&H+S6X;GBQ&@$5C%XbpV&bN<%^tBt{zJ8mtwdd~6M zV72o6uLHMTdH&ahtEb(1V72o6uMfAsoc|5L#^wBP2sTDNdvYVNdU?lKWUXVD;Qh?t`u1>h9aD$=2|U z*Y{4jCL{6b&zfulRvSb6tjV@;^^A8ruv)n$+rw>F&T|x8J?%z=)yjG90Jp!a$r!M4 znfF+*G3uH3IIw!TCgb7d9LqJCfKPwcWJj=CIo6%v>KW@quv$6Ro#E;k+b&?&L_K5M z6|7#a$!>7&14^}VN$#HT-Nau8Up9P7bw^^Elp{a88H zL*eQf+hJhWL_K4h3RW-IdKdn2*a!RE1Se`KYV?OV`{)#p4G@P2Y!M}h6z@#TI$8mykr8^+D3V)Ui$ zOtAfyZCl~$H7xIjSzz1i%ioA*gB{ z&pMq1R<}g^TBZ5id*Uzar)R>=fqLfq4Y0Z;+F6xW=HQ!X#wG`6 zgN;iL&H)>vUgqFjxW44zJg}N(DRXdsrRz!#E`T^M+o>Cq-$^b6FIQRmGG-v(Mct%v_3Z1fopp!SfA}Z6LZjR1N&Q?a`zWnzF)hSzKyOg&w2o? zmb3pLcroI_AA%1k_`~qU;ivL!@0Lg4_OUP6-+0s>g_{d~iTe)Nxc!Q_$Kd8epYM3v zeiv-}Dd1?2!;LMqC*bDEzhfuvdvJ53mghbRxBUTV8Q(&<&(W8-r@-pv-!h+u+o!(# zE%O<$y8XExuFtb@^)sqDJl8|a^Jwb1(_R4EPQAR-UWDt*o%Rw~O|!U{+&kv#O(0@iQw-Q|9G6|O!RoIUXxTs?owd>w4Q)swFufYlG8UGn+{+m9I~W-0UalSe7y^C&)ZJj znB?m{uzpMO^;5WdnXmWZ>Y4KgVDnJ!rJupo%f0j=T)o^&AHmg=o1ga(^9wZfSb>J09Vgm`XktU zspq@HpTO#VesoX%8SLM>)zkN1!0P9q=U)6P+dDtqJ;V$~Q%}B@2HQ@(%-1q-eaY9d zU^UHB=4-i1H!nGpL(sghY^QEa^0hozza{xv0j^%=Ybabjb6yc_9?JV_B{cPNFRct$ zFZa?aaP{P7SPwC)qNyi0!@;&wFLSdRTwijtI#^A!l(|`>(#zbeiROJ}J9T4{o3+6D zEy>N=aP=}b>%i5sm(~TFFZJA4>w(pCU#$=JzEaO!v;o*N>|K;|y&;-<&h6mesVDE7gKei?=6wsezT|yNu$pEm^S)K3mwDeB%`@(izNQGFVNs zl)2fb(#zcJi{=@&oq9c{`dqLdntn@iGX<_*=4OAmdiK%*VDqJ(GkhReJ!kkJuxD63 zeIE?=Y+r!x_gg=k90FJO-^(TLP`K?cEVRSm#%gIh6>K|w`EGwW*qr!p>hwo%sC0ja zvHv`48rU}a6Wa*3k0rXrHdV3uT{l0gG=uF!pJQ|W>PLWYCE@z>y?r{^es`?=<>wne z=lE}pYml<~|2( z|31%l_M5YOEcgQ2+E?av9Gbe8H8~!v9?QRlnTuvyf6Mkc=Gj=s-Gp`m_&)m2=i3wE zYMRBixVz?g68Z`S{~Fx9*q?j*>+qq}`F-bPxH0P4C-cDeqc6Yt%m@2yec3ywfPKDu zNB_mu`B?xqpZd+W&pow@odnju8Fg}a8r&Q@kL2rgH1$~Wbp~4UbvW@C(a2cmW4_J= zH&dH?=cD!wuzCwP&pZpRZppfR6RxgBI~#lyF^)fH@f@&YSOwFcIi6eTd!gHxap~tg zuzvf_7|sVf2K&k#bphO1ea^|>T`vUBpw{P|t9B9CwwigPs`sJqVu)>w$+Ip2t6Q@6 zm%`1bzQkPyHqJ3+EiQ+v$FfhZK(i11&eMD1O0eI-^yN3etH6FA)7OU>zZc~ah>YWEaQ8iN4Vro^d*WI&$Lkq#KWss5Y{qmQ*fANGFpMHwol`_ z&ms5TZTQOj;C6Ui?}Izx#;9kV?*iM8zU-a5!Opq-_X6L78>=ttcn|ng#!l6B z7Vd?pm+$lY;OhCTb3a&ZB<=2G$4sF9He7vMu)aPkHF2XzV5lrZ_V_@gx z-+i6acfl6tr0;P|%{hrP<|n|elkeTE)A!)6fj-Yw+F56xK3T;$KI84v*!&v~>x_FL zzSZb|DCQi>ex8C4uYC4d`kscbSoz!|`rPYlF|TL9_G^3N{0(QRO7H$}Fjq1WlzEu* zf0lUnwf#H?_WpIBHBmngSF@;j7rjtvo}p+jRvN>r=li9qP5wRR%W$7%ojv@0u>JF2 z*S~{(1)@H#>gQFR6xU7PYnYmSiOsRklB?%@z7F<0<~RKxz`YyY5AO54x8Fe5mofbi zY+L7%_tKki=Q(2C+4jxhLEoJ+1qHg@qRGgn7pUn0qZ{uU$mdV z)g5czd+&nPFCs45dvM2kF6~-@i@hHy3MyKLD>xJ)L!)PyI8v zTKTuj58>)Q)4o0e+n;*o{By9nCE714&FAK~yaqemVZuD!gG3w>_q~E~x z<$Ka^!D^btXZT!y=l@-$yPo+S==W&O%XaF<D$i%vpO+nLewnamlRX7d5vn=|=BpYiw$1om*Rp zczd3_&y0OWwRg-JHD>#5pggJbLHY*qv?qqvcw((apL3gAo7);YS{Agzjp~i{!TMtT zuobWsvHsXf*Z^!$ZCLGT`dAs+t#g{&W_2{S&246g=quFLrEY9$YMxh3eMU#yqNa{TZO!}5#NWG~gZ3se zQ^l`GUGIO=l8)wvIdj^Y+uJ8CI_8+>Hv8*cpHoZgoR+5Mc6k5V`ibxAcur^dsF}@e z9nFhz*V_%Jj?x!JZdtgXeX;8t&2>XN@w0WUcRkMaYhBPrOec4)cHM{nncow5Qhh++ zKCILR`pwa93tHPd8e2Q65lwGgGP$|+e~X0H`?Zawc}a79Eb<;$OX~@ZQH52kGeDth<&;@ zy0lr%ttY_M-GiU%?F(ivn1|l4zLyKViBZp<$3ol2J^rb$t+Dku_1;*m*52GahYH-M zHj0~-Z$Trf>!fCBS}>1QQR`dR%$H|(L0ik*77kfr&6)a~mNr`VuAi%gRflrV z&8K`oZA18^MJ@9>rnVl~*3#HIcV6?<){f@3_U0x}Z$n2%Tg&W49qd4#(XSp4tj%t0 zTf$bx+f+YG_U&10q=A09XX?{u_3id+GxXIL)Qp0Bv~hv&(n z-#bCS?c|IZDr=kbFa=LE=Qf#{%X?Pw!>KKw#&_O> zJt{5z4u{*uILGF*hEtnIHTRX{*_hh#xW|q0F1CEyfA20W<1r@Vac-7RJBHPH_9*J%m_G5=7-iS+Z8|xh#l34>x%C+HyCox#kH(CN;hNQ5;G1w?15Lu zhL4AH6HUr9C%`_T#J_9ZKk@PKiFICkd?>SN0B_ESttVlL*$up4NU!n9(e7}ySmO3T zqckLLPl#G9ag&XzEuE0KDKNE|apr3(=AIAV3vABQ&)(qvuZIA;7;fH};-OTH7SoW>+ihe|;tLeAB`|U{VjX_fQJ7e{yZ43CF6Nf$#{uwxZJ(lxy99+$I zYqFBQV>?z-Uf*X__2QmW8_q1|bxQTvH;4ADzh|q@uXNwL*X0atMD3cb2VRd_Zd@z% zfV!@)FIs1uu`%0k4A*D-^{G2~@7e;e?bX(xzlGH1)cmej-N*9iKJ$3EbJzfLo+GHc zn`aMni*4FEVLevf4)2ROM%T5Y!o8^VFQT@+y5ks0?Kr$sHDi2leSK)>=Z@TW{kJOa zJU4`osbUvXzkyH9SidXSzt5MSSn>3IQpKIus?7Fe>J8}g6l$?!K9$<`=E6QstFYsg zFRi$J$WO1hxs;zlZSIqUWnk}tUYPx#S#kS!ZO)>0eEN5RyLZGExqGH}opo~ehVN!R zL%(b7yIA<~VAsI@^}9x-s9wVTytjl8>ZDzKt>w7)jV1BkXO{5(owUx~1AQ>Zpx-s` zhxI79_g}c{?buy&<6ZB8m}@R~jaR{3XSr)U7)yKCc(sDN#={D3e`{mu&-m3Ve-AQk z?$5?@{?7r|YD>rEUOX437E9cDhSiqtGKxN$K<8ueeNI=8+SuG77eLjt#9RobbbT&e z1bJi73tjwT_{%T7)OE*Q0$=v=hzV(bX`SCX!8y1WFT>nlms2-j?x7u63HP;o!Qwvu z2zCYa1R`9gEwGQ#uB?34@3Ug&iNAIA%73+uX&;Rudf1%RUEj_S> z#Ezl94by)*&z0X^Y1>mDfacl#B9^u%)6TJfsnQek#b)L+G-?Etnf*ZA(r*IJF|o=Vd{0{k^>1uXntuxB;=K5&2ROrGt0 zzK+?)bZlv*-4Ax2`V#jIuyHf6#C;R&T=hLywS53=`vVK@L9nr<_7L24J_t+Ohr#AX zEzkWH*!DBAJogc>&(W8-N5Sd`V~P7V*go~0UybiEu)6)Z9}whI)0jT@;F;9VRGPZQed69R_s?SLJ+WEDH&H)_xkk2AH^z9^ z{&`Hl<*Z730j$11mOb$zSpC`RIo|=BZ}sHsC9wJ-Sn~BU*nH_rzFq;V8<%{27p$Iq zeGj~R%&TbX$=CP6wo@ql_)GG9N2yXS4EZcOs^8d$$2`T7Z1 zz0B87;p&<5>tORx?xi>2>g8Vg8C<>GOK-x}lbg4?iTOF2dUEqN*mmk=Zr*{vjU_j~ z0IO-1GB@wS)yv$x2lxEjPTiQ~=9ggomgMGFVD&OLzlN)4FZ~8=zSI}6=iQgT#nin^ z<-fzW#?;gI?<@U0>WtwJ;M*}v+Wrx&ZoGGv=krfkAIyC!|8u47NS)6xwZ#7gY<%w9 zzk=0r&-@Ln<~@_W|97x@xxW8^tC#EhK3qNP`$0D`AEK#eeLn)*PQ6^;kKy{VzW)TP zX_j(*{{>es*Z1G>`!L(78#^tW)4OdUT`g9Z17fn6+>Ib%+dYP{k;QErU6~Stn#mf0_Lfya8%Y3bb z=3QYsbz_pR0bu=>g8S<3|BAr(h#_Ma8xE%*~o;-W9e}Hzv7R3#{Lg+^h{(FLSdFTs?bf zU9kC5&t0(|SUu-`eel-wtDe4xgVoEsVgtB$1yxtu5fF9br?Kv1@Qnm}hv@S@=m2jB zUWwY=oJzeBTurlB<-KrYi2ie{{x$*Ir}{;ewkcSBC)zEmw9Vk^yP)}8Kg&0V-$lJY zZ)Dq2Zvj`+ELP^)_rTMsw?ybmJr=W%h16T2sb?)lfqfSL@$Ojtb_r2W%r;=j9toe9p`8?pJPn=*bc1TtKLWFZ=Pe|>aomg`zqFWi-ht7Kk1Y>NU zHamjV&&O{8*4vm*+l)mp#+(fxD{4D|`LF&vq5kZtoxwMvXRf=zonM#1{eCl!+V2e3 zeur`HMPqhmMQ2N%T%!Ayq8=x;M)tVe>1S(nf3h&|2~+y^B3P!wcQtN+pUQG zkk#G~Y_Xlb{V_G$iSrpd4P1W49spO%XY6#aTKO3}1Fl})iwDBh%X{%4xO(ozncc)3 zY#S{1;vrz$sh9WSp>Tb<7Y_rgX%;K@yg5F+(#w1C2sA%qZKrNb&d8Bq{g&KaN5R$0 zdvO+AJ@?|#U_WEk^BLO+RxdweXT!~xzI@&^fz`{;*g0_Zob*J=Ib~#KVxmDZcOqu53Jvke9ecem-%Xit7py&z~-U+j9my< zFZa^%aP@L8wZYYsoAz#EI?&XUn?+#Tsh7Dq0j@8(`7BsXvsfiJiz~g%%@VYGiLsr! zG0Dw|VEvZl<|Md!nVXa0>e)-DfX$bB?!!~T>iLX44eV#Ediq`pR`)aZk?Jlu9j@Y(3SsgE2yppJJ0PrzIkv9)*VIBM_D@znO=J>@gbL6e(j@B4G%Y8Ex`^4%&; zIhyycajsL==sdXXd!gN5~mm?In#Fmre@B>`TV;OY+sti%4fM|j_D$V z>#2<^^K4&v_QhbIJ&`z{eF@m&v-MqysrhX2z15g615d=ZB-XwYW9?^O1N!CQNz^{i zc-#AoE2u3#!4#&f1#itH3*B$ydHNT#e?leaAV2@p$iE1D{f9jwk(D=X3g6 zuzfj3`}SG+oNfTyr#|~Heb>S5Tc6L-m-W0JY`?DOgH>*BfUEnCV#tlZ-Rs`ufqAgFnUjU7$BCzdmC7n*0lIG?{awPQB_IY(awJ7&#d zD}VFx9-eaXY6&v?v7@xwXxng##)!LHxO$cjI}n_`@vXqWUOPl2A|`$&bV&^--u=0 zS5`4MQ@hvvesmA*`%&ln(bwQ=n#Ic4b*S%!xF2R$=lnjnnr$pum#@S1X%;Kj#m^se zbw7f0ITy=W_y(H$&2z8=mb36pbbYz^9ssL(7W^!^occkydd$xrpYsr!KA-29viBYa z^I!d}8KZv+Ja@yl;Ko>@JyL1P(H^Zd=a%mu-$t{&@%kNS^7k0r{56pWv3WDz@*hSt z7R%pkR_>I${$}$yarwQ=Gh?44sh>a}NbQ)KsGo$ZS&Z3``YHG-)ZPbASH6FN?dKV| z`^MUMe`9+VJeb<|Q~7gnwW;7IEA4r>`d(aP_B%@w4kkU^PEW{qAEwKZe`xu%g{-aP_qN30Tc`d2jnE-2TE}2OF2) zHr@amqwYEK_l}=|)h_^Nj&H&g61N3(p)~<8qF_gX_;6e-BnG=lBP> zddB)kuv$6CKf!HR&hgK1^|bp7SgoAnU*YzbIsOf7T;}+9urcbH<3GUa&e3!1+P)9> z+*+1Z+6Qp+;kxGz`VefaCBIR91UFWnpQrZsG1zwc(%(P9KD+GiUvT^5zpnoN4KY?< z`uh*qKK11e|1UW2GrrS!4t<~b1YKXo=ZAsq)r}cJOb@i7)N>iHzti=Et9e%E6QkA( zZrl7`*Bh*s`Shv$>WS$Kwy)&6AJ{ncE#($X5azm+y`P zz{aS12YPQTqh1-VFW(&pg4HyO&+xh4DT69qSN<-z3dCI4PTiP{b1+!HpDXz;Hw3P} zH=1|;s$h%nfcp3+Np;P8U+fzAdAS;RHR|xy;j35NbsPpCMxFPoHH=ro^4_*4*mn97 zw-(qqzo#W`ZMd=e^1Wdl@I+#sBq7en_nN1{j?+2hj$0R;^Y1;Lz2=&%hfjab|N3CH z^862ntLGeV09Gr{{|LD4%JV-GuAX)qg4N3NzY*O2a{f048<+FH3D_9*?8!~R>Yo41 zaWi;1N8jOG7w5P+KK=R3*#fLqj&)18dd9jHSgjoED7bpYwl(-N`d81`wgIaCc*s0jrg3vOQcquzxM zjBR(YYoea9?EzMIY*~{%;p*j@OonH?eomHaG6kRhtjSccTDc~B!PPU~y}@dZH}l*F zZo6`x`@+@JZa=VEInVv!_Lnu81~xA9J^*ZtdgeVHtnR$CCNtpW9LqI15TE{x^&qfX zIo6qQ^^Emkuv$6RL*VKe+o53BL_K3W46N?hvL=Va)m@WlN5DPrmS{&-nsI)Xco!dq zW~@HXTViK{-J6zZM^{?ez7fq>eeR9K&IX&uvVBvfmF?%C8LQ8EEaUUZaW#YO+wtXo zKL)Ix_YLFbRx$e0_E@m}mTg<$>Up=Y?PuV&*O$Nl90zuMdsP0sH_Ss{!{=4+4fEk@ z+o9zhpcSs3wORn~gQ+Jk3&HA^XvbHY&&_9k8=A4V;=F99ZcK8p1Uv{WIXDrnR_5R&xO#GMGT0obXTGO^)h*FZ zt+X-+r=b~}94rMJmmHi9Hb%Y7!5MIU$-y$Pnr10;aAu|JN)FC~I4|3&8Y3lo;3o<2{WSmP?iMulyr10)HaF?x3vjgt)YH&!1LwD{e0RFN(DHrO zz4S$NeR_$-fCF?moD=QOk3`4!8YGw2be5xX;m-xNm^f z4=&=q3Aayu`TOAmV0HU*J=_Zq!qv~I=I~HAF%P4u=T7?;*mmmWo%RS^U+%O=!D^bt zz2x38SKqF5UAfa9gSbYvQ#U4i?QyVvi}$ws;R(2U`FFu5;p+Lj;8S4pt)6^64OTyd zK9bjG;O0wT^7SlO-MHlIIkUoV1fr(WjkJ8*r;*GphE%~Iy;w9qZGGDL4)idYsgUv&^mwo_OFZa?9;p*jH`Vm|`x%qK7 zF|VPiCpSL<+fKdA%}?R_lAG7TYMQ0Y%^Q`jE4ld@#Pe@Ebz_p7H^KTX$<14E^)fd< zhpT5Vy$v>B>Umdx2dwUQdH3Wmz*|$Rr|);c>i&&6_u_kS??v~Y=kS+sHGc=rZ`*45 zJopvZyH>MUA$9#-?AMUNn9uTej^F5{_&bNb-(tVR{QW@eIQ+c$J=otl{C&YT`i;x` z%pbrvV;T1!!R3AaC%7@W-~S9YCimK3z{Zq!-CyCxspb6r4X$49vA@IB%RTlFxO(>3 z``yHRfTo^3_957I>g68$2(B-C>|?N+W-0gBKPz2V_SnB5cVf0vHzs@R-(dZg?1TTn z)yqBhU$}bq*e76frk?xC4_Ni`zUqNyzVzkn_5`b!_f;>rdh*q~o0vXm>d9AMuRi%KK^% zntHjHR)MRRducFSJ-HduP0Xrj>dDPeubZ;72YZISi*l}qqp9ay zZva*+&+rJidYSi;aP>0p8^YC-_l>%V*%(bddEW$VJM}W}o5J-a@0)?uG)tNH%`3gk z`xa=PVcV%2le}*U)^ADPw}Pvec^?H=Pu{l%dxq6>hPMH$muGlexcSnT{X811UY_CY z;OfcOm~LXWM^jI}b^zN>z0B8+aDBq7 zxO$nd@o@Fbc>>rxlxKKXxO%ylCc@Rrz0?3#Pi`i46SEtddUCTn*mmk=ZuWrdOK$cA zt7(=pH*(jY)2%g7sUHo4w%bWp4I{t7k9m12$jkIm7#c)pLgT1AB(m z)A#;h&-R7re!unIWExz3=VA;8z-@m~p-qPytEKG>usn;rjEv{cy1T?os*6_Z#1H z{C7LHJ%TvjfqW;jjqg7Bw?;?8eV;P7zEd3qxA;z_Zx(hm<~x%(^K1nBzGv>!*KD-G zX!`7{iP~ac`sQHGn0<-!es&Bv?`O8rZ(RIyD}R0yITr4`Cu91|i*rv~>&(3cZ2vyb zcJ`b7`Wf(9w6(9y>o_!ZEo(9ltRBn1E18dGTlbyMG0(<2?k2QW@NM*;_uB<0rm;zc4oC)^Fb# z!XM(%>6K$+SrWga!!l z?|OXYeQ*Q3ybo@Km-oR$u3 zobCZzoRhw>F^$ty!{Xle2H48)F~YCl6GbzU1*iuzl!TK9A1#A#_XL6&{AGIbU&}_bssd()WyL zkHFRaOvxA?g}V>+`FWnctaDbsUB#GB<9&{?$+LCV?lG|AcRig;+0Wx}pQX<}_1VwU zB+Kzzr=KVAt;5)dV)mJ5cxOHdU%T?zXX$$izFOt;yy^4a7)iUQ!S-u=@FQ)rVlm(i@x4En%Y|JsacGiU9+$MjhpjSFWTx1gnCVJ~`DM`Lqq+nn0+ z#M|?feP--4y0dHc=xw*#3d)nZAEa*xPkUlmjVIP>^f{-ct)-)}tF^riZd3!-59^N& zz?Q|9!v0uDTf4erjJ1tz?PoAH1X~efYPFTHl`;FL zi`pvKs@QOBHEak^dj`kq;CZc`om90oFyoC~6I+J=+4mwQ(GSmB;I4)9TSkwWJ-T&X zNC1J7BqJ)=xEt@CjN$c4mz93 zOclQlb-n+|3%gn-&7R%S(%CtA!BI!Gbl6`*eNL@yvs;^6I^hFr>n6UZ$ItH`pPFNt z-`LSOkJU2ou2pmOm|0ETiBcbl{(sl0Uwt3UBef^G2JBep;9ls_w(i#4M?D$`#6H~{ zJ=(06w&UUI?!iy>&i1DEx#$Dxd%4h?8FkZK7TPxM@lSmnjcv!OH(<3|XG_a$DsaEr zC~ERHt#RSp_C{3KNzKySK9^Nd>tEN*muI)VqjgRzhb*z?Onr812dx|G=W2e{q1)ftA+xG8hZETw}w`I?^u9l9@mS#`yq^_=x)}{qr>_DF}pdJsbH8plD zWGmxsuAe3Q_AEBiK)>8G_35+v_j)%t@1@VXZOd~y1@5``o_LNkEEj9fSKRx<^JLNQ zouJ=#a?iN@#VX#rLHzOvX}?w)il<=$tdU#{PxeGv#^ ze!2d>mEXNy`sMl^qwN{y|MJWAJ5K%X^Rm5MzvI;Jo-h4!{q9Nq?*Gy+*Y7y=dk#v! zTz~TIeO>zH`i--_c`W^M{l@9vfZAs{-aQyq);8y14?NMF+Z1Ll?_0%>ptgJ(-+d4E zskHPv0&W}Q9GlM?L2Vw@+*gigLu$w49yi9j*z#%r4Lw@MV@$^5+$^8Q_p8r0<4M29 zshP)at)VB*wei`;WX#jR&OO>HjCCWl5t#jKR`HF&6AQix*!dX0DfI}m9{G6qq&lxXK8)E-25-s?tarr{vm3a5rDet^XS>7I zVu||<8f8-Ara;tUiQB`d+M)@G+Y_c1GtRN^g?R?T_XfKL>1QACz&A&Y3;!(qm6r!i zOuzfW)nd`7q9w0oZl|HwYNzj-{`RZ$MUTnd*V8fYi0~O;@5J!^!KWAe0PrUTp9x-6 z@B_ii7W^Qv8^->e|G{!rFXKK0mVN5DqaRx7YWi*O{yGeMd&r&>!w-j(uby>00u5y+E%LP!G0UDgLb@koM)p6tk!^S&dnij#>}1l9Elm9zGj0@9yWS> zcnkdgb1NQEh8#j;IJ*&13cgzTC z<4UvrhG_b1zbY6_ZLhW({k2n@Q}eq{b^pqv`^@=p=dd2;JV#RZHqSoj7TX-x z4ePP;4tRgeak{RZ74|;U-$iYEb;mJ^+HrV?YQ`*}ers6wdq(c()^{uJJlBVBTgCdh z|80C~#-2!R|2|*tcLjO+KB?l)Yh`A8GWB}&c?z}IF`r6pdvjqQr&ZW-%1^JjeaIJ8 z++51fpf>l(!I@ysy*aS|#TB=I*XAs0$ESa1xO+!zk-KLa>a3f)H~cK-GxWRGD;L~# zbPeoZ|8dl$s9wT-zgxnGbkiQb#!}q-#gcgMFH88qZd&K=fqs}{(BDNp0P9n5@4Il< z+qt;r#=G8wG1pw~8n1}C&T`jyD3tD6-y9b6>ybqZ+_h)0Cf7k3B z%>Hv9oC~hi7LCh2c^*tHmbmi`t1a4jG<~{PF2LgZoUT5#vAI(&gsN$Yxd=?@c@JF- zd3(qUJ^T{*;*Up8Nc^RBe#->s;9k58bAMeL6)L+B~U{m>j&+sjkrfzY+%qMnR>RU1WXYgG4 zZI!ki^?qpXgD+uedkXCw`^m`E1*7;%Vvz@x< z$G*;_ehSm)9$ZZQbfu|V+$ZiGbN>vc-WQuid=vGvm}_J^bz_Wo?VrQ+Th6Yu=fUdJ zug8T~8?IjNr60r9lbd&XiFp@IJ-PV_*mmk=Zr+3IOK#o=t7(=pH$R2Hhn2bc z8T=m1cIw6?H$MmKwWtwx;M*`u+Wr=-ZoGHarqsW~`eE)<`R^-j2kN}T)Dr&(u<^NX{|HvgJ@Y59n)gih z{-43><@){wu3oP1U*YOm-;a8U`5T&g*7xsV+o_l9`wzIjtnbHQHO*44??2({<@){$ zz67(Kx-rS^zrp$~S%d$8)ywt$FI+wA`w94dOg(pn15rN+OTPM`nJ;}gH+{kC#^tV9 z2CklbHS`kG4^2J!>JPS^dYP{QaDBQz*2v;xn(ond1ar;N7^l}w2k5FJEQsBChAS#cT!K~6WP|(o5IyJiq6SF1Q7|S%~>{zyfs~fu&d?)NO zo~v(bG@oNk`WORNUk1N>&+%^qSC3_0+g7p0TdbUyIkeq&2*%hxZMFxiUx42NthX_r zw%Gx}7;`qLdj422|J8P{{Ml1GBHnoRP!8`YpM;4u`9k_u>(7_1ufI z!1vQeJ@42f!Ro#{^NwwVn=gHN-!y^MjmtZ>8Lpmu&F&?p1x-EqItpw%^)g>`;QErU zqrqyL#VYw~t@JWq$DsL+wVk>#$=9)9{g&iwE?m9L*F3m-=G+E059K?y9j;#PrTK96 zaxWbRS5Iy_dWq>oQ%`QXz_wE_bF%=hFS$7$tfpD4lA9AMz0A#tX!j6fJ9T4{n}uNg zmgMFnxO$nJli}*wOQ(R%mwN8QQ^D$a$DRiE9jl(cPY0{}j(xbg3l_oEjrA@#18ngw z(03-L=3OB6PR*U7F3(+IeLMHI-v<_hy-R#wdMBIbQPgLljl(8k-kE-uA5`hyGi!s- zMsJ`#eCVJ$J_o!D=DO@q)!wP&z}}zZsqMq|KI0rTxp{7)J{PWLQS&aJTxrVDcB?ek zDQk2dn(cij-dpADe7O2VG;?+V*kaD~eGXGIXX3p7E(F_`X0h^Fu9;)H2;n+vsGLu<1$C-%Q|az8`w2- zT*mtx$MPj=i(@h7%b1#D5l`h8Lf7moVDqs%*fZz*-LaV;pP4q+S(mR?Z5)T~yZh_@ zyn8!bzh<#=j}NLo58r{H=2+8OCEIU^*j_D)5UHGi4Fz+&b)@NdqG0(kq zciy^VuO-$y&sb|?cf*XeE@Q7J);t(%ZLIf$vF6BF$8}4{ zd##iDF4_;E&iA9c;cA-2%GkB2?}4}TqOV;HZaDAG^%60MmW3Il5;9Snb zau)7IbH8~Gw#RZ7zJ;zY_ujX`YMuq(C6`m*2Um~z?(sSIqv`W`jwyTZ0Wkm7&zdp% z_k`zeco1%kCE7!krX20zN^@@c{_zN!?Ty#(IFr9e;pVTIJc!Mk@s|HEqOn;1X0t-K z%;&uBb$yJu{NCl6vCmP|kE0K!c1%swPr%hI#;i~MBz#3`?}Mi*-@m~2^EBLjV{N>@ zu{{GGO6})U`Ll4fy}(aa+H-LAz0q95GpL`3uS9LX`qSSFV14dO`+E_r-*U9xeD{10tmeDa?>_ePeYouoF53M7uAX*pg4Jx7&uu@1+h6#Pz{cgbjkmzY zsC$n5z2j}L`i0=k@yGDY(cG1Dd+%N#!d8<#nL2sTDNbNmHZy`1AO;hCdrT+Z=VaQ&I%ufb~N9Df5>&scv8 zRx9WDJGkx2IsP85o_2o#tCe&7Bi#Nn$3KCM%N+j3HX53ud@rN58CKD+GipK$x*zn=d71u<4%`ujK7 zKK11e{|`8yXZ%d#IrQ_)f6?`2e4l`AuWrmpVthdiqng8b{hh9lmn!C2okxsXU$|}a zd)+c{wallX@~bDNAK1Q<>;7Ql)RV&jV0BBhWh;%x)t~R#UJlJz$0HvIHZI>Cmj@f8 z?j7j8aVGU3xW0UMTmh`6S$u}i^-dXF>ALbe#1IK)JE1Wd=ZawczE|>HZYW%RA2jd$ zmB1E11L|8DQ}f;zy9T~5`KLA><@sM1 zuAXx|0<2b^|MlRuE6@K(xO&=+0;`qhe|@<9<@|2|HZJFXL$ERG*^?WA)jj{260ij{~ba@2tsqcsa*%O(x*epRw)&Rx8Ik5w4!GP6DfyW1S3F&)9Ya zyC&)x+iqZW$CfqO9j;!k$!FjhukXonO{U<}pEcP7tX8hco^bVycQ3G-3 z=RR=twEHYrt(@n+aQn-eOa&X4c~1iyqn>&1ryq0PS(EATa*pMi%)qBVW8ELDR*v-m zxO&Dq6RcK_^+33K#&!_cHBryl4hE|`wyen^aCO%t+M#gIyCvFTm1dmp67S-}(TvsS zc}wgOVE3ja+N??|+aHN$tUmWfVjIO+*}kdL%J$7@#_Dq(i+MjeuGwJwc6_E-Mm!AQ;;QI0zU;$W7 zv-k|3>t}%DD_vJU1DpVHUba&=COJ3}JOnK{SO`}ub8r$|JvlfTY!1{j-&4TqmT0F| zTA72>(2PwEP6r#894rDGqh99V47k4J;7qWZW+`*9xYBhc2WLT?m+jPz$!`v4gNIa> zzKj{fcR%;kIS~6_12cBt!gp@v+YQZqc1YnnZzy+viul$!PZBUiI_t1%+<= z2U%BRJ_ojqeskq-7Z-xnWBKjkA~b#WYaf}%#bD>*SdDSK$-yOH_lagPPMC9gDa4o^ z(Q+m)gR4(P%UQb|Zd=cq{`_|Kd9Z!!Z@^dnMwtC_Mdi1B{ziQzntDFxT?JONKjSj~ ztKs@IOU7@m&VpZq?wrkm^S+D`xVG1V_1WGt(TR2)*x$7rm!FxghpSogef|cxdSY&@ zVtj65zJR8l`P~H0=hOU~yPMI}^ZD$HU~`i`Zh@;!LOl)rR&ajn%6F&R3N7Df-Ai9W z*OzB~8LXDG{}u4E#D#wqzFfg?hYy6G#k0Lz?tt6Jbg;jvsND%S7y1(SHL!6riny=C z&4)hUskXffZ2SGe(e8#DTWa^f&69rxlzk=zX7-XOtg&en{c0_FLC#R)ekJ< zz6G~Wefj(0x54W6=X$so?t`nJTg~DAUSb|VQ_r3DAlP>5<(>8rTwm_Ahrw!^#l7U- zF;|aNx~|-5k3w7{+o>Cqz4jPbzr}mo{qQ(keHu7>;t9BV{x0|=*nF!eUr&M6529W2 z`ZU~p=}W$z0jnFAd_4oq3AUYjnVTQN^(8ky0;_43GBq?zstKP-v|45WA*g?Q?R;!W6r(!Gr0Gn`_FUubGVwn1LwDGwY(2L z0DISJ7AvHlzl(hcSrPMD{?73WofLoP(DzI1SD3#ah#iOTi(i9Rq4xI$+vqngpJ#pp zz6r~?e+w?}^WVXZ$^HI&urayU{s1$wyaL!fl=szO zH1%>X4S}ndduc_udU7+gmzb5%)RUW)!M0N`b2ALCFS%I-tfpDY+^kyZWp0L}d0*L1 z-I(NNHL!k5acD1NIDi7v)^9i>97) zJp!y&p5gW2>Sf+X!qv;XkAkZw@9XyxvjLiV^1dP1cIsu`H-hU+-ZuuTX_hkYn^bz4 z_f63}!?sg5CVAfstlyHnZw^;4^S%XKJ$WAu_6)1%3~vcmFVFB+aPy@v`*~}ydU=M& zz}1tlZF-5>7EL|*+74_x^)g@E!}TR!JAlNl{?bMA)zIFoZwgju5uxI-sbid#F*<>nQeWzj!)8MwhxX|{48>^-5bg=F8<-7e1usK;5(;t2RN*|1F z{~6N(VB6?V>`btItguwIZ|bCE@z>z5Nid{qA1*%g;A{ z&hg*v*!EE3{0!u0BHQ@cC;!&yFu0$m%&niP4u@O(Or`G#Y!>EcCUNF@B-qb;=01Hj zqOFLg&%TZv^ zzt6Ls{bs+mg3qF@ePv$9ps8zFlVic^vHZJ|xoEa^-}xN#Y^>vMLYoJ^mHzYjwhgYP zS!|2DXP)ios}_7d+`QPI&o~Y~oI1bnbij>K&pzn{+mF8d=F6Rh99 zGls=r$6#N%qt1dGtIs+4clfix$589@&Q&`HY+KE|QPum#^hP&fz>Tp`}5)E zQ(xjP02}9+vKF6%tH-iWE=02r{m#>S;v%r$!Sv-fz>C3tAJf-BjNgmOegUF?cx<+=i=R9 zd&iqQ;!3b*S)XTEU(W1RVB2aI$Lg9TzgMGs=fyIwYtS<<$8SHzW)9ba?bEoW=a75v zI(+4Qa6P=d4{m^$_rZ;DW7Mx}!G_|~NV zl`-c~_H!?Mjml@ArSDttVU^E4qR+iPig|q-Y`?ZQ&fjnbSNhWbo^f>(LCL>oypMSI z^(eIa!D~{x&zh(ofU8;5yo(;JG|y19hboQX)${#u)h7S8@e#PWw$2`Y6m0+e*Yj^m zAA_h*tonIeC&hKs_XMV9Ut)9Yv*hYIpHG54kNHjiDR}-pl>0pI?WfW8WlYb2ZR2ht1o|Fc^*wYF)vgxg!H`6UPQBv>tMVwc~89r)_)kjXfMOn9c$iu zuYlDrAuighaL0NnTK+!%8r)cY&d2xI>tLTh5YuliMuOh}`!~5cth4{d>pO6@@^6>l zg{%8a`}!W({?s$)?}ODX(SA^AJ~zMZy@_UQ_z%Ixxu^ZR(T~8!sF&Z9-h%7P_oTPM zYMRAo_*{SI|8b?ep84JE9W>`^<*xb_*l~H*Z08xvo%3t3e(wX%zjuyzhkEXu{{cM00!;t_ diff --git a/base/shaders/raytrace/src/raytrace_brute.hlsl b/base/shaders/raytrace/src/raytrace_brute.hlsl index 284c32689..b90a15653 100644 --- a/base/shaders/raytrace/src/raytrace_brute.hlsl +++ b/base/shaders/raytrace/src/raytrace_brute.hlsl @@ -3,8 +3,8 @@ #define _EMISSION #define _SUBSURFACE #define _TRANSLUCENCY -#define _ROULETTE #define _TRANSPARENCY +#define _ROULETTE // #define _FRESNEL #endif // #define _RENDER @@ -97,11 +97,11 @@ void raygeneration() { } #endif - #ifdef _SUBSURFACE - TraceRay(scene, RAY_FLAG_FORCE_OPAQUE | RAY_FLAG_CULL_BACK_FACING_TRIANGLES, ~0, 0, 1, 0, ray, payload); - #else + // #ifdef _SUBSURFACE + // TraceRay(scene, RAY_FLAG_FORCE_OPAQUE | RAY_FLAG_CULL_BACK_FACING_TRIANGLES, ~0, 0, 1, 0, ray, payload); + // #else TraceRay(scene, RAY_FLAG_FORCE_OPAQUE, ~0, 0, 1, 0, ray, payload); - #endif + // #endif #ifdef _EMISSION if (payload.color.a == -3) { @@ -278,7 +278,13 @@ void closesthit(inout RayPayload payload, in BuiltInTriangleIntersectionAttribut #ifdef _SUBSURFACE if (int(texpaint1.a * 255.0f) % 3 == 2) { - payload.ray_origin += WorldRayDirection() * f; + // Thickness + float d = min(1.0 / min(RayTCurrent() * 2.0, 1.0) / 10.0, 0.5); + payload.color.xyz += payload.color.xyz * d; + // Fake scatter + if (f < 0.5) { + payload.ray_origin += WorldRayDirection() * f * 0.001; + } } #endif }