From 8b072e39fcb65968a0eebd7abab065f8265fe587 Mon Sep 17 00:00:00 2001 From: 4sval Date: Thu, 24 Nov 2022 02:44:01 +0100 Subject: [PATCH] umap lights --- CUE4Parse | 2 +- FModel/FModel.csproj | 6 ++ FModel/Resources/default.frag | 34 ++++++++ FModel/Resources/light.frag | 16 ++++ FModel/Resources/light.vert | 15 ++++ FModel/Resources/pointlight.png | Bin 0 -> 50138 bytes FModel/Resources/spotlight.png | Bin 0 -> 60170 bytes FModel/Views/SettingsView.xaml | 2 +- FModel/Views/Snooper/Cache.cs | 29 +++++-- FModel/Views/Snooper/Camera.cs | 2 +- FModel/Views/Snooper/Light.cs | 95 ++++++++++++++++++++++ FModel/Views/Snooper/Material.cs | 44 +++++++++- FModel/Views/Snooper/PointLight.cs | 21 +++++ FModel/Views/Snooper/Renderer.cs | 42 +++++++++- FModel/Views/Snooper/SnimGui.cs | 21 +---- FModel/Views/Snooper/Snooper.cs | 3 +- FModel/Views/Snooper/SpotLight.cs | 32 ++++++++ FModel/Views/Snooper/VertexArrayObject.cs | 10 +-- 18 files changed, 336 insertions(+), 38 deletions(-) create mode 100644 FModel/Resources/light.frag create mode 100644 FModel/Resources/light.vert create mode 100644 FModel/Resources/pointlight.png create mode 100644 FModel/Resources/spotlight.png create mode 100644 FModel/Views/Snooper/Light.cs create mode 100644 FModel/Views/Snooper/PointLight.cs create mode 100644 FModel/Views/Snooper/SpotLight.cs diff --git a/CUE4Parse b/CUE4Parse index 2e3274d9..54a95bf8 160000 --- a/CUE4Parse +++ b/CUE4Parse @@ -1 +1 @@ -Subproject commit 2e3274d96eb02b4b376f9f44942da81593130d28 +Subproject commit 54a95bf82efd13cd9e4423f182296f0c0127ccaf diff --git a/FModel/FModel.csproj b/FModel/FModel.csproj index 36d889d9..557f6aec 100644 --- a/FModel/FModel.csproj +++ b/FModel/FModel.csproj @@ -105,6 +105,8 @@ + + @@ -126,6 +128,8 @@ + + @@ -222,6 +226,8 @@ + + diff --git a/FModel/Resources/default.frag b/FModel/Resources/default.frag index 2a392bb5..ae2968b0 100644 --- a/FModel/Resources/default.frag +++ b/FModel/Resources/default.frag @@ -2,6 +2,7 @@ #define PI 3.1415926535897932384626433832795 #define MAX_UV_COUNT 8 +#define MAX_LIGHT_COUNT 100 in vec3 fPos; in vec3 fNormal; @@ -46,7 +47,19 @@ struct Parameters float UVScale; }; +struct Light { + vec4 Color; + vec3 Position; + float Intensity; + + float Constant; + float Linear; + float Quadratic; +}; + uniform Parameters uParameters; +uniform Light uLights[MAX_LIGHT_COUNT]; +uniform int uNumLights; uniform int uNumTexCoords; uniform vec3 uViewPos; uniform vec3 uViewDir; @@ -175,6 +188,27 @@ void main() if (!bVertexColors[1]) { result += CalcPBRLight(layer, normals); + + vec3 lights = vec3(uNumLights > 0 ? 0 : 1); + for (int i = 0; i < uNumLights; i++) + { + float distance = length(uLights[i].Position - fPos); + float attenuation = 1.0 / (1.0 + uLights[i].Linear * distance + uLights[i].Quadratic * (distance * distance)); + vec3 intensity = uLights[i].Color.rgb * uLights[i].Intensity; + lights += result * intensity * attenuation; + +// float attenuation = 0.0; +// float theta = dot(normalize(uLights[i].Position - fPos), normalize(-uLights[i].Direction)); +// if(theta > uLights[i].ConeAngle) +// { +// float distanceToLight = length(uLights[i].Position - fPos); +// attenuation = 1.0 / (1.0 + uLights[i].Attenuation * pow(distanceToLight, 2)); +// } +// +// vec3 intensity = uLights[i].Color.rgb * uLights[i].Intensity; +// lights += result * intensity * attenuation; + } + result *= lights; // use * to darken the scene, + to lighten it } result = result / (result + vec3(1.0f)); diff --git a/FModel/Resources/light.frag b/FModel/Resources/light.frag new file mode 100644 index 00000000..26b943f2 --- /dev/null +++ b/FModel/Resources/light.frag @@ -0,0 +1,16 @@ +#version 330 + +uniform sampler2D uIcon; +uniform vec4 uColor; + +in vec2 fTexCoords; + +out vec4 FragColor; + +void main() +{ + vec4 color = uColor * texture(uIcon, fTexCoords); + if (color.a < 0.1) discard; + + FragColor = uColor; +} diff --git a/FModel/Resources/light.vert b/FModel/Resources/light.vert new file mode 100644 index 00000000..14516356 --- /dev/null +++ b/FModel/Resources/light.vert @@ -0,0 +1,15 @@ +#version 330 core + +layout (location = 0) in vec3 vPos; +layout (location = 9) in mat4 vInstanceMatrix; + +uniform mat4 uView; +uniform mat4 uProjection; + +out vec2 fTexCoords; + +void main() +{ + gl_Position = uProjection * uView * vInstanceMatrix * vec4(inverse(mat3(uView)) * vPos, 1.0); + fTexCoords = -vPos.xy; +} diff --git a/FModel/Resources/pointlight.png b/FModel/Resources/pointlight.png new file mode 100644 index 0000000000000000000000000000000000000000..7360e2b1e642bd4b125b3c5eeb42d107cb5705af GIT binary patch literal 50138 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 f)c?O<60fON1ZsapWiQjBI)BNyC(eBA&*6YPj z`Oy|0l2316%KoUsthDh4TeMLG7yaoL5G@b&gG1|IUjU1~U+yG>&x2`xM*iD9S#l~o z-P?_cbFwOS#&X@6Bo9elU{esC3E(buTewPbFh8hDReO030N^K0$8QjUomf9V3d>ThlBJECVd)_aj zYU7kX{VZne_N)k18THXXXQqZ54c_1> z_13NG&nxGWz6vhMN!^Q`vq&ur8WdP&qv1WnjOCsq{eVRPMQYhtnnBO*F>bOg(5=_U z1P%o{kZeFc`Qg|w=Bf7P0P^$0$Y<1B&a619jG8|KlFE)qP|FL%I)E}qA3J!in+;xB zm#8o~Leo$IosKE@e7Ae6S;yWfZOZ&r<5_=s}ck#a5e$ za4{2}Y9QRLoqtq=3Yb?x+nC<%5B<%B{Pe3lXD26~pkw&>41z+HZaZKC5$=}vd$q0p zQ0-37y_QET8d?U={F3hk_}PQ;Zz%zq1_&Q8jeqW1rpx1y+lY0VjiM6&jHAM`mf$y4l{ zG;CHV`jqIe5T{CTgeL|V13Rg2W(IhuZ(6Oq{j=@pndh586QR{vG|=KPUn6)Ch~P~K z(OP;)HKAv4Mp(be;@i5K4l_@uv)o;whYtNqsTDN{=o4!2(JNMPdInMR;_d@1tN$*~ z{5*AiaI(Qy_lfHI7oi3WKmlK2Gc8y_QlF?GS;E{CIZvdCl01Hflw$1;>Z6{vbq*W_ zTRuL9MAixp@FC6SNyo;r(-980Mp55$*_2TkaHf)UiP6JI^3U}m?P z(RuTX+{+_+Oza;k5Wai<_`=UCq~x78?d1X`p@2-jgVz3;i`aZ-j)*U$Rl3e2b;{5- z>2Errn;E2wG=UF*5-zR``=>SdJ3PN|e0)8BqeVcYrsrVUv+#X$)KRqh{|NG4@w#l5 zXOzX(qt(i-=v9B^{r5%_%W9ECo58czt726wo4)IP)izEAs)8QPQ zJdyq%o3(Z(lpWwycYQa$_a)3ds!QD{7dPo#~+jM}NOf_`m{V|Cr&A~%hfAs~zh zJyX{UUAnD@wNF~uDOc=P1hY5N)S3VM!lb44Gn+k(f%YNLPCqudr1`OP_lIKSZWW+& z7}*&Tk{NyG-!@}WE#Nw~s5r2{s0^O)-{`1ppyX<5u;UAf2g`pgzS|WXajMKbr7D^j zh6jj+%r|iqJDc*E=A|#7^vb8v2iguBnp?lzm)c*)MW6UvZ@kI6w-Eq*%Ti!%NL&(h zWpjW*C=dXp$2zQ#C$t=}G~>d~p7iS4B$-YQWgM=BjeVr4K-4>c(L3OK`CShB$}a9V zh5?l7q1vsEn%omguffKkh(mu&XfNIV@rd0tQ?s9&!eVQ7$6c z?Z>gDWrJ1^d1JOBx7KN$L;n=^6rK!l@wb}`7D1d_wZIhShMIP5ND&d5v)u#-xWxK; zj~$bA*$OkZ8;5&0*0&yZuN%!YS3j)Vvd_mpF!8kLR2Ye&#Io*BCbrFF)Cjoio*Xh_ z7w+uOn<@Ehd4|^W`0J*01g|n|l(m`TknE!wcNG=_kdfP}c+#DHqMR&%Hvot_Hn2@v z*y(P>{nt`dv!|^YTq@YFQ(z2(!jI*#lyxXk)>59w54l@EO18tD;1djERyS?n}GS}CO}HcsG?D8;&wgf3dS~qU71}Wt}jl$ zl^Vd}U?&?Dydp{~*%@rLh0(5$PBxwzY|N~iU>J8=EUMhcmXts2$3zItMeZnLeK-hh zzX4V3+;5YdA_LOGUc~+4TY^H(MKwzEM6=Hfp#H|?=(gR1yVc0MAo&um#brm&sP6^~eHT{p2 z!w*u1QGp33yH9hcEour~#+>JC*#!j$lr8LZj%1Vy+N}D_J_DU;8-FdvYFGUiKkhHq z)4B=}I(`G)`LH&s;ryl}2=y#1rG^0;n_7(*9;EN9x=iP}Er8xknY04X@ zMo82o@@ydoXz@}EFkvwip+f^IR5>BykoEHa<`m&JPSoKQQ2#X$-bTD`8vma$d(1Qo z!N2X`&*4R6G>H{D_boCs^bS8;q!41n0QBrb0dZ)BAUyAq-r+q6*_f5s(d^TN@@gT@ zg{q@4c>wv!RY3(5baPwv!n15Tm^mYil@S)&$~pY)P7Io5g#CXaI~jV0d5NZay??GR zM}JM1(!E%UCX{%vFGH*JiQT-GdcY0DPgZ@9UNH3@h59i4`Jc2zGgVlo5Lteo_`8i3 zn(+f3^_b^lDgvZ2PloU3b}6(Dl~#5aK?#m(=BNW!@9!r5d=I+y9_HG$YInpuTFXc!7&cBC_7rGk3xytYb z$G0J2@4!IJm;w<6?5#_ygYchAYzO+;17X5`G{xD%+U6*VZBWc3n}?g6aCOys{79{;<`AGz@avz^@RO-(cv-CWC8FN$jab9^j(()~!qBI$W)z4O2tbYT@* zA&YuN9M>^+N0t2 zCij2!%Dcj~;#6y$rdz0O(UT7~9ojv@(cW(l59iMPm+rZ2rWvX&%S{qL?!GDweAhYo zGgv4Hzy1a{?o&AJLXS{*@px^*%}B6!l|Ec=#CO_Mw|9y+dOPzb7d&b+;lfd(ozj3D z&&%7=B@L!mJ%NrC;E)gYAb#fzd&oiPsraY$Rs2-JL zQMMf5WIYuX`&HFRqw?sT;XF@9KfI(9BIq{p%ECgN6v=-ktm9!ksiwl~{VP?$`_JDO zTg7VLOJ~34mN$lZOj0vCR6M5b$v4B%@#()N*wSdA{aOfmazt6Yen5QTTM_(N3l3ch zkUc;|UqjxofC5 zbAKH!}vJ?xd3#ZFJS(EUfD*mI^C0-*sh z)%W-lg*CJov<_pgDGU0sLgH9D{8}3t7`j^wQ%&M-Yd_glF;NQZkoog_P=T>Q!4Y;r z=lDnM_V-k`jqT=p8?yd`oc9J^!%wQG)4*AF*H;+|x#c+T!pv>36h0o9j`y{+>IUb- z_Tcz=_EBWcujgOxp8r&O$?(oIn}>c}Z-(B2Ol%#|k<_R<=2+;`)vD6(hrH%i?3{OZ z7kN$cBl>A=8^x% zZl~k^2^(|0NQ@UViol3MekkDH!Rt1iH>p?;!Vldkt%kqLysboykF~Luqa3fREfY*r zU5h_*W8qi|H$Wbd1#rE99zaf8*q9OcLt<{&SXGmpx#I0=n%ZYek5#0py=L&z@CNoG zE9#jQofwDA4H|5c6?Uv1&sx_DSecCPu#RA+F?tww5< zLSH$4VpRHL@|;C1mDY$`xnB4*sXr6Mdjtw?BOm$4t@r{TMD&ljT}8SxdZ@oCS91KS z=dp=0ahDe&_;f;X7{xp|H!UHM$$L=vWk|SXe5^CrB}uzats|{rP~OTJ6O!)#_2}Et zk(mvKg+TPSvD?A##i55l`goE?WWaWVEUzp2k~R3 zu>yTndA9)fMDo&_r^4cVZ%nwITI6;DbL81$glcuXt<$BUKgrU=`Y%_kGVupYOR_9r zKS4}iRZ@B#}V*@a=pcJf@ZE8{9BC)$ooFVfP3E%Z1Jj1;=G$<>;jN4W=^SM3l_pvxY474>1-JcKtb!ngS_xHv`GlW{M zr_~QC(DFL6Dz=LbcgCj%bTwx+TOU(;S3LfcMGjoq<&cBbKxwGWf)I<&2NOfUcoL(o z_V+uAJGh_`t6{E9D_6C%MMq5fZFeOW-R6Xomhwi(HNBT1Z^g~(O*Q)Kvz5cb{@T;8e_Xw7VOP0mo_9D|c7 zpvV#@)Y^rDJ9E_sf4h`gQa9~^ISvKp3Q6xVz=o(6(FnO2Crwh&<~BZh>wf+T=|p|MmklR-OyNBuo7`#;acoOJ`PnM7Uz%awP@$6|u>P%o3o=aAydppUxePwDEJGxDny+FPCLchPUd;rFp)2O1s>MNVCMk9 zx2Pg@?;yAVg#GILKtzC_*SR+?&c_||A}#%4?RMS8CfBIED*KivRd*Uw%uG#dKYaM& zGm@j?^Lw_@XQ4I3=j7j>&;9!;zSFg_W)>C=X##40USwxqRP~*8C%IAVX&g(D%E~uT zSTKY=<&0i%e|k;driF%*C*EHRKy4>L-mqt*BE<13Ai4Q?~x8byDWf? zlsJYQ0+`3H;)3#eyuv+-C0F|tffz}sfoUQNT8;<=dNwhSSiC_^{3rrqVW=tef~RKS zFo3@{qv6Yd4Y-(VEQ*b)LGa zefu$iv~!WY;*rAL`^OdK(?L3r)k1o$bS9v(iNYRZxFjwRBoQTH|YNP@p6!t0LW2E zNnoZto3AN+$D@hXbv;wgXZ>rH&s>wQ&(Z#GpTTq?pViTPE!MekUd@f#zzq!_p1HdweQCHH0*9j*u*72YAuEe zjV*y1e-3d{KG$en1hn%33moi^_rHxQ2-sxe7>5;z}D6f*lyLuIf)?uQqO^96RJp+B-3djI_RYZ}2f_sE{k*?#EOAa_G! zvcXL7KUgScY<>E}N@6Wjc~-4#SY!RV`EJ8lyUa(Ou$YJ1=m4B{O!$-No!88ff1-t` z#rDUB3Xr94OZn52-C6VfhILqx!$wPn0cqPU9~O?e;MqT>GuspM=kW!sTrZUwP)4>Y z9}Rqw*?+J3WTPN8By_!nVL$ov$_9;8|IBw2@#)*SDxtgXPke=jYxm;9RTt-a6aFPk zPg59G>jIycfxb2QY-xhY|K6*FJH>_wuJF-n{_Vx{LUz!G@> zql!@=m;RlH@7#wr0FK@}<5HSsl=|}TLa3A}yGiI~1J|8nculs}a`c=f+EpA&?6%yO8B*vSps>*n=+T~pX zSA?cOBJY*%ol@TmJYIJzo4#MD^N~rFb0EIEd(F1Vmtmdxf{Qj;!biI4S=v2d?BgZX ze5V1`FdEyVJ2TZis-b;enwp_yh53r?SZMulDxpsCR5Q6Zm$ z>fY&s-mvXyxuTowDc%On2_V)CdZZ4Gb295Fc1pR)XT}w)`E6}9J3IRvq4m@5?mLi4 zT!o&e>h=~nh|&Us+MnJz^ha=JX#A26-JLKI7!(X*&Tz}n&eVHGssrP~_kMkW_UXc5 zx<`UNoq%5JuhYLYa4DI0_Sv>^pRas< zdZljBCuQ&M=eIRtBmaW@>6mU#QIISXik&0LS1>=-~bjV5K>L@rAhKNQe;R%)WRHrx=#r#0$10kY80yN znyU#OBRR|8zPW?uZ@YXSdLF;My-l3{>E+^%At)*%Z3TaBDeUj<^J_0GKxG}3pN@TZ z-+nl;u;B3P_nOS!-X8Z6xrK)2B>wT^$IGv8zF|I8LtfZEQ1@ANp=-SyoDA(>N!J`j zo*u6788VRG$0o7XwY@pYSPTAF^{2I`JW6YScbBr*ySOO)PbAGy^miAGImILFLV^`A z&E%wuSUm%RkIn`Kl>74oLD;jZCj?_d&ENb@%RIzLGcv5B8kWl5+mRaT0 z%!+DE_kD3^Ox5p&tI}tI>GHLEP2nrbbC(((4}PT*hwDGgeC9IEe2y|ld(2vr_FtJnoEjYr7C}DlmEwudhcQdj9tgM(0$k)3Lg=beic*m78q(Hs_J^x3$}N(N+U= z%s{eK!FzKg83I|>Vd#tM+*vHUmL+&zkSrRmU99=?hD@^I?3TDg5fp`jKF#TN~3>e3ZjbK1vk1`-Q2*Yalm!#>)qSH52PDFNe{Ug?LYi z_FWZp<>2^Pz$goIb#sH(MHADw=;-KDqNAgK5+3>myOAzUq=BHOk3b|NZ}4Y{_sd}S zuk&x#YRMf+q>g_~?GGN{R{TlYQJ`g+q#6S)NPv{qX`QnoMIPx0*``YpBdvPCZ&CXl zY>$(T-9DhjpCs<+U>2+n7w=;h6HxG4u5>AbdC2M*as74?eu>tmxMwN1+1ADrW24>9t1t0;0@4;h)YhR9JFWEHkzLzq0_aQHHA^ z%3*$_7WY=x^CECme1bi^JB@}dPX2pxxq6 zPfx)bC7YXmy(4Kei1Jv0YryylX~5MqVEouW{-6Z1Z3BGl>RCF|OmadU^ZLW#~RSD)iPxNIl)5KrgueawgD0NE(GV>{sh4g1% zyU1H?U8_2W(Y2zy{}P)mTtfm)C{9%YMOnz%&aNqP|1waNzTO2BY0YySTII|CKPy-b&MU|>%d zz}lA#OVoRtxXRLabi#);hTnKqXxx46pfJ&Cm@C1 z9KyZJ0moE_n}4O;yEF}cQ0N;A!PNXCorE(iiM1pC9L=#DYmq~kgDHYZM8s9N@Pp&+ zfpw>|2s)Cib1q$zUH4JU^C&Y0gG2jnnb6N?52>)~IS>=2I^RtNSn{mDkG>>w=EF)NijY_<_fDeGR4D>RV&!%MW7)8G?@ZbI{q7M zbajHYKFRBw%{=d!1NgN2j0!zGla^@mVpz7peQbyVETN*K>bGPPTT^4B18abM-v?M5 zq8u@RXeEUQAmtM=Rhd^+NBG=hy4Zk8Jd81ia;I->7=+cg-1Z`3yBOjQ!iY-@?5a%p zM8uM-)$h61;Cl;Qy??&mT94@7mFV<%k6#sitYTYo?;p?hNy6%Lpop%W?Qn)4(~B*n z)rdfU(F#es`SvF(djg3y6>1W+sCWiM>7?G|Es_1`elJ<|T=Fg>W4F~N+oZA+j7|&G zv%-bt^3gFN_p_Vw%6%WlfrlsuJn;Xjuz zz*-AM;-xLd$m>l}m$atx5;oF_MCKkJ8`S!Ae3d3Z>}A!FrX&tDWwRN|^;6NJY-0PyI%|iPtrc20hR_u@lnHB*@~$~Vx9eo?VH%vTNFtKgFLlFV0^jtFLH6ZJLDak z5Yk?aE^3i3%J^6VWx1?T{&W9gS#%$}2``CpMy4V!MULkzHJ#lr*sphLw$9Cyqx0;Q zpzk`Bd~jrtIF}>%@$I1N#I)wnwNfK{1hsh)c+qr*E8)31Dmc^@i1WTxvc9s(mIvSO zb{XOTB^UJtOQOCt16diVH{6}P*Z;I`@Uwn>F|d-(wD5wlu1QtNG)bjbJuw@~s&v>K z^(U{_3?$giEtoAbpWRZ%IsHEFS47Xjt*PMkfe)?e%gItVcp1aqyCkXUVQBDbs>p-3 zd!HrkA=qZyywG3w1_B0!ZMt1w*~=ei^`!{GA6yIeiQ$rD zh_3XH$*ZEj5{fvmnDmG_u308jX8iR5md&aV|zApXT_Z69}0BDl&&u ztme=>V`ZV6@nAQ*G&^VNm96N#(Lp!l!g^wJXafw2VJ|BSfBv6eFp2hikkX9@w(eGpS~})rlux?$IN+0 zr4{9KZ<-K5mnw0{O7|1q-O&M{TfwOolS>?{llWYk)vsU0KW9h-5(>+yc;Nky`Dd;WDIvS;>{taCH>+};T{2tE#6gt;V*QYNok$hoS>%wIUMIsg1u@6_<> zpW~1^OnF=GtwJhaxAO`G_Znd$TCuvyIzM_sX@EzI2|KCkBBmcVdJya!<;) z`~0%`ji9dYy`iaPuq1Y?n<&I! z868i!AW$Rz``51s{Zj#?#q^RcX?;VK_sQj#;V=bph6K!gW$Ar(eC&F)?L(WR-%n|> z7<+P1%<;aJmKQKRe}&O8f%G(53d@2BReKucLL4Zdk+B=A3m>bxdhOF`jj3v?yrq8K zm3e0)5bjL$2g5Zl*%`R>HN_yxAH z?Y?hyICBPh?~wOfb$An0Bo}BCxsmmhDe5Wf`~@0&Cb{L-R_m5(pK93Zqq(`cLw5fH z%51l9Zf!hWa}aTvZ{GSo8corCawW*_h{{Sx5_(F^qOXX5nqPp6yjw0I=zTVJCe2Ev z@V{NAYiVfzq)+C%f1YzSs_&DRAU0RccOd`s0U1S4LsE))5P9oVp5U4ixcRw%%UDCP z-$v|Gq;;9BPonpFvtu<3kyOQX7;^skH`<%%Ui^Cha?Z<*XV=YTNVE0mpgo2t?L(a| z$5%KiB{4|FXAtGp&O3P_T4)0}S_x!PSacAJ%-4Si;A5t2b3)Y=kXz1bLw-T4@Z-a4VKB{pv3xo6U z%a!Bt3hfh*gW}P@8+$``=pSE^-tOnqcbQ`}d@b8|L!(vy!aE|7FF1bM9F*|@@#~bDU$c#)w6kTheP+>hP^KfR z39jWkF9G7YQ7&TI*Fq9ME7{xC389s-=uVZTLkSPx@T?sK>d&d!%mYh+B_Qh!1z3)#)R2Dw6Cp?r6nF2;Z}?G*KqgS+EX zY1E1b()9<(zjd5z`H%O1^v$NV6|tq)RIbC+Tz@qk3 z9h78pA)Swx_gN4w>cny$#j^k>=y!%nGvCi5b&1)$)q`4x{On=TH;LHQPT%#Sg-S4Q zhhtXaqvLJ$QljHu2rtyS&@|cFXVgql!xQd#>B7P@VTs3=Z$7(PHYu8I;S%xr3yZ5) zC@}O$#%kWo5jB24hn|<4j-IYI=h@i8!}K&2vg?d1sgw=-a=)tjX6Bs+>(XN9S71E! zifP7jo|1<^lmC)m9%lJUnUH2EDbPnZV?eZqz53A)hAZOMDpD`r&BK9N+aloe=c{nC`I{mb$WCvEt&dqil3|0U{>k4&8$B+F#~#+0!x5~ z9j=u#^*y>-g0V@LInNv%m#gYKaDPIy8o|#R))HTTI!sufr#iy)(_ZSv(q&7C! zZbPO9EFjQSM_Q#zlz+Y6Z2m-aNVXU?eyLn$A|Tb~^Bnv%h}GN?Sy#lLyvbB>8Wlod ztNI}&p>p~xo$?qxOQHpfy%60Sy$J@_zZ$JQ)aF2mz=h@ISxS(_%6eh&a&lC6Z}6+~ z^{av$V$u;j6!n9EC*Rhs<6L_^dNQWqX0Z5O^&?6=|6Mz%2_ixdAD@>d9*X{3CF-KpLaV09@ z8-ZJ8;eG`O8q>}VjU#d`yCHScf^gHuAT_6r_hK2uTPdP3Ebw^=)bx{)Puz~;=dMhA zD!UdPz#9elc-*-$HKz2r1Zt2USIZ5lvjhp`)Ljj}e?M-71ROgunOfnE;(b)^>@`dR;9~V#;$5s|EW+a=C4pH_dX<444>dxk+K{|MLqZx2#ezAg z6YQK4Pc_O7?#>x%qSg;uNA+y2^37&Rhv+&Vl#s3%7jXS;V^NB5<&pYlPcvAg6|kii)zD zLPn3v;!i}oba8N>i^VVI5%Wd(A~KyG7ygo5O4!0r@C1wB3u1g@^E1jt%%}pX%qg`- zBxBHL*z56SKWh|H24x$lpJQVt$xEvdpvDCAKh^@(207Aa8-0yE=|9oj}k^pL$n~`9C&!3v(+f8EfF58q681GC^bNj6?&ZdP-X>W!;xx}WhiaW~U=ky-KAaOC6H z3E z(Lo4*W%2ToI11B6OMEGWKM%QH`Hohtp@g=?TN0((Iue_tEIFBZc~ zHz`FX@GNg3PT7|aU=MJI50;M$UErrCNm+1oOO1c8_X7Pkds1q5ogi06|6un$ygmKy zWzKw8CVBUC%V(+Fl#z^;Z`|v&h$wT3B&tKKx{|*lap?Z56W1^=W6k!^z57d)&I$%R zHT<8$S3X;N_~)+&@2dw0l&!T;vE5ZpYIA(YK@#0<^@E-zPo(ch1h)I`@{-pT56`Uh z6j_Ra4K4b<{^07tk?hwreC(zrFY_Qt-LpHWI_{9J?<`jDj{*`i6#aYBlHR6yD|N&r zylCZ7?2Z*L+7Wk1lc!4)Aay*lYVbC0sj&n6E!mLCFXG{Y#P8=+?r&B@TwdM=>cIFO z%W*E8Af6KL@>;k?`#)#fd0=%g|d*Tvs3Zt2fWf^=6k68H;k(2Z~xA(?wjYS!GI=%jpZJJtl=k$VK@J z9;hP6|h>c zARZH!FeRo>t%7&HPzu;c>!IH?pj0hCwdgITF+OKh@1){UOlB5xw$modkqWFEK< zByO7@!^R^c&ps9Ed!^ic_Qr~$sbHV%7AAI_p%d<8Res#E5){y3l_z#Xj}X}m6#L;G z2_ljW>miB;fGSfMvic(n|Cjk92%>s719%4S``bf>_uRD@x|n@L)WXC>ouuhmc%xZx zNN51iB=5f`v5WtH%BsC<=`Cz>O*|8CK<;(vZev+)9=)%ZgiAVyN8mmL`SZB2squcz zR(*~#45MBg#LOhR5veZut^?f;2E2xO+;l5UZ;COq-3qg%bLj&YN34|ib-kpEF(>?x zYqEGB;%^4qq=W6t!o^Lfu^C@K!>aQ@N|3C&dR$~vCarJDJ>+~=#DOQYb20x>%dKvB zGvnLUV>s^)7#Z?tV>wQ(c!i2%Xa%UmAKu z4R5^O*@!FPB(6s8e<#K4RSn>`=<9yccAf?09_<`~Vot5Kt7~pet}}jbFU~S}JIH4& zbhEsq$T%Lcc!3w3M0hF0k$xgRpZZlP?Uoq<2OcRfaT)*Yzjx%Sx}m>Gt$QMRja{FAcDwX zI1g!oU;l)TqDzk)+Eo1VgniTU#*zH=`X#}pILi-UjJ_q#a@0W#8c@xTkk*qHLflNF zCWgW%3BmL(uQi~bVYc~+GL{fTxrqd{*=Oc{QrVX#G%V%&+&EVP4#9+_glIAc+Vqn4 z1_S?nb|S$HDGb2B{uXrNbLU)I!S7$Sd-yGxztHp!TrX3VX5{5BA#$#=r4nelmsTgD zwnSnNI&A)ayfZ0~Z9hm1O1z|!5`;I0-2!Sm@*53E>|GgC(vA<17Sei{X_v$qz03dM z;V;4X%Gq?74W+xv?*?p{zm(7&;P3Cx4p%xah;UkMsH#e1)1f(`ky9k(GZp>qYI<$a z)#a`~f-CeTy}=gh)-Dlx!?DGHXjlSuv8Ye9bCq&>rXaW^L663}Naoh*^u{+Oz55RB zB{SqTQ0JueYaLLQ#wefB)bZYMeF#DyMiW+6^q)1owp7gxp>?TGpOmg%^HTln@A_H5 z6y~aQ@?#{I{mI#vud}aH^+xWC(|c_|UTIZ;VRY}FI0Zb2p$F6z_elyp~KV=Xc-0qlE5z_7Q_^a-rblb^9qZwX(Z9{}> zY7|enms#?4)6M!n7(* zv2g5cn2NyP?y0$STl8W>GfKB=@YUuZXNlck%;?9L8vhLu4C*d!M12&9AQ-6oOWVoS zmfbBp6lBJnDabB;bnoN7!@$}XRqfUjYdL@63*aJfCd@5F)~6sXykgOb4El${u~Z$6 zu;5>d?Sc{VHJM}IPq`ce>v$*S6M8muk&u()(au*dk#h82&xvDTJlE#<*&mv^3GUR( zLa5+YgS(55l3AWG1+rZ}WbT}tc)Y`8LU<*X_0-vZ9R9ASrYfyb#sz1&G9`(F9o?Q_ z*_^J6Ls8=*KTUBCe@I*r57g7c<0{gVy4&&qc-E*`6n&FZ^D>XEU#um-`yx)@Ejocq zJ|L4;B?wZo+V1i^zFph8>|8=Z^%_yAoDrOG1{q`k^>X_pveR_b>;Rz&j@0FZ=^t3Q zaa&h@&3xR>l&zwe9wGWD6iiJWfjs*!Z{iehu0gLqSKMesA$#?t_r;ZK(R6eZ=DS_MnfFO|$F zi)vSRJ*?@=HE-xiSF;H~7vS&ppi2fkX_}VKJS02Nm?ILRL){I;0+aY-bpBa#6YYC5Wpz7n6c~Y*ITS8t(;Zg3#?ll^7~lQ z4!HPj6P2+L-%9xB?v{?ef1jpioWt(o_SRT`?1;_lcXcVBvx;9xBHO;tU?yK^zN@&Z z&YTKPXnsFtQx3E!Z6MLkKmS`PG3Sv6y~4qkM507sQ5+l`)R8hF!Yn(zOG|OVf3}0? zui+2*FM~mQs2%+gFuw6~$qs9G%Kgs+c8d2$MN|o*BNrlAzr41dzxWdFjA<5NX5;j< zWrOC!s3_rp;d(zNItM;)4i|rXISp64t*#%8gX+H(?02Ipkj=ktfXeHQB1QFVe}5(K zD}M7%P{${)1;watt_1q-Cq9%;RVKK3QfBfw)F`Bw3HZ|8Kl&ZVMu3o-eCGlh#X$P! zGpT(A*2*@E%dm0}2I7YgD#zXzZd;6T<3W)_e{Ord2d4QEIB{zBT;=pVqOB)luq_%i(PRkb^ZfwYK$qAI{nl>$Jd}xG=?2l}yEV z9slXK#QbgW|IPwf-!y^74PJo~?x&A;6g%S3Pulb@SW3sC&kDuf&gMC-3c8|MM-?}o zOU8pbzDAS@4>x=$n-OQG4p{R0u>)R@73T}5q*xeDsOvpkF?WF>u})9Sh$|EAW;*Vk zl@zqnmb#vC+j@%MEb^uCP3SFJ@~AfKIS1lj6d@`T5eF<86>B2rpY@{7tKTsv+d!%$=^d zVWr1k4es$W+UXEr{vJ_AVm(L}$lluB4Ho%@cL~*<+ZJBj@gOtPLhWQxgn1@B#nFvy zsgt!bC0cI8j$il>e%+vlT8t8uC#M{}Cn4m%zWa`OiaI)exN%xsEDeBbs1&WDB|d@_ z4{MQq1d9bA+9_W1&W9(X)uR&2J6SW>6UKxX5D_Z?bpT!&TVfTbCVFa&AP7IUgeh73 ztVta`(Z?J0BkU37#_It2pUfuRMLFu!`q1_3HzPM#AC+Wd>mP-w*w{LK`8lt)Uqz?S zg-us<@sb~FvY4OOdOo(A^+vHT#PfiMcNR5$i>_GUFjLOXL-YU8^zHFX|L^-7HZL<; zG3MAtIUklYQ8wrE`H&a-K5Rnj)a@Q37c}hsD*mrsG-e1lngFPF6qQQ7i!XG$Ri( zcyKp%&EXs*b~`UD{syJ>?yxb8qIH_~yQ>;oDCnZK@o{E;RoiHN(Z!b#G?NzeJ(TjT zm0%}R27lK^Ou+RhtKDp zRINmsBmVc*tMpFKzVn;_yShH6PRGQR>KTsebARhuC$8DA78-ozIr1Lhp)V=^+exQr zVq~xCVmE5^{0);eSXV_hwrAs-Yb=<)l2#6qwq>GJU6u^8P*K8Y9>%_LiyM_=e-UbQ zPJXBg+mmF+fpcDEm26I{YUVC7{x+wU9wEnRR~YNP#d4C$b%2eqc(w>Mergc^N4@ny z7U+P+v3;55AgO~w{wI5GN(gI$GK&1sF``V-yje&JR zz2AKkSt2KO@Xvj{ubfz*sUu{h&o#26Qq4q)&)DPMelV>0$Jk-`) z+$eepq1ImcVfR0?S@q{~np&pZ)OmRb6M<4X>+JTt4osk@x%4A@mV|kUt#lDKupR&X zuWuWv)(23DK|sPSi%k=r04@&VSho+udlxbG=;_tSIR)_;34oUDKB%-97{QfC9+b^$$OeW!hd&v-o~ z;k!2BB*!;%zzuJ?ZuVv__c)XqL0SDzwZk|UVNk@h-AzqR+04aeowUUQCluY_^iKfm z*KzRNao$^glV*9FfqjC6kKRJD`yS?Wf)bsTfnX)DDO6AIava#{7MyCr%dpj+c2TsN z4}yKF-A4TV=9DHEO2yqF=Qq{LBd7ITTqn`(g8i+;bml9h0mpp{%s+9DGLrs92 zc_Ter%3p0K9rd~YK(WjI|Ve_zT^PgF%dgPgGM z71B9JYUy*Q&x+DHIpjU_%q#cj%Xd0XOD)~LdDH6lOp?3F%ORCZuH2L>D6sd5-Ut8n z+X~fiCg3_HOZa#OubZY!t>M%6klV6$93@CmQITMZ9s~q9DnMeQiI(V>Xi&Pa$QbQI zZy()A`_(D3p|`?qaDO*p8*g~YHT-##`Ii(yOby| zQM`vq2&^EE-W~Z_wU7_!y-(Ty!75Y-SAsgyUz?T=B0n)*1}v-jlI`fB3vS%-!BvWg z!r(XQ;GHZmhoC2mrl^?@NRe>LBepZqzlSsro@?5^eA;u( zS(opcMTSO>)Z^|kCR(oe1+@494|V77t%O-2JCc@~PJg4i;^7;S1XozBN|3ePw%Odf z*+fl0xcdVzA$=+dBNuGXs7BTFY~@n+zMJeFx!II zx`!qtb&NAR=`TL)I`y%f86S_9K`(mg(iK`)C>QheM!~7HS$^F_W)SFVeJ*;h;gz1# zItLDt79ZpnkKN3~x^F>n2W{D$iOc3#JfM-x?@mZr7CA?)M(^g^h z-{+k_P7#;8y+o-g&5>vBP4Q4rsd1=(rxX?$Eo(E_Nr{Z((>fd6{kKp_Ug4S5DYof?741Q^=!LP@*Qrc$n5+ zZswKhoY~%O+i00-j!8<+y9P1Q$43=0CmSRQSCR~PiBA-v7p6+*)~==~2J z1edi%?{{5=IEM23EuXESp;$Pg;2fYvBUpnYopMZgsNcR>iM%TbCj+U>Y;)1jOp1P_SCAA1rI5>Ila zvN36t5@}!ypQ24#yDMeoXqM^U5K7%1Md`bCy%HV$k5hcXlPDDsN`(|@pJcS_w@z^} zv|>>Wc0uvA&h@1rjS+@7%X#>c@8UBKWZ1nCsIte>!gkL{{q?E5ddX#Mp5FaJjR;0{wXA4h#4CZDHdh8W;6!PpNRf0MHyJTEUxaOmYrOG~`;y!* zB(U+LAc$-^NKIXqa?y=Z(^n@ksRZ@!Qa_u}ZEQSg@f(Yd4BEHUPq znBv3n?q+Xk;ip7#-;p)g9{cb=;?D($3hOWi?U{UG_y$GtZ?(<~gtY4kll`xRrU|ZJ z@^3x6cqq_Bkv%GDDoF+D<$+I`rqZ29glb@FKG^o|CZO4YVe6c6Q6!eW4%Ehtg^+6` zIXGnrv{{+j_ zUZT%5IB3Of0X+(*D2>&kcc;zml==Xp@gZQZJE}0&1I29L5n}sLhI2f0nQs^95@zAz6 zbz-c$$4l{jFtPx^`rG${M=-**`NA8Fh{yqqoEYk|;*CQ+IbKDJT$JxtI}XjFf-5nS73S zEk`Mr!LFNZ5>YrT(Ig)-tUwMehKv_Flv%7pNvH0J7>ksZl^L5nK@#`>9-s=M!>M%|2&hqD?3dFN%;Zqzu2C)pIjQ;2MDy&0i2}3QEZ_+J?eL zXi9_(7TF3N<7HIwk&`4-&X}OdX=;9k!3mEjbPqID)&@fqeM!n2XsH@)BB7EZ^_2m0 z)GrvY`&0A^=5k6}3T8h#UGi9l!2X*OEpyF?womZKL~X^IFM6MbKm3VB6@kRPbH>su ziM3S!#P3;T;#hPkG7OK8XbZs3<=cAr0k^+LcE74#J32G?-yY>g) zb&{|)?S5VvxCHCgRvUF;_dK^7ucE%*xB`sq;tyR13b0u$Hi9N9stYgfWRO4_ek)Yd ztLijSZhf5=EmVWgGIEBLWg7WUkZ~GsPdZfONCt-6q|ST*#(%Dah_%{Op3v0|4E-PQ z5NMFkGEz~!&?HB|NVq;u#~MP~728vs%B)craAXeF{=U|A+L{3BN(lC09NwObk;_fq z+6B6dSJ>sTuIlRR*JH;%ZvpX6`WOuYM)0u19Y|M*;cyU)l&$6`;QQ=So`z_;XNepQ zS}O&76np*>UVlFghYxCR#r~G6N|IZa;6PWi7`*1)Nl{#_Am!tf@7AE*0gvY8<@G0^twWe>x*db! zgQ-5AC>@ovlb-XmReQDI@qFD@dRW*z9xiu>=OiPRlS5A*^OP_KWzbSycaIe+r%Z$A zxr}DauyxFJ!&3s*6nKxv(kY&9YVS_20*5K6Z*i#mcQgrFg7Z+NAm5-d45c3hMw%;kljxt!GKF2kVEFTn0Fni2A)pVE0uWnygTjl_0;xQ_NDMnlDh4d?Cy0fD%LytWH&O8Nli4l4 zZ&7uc>i*sMY=MzM`F#OPFgSD&?GU!#eyt|k`$ zYW?*lsXmv@Dd$Y>7JMsh><~mvavgra(+Gog6hUYayA0j2kilANdFG`zjFsI5F`(4j zwK$BywDjIdKZ8pgD*=G9PG z_q0n?gtn2#fuUX%2t&uAY$yQ`o4f!ywFccPFM3T-(Ta(PqNfW$Pvlj)jZaM|g%g|Hv^ue+}>C`8G|! zTt-m}&H_M=0gNt2z1UiA>h-PMbi=p4DzGsf&woYn#%&6&BUf=nlzvwjhElo=P)Iom z0chNuw0_S@7?(dz^fplb%LGG7BHN>eM1zvKyGd!~KBezu>L9Y-kjm+L{&#NxIF z8$sE`RZmPf0?laL)MCw8e&%J;U_?P6sfl1qan=N^F#h8qt=;&;4os$ya~w$zre
UuAF>q!W=)OAez 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

(qQ}dMXs=jWjY_t|5nU@#*e7=W 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 P8t_q5(pId3T7>@(QkWmk literal 0 HcmV?d00001 diff --git a/FModel/Views/SettingsView.xaml b/FModel/Views/SettingsView.xaml index dd224932..dfae0bd7 100644 --- a/FModel/Views/SettingsView.xaml +++ b/FModel/Views/SettingsView.xaml @@ -372,7 +372,7 @@ IsChecked="{Binding SaveMaterials, Source={x:Static local:Settings.UserSettings.Default}, Mode=TwoWay}"/> - + diff --git a/FModel/Views/Snooper/Cache.cs b/FModel/Views/Snooper/Cache.cs index a85f0603..c7e0bbeb 100644 --- a/FModel/Views/Snooper/Cache.cs +++ b/FModel/Views/Snooper/Cache.cs @@ -13,6 +13,8 @@ public class Cache : IDisposable { public readonly Dictionary Models; public readonly Dictionary Textures; + public readonly List Lights; + public readonly Dictionary Icons; private ETexturePlatform _platform; @@ -22,12 +24,18 @@ public class Cache : IDisposable { Models = new Dictionary(); Textures = new Dictionary(); - Icons = new Dictionary(); + Lights = new List(); + + Icons = new Dictionary + { + ["material"] = new ("materialicon"), + ["noimage"] = new ("T_Placeholder_Item_Image"), + ["pointlight"] = new ("pointlight"), + ["spotlight"] = new ("spotlight"), + }; + _platform = UserSettings.Default.OverridedPlatform; _game = Services.ApplicationService.ApplicationView.CUE4Parse.Game; - - Icons["material"] = new Texture("materialicon"); - Icons["noimage"] = new Texture("T_Placeholder_Item_Image"); } public bool TryGetCachedModel(UStaticMesh o, out Model model) @@ -72,6 +80,11 @@ public class Cache : IDisposable if (model.IsSetup) continue; model.Setup(this); } + + foreach (var light in Lights) + { + light.Setup(); + } } public void DisposeModels() @@ -94,10 +107,16 @@ public class Cache : IDisposable } } - public void Dispose() + public void Reset() { DisposeModels(); Models.Clear(); + Lights.Clear(); + } + + public void Dispose() + { + Reset(); DisposeTextures(); Textures.Clear(); diff --git a/FModel/Views/Snooper/Camera.cs b/FModel/Views/Snooper/Camera.cs index 0afd2de4..0f783ce0 100644 --- a/FModel/Views/Snooper/Camera.cs +++ b/FModel/Views/Snooper/Camera.cs @@ -129,7 +129,7 @@ public class Camera if (ImGui.BeginTable("camera_editor", 2)) { SnimGui.Layout("Speed");ImGui.PushID(1); - ImGui.DragFloat("", ref Speed, _step, _zero, _infinite, "%.2f s/m", _clamp); + ImGui.DragFloat("", ref Speed, _step, _zero, _infinite, "%.2f m/s", _clamp); ImGui.PopID();SnimGui.Layout("Far Plane");ImGui.PushID(2); ImGui.DragFloat("", ref Far, 0.1f, 0.1f, Far * 2f, "%.2f m", _clamp); ImGui.PopID(); diff --git a/FModel/Views/Snooper/Light.cs b/FModel/Views/Snooper/Light.cs new file mode 100644 index 00000000..1ab6209d --- /dev/null +++ b/FModel/Views/Snooper/Light.cs @@ -0,0 +1,95 @@ +using System; +using System.Numerics; +using CUE4Parse.UE4.Assets.Exports; +using CUE4Parse.UE4.Objects.Core.Math; +using OpenTK.Graphics.OpenGL4; + +namespace FModel.Views.Snooper; + +public abstract class Light : IDisposable +{ + private int _handle; + + private BufferObject _ebo; + private BufferObject _vbo; + private BufferObject _matrixVbo; + private VertexArrayObject _vao; + + public readonly uint[] Indices = { 0, 1, 2, 3, 4, 5 }; + public readonly float[] Vertices = { + 1f, 1f, 0f, + -1f, -1f, 0f, + -1f, 1f, 0f, + -1f, -1f, 0f, + 1f, 1f, 0f, + 1f, -1f, 0 + }; + public Texture Icon; + public readonly Transform Transform; + + public readonly Vector4 Color; + public readonly float Intensity; + public readonly float Linear; + public readonly float Quadratic; + + public Light(Texture icon, UObject light, FVector position) + { + var p = light.GetOrDefault("RelativeLocation", FVector.ZeroVector); + var r = light.GetOrDefault("RelativeRotation", FRotator.ZeroRotator); + + Transform = Transform.Identity; + Transform.Scale = new FVector(0.25f); + Transform.Position = position + r.RotateVector(p.ToMapVector()) * Constants.SCALE_DOWN_RATIO; + + Icon = icon; + + Color = light.GetOrDefault("LightColor", new FColor(0xFF, 0xFF, 0xFF, 0xFF)); + Intensity = light.GetOrDefault("Intensity", 1.0f); + + var radius = light.GetOrDefault("AttenuationRadius", 0.0f) * Constants.SCALE_DOWN_RATIO; + Linear = 4.5f / radius; + Quadratic = 75.0f / MathF.Pow(radius, 2); + } + + public void SetupInstances() + { + var instanceMatrix = new [] {Transform.Matrix}; + _matrixVbo = new BufferObject(instanceMatrix, BufferTarget.ArrayBuffer); + _vao.BindInstancing(); // VertexAttributePointer + } + + public void Setup() + { + _handle = GL.CreateProgram(); + + _ebo = new BufferObject(Indices, BufferTarget.ElementArrayBuffer); + _vbo = new BufferObject(Vertices, BufferTarget.ArrayBuffer); + _vao = new VertexArrayObject(_vbo, _ebo); + + _vao.VertexAttributePointer(0, 3, VertexAttribPointerType.Float, 3, 0); // position + SetupInstances(); + } + + public abstract void Render(int i, Shader shader); + + public void Render(Shader shader) + { + // GL.Disable(EnableCap.DepthTest); + _vao.Bind(); + + Icon?.Bind(TextureUnit.Texture0); + shader.SetUniform("uIcon", 0); + shader.SetUniform("uColor", Color); + + GL.DrawArrays(PrimitiveType.Triangles, 0, Indices.Length); + // GL.Enable(EnableCap.DepthTest); + } + + public void Dispose() + { + _ebo?.Dispose(); + _vbo?.Dispose(); + _vao?.Dispose(); + GL.DeleteProgram(_handle); + } +} diff --git a/FModel/Views/Snooper/Material.cs b/FModel/Views/Snooper/Material.cs index c7650b6d..06a2ae50 100644 --- a/FModel/Views/Snooper/Material.cs +++ b/FModel/Views/Snooper/Material.cs @@ -83,7 +83,7 @@ public class Material : IDisposable } { // colors - DiffuseColor = FillColors(numTexCoords, Diffuse, CMaterialParams2.DiffuseColors, new Vector4(0.5f)); + DiffuseColor = FillColors(numTexCoords, Diffuse, CMaterialParams2.DiffuseColors, Vector4.One); EmissiveColor = FillColors(numTexCoords, Emissive, CMaterialParams2.EmissiveColors, Vector4.One); } @@ -208,10 +208,15 @@ public class Material : IDisposable private const float _zero = 0.000001f; // doesn't actually work if _infinite is used as max value /shrug private const float _infinite = 0.0f; private const ImGuiSliderFlags _clamp = ImGuiSliderFlags.AlwaysClamp; - public void ImGuiParameters() + private void PushStyle() { ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new Vector2(8, 3)); ImGui.PushStyleVar(ImGuiStyleVar.CellPadding, new Vector2(0, 1)); + } + + public void ImGuiParameters() + { + PushStyle(); if (ImGui.BeginTable("parameters", 2)) { SnimGui.Layout("Emissive Multiplier");ImGui.PushID(1); @@ -253,7 +258,40 @@ public class Material : IDisposable } } - public IntPtr? GetSelectedTexture() + public void ImGuiTextures(Dictionary icons, Model model) + { + PushStyle(); + if (ImGui.BeginTable("material_textures", 2)) + { + SnimGui.Layout("Channel");ImGui.PushID(1); ImGui.BeginDisabled(model.NumTexCoords < 2); + ImGui.DragInt("", ref SelectedChannel, _step, 0, model.NumTexCoords - 1, "UV %i", ImGuiSliderFlags.AlwaysClamp); + ImGui.EndDisabled();ImGui.PopID();SnimGui.Layout("Type");ImGui.PushID(2); + ImGui.Combo("texture_type", ref SelectedTexture, "Diffuse\0Normals\0Specular\0Ambient Occlusion\0Emissive\0"); + ImGui.PopID(); + + switch (SelectedTexture) + { + case 0: + SnimGui.Layout("Color");ImGui.PushID(3); + ImGui.ColorEdit4("", ref DiffuseColor[SelectedChannel], ImGuiColorEditFlags.NoAlpha); + ImGui.PopID(); + break; + case 4: + SnimGui.Layout("Color");ImGui.PushID(3); + ImGui.ColorEdit4("", ref EmissiveColor[SelectedChannel], ImGuiColorEditFlags.NoAlpha); + ImGui.PopID(); + break; + } + + ImGui.EndTable(); + } + ImGui.PopStyleVar(2); + + ImGui.Image(GetSelectedTexture() ?? icons["noimage"].GetPointer(), new Vector2(ImGui.GetContentRegionAvail().X), Vector2.Zero, Vector2.One, Vector4.One, new Vector4(1.0f, 1.0f, 1.0f, 0.25f)); + ImGui.Spacing(); + } + + private IntPtr? GetSelectedTexture() { return SelectedTexture switch { diff --git a/FModel/Views/Snooper/PointLight.cs b/FModel/Views/Snooper/PointLight.cs new file mode 100644 index 00000000..bad35c25 --- /dev/null +++ b/FModel/Views/Snooper/PointLight.cs @@ -0,0 +1,21 @@ +using CUE4Parse.UE4.Assets.Exports; +using CUE4Parse.UE4.Objects.Core.Math; + +namespace FModel.Views.Snooper; + +public class PointLight : Light +{ + public PointLight(Texture icon, UObject point, FVector position) : base(icon, point, position) + { + + } + + public override void Render(int i, Shader shader) + { + shader.SetUniform($"uLights[{i}].Color", Color); + shader.SetUniform($"uLights[{i}].Position", Transform.Position); + shader.SetUniform($"uLights[{i}].Intensity", Intensity); + shader.SetUniform($"uLights[{i}].Linear", Linear); + shader.SetUniform($"uLights[{i}].Quadratic", Quadratic); + } +} diff --git a/FModel/Views/Snooper/Renderer.cs b/FModel/Views/Snooper/Renderer.cs index 5c66ca55..79e97c86 100644 --- a/FModel/Views/Snooper/Renderer.cs +++ b/FModel/Views/Snooper/Renderer.cs @@ -24,9 +24,11 @@ public class Renderer : IDisposable private readonly Grid _grid; private Shader _shader; private Shader _outline; + private Shader _light; public bool ShowSkybox; public bool ShowGrid; + public bool ShowLights; public int VertexColor; public PickingTexture Picking { get; } @@ -49,6 +51,7 @@ public class Renderer : IDisposable public Camera Load(CancellationToken cancellationToken, UObject export) { + ShowLights = false; return export switch { UStaticMesh st => LoadStaticMesh(st), @@ -86,6 +89,7 @@ public class Renderer : IDisposable _shader = new Shader(); _outline = new Shader("outline"); + _light = new Shader("light"); Picking.Setup(); Cache.Setup(); @@ -101,17 +105,28 @@ public class Renderer : IDisposable _shader.Render(viewMatrix, cam.Position, cam.Direction, projMatrix); for (int i = 0; i < 6; i++) - { _shader.SetUniform($"bVertexColors[{i}]", i == VertexColor); - } - // render pass + // render model pass foreach (var model in Cache.Models.Values) { if (!model.Show) continue; model.Render(_shader); } + { // light pass + var uNumLights = Cache.Lights.Count; + _shader.SetUniform("uNumLights", ShowLights ? uNumLights : 0); + + if (ShowLights) + for (int i = 0; i < uNumLights; i++) + Cache.Lights[i].Render(i, _shader); + + _light.Render(viewMatrix, projMatrix); + for (int i = 0; i < uNumLights; i++) + Cache.Lights[i].Render(_light); + } + // outline pass if (Cache.Models.TryGetValue(Settings.SelectedModel, out var selected) && selected.Show) { @@ -188,6 +203,7 @@ public class Renderer : IDisposable Services.ApplicationService.ApplicationView.Status.UpdateStatusLabel($"{original.Name} ... {i}/{length}"); WorldCamera(actor, ref cam); + // WorldLight(actor); WorldMesh(actor, transform); AdditionalWorlds(actor, transform.Matrix, cancellationToken); } @@ -209,6 +225,14 @@ public class Renderer : IDisposable 0.01f, far * 25f, Math.Max(5f, far / 10f)); } + private void WorldLight(UObject actor) + { + if (!actor.TryGetValue(out FPackageIndex lightComponent, "LightComponent") || + lightComponent.Load() is not { } lightObject) return; + + Cache.Lights.Add(new PointLight(Cache.Icons["pointlight"], lightObject, FVector.ZeroVector)); + } + private void WorldMesh(UObject actor, Transform transform) { if (!actor.TryGetValue(out FPackageIndex staticMeshComponent, "StaticMeshComponent", "Mesh") || @@ -274,6 +298,17 @@ public class Renderer : IDisposable } Cache.Models[guid] = model; } + + if (actor.TryGetValue(out FPackageIndex treasureLight, "TreasureLight", "PointLight") && + treasureLight.TryLoad(out var tl) && tl.Template.TryLoad(out tl)) + { + Cache.Lights.Add(new PointLight(Cache.Icons["pointlight"], tl, t.Position)); + } + if (actor.TryGetValue(out FPackageIndex spotLight, "SpotLight") && + spotLight.TryLoad(out var sl) && sl.Template.TryLoad(out sl)) + { + Cache.Lights.Add(new SpotLight(Cache.Icons["spotlight"], sl, t.Position)); + } } private void AdditionalWorlds(UObject actor, Matrix4x4 relation, CancellationToken cancellationToken) @@ -308,6 +343,7 @@ public class Renderer : IDisposable _grid?.Dispose(); _shader?.Dispose(); _outline?.Dispose(); + _light?.Dispose(); Picking?.Dispose(); Cache?.Dispose(); } diff --git a/FModel/Views/Snooper/SnimGui.cs b/FModel/Views/Snooper/SnimGui.cs index b32eafa1..4a41a3c5 100644 --- a/FModel/Views/Snooper/SnimGui.cs +++ b/FModel/Views/Snooper/SnimGui.cs @@ -63,7 +63,9 @@ public class SnimGui ImGui.Checkbox("", ref s.Renderer.ShowSkybox); ImGui.PopID();Layout("Grid");ImGui.PushID(2); ImGui.Checkbox("", ref s.Renderer.ShowGrid); - ImGui.PopID();Layout("Vertex Colors");ImGui.PushID(3); + ImGui.PopID();Layout("Lights");ImGui.PushID(3); + ImGui.Checkbox("", ref s.Renderer.ShowLights); + ImGui.PopID();Layout("Vertex Colors");ImGui.PushID(4); ImGui.Combo("vertex_colors", ref s.Renderer.VertexColor, "Default\0Diffuse Only\0Colors\0Normals\0Tangent\0Texture Coordinates\0"); ImGui.PopID(); @@ -441,22 +443,7 @@ public class SnimGui ImGui.SetNextItemOpen(true, ImGuiCond.Appearing); if (ImGui.CollapsingHeader("Textures")) { - ImGui.PushStyleVar(ImGuiStyleVar.FramePadding, new Vector2(8, 3)); - ImGui.PushStyleVar(ImGuiStyleVar.CellPadding, new Vector2(0, 1)); - if (ImGui.BeginTable("material_textures", 2)) - { - Layout("Channel");ImGui.PushID(1); ImGui.BeginDisabled(model.NumTexCoords < 2); - ImGui.DragInt("", ref material.SelectedChannel, 1, 0, model.NumTexCoords - 1, "UV %i", ImGuiSliderFlags.AlwaysClamp); - ImGui.EndDisabled();ImGui.PopID();Layout("Type");ImGui.PushID(2); - ImGui.Combo("texture_type", ref material.SelectedTexture, - "Diffuse\0Normals\0Specular\0Ambient Occlusion\0Emissive\0"); - ImGui.PopID(); - ImGui.EndTable(); - } - ImGui.PopStyleVar(2); - - ImGui.Image(material.GetSelectedTexture() ?? icons["noimage"].GetPointer(), new Vector2(ImGui.GetContentRegionAvail().X), Vector2.Zero, Vector2.One, Vector4.One, new Vector4(1.0f, 1.0f, 1.0f, 0.25f)); - ImGui.Spacing(); + material.ImGuiTextures(icons, model); } ImGui.SetNextItemOpen(true, ImGuiCond.Appearing); diff --git a/FModel/Views/Snooper/Snooper.cs b/FModel/Views/Snooper/Snooper.cs index 9d72b865..d5d5718f 100644 --- a/FModel/Views/Snooper/Snooper.cs +++ b/FModel/Views/Snooper/Snooper.cs @@ -49,8 +49,7 @@ public class Snooper : GameWindow if (clear) { _previousSpeed = 0f; - Renderer.Cache.DisposeModels(); - Renderer.Cache.Models.Clear(); + Renderer.Cache.Reset(); Renderer.Settings.Reset(); Renderer.Save(); } diff --git a/FModel/Views/Snooper/SpotLight.cs b/FModel/Views/Snooper/SpotLight.cs new file mode 100644 index 00000000..8f1ad9ef --- /dev/null +++ b/FModel/Views/Snooper/SpotLight.cs @@ -0,0 +1,32 @@ +using System; +using System.Numerics; +using CUE4Parse.UE4.Assets.Exports; +using CUE4Parse.UE4.Objects.Core.Math; + +namespace FModel.Views.Snooper; + +public class SpotLight : PointLight +{ + public Vector3 Direction; // ??? + public float Attenuation; + public float ConeAngle; + + public SpotLight(Texture icon, UObject spot, FVector position) : base(icon, spot, position) + { + // var p = spot.GetOrDefault("RelativeLocation", FVector.ZeroVector); + // var r = spot.GetOrDefault("RelativeRotation", FRotator.ZeroRotator); + + // Direction = position + r.UnrotateVector(p.ToMapVector()) * Constants.SCALE_DOWN_RATIO; + Attenuation = spot.GetOrDefault("AttenuationRadius", 0.0f) * Constants.SCALE_DOWN_RATIO; + ConeAngle = (spot.GetOrDefault("InnerConeAngle", 50f) + spot.GetOrDefault("OuterConeAngle", 60f)) / 2f; + ConeAngle = MathF.Cos(Helper.DegreesToRadians(ConeAngle)); + } + + public new void Render(int i, Shader shader) + { + base.Render(i, shader); + // shader.SetUniform($"uLights[{i}].Direction", Direction); + // shader.SetUniform($"uLights[{i}].Attenuation", Attenuation); + // shader.SetUniform($"uLights[{i}].ConeAngle", ConeAngle); + } +} diff --git a/FModel/Views/Snooper/VertexArrayObject.cs b/FModel/Views/Snooper/VertexArrayObject.cs index f2bc3b53..ef27c198 100644 --- a/FModel/Views/Snooper/VertexArrayObject.cs +++ b/FModel/Views/Snooper/VertexArrayObject.cs @@ -36,6 +36,11 @@ public class VertexArrayObject : IDisposable where TVer GL.BindVertexArray(_handle); } + public void Unbind() + { + GL.BindVertexArray(0); + } + public unsafe void BindInstancing() { Bind(); @@ -58,11 +63,6 @@ public class VertexArrayObject : IDisposable where TVer Unbind(); } - public void Unbind() - { - GL.BindVertexArray(0); - } - public void Dispose() { GL.DeleteVertexArray(_handle);