From cc5ade69f1998e69d0eb9430d6319f6b8b0e93b5 Mon Sep 17 00:00:00 2001 From: saschawillems Date: Sat, 25 Jun 2016 20:40:22 +0200 Subject: [PATCH] Added fog --- data/shaders/terraintessellation/terrain.frag | 16 +++++++++++++++- .../terraintessellation/terrain.frag.spv | Bin 3676 -> 4716 bytes data/shaders/terraintessellation/terrain.tese | 4 ++++ .../terraintessellation/terrain.tese.spv | Bin 4916 -> 5256 bytes 4 files changed, 19 insertions(+), 1 deletion(-) diff --git a/data/shaders/terraintessellation/terrain.frag b/data/shaders/terraintessellation/terrain.frag index 1cde9396..9273a742 100644 --- a/data/shaders/terraintessellation/terrain.frag +++ b/data/shaders/terraintessellation/terrain.frag @@ -10,6 +10,8 @@ layout (location = 0) in vec3 inNormal; layout (location = 1) in vec2 inUV; layout (location = 2) in vec3 inViewVec; layout (location = 3) in vec3 inLightVec; +layout (location = 4) in vec3 inEyePos; +layout (location = 5) in vec3 inWorldPos; layout (location = 0) out vec4 outFragColor; @@ -40,11 +42,23 @@ vec3 sampleTerrainLayer() return color; } +float fog(float density) +{ + const float LOG2 = -1.442695; + float dist = gl_FragCoord.z / gl_FragCoord.w * 0.1; + float d = density * dist; + return 1.0 - clamp(exp2(d * d * LOG2), 0.0, 1.0); +} + void main() { vec3 N = normalize(inNormal); vec3 L = normalize(inLightVec); vec3 ambient = vec3(0.5); vec3 diffuse = max(dot(N, L), 0.0) * vec3(1.0); - outFragColor = vec4((ambient + diffuse) * sampleTerrainLayer(), 1.0); + + vec4 color = vec4((ambient + diffuse) * sampleTerrainLayer(), 1.0); + + const vec4 fogColor = vec4(0.47, 0.5, 0.67, 0.0); + outFragColor = mix(color, fogColor, fog(0.25)); } diff --git a/data/shaders/terraintessellation/terrain.frag.spv b/data/shaders/terraintessellation/terrain.frag.spv index 86bc3465bf29ce87f8fa2a3039e31fac652317fa..4822b129af54686b4ccc919890cc7403c07a84f0 100644 GIT binary patch literal 4716 zcmZ9O`%m6W5Oo0?H17?ySfgwo5Ff+)-ns5*SD{DN=>=};CoHLy>M3fqY z6e`lq?6Ou#Ql?ZIm1Y+&P^qnDKlg9=Q>$95R-ey4??XG@S>N?M-{=0m``!CYd)xIh zvTPcEGqb;Bt#w(}2G6qDS!W@)4eT0N*_;|#x#reYM$FCHi$G)MWplFWNHI~V)^zlO zW8f)p2K)iM0p0{}f%)VcPh+%px@Fk~icQaEW!naZ`tIrF zzWejxspkL3;HuWfhQ=$kv4fSdd}z%rt0pVM2eJ+-mFMZ8(=2*4D-)CB`Q3S=!Jq?` z!+B#_5jz*(Xnkzi=;{pxp93GsYt8D^;es!Kj~h;ZYp;b5*T?G(qx3K8#fcFts9?nhJOjX3vR4-bLS^+-39Q=klnzwJn?sEp?!F`Edh{%Nr!V+>3x4uqjT_*`Xpb5R z1%LHojho=cXpb5z(0%rib2ECDoxNCNWx=~P$6h`FH%5EZSdH#|i5j<{XIan1oDaf` z*Y26#iu6oH7tXzYS;$T*;U6LvYXAvoEjUi#d%AIE=H;hf|QY4T<|cy7X^C zn(MRGFYg7~yr2C@`^EWqKW_)Fn0sr%zPQ;B^XOT2q$l?B2F(2ifAbRlR^n@UYdmxBm&Kk_&_$<1(f$|>$XWs%&gC3@G2JMmaBXplv{^2HK+jFVUSL z_^;57Ihyi+jc$zg_32z*M4ttYr_#5VP^!KNy&|7>ydLQTo_oVx<8QmD|ZNU2-_h$>bewX*L6S)m& z-wN#KS!+}GoISIDQt2Z|pPTaU%rb!d7;x#|fz+>b)`iGBfi=$2YbWxqWE({Oix~Mw zfwjz4kKDV_&Fy2#*~mS>Gt#~r80Y+ZfxgJQ2fdv4akzQfZwHb033PqO(m8w*-CEk+ zyLU=k#D5B1Tkub#dsfkR2)*3*KDd3gm*=g(?*q|yAG)=)`yF&o!(bYi4)jOt2)c9V zk2!L5=Q@%0F^X=ScK6}Cpe^FZ(6z<)a6h`e{2qE&^hch)$g858CqIC!0smK!dk^cN z7x*oee+Foq1jcwD8o)EE!`){y+2Vdq!Oe4p?I5}~XB;GJ2J*AOSbf&mOV57fA>ds4 z@8nBk?B{@X;j&H}h;RO3bYt9~bDHycuofJpuKWwhW~^tUPn-ANcfh-=jD0?U?mmx@ zzYzH#&=%hpecHRdD`Qf@;JKolfd(G7Hv`EtLV-g z{A=jOME=*&jnQttvulg^Z=!1p{zT%D|1G#N+Qas3bnQ=qc+b9r?tSpN==b-{bNDXM Xz8n~{4*0to@8S0nH_m4y_Zj^cR!gD8 literal 3676 zcmZ9O>r<6g6o$h%u?aRBNx@yhLlxFZVEB%lrM`Nmjr!*(kWwN95 zWM|9hSZ~Xgts9M)o2s)wW9FsVsRk(q3#B0)yTMg(1KbDSgZbnb!(?dH%#hM=6sSq{ zsiU*I^+a3uXmO-aE{qksNBaxC#d7!X`HRJ#vC;p>;3^IEbq^GV`o;@=#qKSeH;xo~ zE~Q#3RrXNJO!dq$S{NJ|D4r^o%QV+nxKb>y&tm7}8<0}p+)ePF;ep{YQoa@0Uo7?Y zkIC!OPWWW4^5NW^#ktnf(CID&ygD6}XL?OKiY(J;G3RHImn&)-m)FcXqm``2yT~J% zUYqS>Y3Rssd9W~mDf3@PcIJNfn1$JBSFuNbO}d4xFnGRH92(2`9e8i)!iDkCBD^j; zli~5PL*+tWd%k4swb?n9hPq0{%UP+^K`qz48aRTlLigr?wTs&<;Hv7#(OV} zcgXEuUY&FAOQqktBR78`zm==98#HNKf?kKM2`r_a_e*X)<7OeX>6?SpXN|@124oX( zY{>aT=*Fys&qbP}tqDF4X)W#MH)i(9y)a+C0665vj#n-k+$HEXZ)9`8f)RkXpb7}(EUy$XFYmKKTXwmGUE;Hv6iRc#%PZk z&FHl`cR!v6DeaxgX@ME9-97cua!*CfyBXcl%qeMq7HA8Yw*{_ma?k72wp{ltDo5}Y z?9O%^#+kn(57M?P=YCHP{kxFnde-{oeoxxGuX~Zs9sA{d-47hGj<$?lZMWV5bo=!l z#$NeOSYr{V|59$Z&T-&8%XuX)AdQhbrc2k=hut{m={Ja>&A#P+=Z@%WAY&7)#=nPd zO?xw5?mM6@_>G)L{s(ZzzBr%T5N&~oyJu9In2P%ZrY+$7pTWJi?x*v~@8`Cd-*?7- zwsEtnknXv|yg#vc-;DJx`98;5H+k<-+`5&TNGx$g7#y?|uU+!BR{%6qjHv|3hmRxr)d`~_5?a1eV@1A^4CMVyy zv+RiHvJV)u2Y6oIvpC0Abo~zRh4-=@Xm10~?OtnBcc0y}zo>Kw>A5NYVD7`n=Yd22 z3rPJ+duv3#2(0llbNOB#$!(p;zlo7|0Bf169=XTR&26Pi&-eszkF*~L#@YW#pfB=H zp;zXehMT8-KZv|8bbUASeK><|E$yz|JEbk+Uq;s!{1tTfD&~C^y>i~y;LfYPvftO? z`eNQU(5O@ChnK)^;F~5N%xwcmbG#2jz&#qy&u%!k#r+(Co977I zo9No?@ff=^6Ilkv>a)ff=Jf850{hZ`l$XZXF`!*ItWyQz?Hxxq#`W2!Id6eY;2L%1 zmvfu3?u|Ze-h00R@2)b|`8K-ioFKmuc?D=&2F%x|t@69_8;JSeL3fUSsjKcg`X6uR B9vA=s diff --git a/data/shaders/terraintessellation/terrain.tese b/data/shaders/terraintessellation/terrain.tese index 64b0e0c9..e6a6379d 100644 --- a/data/shaders/terraintessellation/terrain.tese +++ b/data/shaders/terraintessellation/terrain.tese @@ -26,6 +26,8 @@ layout (location = 0) out vec3 outNormal; layout (location = 1) out vec2 outUV; layout (location = 2) out vec3 outViewVec; layout (location = 3) out vec3 outLightVec; +layout (location = 4) out vec3 outEyePos; +layout (location = 5) out vec3 outWorldPos; void main() { @@ -50,4 +52,6 @@ void main() // Calculate vectors for lighting based on tessellated position outViewVec = -pos.xyz; outLightVec = normalize(ubo.lightPos.xyz + outViewVec); + outWorldPos = pos.xyz; + outEyePos = vec3(ubo.modelview * pos); } \ No newline at end of file diff --git a/data/shaders/terraintessellation/terrain.tese.spv b/data/shaders/terraintessellation/terrain.tese.spv index a49209b0afc16faf7bf3983f03d2730dc9c7cb17..1abf5fb140c936f99e626b449b9722ba0ebfeca3 100644 GIT binary patch delta 375 zcmdm@)}hJE%%sfDz`zKE91I&L^7=9gOpG>VUCO|~uwrBHd}ei4237_TFTb=TJijO> zB_O{TD8kCH0wU&GnFqFg{2b^X6Kv^&GCYKqWyy?lK_G0b+lk)5L-Fa;O+c90VAFmvAQx@`Vvv52dZ4^0*l8f2fh7I{wOar&03fF}WdHyG delta 54 zcmeCs+@i+I%%sfDz`zKE91Ke*^7=CJO^i0(IAad;<`|Y7rp+(dUNCR|z_o^h<1bK& H1rP%OWPT1O