From ef26748142d945760cccb212c1f0973f1f438c40 Mon Sep 17 00:00:00 2001 From: saschawillems Date: Mon, 19 Dec 2016 20:21:44 +0100 Subject: [PATCH] Updated particle fire shaders (Fixes #259) --- data/shaders/particlefire/normalmap.frag | 2 +- data/shaders/particlefire/normalmap.frag.spv | Bin 2932 -> 2948 bytes data/shaders/particlefire/normalmap.vert | 42 +++++++++++-------- data/shaders/particlefire/normalmap.vert.spv | Bin 4884 -> 4748 bytes data/shaders/particlefire/particle.frag | 9 ++-- data/shaders/particlefire/particle.frag.spv | Bin 2924 -> 2868 bytes data/shaders/particlefire/particle.vert | 33 +++++++-------- data/shaders/particlefire/particle.vert.spv | Bin 4064 -> 2940 bytes 8 files changed, 45 insertions(+), 41 deletions(-) diff --git a/data/shaders/particlefire/normalmap.frag b/data/shaders/particlefire/normalmap.frag index 86266d45..276490a8 100644 --- a/data/shaders/particlefire/normalmap.frag +++ b/data/shaders/particlefire/normalmap.frag @@ -21,7 +21,7 @@ void main(void) vec3 specularColor = vec3(0.85, 0.5, 0.0); float invRadius = 1.0/lightRadius; - float ambient = 0.0; + float ambient = 0.25; vec3 rgb, normal; diff --git a/data/shaders/particlefire/normalmap.frag.spv b/data/shaders/particlefire/normalmap.frag.spv index d5c0565a4300b4c6f27ff3cd23453dd6f91cf9b4..573db6316108a5b9f11857072aa263208784d853 100644 GIT binary patch literal 2948 zcmY+FZ&y@R6vl5LC_(Qr7q|>phk<4Wdzr0PZ+q37 z`XGIPK2>j8tKaX=-F3UHz0Q92e)e=yP2GjWhQc}$4c&n!vuCn9^2 zp=55per;){-pO{-cG}JAoy~MTYuC3|A7^Xb&i^^2@>ZkXOk0iJw2{>(&Y#;!*PbK; zC{@=n!1{-nqqCE(?Kac)_3h?%8$7_@0mi)bbP1_lO7 zNAWv_!0mLW-omUZYL}7r{JavMSh^@|9_gjn$O8S z&9mX?S69pBI2Ep>lyp|5o`5q{N1Qxe=`Eh z_cx=8YZYw$SOv@XjR)VnZ@h}9D_Fj7Jn~}Sa}_UCuzJ2*^ONk(y?E#J-G}!|-#vJz zuCizE#VeS1LhQM}ih1Vu>5P5#-N-S1hc2oAI%YiHnEkc4>f00Zp??a0w8ZM4#;W>n zfaMqu{WtNAYkr}>SiYsVi207feqybz>utIr% z)f&gVtAXDy@vrFm2K?tJ$GG*LwXxuz$B%mXA7XM`gLndS4K>VMtoH)GwdU3J&KOhI zx=Wbn8Te!Ts_rLXbv*-fKbPyhjBl-Z`=!Gx#+u`gt8+j`3K_4Scm-i}_fK`qNe7_-cC==IvMH9^#ujj>&s~Ij_GN=3<_& z@O{H#&-ZK0vyA)s4Za-X!KvdVPcX&I9jHLLi}9rtq$e;6|!Ygxx1!a^s* zHzxPT@_ldMt8Xr14Sd&WF6P_BukIrU%QJqrd=HQDjr&FH3BECV7qMm;>tkHxR8KN) UVb;qx@0+o|j~LDUjlw1DA3^-oDgXcg literal 2932 zcmY+E+jbOH5Qf`?Nr;IYL_q{~0xAj`5d)$e5&{y$1VSQ-;9=+_ok_!F5@#lOsV~j>{;Z6B$zVa0vme$TMr|w23yGKU-@!h?ZetIzE$jew@|X~BkXe%CPek@4 zBgyPsw*DOFW#^!QDGW;8vD5H+%ikf_s|Wdfx3VecLJY zJ+HhyCu=!dn<+RRb_>K%;PZ@Wua|kq?sbZBJ>S^a?PdkO0dA>Khl~ z>h5EVxkBdvv2^s0%SXA*hwz=teOAA~$5`PDB;=|0Vo5S~sl@ie&wahbsGj?mf0R)z znoTX<99hF^?f_WH9ybSvsK?SF(3Nl`1KO2e*&xOp9IS>9{R82 z8`u0of1!LkZxHj{g#E-?UDunKwdQ{*V{eu5Q;cI}{oD9zde_XmZhL3kb*uF*=3Nau zQQ}|G^$om-$uVxdy*3v7_wl1%{y9vJYY=~cxrRDsF4jAVZ>@QCy)(wtweCaAeg?jX zU)B8xtgibp_j9@4kMXTF?|G?p3G@A#8>6?zE@RgFR?T}?KJ;$l+t2UI{>|bWi=N-Y zS4)mLHGE&jL*q02+gQ}h;YW=*YkY&oqvj62Ix+8Ed}EPcz;~Zx+$!(YJxop4AlJOQ zzGZV!w}kIpfj`HW6X$gwUygCL?cFk_w!JX#c}4CEd~?1%c`KOn`k!Gg=J^ueH!N23 zE6iTT{rnnVj`84pgKs}Vqk*qR)I7pBCNFAIeCLk)xr*<5HXb@__#;^8tm7M#`(ydO zGyF%GxrlAxyH0a4UlYH&k4>;Vi!7QGyd8nKIPfs(&bP)xJ8xg8RV3%N}j-8 zU>Oea=pwH{Bm8S`LDLK~-zaFF*rk&Oc?Z?YPd>Ah&49*Aet<3@ldd@?eu5^{D7(zA LvwTyYYYTn=^L{tA delta 578 zcmYL`y-Nc@5XEOVA14vS6mkSaBBEepEl3nm&_+lKYmp#wa3o4%VIh__TEz1o$axyS zO}yH_%3AO}Z&vqs%az~rD>AU*_SbK zbZq@foO$Ii+^e@cK{sf(q$r-mQQ!Kt-x(Yhf@32Ljy8i%cfZv<$Xwt#&7FkdU#_mR_s zA0toD6x4u+Ek7$maO_lG6qPuPrtce%zYP5VEf`6e diff --git a/data/shaders/particlefire/particle.frag b/data/shaders/particlefire/particle.frag index 4e7b186d..869e78f2 100644 --- a/data/shaders/particlefire/particle.frag +++ b/data/shaders/particlefire/particle.frag @@ -7,10 +7,9 @@ layout (binding = 1) uniform sampler2D samplerSmoke; layout (binding = 2) uniform sampler2D samplerFire; layout (location = 0) in vec4 inColor; -layout (location = 1) in float inPointSize; -layout (location = 2) in float inAlpha; -layout (location = 3) in flat int inType; -layout (location = 4) in float inRotation; +layout (location = 1) in float inAlpha; +layout (location = 2) in flat int inType; +layout (location = 3) in float inRotation; layout (location = 0) out vec4 outFragColor; @@ -25,7 +24,7 @@ void main () float rotCenter = 0.5; float rotCos = cos(inRotation); float rotSin = sin(inRotation); - vec2 rotUV = vec2( + vec2 rotUV = vec2( rotCos * (gl_PointCoord.x - rotCenter) + rotSin * (gl_PointCoord.y - rotCenter) + rotCenter, rotCos * (gl_PointCoord.y - rotCenter) - rotSin * (gl_PointCoord.x - rotCenter) + rotCenter); diff --git a/data/shaders/particlefire/particle.frag.spv b/data/shaders/particlefire/particle.frag.spv index 499e8ea382fde7ee7e6301b8d7fa706673db3ba6..7db275a2f49c9f224ff82a484c7f04e00e62c1fd 100644 GIT binary patch delta 80 zcmaDOwndDWnMs+Qfq@YSIT*?&@|rSoPjuGYSWv(0Q!z|FwGAP2;ZKn&tbL;1{; YMVYi2nI=0jC2!us0N*kU0ssI2 delta 126 zcmdlY_C}1CnMs+Qfq@YSIT*?(@|rU8Omx;{EZdk_&S=QWz{*g@z`&517m%NsR}!3A zmCE4Gz{0={6q5sDCLjj!rJ;P5$$uHO8JQ<*G9~kZ#6fyN>KHe7GI=v`S_6f+fZVdp IXIawO09?HktpET3 diff --git a/data/shaders/particlefire/particle.vert b/data/shaders/particlefire/particle.vert index d64c669b..ffa209f5 100644 --- a/data/shaders/particlefire/particle.vert +++ b/data/shaders/particlefire/particle.vert @@ -11,10 +11,9 @@ layout (location = 4) in float inRotation; layout (location = 5) in int inType; layout (location = 0) out vec4 outColor; -layout (location = 1) out float outPointSize; -layout (location = 2) out float outAlpha; -layout (location = 3) out flat int outType; -layout (location = 4) out float outRotation; +layout (location = 1) out float outAlpha; +layout (location = 2) out flat int outType; +layout (location = 3) out float outRotation; layout (binding = 0) uniform UBO { @@ -24,27 +23,27 @@ layout (binding = 0) uniform UBO float pointSize; } ubo; +out gl_PerVertex +{ + vec4 gl_Position; + float gl_PointSize; +}; + void main () { - gl_PointSize = ubo.pointSize; outColor = inColor; outAlpha = inAlpha; outType = inType; outRotation = inRotation; - vec4 eyePos = ubo.modelview * vec4(inPos.xyz, 1.0); - vec4 projVoxel = ubo.projection * vec4(ubo.pointSize, ubo.pointSize, eyePos.z, eyePos.w); - vec2 projSize = ubo.viewportDim * projVoxel.xy / projVoxel.w; - - outPointSize = inSize * 0.25 * (projSize.x + projSize.y); - - gl_PointSize = outPointSize; - gl_Position = ubo.projection * ubo.modelview * vec4(inPos.xyz, 1.0); - float pointDist = (gl_Position.w == 0.0) ? 0.00001 : gl_Position.w; - float viewportAR = ubo.viewportDim.x / ubo.viewportDim.y; - - gl_PointSize = (((inSize * 2048.0 * viewportAR) / pointDist) * viewportAR); + // Base size of the point sprites + float spriteSize = 8.0 * inSize; + + // Scale particle size depending on camera projection + vec4 eyePos = ubo.modelview * vec4(inPos.xyz, 1.0); + vec4 projectedCorner = ubo.projection * vec4(0.5 * spriteSize, 0.5 * spriteSize, eyePos.z, eyePos.w); + gl_PointSize = ubo.viewportDim.x * projectedCorner.x / projectedCorner.w; } \ No newline at end of file diff --git a/data/shaders/particlefire/particle.vert.spv b/data/shaders/particlefire/particle.vert.spv index d106997796d514b70e77b1e16c2df4c3e56e54e6..1bf28d9c84c9ee623f85ce6a4d3e763d36a04599 100644 GIT binary patch literal 2940 zcmZ9MTXz&i6oo6vOhAyE$VG)XF>2I63=j~xg-Or}8cj$5mD||K)C#SW?pZw@1)g|e zEnf8}`Kx$wE%#U5C)1{~PU`G^_Nh8`s(MC-C-yiuq`$qcO8Z$)tecuTflc2Gw2UDg&v{WZ|h6XMEAXW?S5?n9iyiqXcMbF)Vc~6T{ac>N2 zU>HX&a79fcLC5}!%A~Ih_CRl#{xPbYKF09PSRU(D^T6cYlvy6!Ag@@Tz0tjtnT|8T zy_V4z>L_|t3;ajI49<;?I0HPTnLaSU+@EF@ZC^73Dl}|1_ z>w$SIw%#%MhgW30tX4bYk z@xPQg_i~Q)F3GcVvL5lvgq>?zUwAvLhyI#o^qA?tldmzyJuS;=fHa7MS7e;Y@S1$9 zhra#1EB=cxgZ&<8CYQP{>C3{WrwrD3BZlvdS~&~9W7GzwR(`XpxK-loio?Gx6@C@#d{@u|UoNq>khGE<}`EY2B zJ703-u4pIrx*#JTJ#pUDUs{*gtc?25a3+2`F3R{`I5&L(qqCk}kQT!qt8>h2b#9?taXRL&LDMFUW^OYuv4ptM=m?apa>XUhT)X z!qkR_v+yS2>@17&IZO3T+!ltn{(LW=9$0^tS)s(3Vdgyyg8WpS)`Qkud!0@_nt#Cl{W)1DZEvr)85e>IS3xSGRvz F_8+$K&glRE literal 4064 zcmZvdX>(Ln5QeW=SVR_O7sLsuQBeeBQ)CGNgBnd(6yf9Ce&jjid1MQ6 z3OS8*^Vh}tJ5BT?^OK?B>cG(h)v2^qo2<3d>eRW~csf~ao;{zAwWsdq;K~{k)q1Tl zF#vB)w!R_teW?7EoiNUL8#*Po|UY^a>_u2UpkEoXXl+vjI9c=hIRL z&l>Gx+0|5D`0SaO!Ftv@m`$~7jj?pr=LzYXuGeRMz3kJo@l$_{^~8Y@V&>$!cx$rh zE^T2Jw}*?(@w9#^OE04b-}*wW=4AU|c5xQBcB^@>VQVb|n?Bp5Zf|}!&FS`Fv)-Hp z2IggBj?*@7KN7jb?!|TTTU*{WBzX2Hb_=mb`;a$8kIu|`#4qf=j+xu> z#>4M>SFA0+QrMBtT>3k9cRoLhu;n^S`s_#BS<-f&+Wu~6ch0gWpQEzv%xL?`cNVmx z7iU1*{7dP;9{RAf)mNa+VXYu5iTCWZt+$+i=do50zm0`GAKm%I@*g1dlj~GU|##OPk()_>mID@{mD_nXWgaPa`anQ z+xr!ZI?K`RL;i}w*Ey4(WOd;Sdre{6i}|#jhlqay-93a~JMKfi`6@{8`_Sc^U%&SH z0<)i|(B*m_`n8>zh<^s%`0#7@7g*GDhU7o|SU4QJ) znJ@3pnYZ8Q?*nxD+Z**h%I$mp{69pnWmK7AjkwRzfBmC>XV|wpaff#BI_<|<^t1L~ zAii09@=X10cOPN%5AYe}r`uaWB3_ zd+_}oLB!+kj-nek!U^g>hKMPC-p5Vy={t@XFDLeJ0^RuX9!_G5j}~$7qKhfF3hX^} z^Xap9-y`;I0M@1i_==L$SHS-~m4wew)&cgeGa z^#Wp?xV<>{bz}n6WXBpP(BrUw`@iO=8=h z9QU+_bqeuZ+_&eVEpLEZ_1rEY;V;k7<-+$Hd1lbBB4SsNKgshMtKUDIfxb_XFA#sz z)vYzn>i-9SgUQz?Cu)C*{-D~|!1YBA?Q#xt#T;Bmw~pL4tG4-9uzrPj=f1!4jDB7C zf_JmTE6?dS;QD+szJYHMW5um^qrjqZ6r9~qZ=1<{sX!^@!