From 286d5894977e3d4bd5fe7c9f6f70cbdd781aaddd Mon Sep 17 00:00:00 2001 From: Steve Hill Date: Thu, 27 Jul 2017 10:36:47 +0100 Subject: [PATCH] Modifications to shadowmapping example Change-Id: Idd0589033b56d82ba59258812a3bc0ecbc540ef3 Signed-off-by: saschawillems --- data/shaders/shadowmapping/scene.frag | 19 ++++++------------- data/shaders/shadowmapping/scene.frag.spv | Bin 5220 -> 4672 bytes shadowmapping/shadowmapping.cpp | 2 ++ 3 files changed, 8 insertions(+), 13 deletions(-) diff --git a/data/shaders/shadowmapping/scene.frag b/data/shaders/shadowmapping/scene.frag index cde0e280..cf10db26 100644 --- a/data/shaders/shadowmapping/scene.frag +++ b/data/shaders/shadowmapping/scene.frag @@ -3,7 +3,7 @@ #extension GL_ARB_separate_shader_objects : enable #extension GL_ARB_shading_language_420pack : enable -layout (binding = 1) uniform sampler2D shadowMap; +layout (binding = 1) uniform sampler2DShadow shadowMap; layout (location = 0) in vec3 inNormal; layout (location = 1) in vec3 inColor; @@ -19,23 +19,16 @@ layout (location = 0) out vec4 outFragColor; float textureProj(vec4 P, vec2 off) { - float shadow = 1.0; - vec4 shadowCoord = P / P.w; - if ( shadowCoord.z > -1.0 && shadowCoord.z < 1.0 ) - { - float dist = texture( shadowMap, shadowCoord.st + off ).r; - if ( shadowCoord.w > 0.0 && dist < shadowCoord.z ) - { - shadow = ambient; - } - } + float shadow = 1.0; + if (textureProj(shadowMap, P + vec4(off, 0.0, 0.0)) == 0.0) + shadow = ambient; return shadow; } float filterPCF(vec4 sc) { ivec2 texDim = textureSize(shadowMap, 0); - float scale = 1.5; + float scale = 0.5; float dx = scale * 1.0 / float(texDim.x); float dy = scale * 1.0 / float(texDim.y); @@ -68,4 +61,4 @@ void main() outFragColor = vec4(diffuse * shadow, 1.0); -} \ No newline at end of file +} diff --git a/data/shaders/shadowmapping/scene.frag.spv b/data/shaders/shadowmapping/scene.frag.spv index b24ede8a85c4be658bf2965221e169d956ee37af..e8c43137dbdec3e2b7d015e2866e608e4c089ae7 100644 GIT binary patch literal 4672 zcmZ9O_jgof5QZ;qK$;Y#*iEb`9>Ev|L_iEAmVf~iyJ1N-VKMCDW&_w`1$*x;R_qPz z4gFdF9osp2e4d*-p6lM6$-MJU`R4n+xi={sbi%<&GLD~#$RGw|f}Ww$_F}DAFZB#|Ht4eR|a|pi&x9Z96*ncb#WYjhsXab9@;`e`aXZ);&yn?4mA8%Ai;U?l z4wh1XAz6a%+oi9Nw2N;NPe?8?F0I{B?5$U8m}$K(bZ>RIQqSx)=o$wR^)AJxTw3pH zH09DfFUF&#jnuZkygh=Q-^*RtrAl%0V2S;M?a6yBS2mZCh~=2vbPjK)X-<&QQ71RUX(<-&jh|y^!pM+nD*CuX1H$ zxwJENr}^*0txx?;$*1VPa)1BuPzhgCI*a8>dv%Z_bx+P^b-3P9D-Mj2*qy|Am&YSM zVYh&NKeRm`v5&TAb1dTgX^&<$Dz)8*{z7Kkx3=$q@xCM4QQy9_eGVhaxE8X_7taAr zKsO_E$@iVocKv34PejWp`X{0Fo2!2^TAzFiCou)B-#mRS#LUQX=FGy5b>?FmKL<&Y zkrhW!X)Z|4Jt*-6K8l_XhcwQ5M`QtVOEcSZ_lf#(2D9k=lpH@F{Od2jESpW<0&p|p zI_`BLS}yi_CfL5^t*fsM@riX7kC`j1cOJNT%ufB<%QD-(mxHZm9rN{fAg&+vop0^d zY`wd{K5d+k`?wo<50N+4y7!^Yv9{--y*uM#o%^w!0plOYe4hE~+@W{*EaI6dp2bUO z{gLxB*!uF;coprM+ODZRipYiS?B;D}H*Y(;+SdCT?OL%1ZD(2T9D4LloKYXSKVZhA zUCa3zK_XZC&YbORKH6aWt%-Q&)^APN?)8-h`;7*BZ-ec(BcJd0L;H8Sy%+8C7row% zz6W_6aS!5U@W$>zb|WjeDwD;SS~No-!t&mG{*J46FIT> z;Y==}Q+s^@nT8mnFZz|w_iNvARxg6xld&UcZGFz{Yse@vmFn8BBjb?Oh(2?i0r|*z z3;ZS$Id6j_N1r*)iG1X|3wG`!$9Fe!^qI34Egv}_fUOhuhhTe|%B|Y#M~F2#5o7h= zk?reau>M%@6L74j&-I*D`KbRH*!p4b1H1lH*_`YL8zXNI-pA*Nb>|`a{jNs-mtf!R zN65F|uMjzNT;F#?F5fQchI_G*KmJ_ zqmM$4%xq(hMy#iQ68ad#nz4uDG7j}0*PLBI4&HM)8F4TAt+k)EPC+{p`s~5)-)U$czkm8pMdUm)ah#De zlksIKg7oyL}xHhzB=>Fuy?rkv= z=XWkx?%r&smxAS-OaI=upB0ETmZdWG|IYbf`6@kl=PQx(5x?Qu7a-P>cU{j=F4kQI z&ab-~TQ0wDC${T$Am%MVUx>)Zx))_!ta~xGwd7sbyOI-oPtKm$JBsu1e%2zfMmJdQ z_H4~{U^(-=J8kE2J=$4P|3>U(=*tlw{TtEx)lvHjur4sEX5K6}uc5FhZykMd(RUr} z?2Qn=06mPzIe*6Mlk;9Sp*>4=#3vOF0gkI^=<;o qMLm6T=EuA{i?RQk!R|5Y-2!$GaWA)m<>LLk4Q!6Q-)wEa+5ZAEP_{z= literal 5220 zcmZ9OiCM*C8N)jWDItas5{XUlD5?D?%CY4aJVtBuxs%mBPS&VRq8vFs1~rYt5~VZ zA4VQV{(>Aw{*643OeW7b76uhqB}pDHDda+UJ8{SbIDAoIF zH|{L;H-_IIgR4><>>Dap2S=O?)Ali0;ks8R%NM4BwVa1(z#BjZ(dL&AK#eG=2*FaKE@EnJ%W8+FtF} zWacS*O|4cRNMkO98>kF7P-)D?r(!k~cc)xSvJp*>Yb(1(>uxrtzc^G%{e|Qj^uRuS zh2(niE#kIB|LFSbiv5jR9W!0CjP9?ER9)0Q2hnv7E9zCSDVNqWhH`1#LA1wD8>xM$ z$^I_(d;4um@3~UloSwkwjz{wzXv+Itll}Ym*@fg!*q(uB=-gDQ8*BAl#UUU}A$b(t zlj7ENrYhB*%HWR1)>3*8h2$8%t(o6>t5mmEN_$gxn*VpWO{u>nIe{Lil*=Q-C44RE zY*wmkYC{~KXX>2RMjGqt#lcY$yPG)g?R>;1><%#Fo7&&cFewvV>& zhPH2#wtZ{+PH6kiXh(hfiu|*PGOmMc^TjhjZRmDnCi%W&+OFTu?>MxaqJKPEzq$HP zN9&XC;3OuX^_!=!gP6%V&YWr3vCe#K<7XgAvVYZd>~lcvnmqcoXCd}Hjg{x*_;#?p zM4h={>O6K19W4Y|`!uQC6ZUK>UIcHPeWf2Mu-uBw_WpdLk7c9gsr4>xvb(XLIeBuW z`&bWdM_kXda~9>|>^6Ws2YKu3^PA!m``MCO$5z?jcChirML#!ytsnV2GP^UY=Y08e zaT1=}y~r;Rd1I~nL$o!l?Y^}SBXauh&#-5?fIIfCe~Y+x#l8Ijt=~H`=Z|RX$!i}) zTTk0Hw4H6au$}F^eZ0wbw)I=@Ikam<&)Uwq+!A{9jGbX0x&OhmqFu}R^P3d8+TY9B z&h7(Ew%?+Ncdq>wh3#Jb7Uk_no9tsvw%?X~{E5tdlWu1g7f|TDzo$b{Tfa_`uh!7E-%sFgYecg#`V1uIkETQOfIKWdp&|o zLX6QD{mSS2weL8qhrsU1Sm#4qpELUi;=E3zy7r$DXYoozpE=HeeB}HU>`X__W8lcq zXO43sA32YMk0X)uH*nw`#9XBG%|ejMaa8wy&qa`eVJP z!Lgn`*K=0oqy9g^)(`t6*!Azp=HwZ$G4l4{ef$ft?mR@ly+rQR)3)}Di1!uw{{xGZ5dEGtu!qnhqYD*~ZVz+0(!mX141ZYY*<< zoU;+@`yDWLc4p5)#~GcQ@v)~5V9Vtt-m~-It!a$w*^6A%?*PlSBT@f+u>2$RFbDlX zL~btPH|@h{AHQk(K7`154&tc&5pZ*DXGZ>LR{H|5oM+&>9Cg&Mb0V()QN(pTW8+=J zJ{F*T?8BJ(h@5?h-OoknPUPau_KZJ<*w8*A>|EaqcU@a+f0RcNN;l{p!06k#oP|xWCK6 zt`}>q1~=cs6{-Kddsu^gIU?^pL|t{E`X;-S zv$uoGP4-}uU1_o#Iolo&=4`(mhcY|n^eSxUbb$UBqOV5e2AQ)S^rnpKMSG_1PfqOK zwjgnSTfuU7klTjdhRDr8oD27JEn_B3TonX1! zvc28}mNU=0({>(*(9V+j4PvY48sejWH(I|sYTpdDM%Z<*YaQX-=AefWW8{5Lw09xa zww5?@N5J_$_h8G}r!%E(AA8Z}s_pX@^sR`G{!gRztE2X3z}5)+v*3K6w_zJ2Z=c%x z5NlgYY_79#JL3IEt^HunAnx!0ST1Jpb6|7iqsHgK-euJI0@(hd#vNd}sPRRxIr6=n z?RfN;5NqqR&RF!9ktv90=6k0t_MJ06{gkg+Kjz(8jQ!sOc8^i-TVVGP_wsG9T)dy(0h=T5H(T3p_PgH54r2fS diff --git a/shadowmapping/shadowmapping.cpp b/shadowmapping/shadowmapping.cpp index a680015b..91ab2ad8 100644 --- a/shadowmapping/shadowmapping.cpp +++ b/shadowmapping/shadowmapping.cpp @@ -299,6 +299,8 @@ public: sampler.minLod = 0.0f; sampler.maxLod = 1.0f; sampler.borderColor = VK_BORDER_COLOR_FLOAT_OPAQUE_WHITE; + sampler.compareEnable = true; + sampler.compareOp = VK_COMPARE_OP_LESS; VK_CHECK_RESULT(vkCreateSampler(device, &sampler, nullptr, &offscreenPass.depthSampler)); prepareOffscreenRenderpass();