From 464c0f3f1cf1327c7d80f1cd588e983057a8f160 Mon Sep 17 00:00:00 2001 From: copygirl Date: Sat, 31 Aug 2024 13:21:12 +0200 Subject: [PATCH] Allow tiles to blend between two textures --- assets/textures/terrain_blend/bricky_inner.png | Bin 0 -> 622 bytes .../terrain_blend/bricky_inner.png.import | 14 ++++++++++++++ assets/textures/terrain_blend/bricky_outer.png | Bin 0 -> 639 bytes .../terrain_blend/bricky_outer.png.import | 14 ++++++++++++++ .../textures/terrain_blend/bricky_straight.png | Bin 0 -> 650 bytes .../terrain_blend/bricky_straight.png.import | 14 ++++++++++++++ assets/textures/terrain_blend/default.png | Bin 0 -> 582 bytes .../textures/terrain_blend/default.png.import | 14 ++++++++++++++ assets/textures/terrain_blend/grassy_inner.png | Bin 0 -> 4385 bytes .../terrain_blend/grassy_inner.png.import | 14 ++++++++++++++ assets/textures/terrain_blend/grassy_outer.png | Bin 0 -> 4382 bytes .../terrain_blend/grassy_outer.png.import | 14 ++++++++++++++ .../textures/terrain_blend/grassy_straight.png | Bin 0 -> 4361 bytes .../terrain_blend/grassy_straight.png.import | 14 ++++++++++++++ terrain/Terrain.cs | 8 +++++++- terrain/terrain_material.tres | 15 ++++++++++++++- terrain/terrain_shader.gdshader | 16 ++++++++++++++-- 17 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 assets/textures/terrain_blend/bricky_inner.png create mode 100644 assets/textures/terrain_blend/bricky_inner.png.import create mode 100644 assets/textures/terrain_blend/bricky_outer.png create mode 100644 assets/textures/terrain_blend/bricky_outer.png.import create mode 100644 assets/textures/terrain_blend/bricky_straight.png create mode 100644 assets/textures/terrain_blend/bricky_straight.png.import create mode 100644 assets/textures/terrain_blend/default.png create mode 100644 assets/textures/terrain_blend/default.png.import create mode 100644 assets/textures/terrain_blend/grassy_inner.png create mode 100644 assets/textures/terrain_blend/grassy_inner.png.import create mode 100644 assets/textures/terrain_blend/grassy_outer.png create mode 100644 assets/textures/terrain_blend/grassy_outer.png.import create mode 100644 assets/textures/terrain_blend/grassy_straight.png create mode 100644 assets/textures/terrain_blend/grassy_straight.png.import diff --git a/assets/textures/terrain_blend/bricky_inner.png b/assets/textures/terrain_blend/bricky_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..b81107af4ed3c2e01bedffc16a85061f6c777ca3 GIT binary patch literal 622 zcmV-!0+IcRP)EX>4Tx04R}tkv&MmKpe$iQ>9fZ4i*s+%ut=|q9Ts93Pq?8YK2xEOfLO`CJjl8 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY2y2&FYE)nqDC`-Nm{=@yu+qV-XllgM#1U1~DPPFA zta9Gstd(o5bx;1nP)=W2<~q$0B(R7jND!f*h7!uCB1)@HiiH&I$36VRj$a~|Laq`R zITlcX2HEk0|H1EWt^Cxan-q!z-7mKNF$M&7fo9#dzmILZc>?&Kfh)c3uQY(!Ptxmc zEpi0(Zvz+CZB5w&E_Z;TCqp)6NAlAY@_FF>jJ_!g4BP^}Yi@6?eVjf3Y3eF@0~{Oz z;|0oI_jq@(v$ucGwEFu2RGM;{-=O2k00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru=m;MPG6kFhq&5Hm02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{002fwL_t(I%VT7Kg8%>j|7T=mWJG7f_zXAz69a{S5ufSA z02T%Y1_pHJB721>1JD5}uA{y%y8r+H literal 0 HcmV?d00001 diff --git a/assets/textures/terrain_blend/bricky_inner.png.import b/assets/textures/terrain_blend/bricky_inner.png.import new file mode 100644 index 0000000..bc42c33 --- /dev/null +++ b/assets/textures/terrain_blend/bricky_inner.png.import @@ -0,0 +1,14 @@ +[remap] + +importer="image" +type="Image" +uid="uid://n7hbvgjiktlg" +path="res://.godot/imported/bricky_inner.png-b94122a758411344f70f7c2760d21808.image" + +[deps] + +source_file="res://assets/textures/terrain_blend/bricky_inner.png" +dest_files=["res://.godot/imported/bricky_inner.png-b94122a758411344f70f7c2760d21808.image"] + +[params] + diff --git a/assets/textures/terrain_blend/bricky_outer.png b/assets/textures/terrain_blend/bricky_outer.png new file mode 100644 index 0000000000000000000000000000000000000000..11e3a2d06e5ccc5ef4dde1d305a838a21a954d37 GIT binary patch literal 639 zcmV-_0)YLAP)EX>4Tx04R}tkv&MmKpe$iQ>9fZ4i*s+%ut=|q9Ts93Pq?8YK2xEOfLO`CJjl8 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY2y2&FYE)nqDC`-Nm{=@yu+qV-XllgM#1U1~DPPFA zta9Gstd(o5bx;1nP)=W2<~q$0B(R7jND!f*h7!uCB1)@HiiH&I$36VRj$a~|Laq`R zITlcX2HEk0|H1EWt^Cxan-q!z-7mKNF$M&7fo9#dzmILZc>?&Kfh)c3uQY(!Ptxmc zEpi0(Zvz+CZB5w&E_Z;TCqp)6NAlAY@_FF>jJ_!g4BP^}Yi@6?eVjf3Y3eF@0~{Oz z;|0oI_jq@(v$ucGwEFu2RGM;{-=O2k00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru=m;MPF)f0cUk?BP02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{0037>L_t(I%k7cT3P2$ULwBVA|7Gu!5M88{9@~qgw9P5q zhP!*^O*Sa222RxHYLWy{5d#PkvO#-|)%tENo0}a6=@lZE9igqCDuMn8IvAPF(=1*F Z(g(5tcggbnmb3r>002ovPDHLkV1f$E47dOQ literal 0 HcmV?d00001 diff --git a/assets/textures/terrain_blend/bricky_outer.png.import b/assets/textures/terrain_blend/bricky_outer.png.import new file mode 100644 index 0000000..c12e56b --- /dev/null +++ b/assets/textures/terrain_blend/bricky_outer.png.import @@ -0,0 +1,14 @@ +[remap] + +importer="image" +type="Image" +uid="uid://c8ntkfa6t0t4a" +path="res://.godot/imported/bricky_outer.png-8d14c741e6e00049a6f23c5a7f0ba31a.image" + +[deps] + +source_file="res://assets/textures/terrain_blend/bricky_outer.png" +dest_files=["res://.godot/imported/bricky_outer.png-8d14c741e6e00049a6f23c5a7f0ba31a.image"] + +[params] + diff --git a/assets/textures/terrain_blend/bricky_straight.png b/assets/textures/terrain_blend/bricky_straight.png new file mode 100644 index 0000000000000000000000000000000000000000..ce93c6970b9bdeb5baf86f5233cda295f6f90872 GIT binary patch literal 650 zcmV;50(Jd~P)EX>4Tx04R}tkv&MmKpe$iQ>9fZ4i*s+%ut=|q9Ts93Pq?8YK2xEOfLO`CJjl8 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY2y2&FYE)nqDC`-Nm{=@yu+qV-XllgM#1U1~DPPFA zta9Gstd(o5bx;1nP)=W2<~q$0B(R7jND!f*h7!uCB1)@HiiH&I$36VRj$a~|Laq`R zITlcX2HEk0|H1EWt^Cxan-q!z-7mKNF$M&7fo9#dzmILZc>?&Kfh)c3uQY(!Ptxmc zEpi0(Zvz+CZB5w&E_Z;TCqp)6NAlAY@_FF>jJ_!g4BP^}Yi@6?eVjf3Y3eF@0~{Oz z;|0oI_jq@(v$ucGwEFu2RGM;{-=O2k00006VoOIv0RI600RN!9r;`8x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru=m;MPF(CXaBeDPh02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{003f1L_t(I%f*tx3cxT7LSxwf|FXO6(2m3zHkijkL|;W* zBFR_;0M+|lSshKZ8Ia`EWQz#^PmxQ5PZ>-rWW3bT#dKLf9XL>12JVlv4AxC3u&Mew k39KEcI@S(UlK*#b0;(od5Pj(bR{#J207*qoM6N<$g6pslApigX literal 0 HcmV?d00001 diff --git a/assets/textures/terrain_blend/bricky_straight.png.import b/assets/textures/terrain_blend/bricky_straight.png.import new file mode 100644 index 0000000..40d9155 --- /dev/null +++ b/assets/textures/terrain_blend/bricky_straight.png.import @@ -0,0 +1,14 @@ +[remap] + +importer="image" +type="Image" +uid="uid://cl5gio1e8md5p" +path="res://.godot/imported/bricky_straight.png-6b7be3b817156c5655dc51c502e77349.image" + +[deps] + +source_file="res://assets/textures/terrain_blend/bricky_straight.png" +dest_files=["res://.godot/imported/bricky_straight.png-6b7be3b817156c5655dc51c502e77349.image"] + +[params] + diff --git a/assets/textures/terrain_blend/default.png b/assets/textures/terrain_blend/default.png new file mode 100644 index 0000000000000000000000000000000000000000..f93b7fbb189cc1c75d67ed71cef1dd0c1fb1e111 GIT binary patch literal 582 zcmV-M0=fN(P)EX>4Tx04R}tkv&MmKpe$iQ>9fZ4i*s+%ut=|q9Ts93Pq?8YK2xEOfLO`CJjl8 zi=*ILaPVWX>fqw6tAnc`2!4P#J2)x2NQwVT3N2zhIPS;0dyl(!fY2y2&FYE)nqDC`-Nm{=@yu+qV-XllgM#1U1~DPPFA zta9Gstd(o5bx;1nP)=W2<~q$0B(R7jND!f*h7!uCB1)@HiiH&I$36VRj$a~|Laq`R zITlcX2HEk0|H1EWt^Cxan-q!z-7mKNF$M&7fo9#dzmILZc>?&Kfh)c3uQY(!Ptxmc zEpi0(Zvz+CZB5w&E_Z;TCqp)6NAlAY@_FF>jJ_!g4BP^}Yi@6?eVjf3Y3eF@0~{Oz z;|0oI_jq@(v$ucGwEFu2RGM;{-=O2k00006VoOIv00000008+zyMF)x010qNS#tmY z3ljhU3ljkVnw%H_000McNliru=m;MPI4`|cg=zo*02y>eSad^gZEa<4bO1wgWnpw> zWFU8GbZ8()Nlj2!fese{0016IL_t(I%VYfi|Nnmm3IG!Wg<#ZxQ3FN|7%T<=0Bgzw U9Q)Xt#{d8T07*qoM6N<$g13_FTmS$7 literal 0 HcmV?d00001 diff --git a/assets/textures/terrain_blend/default.png.import b/assets/textures/terrain_blend/default.png.import new file mode 100644 index 0000000..11d3eaf --- /dev/null +++ b/assets/textures/terrain_blend/default.png.import @@ -0,0 +1,14 @@ +[remap] + +importer="image" +type="Image" +uid="uid://bd65fhvitmpis" +path="res://.godot/imported/default.png-16f623a6df352f7770c4e23ca5d9106b.image" + +[deps] + +source_file="res://assets/textures/terrain_blend/default.png" +dest_files=["res://.godot/imported/default.png-16f623a6df352f7770c4e23ca5d9106b.image"] + +[params] + diff --git a/assets/textures/terrain_blend/grassy_inner.png b/assets/textures/terrain_blend/grassy_inner.png new file mode 100644 index 0000000000000000000000000000000000000000..deccb3b2f703f954ba20b91812153ba30d0b5677 GIT binary patch literal 4385 zcmeHLdu$X%7~g9VN|6Skh&%$zf`)>7`?~gS*B%A#3fjNk#R1ygi5V0CiiH}x%6r_bj9)b^ifKiMRAoUeB2uLIq6~u4%t}h`mP2|7sWjeFp z{J!7J{N|glH`h>BI%jD1m~0HghKeQra;S${C2Ju3o$%Xb3Bw$@s6tdlaVnMtwjp2` zfH~4QM~`-fBNNL6`;$;|92wYfs5e3x4t5J~l`)R%?D|z`k4?AVg7%a&#`0&tcPP}m zps>)+h57?1+RD_p$DwUKS@y?gAjw1up3uxHe2y3>!`vB|?bBIXMx1prw3G7yBh9)5 z+9Plb&aeW_2@Hc}V2?dH2pbKYe?oC=?w+qTPUmywNSiKx#{ho0=JS<_J|7-4bX5x@ z3`;gXyw+Rt?u>B<@0-7MYjE5zII(eyuw(V(o-e27ZkhG+$h&Lkw(~nCQd`talC!(#cE=e|2Ne)>Bn57ut@y{+i|rFYY#+eb8vXpUAK7<+(w zX2G++O<%NPJz9UE(W4%@u38i8s#mHlL@bjU98&wJ3Ph zJT%I1HZ|__R39C9>iD`n^gTxwZfGlw=jPoS8a&)TrD}8i)LRc|M@44smP;?LTyo&t z-0#ajxYIG|{fq~W;I}>UYte-huie$S$y~Qz+5`(=F5?Yj{}+=XjFVch!mJ3~F35Vs zDJgmgIg^o?y^DoK$(STpBNGpyN-gRo&hFkr;F{tk7Ul=&K+K1#w30dl&95sB%5~K; zuMkDkvkQ{~5JZqE;mJri8W)mY!sZpAZJ8+ow;^V=m#BbX^XUe{T~3#iCX18WVwRYm zjTahJMPTi=a7@p@Tnx$Bl1Oyqcjha%DjK(Kf6e$ir zipz!;Gc`SmTbxozuQ9y@0sVOA{35YHpo=~lPpbfWP)R99F;1F_M5vw~akF?akfbMc zRgZYEHioEj6xVAE85J)^QFBsH3PtYnkJT7qdpU|sp)iU7G!COOy@s@oWtWE~L8TUn z*O8BVCNbkUYciq*~xAkXT-JyI7_Nl^BhiQdCA36_7hM;3<&Y99N(!B*&`^ z>5^25lz^6GSe_5DG^g?$>OnEj&>$+MaL-v;R0>ehTs|u)A({-yv`o5aRVI1W#gi_# zqNp^-hd7qCsT5h5ts4;uwo{8pm57Q(EA0+TaA9Vd=p|Su-EAogOQs4AUgCBwT9fSV z2x<{D-;^vh88@3x^PYSVgl9dRyBo9s8F7e2i_=c9c8|3!0xSlEm8>`g0^1I25$r6g z8$n$Udx@^p+|?a`=4_*j(*zyuB zZt6y@ZAzV}`Djt9j={r?JA+b zs7k&}=QE^RaeH9bc$)MmN&!TZ5@L{&?`B!PH+x)H&4gs2nU$a;Xa(VE{~N=n*c+AC z8=a^^)-HfxB<&$N=HG%*=>=0(&gfimA$5f&g*Ko^k^#Sz4U!k+LaHknrZuzD&NY0} zdvOg%0P6lh`lN5aT>WzONr66r`=hI0u0AQyCvbms{cmz*cVDMa6ut!|;IhZ9vxPnerqO0` zh3V5H*0*x(iYxcRWjUh&v_SOF40=8~y>4dqUOH>Q!iJ8^ha=@*ovdH6q97Umar;Ym z>>D}Y(_^bfwXT0|q-ZvdKRxY%-E|vUJHEMPUS;e09eB-t>caLJCB{RCpPlt{v-C>A dnN?W(z>@P52cHL$@R0IX_%nRCzi z?z!JR_w3%Ts;!wbGQTh%!?2NZRj>~Fi=37>6#f?da!$c8&luDoM`d{`mIt~Kptu0@ zWbHhC`*eK{9hBgZHj=j?gJwx37DUc^-jlC^RC8Sotm{a$D+ z$YY>?6PkWkX5J$pJ5Qeb6EKltBMndKb_|~*hib7IIhgCy-8)L0^)j@V69AEBd5IPz zj=>pLqB;1*awO(Uu|BMeKo z-`eJ{dhM!7oj2BR-5Q?sBThWLMS6bqJ;Fy*$84GP{x-H@_hMY*Aw3pm;XhTJa_krt{01rAM+pk+%s$2L4G&oiS0#Noyrns@hG?`(fht}A@>tD}?4U;eza^}*jeD&AOj9X+9I^s3R@6AcF@9^f`! zyXlwmMYpd<>rb@{(L+O46?N=*@yzQTU+>(<70)i^=1sbET(y7uuk^Hug(vt$;luX9 zOHA*!_B}$=;h{&5tb2vN{?PmfJ8G;kCDS9rM+K+EHm{gE{eXU0X4 zd(8*K@ah}38p~D&7CsjI_~_*01t(9QJpM?{(u&o*xzl|0!^3GuJ#j=WYQc;_bjYm+Up70aLUwVbWb3DO(lG1*{#g#yI)D(fcCU%pbXnd!;st#F3i>ac@#VBDH_l3~Z9{*&E+3YSyQz_Jp;$UjQtW3WtonzVK;ZV@1$CIuX zkloMH)}y^-^^46JahKCK5OD9o?PuM+cGnoJLLn(=s4Y%-a?npW^Glkc>YC(=s-{E) zO=QVZjgFGMDAJ^eq9PgbiBX=W5z8`aA1FCt*-Ao14itcUb->Yh#70U>SyGK~3dxr$ z0x1YA4H6g8e1ghxywC??o~c7tD$RYPa-cMTii*)FLM%gy3=h!=NFxedVy>QON%szf^*E}x z6^Bh`2J53m!6)zxE5O=&jjlze1)1nzx&_u9akfQ*#Q?F2lcxaS>R~OCTSW~sY#7ac zqNgRP9Uv4qV94^l0n9Sv!XZF9Unn@+#f34YSo% zWlmH*T9kRqyf*9ZQNnTeP)LfJS%Rf3Mw%NZU}c8Xn38BjP(8Bg+O60BAr%-^;W)(? zAvuPI1YmuLRD>u)sxw3%k0P9p<;DK!mJzj6iiu`60*}BIq^J8ahEH)fs-(YlDu$e0 z0K!OGfJwRuG9Z2j=^CVKKnx7Xcrd#L=^79N12P`WuK$d#{NC#nO2D_E6kL`L*KBgGT0v$zA;cHzE5=nV8a{E_h||mSKA1a}!mty6 Va@G-X`fmV_$(1$19kUj$_#1eF%XR<& literal 0 HcmV?d00001 diff --git a/assets/textures/terrain_blend/grassy_outer.png.import b/assets/textures/terrain_blend/grassy_outer.png.import new file mode 100644 index 0000000..e460a2a --- /dev/null +++ b/assets/textures/terrain_blend/grassy_outer.png.import @@ -0,0 +1,14 @@ +[remap] + +importer="image" +type="Image" +uid="uid://cxwk1srj6obxh" +path="res://.godot/imported/grassy_outer.png-23c05e3ec7820ad524433733076341dc.image" + +[deps] + +source_file="res://assets/textures/terrain_blend/grassy_outer.png" +dest_files=["res://.godot/imported/grassy_outer.png-23c05e3ec7820ad524433733076341dc.image"] + +[params] + diff --git a/assets/textures/terrain_blend/grassy_straight.png b/assets/textures/terrain_blend/grassy_straight.png new file mode 100644 index 0000000000000000000000000000000000000000..b443361134591bbb0d36a02daf88a5ce3d2f829a GIT binary patch literal 4361 zcmeHLYitx%6rL?gYk@|2l~-V#Vx-{gJa)Q|vD*T>g-&owQ&y=&1M|4kj_vL&vr~49 z5fFTUBq9({p(-dOY7tRTC>VLjOVofMMi2=>Oo#|bAb`ljGqc-m5fjry|8+LE_sqHH zeD~b%o_o4?=T%mW?U6em7sId~LV2(X`g^UG(-r;>xp+&&Fh_4xEvSMp9LoV+H&EP# zIns8Hc5;@Z3)Thni=gE>vap`ezXq)*=q-Dz4RG9T_wR!|FfD%!^02gx<{a$F=i>Y~!fowfF_9tK<(L@TK(9BwVtPrZiJXx6S)7o1~oOLp^)8z$3n&o)f z%exqyVR@S6i#RL`dtp&F)*mphL36BVi`SZ`^|^DVf}?Z$fc+dT5U3Oa0X$~ts#cFM zEZOwTLVx)eBM0r8JYn_f@Sxvt;Gc-*=pU%_VxozyTMyso}%s zzI?;k+_ceKcev}BV~e-aPaK%Iw51~6yYM0Do}R&BwJT;1e`u$6SYQ^eys_%VnL96x zJ5{y!QAfd^tfvm(56}3$^y*I^Jl?d-T)abAackG7rMsWq<~$HRdilynk&WZATdvsZ z#Enn-(tirm*Eg3fn6*7};^gM$!l$?Wl1E<;zuM!-!t31g(tXL&cl3Q-0vkuxeslJN z^$QMV2b_Wl3!sOO)i| z#fGBtRlzZ72zc`owWb;4DJqdjI1?_XZq!hW&*!6PmSR~FEXa6c)D)9sG+tmqq%eXg zE*o0R)buEBVTzL8VEPFH#_`tpBC${?10Rj2SpYt$q!^kWpC%BG>HSa)`-2F_JM$V2KP4W*0tNlU=<4SL0xXJ!V`ji!kV8~bXik)TV%Xm ziSyDD>62MRa&8|YB^J3zkE|-JD9c`sQ`$iZ(YPr_Wn@7CxKjfhGkR zM&)Q(VmvmKBJ*Q(BO=0fY7wypQL$)^Jzx>ekE#^>1nZ>RG?n$Dse*%_ctndfB-;kU zS_DlnMTl;+HE2#%8?nqm-&I)G-1b-1-ykARX*r^2`3Lb{@|x8xwYaGp zjkYRvq9&lJskhW?y=EUJ9JdbzFUqMU#KmbSwcmi18j@?pXbpnukxtiEz4i~Ops*~h z(jp=~KBb7{TyBY!6htldcXi&>`c_?CPYeLkx7txHG%{GrDryu2U!q-+~fwS^8n>*>!N$ z>MD&J8%$lC{|IcE3DP~W^2g)w^Fc4GIk06-{Xm&*3Zb&>(>X(Ov)nfihF$_yf3vLG z4CoQ-TRC>em3!i|dHG;eA_PZ;y>o)?kyhMGzuoPXUvoEgn{o5njkgBn zcmFKEUv_a{y89GGQC2nQk2&NZ4?5oaHV1oW?}I;HU+!K5NSIJo5nMZZ%Iv=Y maxDiff) ? 0 : 3].Corner; if (first is Corner.TopLeft or Corner.BottomRight) { AddTriangle(corners.TopLeft , new(0.0f, 0.0f), diff --git a/terrain/terrain_material.tres b/terrain/terrain_material.tres index 6ba8a5a..74e961d 100644 --- a/terrain/terrain_material.tres +++ b/terrain/terrain_material.tres @@ -1,15 +1,28 @@ -[gd_resource type="ShaderMaterial" load_steps=7 format=4 uid="uid://doe8owgx4jeu1"] +[gd_resource type="ShaderMaterial" load_steps=15 format=4 uid="uid://doe8owgx4jeu1"] [ext_resource type="Shader" path="res://terrain/terrain_shader.gdshader" id="1_mf55c"] + [ext_resource type="Image" uid="uid://b0jp1dyxugbr7" path="res://assets/textures/terrain/grass.png" id="5_mau31"] [ext_resource type="Image" uid="uid://bpo7mkr6sctqr" path="res://assets/textures/terrain/dirt.png" id="6_xc3ue"] [ext_resource type="Image" uid="uid://dqyqg6yt7yk3k" path="res://assets/textures/terrain/rock.png" id="7_84wdo"] [ext_resource type="Image" uid="uid://bkwjxg6g2itag" path="res://assets/textures/terrain/sand.png" id="8_3fpcn"] +[ext_resource type="Image" uid="uid://bd65fhvitmpis" path="res://assets/textures/terrain_blend/default.png" id="5_qdlds"] +[ext_resource type="Image" uid="uid://cqgah04b0buil" path="res://assets/textures/terrain_blend/grassy_straight.png" id="6_s3ccy"] +[ext_resource type="Image" uid="uid://cxwk1srj6obxh" path="res://assets/textures/terrain_blend/grassy_outer.png" id="7_wgbkx"] +[ext_resource type="Image" uid="uid://cglldg71qap5f" path="res://assets/textures/terrain_blend/grassy_inner.png" id="8_dm7dx"] +[ext_resource type="Image" uid="uid://cl5gio1e8md5p" path="res://assets/textures/terrain_blend/bricky_straight.png" id="9_fwpox"] +[ext_resource type="Image" uid="uid://c8ntkfa6t0t4a" path="res://assets/textures/terrain_blend/bricky_outer.png" id="10_kq5au"] +[ext_resource type="Image" uid="uid://n7hbvgjiktlg" path="res://assets/textures/terrain_blend/bricky_inner.png" id="11_0i2i8"] + [sub_resource type="Texture2DArray" id="Texture2DArray_3nq13"] _images = Array[Image]([ExtResource("5_mau31"), ExtResource("6_xc3ue"), ExtResource("7_84wdo"), ExtResource("8_3fpcn")]) +[sub_resource type="Texture2DArray" id="Texture2DArray_3nq14"] +_images = Array[Image]([ExtResource("5_qdlds"), ExtResource("6_s3ccy"), ExtResource("7_wgbkx"), ExtResource("8_dm7dx"), ExtResource("9_fwpox"), ExtResource("10_kq5au"), ExtResource("11_0i2i8")]) + [resource] render_priority = 0 shader = ExtResource("1_mf55c") shader_parameter/textures = SubResource("Texture2DArray_3nq13") +shader_parameter/blend_textures = SubResource("Texture2DArray_3nq14") diff --git a/terrain/terrain_shader.gdshader b/terrain/terrain_shader.gdshader index f07119c..d5939ac 100644 --- a/terrain/terrain_shader.gdshader +++ b/terrain/terrain_shader.gdshader @@ -1,10 +1,22 @@ shader_type spatial; render_mode blend_mix, depth_draw_opaque, cull_back, diffuse_burley, specular_schlick_ggx; -uniform sampler2DArray textures : source_color, filter_linear_mipmap, repeat_enable; +uniform sampler2DArray textures : source_color, filter_linear_mipmap, repeat_enable; +uniform sampler2DArray blend_textures : source_color, filter_nearest_mipmap, repeat_enable; void fragment() { - ALBEDO = texture(textures, vec3(UV, UV2.x)).rgb; + int num_textures = textureSize(textures, 0).z; + int num_blend_textures = textureSize(blend_textures, 0).z; + + float tex_primary_index = COLOR.r * float(num_textures); + float tex_secondary_index = COLOR.g * float(num_textures); + float tex_blend_index = COLOR.b * float(num_blend_textures); + + vec4 tex_primary = texture(textures, vec3(UV, tex_primary_index)); + vec4 tex_secondary = texture(textures, vec3(UV, tex_secondary_index)); + + vec4 blend = texture(blend_textures, vec3(UV, tex_blend_index)); + ALBEDO = mix(tex_secondary, tex_primary, blend.a).rgb; METALLIC = 0.0; SPECULAR = 0.5;