From d56ec83090acec5fb5e9d1f5d59ff0ef35e8e86a Mon Sep 17 00:00:00 2001 From: Juan Linietsky Date: Thu, 28 Sep 2017 21:23:46 -0300 Subject: [PATCH] Completed work for 3.0 shader tutorials! --- img/shader_material_convert.png | Bin 0 -> 23223 bytes img/shader_material_create.png | Bin 27535 -> 32881 bytes img/shader_material_editor.png | Bin 9276 -> 8583 bytes .../shading/screen-reading_shaders.rst | 84 +++++--- .../features/shading/shader_materials.rst | 39 ++-- .../features/shading/shading_language.rst | 193 +++++++++--------- 6 files changed, 170 insertions(+), 146 deletions(-) create mode 100644 img/shader_material_convert.png diff --git a/img/shader_material_convert.png b/img/shader_material_convert.png new file mode 100644 index 0000000000000000000000000000000000000000..7ea02bd196ed4f04cd12d0dde8004829babeb6be GIT binary patch literal 23223 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 Pktls%7o=06&dr+7WyR07CZ0`i{m%gf3=| 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 literal 27535 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 diff --git a/img/shader_material_editor.png b/img/shader_material_editor.png index e52b5a684b05c45607f6112400fd4219c7758682..3d0c969ad2498c4d6f7ddc3576ff10d627c41b28 100644 GIT binary patch literal 8583 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 tYLsv%c>L5|pj!dHeq(*9h&>^(Y z6cHr?LI_9+y@db)LkJMce);XIJ$v@W?%Dmn+LM!flRI~2?#$dapPRR)#t%5p3Y-Oj zK%Dw|_sv0|6QRKOzSF0G&+<$}1n@ZNe%I(O2vnWOvG2qN{Qk#9&)f(E3cn5lJ$nTL z?E$1`%OFtDEf8qs5eTIE5d`A%&1yDN2O3T}8$P%XIy!!RYDFgllrz41kN^;f2_Uiu>Ko~>PoBES_Rq=KjnfZ7psT0!@87iy9a|%XMDhg9e%o{pCa{XuS)Mq# z`pKqh|K#PY9Cwygv`t?uCx_AM3riNAlV&qK{ZM0-u6w+f%}?r(6?3n%-1|}F?hZ#> z8(qDQE1CYX5#|ZKRx3ZH#LApkbB(WXhdw?7%w9ipI+zuB`ue`U-~II@juVvN%g(iG zv7JNmZ}NXZO6k0puNzM+3*+ee`t=k}9Q0I%(ZSM=*M32|1$t0V!qq&!n5nvyLQDCb zXH}IMVDq~vBJ=U4X47Hg!PG0dJ4(^@+Fd&mlxK5s6m%1*=B@7 zOC1?7s-Cfg0tiC{<1k#*8% z;m+`CJA`R%nM1nj+^bqE8~fs|xT{RQoHrYK*+c6*(hjwHT>Ns$8#vHm7k@5 zj7Un!L$qc*7J*1u?BC0s?fSEAPeEcRL9hAg|fx+OI<9IC6Uo14M1SQtTfG=i~$mu(*^ z>dh1bI=o#8TR<8Z8xKFvV$D$TtUuhDJKtaOtBJNqUajpLWQs(7VpUOTE_FA-dJqj{ z(hO^tehyIaX%S=o6V=@-3FAKC$M;{snFk?Jn+s_*Wz7fq4i<=-+FDGxq$$Es0jP0}<>2TNx znCKm!OochP6-ji>D0*C+r(q2Vtd5+`PSl^9{Iy!y?zwzZxTS4~@b(7kQ`t|4y$bc| zFl;xP>gr-afTtC>qY%2a?tQ~AQ1BA-Dg4~^Crb(0oGZ2ME;El(DBR19pugUauMHP- zUv-6~3SYkS{lcGz1k3IOp&`a|c3?)RpqepbBElyd@3RrGA;=ZuO(xmFU@!rBw=(Mr z`;y+->Vj*CO$6Z+NlZkR!u`EQR@iV^5 z$I5zmz*KY|x_MCJo9n$!vg79FPAZsGo-8)XRQ6o1a>`Jqs*!w2L9q$3+bL5uu7<6& z$%wJ)0QCCKNPArrGdNyQ!}f?d%i$0}C&ngLehkxllQ<$-*^+ncTGF%CC_8fr7}`hT z5GrHk>=0^YTgS*{UW3c7!OL^m={ZOWv(;OQ-uTHTe!b>tLCDtmJA!Nk!p0YtkY~}AFBZa7S z_U6rcPx>~((IUpe*mOL&T+w;Ic5fL23t!9LT=Ab#$)Ve!i=M1vI_aO&d_0za-=Ke` zu?9L&G3pCjZ3p44n}?En(|F||fD-7jWU;k}lclsC8Cg-)yf;z^d9DE(^8QttJAaJg zQF69I#wwrD8XA>2d!HzE2o8&Sz|S>?}Aq+a$mhVSq`ydSO^m7=%VHm z^zIqolM{Tz_<_E-b11)#To;I22jLaQy22a|Z!=!?%}YJ9R`nFTa3OyvxFnp}d-T0V zO3`!JQhCxpe+=t`*1$2AlM^+GdqEUlfa!ya?lOgcYPp4@Sz-i~)CpWIJz5yJSgF%Lu#ruei& zQLu4^u*jGrLdq`Jot<-}y1Rieoy%GW?>%Lr()Sm7j~@1LDF>0TP7P^Dm4;N@jY3)b zWA1ZCZ1PL*!#*gLn-DBI**!=ZoXrQ#d_m9#83FZz_VqUMT@w{?uOxcMTB1aWRg!KT z!r1Vl4B;6QHI&?WN<#jsp~a0hhoGZ9`w{T%Q^d89{(=IlphzkG$`+-&$Lez^AfdoY@!Rk&R-+hTQ6O#RBb=l z8y86A06lLac^4KIQeIcPC_L%-SAVeMkTr6cUv4$b)$Q@AC4rXfMj781{7b4fenA7w z?Cr~r)oD9R#lYa9Wtxn`77%4U_g|gy5V$Pad28#Zg~{$yLZhFH{va8hT~y)FTnr-= zg_rzKIx8_$ouw6vkv4G#o{Z`q&2b zr8n1%ATtiuo@S5J?c*tJ)t$@HSaSFi5SBMyWXn*Fg)e^AF- zoNDJ4U6htG!&Iw|p1JjXEZ00gl^Z6%_ z9#8nmUmHXrDX+XrP9QGE!;%V);5%9i^Nn@Ebk#zi$-I>M@-0f9>z`Q6pEL3cXc%6$ z6QiK{d^;ixvT(#U>wBqr=@5tY?o~As)G{j{uOB8cCd;?#6ilA$|9C5)_%vm9c5ch} zCr7wk49Iib%!Bha$nqOPN>8@|4MhbI9x z1w~LM9V%Nlqp!ib`?B}u2`2Qf)1Qz1)7p50iI|vJc<}f4609GxQVMc3!j}PQ2^m;V zAl~YpyS&(t6UAgms;b(Gii+mE2mG4aT5q4Vz6N`v=D}!{pG$`qhGG)LbUr#fVCnwu z7}}NVjGT;lq#uoXo5iMekoVa{<9ZCCBq{0d?C?F9?FOMA$UjR;ypSnb1!>>n!BBV` zeCO~1eVM53Wj^jz5Gqf}{T@EV;6pQ-_sunM?uCB8joOG2g4@euLTRm+geIYqylGXG8Ub!4|6!_RS)!Y_ctn==o zz%Kdb!qS50LafzTeUKelQ|5ew{E|fXf_VbI(95nt{I-fdVt>;e>GByj@yE+OO3kif z!oEq#YdB#|E#>{kf70;0RmP}ie8(p)Pf+0H=O^zr?WdG8YWALND29^l>Wdp2ZAiEv zi~ILq8LMvI$37h$q&C0S(E(foW@BSRm00bvWDHQv(;UJ}1Qb0Ae*H2HS{c$eGc)V? z{{2^Kxg9oy3U%0H81e`USN#5MlZ}`RlRKyFM>OOL8f&+=^4EMu=jtB z6PiOPMH?Hwh4o$-JD)ZPH>coy^EO%)2wTljW~56qm2>H&Kk2n49~*x3^bBr$jR%>> zTp$+v)!7zaqcpg->(>mGg<0@N=T^(c56p{Kdi+TN^OA1b-Zm1zD_^&PBPw9b1LijD zN1m90f$?A#q*ijQtVjN#t6}8i6uzSCPc3xelLeNVYGODpG-Axq^iP`%KX7nhGBSs1 z$2oJV)vBfnmvsxLd*U2G#Ou^fi&i$AldRu2~@PYRDq zc!HZ<>WdE6+jHB36ul-bfpm5^ER1Dr1{bBT|Ms4?_KEt2A}{TG+WSNNp(cB3G9b(T z8Q)@;Zm#g@Hm2B*C5@(|{DYK?v3lspls;$UDU+nhEF~k#a5(`-ZLiD$LrZAQ!Nhv6 z@wy<2b-Sw+w8ci56q>)@OfxnLrxR_J<&NyIb zp!uf4nO^kO0d13W!cu_MYk|w&16LE<@MgF}vn6AjoS&C>B}y%zC^j~hM~JsjBO+3y zZzUKi>% zjZAJXZLpHr343m=HmA^~@OGfaF|D+?Q77Z7cdHE5uW1s&U_}TO-w^`u@^}ULtXl8JIWHj3RbD=6;CTN0`Q&jg z36}@a846x`!Xx(Ukci$MEPxLL(bklg=NOtJXM_?6x4W@~L7nz6($5(OlP*q z{EvzBLOUwC{QTsh%|Lu!5WGQVZ#7?5g2Xe6i;%*b!=Y`nf7?pPNtlNVF;>!6AwSXxceKzlHA`^=_u9!;w6Zpxh=dw8f@mi3*p4{1QUh$Kqmt32&!&= zy`ZjasW(Ww8ZD_RVQ?TEW|;&8=?;lR(~@#qww8?ba8eyC85+Lp+Fq$K6VyAhSf{`# zqEZ88t#p-7RtsDow_2aTmUE!DOcl=Q$!{l&*?3 z;0F%IYBYH6X-d1;%PY)X@nZkQv+;hJ z@ivBZEB492l_(lfSwQaTn~Soxd34IK;UCSl#i*;V!R5XXMv$G4qUrl!TP%682D{s~3zL7QDRHi5$}j_^-Y8qH-RQ`o>w>R6kX`)J`~ zYoc5$g)Xo)3#f|xlaK3&dGCWIg1Cf?_<#uwVfKaqDbzsXcNgD5!Xuae<-E)&6JC?Q z`75D9fV96F(%-P)G}v!+b74@)%NjV%idDZtH#n`_e7vwUh{98DU;PEqi0#2+O9eR& zjXyB2j}4v}R4POg!(O|=Zk>KnkF0gx5{w3#ddE80^jI;<+m% z<4$nR^@Q|Qi2LwJfW}m%O`8FOwEbpjNt|kASs@7?9gUzT(jxoi?1MJrHLbQ=F|%CQ z>~Z<6pB+n*P+3C_olza$HF5dr!|tdRDv7o&aj;=&p{WKY3w+JkW=c1Z%Iv&xqcqw# z&dc;K#eC{od>1dSV1HDSizb!HFF5)~dXSiubfgu=)N0q}bl{76|92c`IZB7pk;uXx z`A`-hZ)H)*Ha-SEWD|tYxybcYzz}M`#a+g*9PCk^w?$Ftu#4ZOaEy7Ms~dbae<&xg zhAI`aSC|5_h%%?wdxyQ{)liJJtX*^+jH0R&{h)NN8l9R`sP-x?Ftr~c)?i@%*s>tl zb$xKup?@epQR5TShq~0n#BO)`E+3L5Mc(mJ5Ma0yT!?}5Xvh=e6uNz%w$wM$(lkYE zuMScdj^+|6-K8yhPELfu!ID}seXEh{pD&ws6nW6hTop-QGa{y+O)dPKWFhr-+a z?FGFQWnxpNTlSYHYZ0z`HBz07>nY8vj94x(gojTA{pQVSSLzRIv~e~MA0Ha)Ibz+E z&v+F3j#f$=s!<&&qi>Z&M(zXNrW7o^vftZ>jA`D}%zgEYegCyox~7P|sh4l@W_(Q! z!Id+LT?S$K223vkx38#P38K#>wl8;!AWCS#?71tdDPFrj-G*W9U_#s1ulF5}`YFUR zi2T}QtKCt~UQzwY#*%UwuX1B&^99wTa%sDU9qH~;*I+i^<=2*ncSL{lGL?Tz;gfKy z>km4g>WJh^2R3E#LS&xdfu)UIYsm5R!KU6V0$TjW|J zr3tNWpQs=Hg-)9L9$2@|00Jl*?##1t#dxoxots6%AZWD|Tgu;sNL zRAeyfrk4BZ_n|*EK+L&To)}x{NkcH7pSS8(KcIKoo5iSJwD5TW1r^!9r| zIKl1M06Ai#S=_AM^&Q9DXvb?3ZX5fN<~#L5c7YvOM`N@$`^yq-M%Y_`IruMbVNu@b z9^{hwK!UUfa%e2%H2}<}7oF>TZv{)0(b6)>&CT^!6_SgKj%oSztLjlAKOm!%w3O7n zvmD6;vNhBjii}*8t+l#nei-ixso9Tgbkfs%WAgmW+cO@+WhHs}`E{WKm7j%=;r?;I zOU5eqvXcIkF4o%G_X%IociXi@K{_u+^9Tr(?(awHJb1u{qXL}u?oCm&bgOsFP(kz2 zRR`(5CEKDxX|i3NOLyNR1}_LSU2K^-VI6!(OmXFhn+%))iX@?>69pdpa&fjN)$u8h zKPLUCJ+7s2Ng}D}TMr>_ULwiPdd{cL1AVJz8RtB`j0bGxJcGKRyH_o~bbb-j=jJX% zT;%0d-nsi7=vUlxL=VQE4J{>V)Bbyo?v{fxAqUo6gV9SBdw%$_;f{_4waC2eB*{^N z@5xm19xRH_d_gh+$d>tIiRfGBV#>zUjer?J>_{=pBSTIJ!sVc>&bAV>oP9fs?+3V*ob z7kd%l2tIvWI#Sa9&j9=dJ-_0!G}(*Hnq;|Gzl)f6WU1|15x>{l8X||ME@l;O;qHmGwXC`$N4TS=DS~ z9o_pqPIq3Ci~-}wkA*cY1P;r-v{HM?Cq%N*(b18U4yj_E1}c$5x1<~Xb1fn@LdU^C zJK>IQDy}-1iZ^$<>jab!0UpcKiKoHue&69Y&WDc24AtGUxnDen7QWi~c_ADy3j`Zp z0f|CY&dw%01SS#5~ z{#Ht1bMU~%6Uaj(1}T^9h{zk&iYzZV3Nv!(*J6CaiZ@v$K{M{?$}jc*!ilsN(qvb| z_4d5M$4(&ugphH}wFj?@ibrg{y9%I7>_Oks(UR8+zF``!=`$um&@wCV+*1sMfrd=0 zF7;?ho0ESt&RC<>;^nx@rRW?Hde(5|criu>2fg5!Q??YXQ9kTt&ZU2}_69hL4(?C; zb#Aqby<2m$VSDaWisAvqWUIGDmcHB(qfY6%@fEg;&sPXIJZBVvC^eZr8|bmsXScWf zKn{z9y_rxTt<`f67STEdwq{(%3MiGepIP;nFJA!cRkrh%g3ERwY9v$H zC)kuC`Mp2w+UuAY=Bt)v-GQ@ys=TPb(5<7)Na%R=RqY$7!CdPF9BExu`hnH40zJJV zDR0=N)73ox1rGqm?d8p6}a_gc+5o`-4!HV4S0ad+4N?Ln%CuFbCIvipX z63ip-WqG$OoKg`i6bT6$9?d2e=s$c(`2k?B-6H$o1CfaP-6-FzD_5=tnlU&6C)pgf zdcpGar9ZqqJwFFE7^D(lNh<(q-dx4p-E;f)Q^IxElQ1l8hxO~cPJ%C$1BO2caSyTX zPF7ovp~BB@|0Qz!I8X}e3P<=qgWIe3)95QHXRwp?1qJtC3P;&{S&XmLR%#BnPlaj! z_@NH~!pLj!VPPo=8i&7a(?Z7h(JS3uwEed2Zx{>uL5SAM>onbEd^(DZYONfZW6c>} zL3&!6o98`GRIdo`E?BAM7b%(g6r<=i|86g8^pC{Cj%PB=HhiUeY3T5GaK<71MtJDI zj+{}!uLcQ&FIyuLF6lbkOJbrj$EZ&M#}wGOLnQ?P_7XT!&H(-|vEkyf7hZU+K2`qO zed8D^=S|=u0|K?HW<@3y9Wb*WDYMc$jE*yiO7M-A3c%L>LpcW|5F77&L*}pi?DPC%MGYQ4Eqt|e4U)>c zdY#=R&eT0l03;~zvu=nuaK|~?>AUZp`CEc==VHzwtC7!k@W-3AsYKj&rB@Mw0h|7Coj;_JD&I$T30u zfjTyU+CE-huHJzlZGTs%K-b6rgunuy{PRHH$Q1mXiw|HDJ7#(eG^x7$hXW*c>$Z~g zEjj7iw=8d~sLJ0`l~b0ybzAk;tp^jAxBiC?UOtauZejoH4oc7S^?(i_eI4Wb755&! F_;1R{@zVeR diff --git a/learning/features/shading/screen-reading_shaders.rst b/learning/features/shading/screen-reading_shaders.rst index 9fd5c274f..1003ec05c 100644 --- a/learning/features/shading/screen-reading_shaders.rst +++ b/learning/features/shading/screen-reading_shaders.rst @@ -17,67 +17,74 @@ The workaround is to make a copy of the screen, or a part of the screen, to a back-buffer and then read from it while drawing. Godot provides a few tools that makes this process easy! -TexScreen shader instruction -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SCREEN_TEXTURE built-in texture. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ -Godot :ref:`doc_shading_language` has a special instruction, "texscreen", it takes as -parameter the UV of the screen and returns a vec3 RGB with the color. A +Godot :ref:`doc_shading_language` has a special texture, "SCREEN_TEXTURE" (and "DEPTH_TEXTURE" for depth, in case of 3D). +It takes as parameter the UV of the screen and returns a vec3 RGB with the color. A special built-in varying: SCREEN_UV can be used to obtain the UV for the current fragment. As a result, this simple 2D fragment shader: :: - COLOR=vec4( texscreen(SCREEN_UV), 1.0 ); + COLOR=textureLod( SCREEN_TEXTURE, SCREEN_UV, 0.0); results in an invisible object, because it just shows what lies behind. -The same shader using the visual editor looks like this: -.. image:: /img/texscreen_visual_shader.png +The reason why textureLod must be used is because, when Godot copies back +a chunk of the screen, it also does an efficient separatable gaussian blur to it's mipmaps. -TexScreen example -~~~~~~~~~~~~~~~~~ +This allows for not only reading from the screen, but reading from it with different amounts +of blur at no cost. -Texscreen instruction can be used for a lot of things. There is a +SCREEN_TEXTURE example +~~~~~~~~~~~~~~~~~~~~~~ + +SCREEN_TEXTURE can be used for a lot of things. There is a special demo for *Screen Space Shaders*, that you can download to see and learn. One example is a simple shader to adjust brightness, contrast and saturation: :: - uniform float brightness = 1.0; - uniform float contrast = 1.0; - uniform float saturation = 1.0; + shader_type canvas_item; - vec3 c = texscreen(SCREEN_UV); + uniform float brightness = 1.0; + uniform float contrast = 1.0; + uniform float saturation = 1.0; - c.rgb = mix(vec3(0.0), c.rgb, brightness); - c.rgb = mix(vec3(0.5), c.rgb, contrast); - c.rgb = mix(vec3(dot(vec3(1.0), c.rgb)*0.33333), c.rgb, saturation); + vec3 c = textureLod(SCREEN_TEXTURE, SCREEN_UV, 0.0).rgb; - COLOR.rgb = c; + c.rgb = mix(vec3(0.0), c.rgb, brightness); + c.rgb = mix(vec3(0.5), c.rgb, contrast); + c.rgb = mix(vec3(dot(vec3(1.0), c.rgb)*0.33333), c.rgb, saturation); + + COLOR.rgb = c; Behind the scenes ~~~~~~~~~~~~~~~~~ -While this seems magical, it's not. The Texscreen instruction, when +While this seems magical, it's not. The SCREEN_TEXTURE built-in, when first found in a node that is about to be drawn, does a full-screen -copy to a back-buffer. Subsequent nodes that use texscreen() in +copy to a back-buffer. Subsequent nodes that use it in shaders will not have the screen copied for them, because this ends up being very inefficient. -As a result, if shaders that use texscreen() overlap, the second one +As a result, if shaders that use SCREEN_TEXTURE overlap, the second one will not use the result of the first one, resulting in unexpected visuals: .. image:: /img/texscreen_demo1.png In the above image, the second sphere (top right) is using the same -source for texscreen() as the first one below, so the first one +source for SCREEN_TEXTURE as the first one below, so the first one "disappears", or is not visible. -To correct this, a -:ref:`BackBufferCopy ` -node can be instanced between both spheres. BackBufferCopy can work by +In 3D, this is unavoidable because copying happens when opaque rendering +completes. + +In 2D this can be corrected via the :ref:`BackBufferCopy ` +node, which can be instantiated between both spheres. BackBufferCopy can work by either specifying a screen region or the whole screen: .. image:: /img/texscreen_bbc.png @@ -92,13 +99,13 @@ Back-buffer logic So, to make it clearer, here's how the backbuffer copying logic works in Godot: -- If a node uses the texscreen(), the entire screen is copied to the +- If a node uses the SCREEN_TEXTURE, the entire screen is copied to the back buffer before drawing that node. This only happens the first time, subsequent nodes do not trigger this. - If a BackBufferCopy node was processed before the situation in the - point above (even if texscreen() was not used), this behavior + point above (even if SCREEN_TEXTURE was not used), this behavior described in the point above does not happen. In other words, - automatic copying of the entire screen only happens if texscreen() is + automatic copying of the entire screen only happens if SCREEN_TEXTURE is used in a node for the first time and no BackBufferCopy node (not disabled) was found before in tree-order. - BackBufferCopy can copy either the entire screen or a region. If set @@ -106,4 +113,23 @@ Godot: not in the region copied, the result of that read is undefined (most likely garbage from previous frames). In other words, it's possible to use BackBufferCopy to copy back a region of the screen - and then use texscreen() on a different region. Avoid this behavior! + and then use SCREEN_TEXTURE on a different region. Avoid this behavior! + + +DEPTH_TEXTURE +~~~~~~~~~~~~ + +For 3D Shaders, it's also possible to access the screen depth buffer. For this, +the DEPTH_TEXTURE built-in is used. This texture is not linear, it must be +converted via the inverse projection matrix. + +The following code retrieves the 3D position below the pixel being drawn: + +:: + + float depth = textureLod(DEPTH_TEXTURE,SCREEN_UV,0.0).r; + vec4 upos = INV_PROJECTION_MATRIX * vec4(SCREEN_UV*2.0-1.0,depth*2.0-1.0,1.0); + vec3 pixel_position = upos.xyz/upos.w; + + + diff --git a/learning/features/shading/shader_materials.rst b/learning/features/shading/shader_materials.rst index bb0cbd9c6..38a3106d8 100644 --- a/learning/features/shading/shader_materials.rst +++ b/learning/features/shading/shader_materials.rst @@ -6,9 +6,13 @@ Shader materials Introduction ------------ -For the most common cases, :ref:`doc_fixed_materials` are enough to create the -desired textures or look and feel. Shader materials are a step beyond -that, adding a huge amount of flexibility. With them, it is possible to: +For the most common cases, Godot provides ready to use materials for +most types of shaders, such as SpatialMaterial, CanvasItemMaterial and +ParticlesMaterial (@TODO link to tutorials/classes). They are flexible implementations that cover most +use cases. + +Shader materials allow writing a custom shader directly, for maximum flexibility. +Examples of this are: - Create procedural textures. - Create complex texture blendings. @@ -16,6 +20,7 @@ that, adding a huge amount of flexibility. With them, it is possible to: - Create refractive effects or other advanced effects. - Create special lighting shaders for more exotic materials. - Animate vertices, like tree leaves or grass. +- Create custom particle code, that responds to baked animations or force fields. - And much more! Traditionally, most engines will ask you to learn GLSL, HLSL or CG, @@ -28,8 +33,7 @@ Creating a ShaderMaterial ------------------------- Create a new ShaderMaterial in some object of your choice. Go to the -"Shader" property, then create a new "MaterialShader" (use -"MaterialShaderGraph" for access to the visual graph editor): +"Material" property and create a ShaderMaterial. .. image:: /img/shader_material_create.png @@ -37,28 +41,15 @@ Edit the newly created shader, and the shader editor will open: .. image:: /img/shader_material_editor.png -There are three code tabs open, the first is for the vertex shader, the -second for the fragment and the third for the lighting. The shader -language is documented in :ref:`doc_shading_language` so a small example will be -presented next. +Converting to ShaderMaterial +---------------------------- -Create a very simple fragment shader that writes a color: +It is possible to convert from SpatialMaterial, CanvasItemMaterial and +ParticlesMaterial to ShaderMaterial. Just go to the material properties +and enable the convert option. -:: +.. image:: /img/shader_material_convert.png - uniform color col; - DIFFUSE = col.rgb; -Code changes take place in real-time. If the code is modified, it will -be instantly recompiled and the object will be updated. If a typo is -made, the editor will notify of the compilation failure: -.. image:: /img/shader_material_typo.png -Finally, go back and edit the material, and the exported uniform will be -instantly visible: - -.. image:: /img/shader_material_col.png - -This allows to very quickly create custom, complex materials for every -type of object. diff --git a/learning/features/shading/shading_language.rst b/learning/features/shading/shading_language.rst index 19d09a5d4..bc7fb5c95 100644 --- a/learning/features/shading/shading_language.rst +++ b/learning/features/shading/shading_language.rst @@ -384,25 +384,30 @@ to make the compiler understand what the uniform is used for. Full list of hints below: -+-------------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| Type | Hint | Description | -+===================+===============================+========================================================================================================================================================================================================================+ -| **vec4** | hint_color | This uniform is exported as a color parameter in property editor. Color is also converted from SRGB for 3D shaders. | -+-------------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **int**, **float**| hint_range(min,max [,step] ) | This scalar uniform is exported as a given range in property editor. | -+-------------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **sampler2D** | hint_albedo | This texture is used as albedo color. Godot will try to make sure the texture has SRGB -> Linear conversion turned on. If no texture is supplied, this is assumed to be white. | -+-------------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **sampler2D** | hint_black_albedo | Same as above but, if no texture is supplied, it's assumed to be black. | -+-------------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **sampler2D** | hint_normal | The texture supplied is a normal map. Godot will attempt to convert the texture to a more efficient normalmap format when used here. Also, an empty texture results in a vec3(0.0,0.0,1.0) normal assigned by default. | -+-------------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **sampler2D** | hint_white | Regular texture (non albedo). White is used if unasigned. | -+-------------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **sampler2D** | hint_black | Regular texture (non albedo). Black is used if unassigned. | -+-------------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ -| **sampler2D** | hint_aniso | Same as above, but vec3(1.0, 0.5, 0.0) is assigned by default (useful for flowmaps) | -+-------------------+-------------------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ ++----------------+-------------------------------+-------------------------------------+ +| Type | Hint | Description | ++================+===============================+=====================================+ +| **vec4** | hint_color | Used as color | ++----------------+-------------------------------+-------------------------------------+ +| **int, float** | hint_range(min,max [,step] ) | Used as range (with min/max/step) | ++----------------+-------------------------------+-------------------------------------+ +| **sampler2D** | hint_albedo | Used as albedo color, default white | ++----------------+-------------------------------+-------------------------------------+ +| **sampler2D** | hint_black_albedo | Used as albedo color, default black | ++----------------+-------------------------------+-------------------------------------+ +| **sampler2D** | hint_normal | Used as normalmap | ++----------------+-------------------------------+-------------------------------------+ +| **sampler2D** | hint_white | As value, default to white. | ++----------------+-------------------------------+-------------------------------------+ +| **sampler2D** | hint_black | As value, default to black | ++----------------+-------------------------------+-------------------------------------+ +| **sampler2D** | hint_aniso | As flowmap, default to right. | ++----------------+-------------------------------+-------------------------------------+ + + +As Godot 3D engine renders in linear color space, it's important to understand that textures +that are supplied as color (ie, albedo) need to be specified as such for proper SRGB->linear +conversion. Uniforms can also be assigned default values: @@ -424,157 +429,159 @@ When vec_type (float), vec_int_type, vec_uint_type, vec_bool_type, nomenclature + +-----------------------------------------------------------------------+---------------------------------------------+ | Function | Description | +=======================================================================+=============================================+ -| float *sin* ( float ) | Sine | +| float **sin** ( float ) | Sine | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *cos* ( float ) | Cosine | +| float **cos** ( float ) | Cosine | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *tan* ( float ) | Tangent | +| float **tan** ( float ) | Tangent | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *asin* ( float ) | arc-Sine | +| float **asin** ( float ) | arc-Sine | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *acos* ( float ) | arc-Cosine | +| float **acos** ( float ) | arc-Cosine | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *atan* ( float ) | arc-Tangent | +| float **atan** ( float ) | arc-Tangent | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *atan2* ( float x, float y) | arc-Tangent to convert vector to angle | +| float **atan2** ( float x, float y) | arc-Tangent to convert vector to angle | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *sinh* ( float ) | Hyperbolic-Sine | +| float **sinh** ( float ) | Hyperbolic-Sine | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *cosh* ( float ) | Hyperbolic-Cosine | +| float **cosh** ( float ) | Hyperbolic-Cosine | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *tanh* ( float ) | Hyperbolic-Tangent | +| float **tanh** ( float ) | Hyperbolic-Tangent | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *pow* ( float x, float y) | Power, x elevated to y | +| vec\_type **pow** ( float x, float y) | Power, x elevated to y | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *pow* ( vec\_type, vec\_type ) | Power (Vec. Exponent) | +| vec\_type **pow** ( vec\_type, vec\_type ) | Power (Vec. Exponent) | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *exp* ( vec\_type ) | Base-e Exponential | +| vec\_type **exp** ( vec\_type ) | Base-e Exponential | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *log* ( vec\_type ) | Natural Logarithm | +| vec\_type **log** ( vec\_type ) | Natural Logarithm | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *sqrt* ( vec\_type ) | Square Root | +| vec\_type **sqrt** ( vec\_type ) | Square Root | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *inversesqrt* ( vec\_type ) | Inverse Square Root | +| vec\_type **inversesqrt** ( vec\_type ) | Inverse Square Root | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *abs* ( vec\_type ) | Absolute | +| vec\_type **abs** ( vec\_type ) | Absolute | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *sign* ( vec\_type ) | Sign | +| vec\_type **sign** ( vec\_type ) | Sign | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *floor* ( vec\_type ) | Floor | +| vec\_type **floor** ( vec\_type ) | Floor | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *round* ( vec\_type ) | Round | +| vec\_type **round** ( vec\_type ) | Round | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *trunc* ( vec\_type ) | Trunc | +| vec\_type **trunc** ( vec\_type ) | Trunc | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *ceil* ( vec\_type ) | Ceiling | +| vec\_type **ceil** ( vec\_type ) | Ceiling | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *fract* ( vec\_type ) | Fractional | +| vec\_type **fract** ( vec\_type ) | Fractional | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *mod* ( vec\_type,vec\_type ) | Remainder | +| vec\_type **mod** ( vec\_type,vec\_type ) | Remainder | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *modf* ( vec\_type x,out vec\_type i) | Fractional of x, with i has integer part | +| vec\_type **modf** ( vec\_type x,out vec\_type i) | Fractional of x, with i has integer part | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *min* ( vec\_type,vec\_type ) | Minimum | +| vec\_type **min** ( vec\_type,vec\_type ) | Minimum | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *min* ( vec\_type,vec\_type ) | Maximum | +| vec\_type **min** ( vec\_type,vec\_type ) | Maximum | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *clamp* ( vec\_type value,vec\_type min, vec\_type max ) | Clamp to Min-Max | +| vec\_type **clamp** ( vec\_type value,vec\_type min, vec\_type max ) | Clamp to Min-Max | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *mix* ( vec\_type a,vec\_type b, float c ) | Linear Interpolate | +| vec\_type **mix** ( vec\_type a,vec\_type b, float c ) | Linear Interpolate | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *mix* ( vec\_type a,vec\_type b, vec\_type c ) | Linear Interpolate (Vector Coef.) | +| vec\_type **mix** ( vec\_type a,vec\_type b, vec\_type c ) | Linear Interpolate (Vector Coef.) | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *step* ( vec\_type a,vec\_type b) | \` a[i] < b[i] ? 0.0 : 1.0\` | +| vec\_type **step** ( vec\_type a,vec\_type b) | \` a[i] < b[i] ? 0.0 : 1.0\` | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *smoothstep* ( vec\_type a,vec\_type b,vec\_type c) | | +| vec\_type **smoothstep** ( vec\_type a,vec\_type b,vec\_type c) | | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_bool_type *isnan* ( vec\_type ) | scalar, or vector component being nan | +| vec_bool_type **isnan** ( vec\_type ) | scalar, or vector component being nan | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_bool_type *isinf* ( vec\_type ) | scalar, or vector component being inf | +| vec_bool_type **isinf** ( vec\_type ) | scalar, or vector component being inf | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_int_type *floatBitsToInt* ( vec_type ) | Float->Int bit copying, no conversion | +| vec_int_type **floatBitsToInt** ( vec_type ) | Float->Int bit copying, no conversion | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_uint_type *floatBitsToUInt* ( vec_type ) | Float->UInt bit copying, no conversion | +| vec_uint_type **floatBitsToUInt** ( vec_type ) | Float->UInt bit copying, no conversion | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_type *intBitsToFloat* ( vec_int_type ) | Int->Float bit copying, no conversion | +| vec_type **intBitsToFloat** ( vec_int_type ) | Int->Float bit copying, no conversion | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_type *uintBitsToFloat* ( vec_uint_type ) | UInt->Float bit copying, no conversion | +| vec_type **uintBitsToFloat** ( vec_uint_type ) | UInt->Float bit copying, no conversion | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *length* ( vec\_type ) | Vector Length | +| float **length** ( vec\_type ) | Vector Length | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *distance* ( vec\_type, vec\_type ) | Distance between vector. | +| float **distance** ( vec\_type, vec\_type ) | Distance between vector. | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *dot* ( vec\_type, vec\_type ) | Dot Product | +| float **dot** ( vec\_type, vec\_type ) | Dot Product | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec3 *cross* ( vec3, vec3 ) | Cross Product | +| vec3 **cross** ( vec3, vec3 ) | Cross Product | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_type *normalize* ( vec\_type ) | Normalize to unit length | +| vec\_type **normalize** ( vec\_type ) | Normalize to unit length | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec3 *reflect* ( vec3, vec3 ) | Reflect | +| vec3 **reflect** ( vec3, vec3 ) | Reflect | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec3 *refract* ( vec3, vec3 ) | Refract | +| vec3 **refract** ( vec3, vec3 ) | Refract | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_type *faceforward* ( vec_type N, vec_type I, vec_type NRef) | If dot(Nref, I) < 0 return N, otherwise –N | +| vec_type **faceforward** ( vec_type N, vec_type I, vec_type NRef) | If dot(Nref, I) < 0 return N, otherwise –N | +-----------------------------------------------------------------------+---------------------------------------------+ -| mat_type *matrixCompMult* ( mat_type, mat_type ) | Matrix Component Multiplication | +| mat_type **matrixCompMult** ( mat_type, mat_type ) | Matrix Component Multiplication | +-----------------------------------------------------------------------+---------------------------------------------+ -| mat_type *outerProduct* ( vec_type, vec_type ) | Matrix Outer Product | +| mat_type **outerProduct** ( vec_type, vec_type ) | Matrix Outer Product | +-----------------------------------------------------------------------+---------------------------------------------+ -| mat_type *transpose* ( mat_type ) | Transpose Matrix | +| mat_type **transpose** ( mat_type ) | Transpose Matrix | +-----------------------------------------------------------------------+---------------------------------------------+ -| float *determinant* ( mat_type ) | Matrix Determinant | +| float **determinant** ( mat_type ) | Matrix Determinant | +-----------------------------------------------------------------------+---------------------------------------------+ -| mat_type *inverse* ( mat_type ) | Inverse Matrix | +| mat_type **inverse** ( mat_type ) | Inverse Matrix | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_bool_type *lessThan* ( vec_scalar_type ) | Bool vector cmp on < int/uint/float vectors | +| vec\_bool_type **lessThan** ( vec_scalar_type ) | Bool vector cmp on < int/uint/float vectors | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_bool_type *greaterThan* ( vec_scalar_type ) | Bool vector cmp on > int/uint/float vectors | +| vec\_bool_type **greaterThan** ( vec_scalar_type ) | Bool vector cmp on > int/uint/float vectors | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_bool_type *lessThanEqual* ( vec_scalar_type ) | Bool vector cmp on <=int/uint/float vectors | +| vec\_bool_type **lessThanEqual** ( vec_scalar_type ) | Bool vector cmp on <=int/uint/float vectors | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_bool_type *greaterThanEqual* ( vec_scalar_type ) | Bool vector cmp on >=int/uint/float vectors | +| vec\_bool_type **greaterThanEqual** ( vec_scalar_type ) | Bool vector cmp on >=int/uint/float vectors | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_bool_type *equal* ( vec_scalar_type ) | Bool vector cmp on ==int/uint/float vectors | +| vec\_bool_type **equal** ( vec_scalar_type ) | Bool vector cmp on ==int/uint/float vectors | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec\_bool_type *notEqual* ( vec_scalar_type ) | Bool vector cmp on !=int/uint/float vectors | +| vec\_bool_type **notEqual** ( vec_scalar_type ) | Bool vector cmp on !=int/uint/float vectors | +-----------------------------------------------------------------------+---------------------------------------------+ -| bool *any* ( vec_bool_type ) | Any component is true | +| bool **any** ( vec_bool_type ) | Any component is true | +-----------------------------------------------------------------------+---------------------------------------------+ -| bool *all* ( vec_bool_type ) | All components are true | +| bool **all** ( vec_bool_type ) | All components are true | +-----------------------------------------------------------------------+---------------------------------------------+ -| bool *not* ( vec_bool_type ) | No components are true | +| bool **not** ( vec_bool_type ) | No components are true | +-----------------------------------------------------------------------+---------------------------------------------+ -| ivec2 *textureSize* ( sampler2D_type s, int lod ) | Get the size of a texture | +| ivec2 **textureSize** ( sampler2D_type s, int lod ) | Get the size of a texture | +-----------------------------------------------------------------------+---------------------------------------------+ -| ivec2 *textureSize* ( samplerCube s, int lod ) | Get the size of a cubemap | +| ivec2 **textureSize** ( samplerCube s, int lod ) | Get the size of a cubemap | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec4_type *texture* ( sampler2D_type s, vec2 uv [, float bias]) | Perform a 2D texture read | +| vec4_type **texture** ( sampler2D_type s, vec2 uv [, float bias]) | Perform a 2D texture read | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec4 *texture* ( samplerCube s, vec3 uv [, float bias]) | Perform a Cube texture read | +| vec4 **texture** ( samplerCube s, vec3 uv [, float bias]) | Perform a Cube texture read | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec4_type *textureProj* ( sampler2d_type s, vec3 uv [, float bias]) | Perform a texture read with projection | +| vec4_type **textureProj** ( sampler2d_type s, vec3 uv [, float bias]) | Perform a texture read with projection | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec4_type *textureProj* ( sampler2d_type s, vec4 uv [, float bias]) | Perform a texture read with projection | +| vec4_type **textureProj** ( sampler2d_type s, vec4 uv [, float bias]) | Perform a texture read with projection | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec4_type *textureLod* ( sampler2D_type s, vec2 uv , float lod) | Perform a 2D texture read at custom mipmap | +| vec4_type **textureLod** ( sampler2D_type s, vec2 uv , float lod) | Perform a 2D texture read at custom mipmap | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec4_type *textureProjLod* ( sampler2d_type s, vec3 uv , float lod) | Perform a texture read with projection/lod | +| vec4_type **textureProjLod** ( sampler2d_type s, vec3 uv , float lod) | Perform a texture read with projection/lod | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec4_type *textureProjLod* ( sampler2d_type s, vec4 uv , float lod) | Perform a texture read with projection/lod | +| vec4_type **textureProjLod** ( sampler2d_type s, vec4 uv , float lod) | Perform a texture read with projection/lod | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_type *texelFetch* ( samplerCube s, ivec2 uv, int lod ) | Fetch a single texel using integer coords | +| vec_type **texelFetch** ( samplerCube s, ivec2 uv, int lod ) | Fetch a single texel using integer coords | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_type *dFdx* ( vec_type ) | Derivative in x using local differencing | +| vec_type **dFdx** ( vec_type ) | Derivative in x using local differencing | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_type *dFdy* ( vec_type ) | Derivative in y using local differencing | +| vec_type **dFdy** ( vec_type ) | Derivative in y using local differencing | +-----------------------------------------------------------------------+---------------------------------------------+ -| vec_type *fwidth* ( vec_type ) | Sum of absolute derivative in x and y | +| vec_type **fwidth** ( vec_type ) | Sum of absolute derivative in x and y | +-----------------------------------------------------------------------+---------------------------------------------+ + Shader Types In-Depth ------------------ @@ -846,7 +853,7 @@ Light Built-Ins +----------------------------------+------------------------------------------+ | in vec3 **TRANSMISSION** | Transmission mask. | +----------------------------------+------------------------------------------+ -| in float **roughness** | Roughness. | +| in float **ROUGHNESS** | Roughness. | +----------------------------------+------------------------------------------+ | out vec3 **DIFFUSE_LIGHT** | Diffuse light result. | +----------------------------------+------------------------------------------+