œ] Ѳœ€5.5.1f1ţ˙˙˙˙˙Č0ĹňĂôL.`?^Ů0D7€˙˙˙˙€Ś€˛€ЀŚ€Ś€Ś€#Ś€+H€3˙˙˙˙€1€1€˙˙˙˙@ހ€ Q€j€ ™€< Ś€H H€Z˙˙˙˙ €1€1€˙˙˙˙@ހ€Q€j€ЀgŚ€Ś€Ś€#Ś€+v~ € €– €Ÿ €¨ €ą €ş €Ă €Ě €Ő €Ţ  €ç! €ń" €ű# €$ €% €&Ő€#˙˙˙˙'€1€1€˙˙˙˙(€ހ€)H€j€˙˙˙˙*€1€1€˙˙˙˙+@ހ€,Q€j€-™€*.ހ8/AssetMetaDataguiddata[0]data[1]data[2]data[3]pathNametimeCreatedoriginalChangesetoriginalNameoriginalParentHash128originalDigestbytes[0]bytes[1]bytes[2]bytes[3]bytes[4]bytes[5]bytes[6]bytes[7]bytes[8]bytes[9]bytes[10]bytes[11]bytes[12]bytes[13]bytes[14]bytes[15]labelsassetStoreReflicenseTypeď˙˙2ƒ…>”KËĽŁMźHîÁƒ#{7€˙˙˙˙€Ś€˛€Ő€ ހ%.€.†€Ä€ ހ%.€.H€Ť€˙˙˙˙€1€1€˙˙˙˙ @ހ€ Q€j€ Ő€7˙˙˙˙ Ŕ1€1€˙˙˙˙ €ހ€€j€˙˙˙˙€H€›€˙˙˙˙€1€1€˙˙˙˙@ހ€Q€j€°€ € ހ%.€.H€I˙˙˙˙€1€1€˙˙˙˙@ހ€Q€j€H€T˙˙˙˙€1€1€˙˙˙˙@ހ€Q€j€H€f˙˙˙˙€1€1€˙˙˙˙ @ހ€!Q€j€"ShaderImporterPPtrm_FileIDm_PathIDm_DefaultTexturesm_UserDatam_AssetBundleNamem_AssetBundleVariant0˙˙şěŻu`Aă•\á|^FďYŹü 7€˙˙˙˙€Ś€˛€Ő€ ހ.€&†€Ä€ ހ.€&H€Ť€˙˙˙˙€1€1€˙˙˙˙ @ހ€ Q€j€ /@˙˙˙˙ €Mb˙˙˙˙ €Ő€m˙˙˙˙€1€1€˙˙˙˙€ހ€uj€˙˙˙˙€H€Ť€˙˙˙˙€1€1€˙˙˙˙@ހ€Q€j€H€ˆ˙˙˙˙€1€1€˙˙˙˙@ހ€Q€j€Ő€–˙˙˙˙€1€1€˙˙˙˙€ހ€H€j€˙˙˙˙€ 1€1€˙˙˙˙@ ހ€ Q€j€ ހ€!Ś€Ł"Ą€Ť#Ą€š$Ą€Ç%Ą€Ő&ăý˙˙˙˙'€H€ ˙˙˙˙(€1€1€˙˙˙˙)@ ހ€* Q€j€+ހ,Ő€!˙˙˙˙-€1€1€˙˙˙˙.€ހ€/.j€˙˙˙˙0€Ő€B˙˙˙˙1€1€1€˙˙˙˙2€ހ€3Kj€˙˙˙˙4€ń€Z˙˙˙˙5€ 1€1€˙˙˙˙6€ ހ€7 €j€˙˙˙˙8€ H€›€˙˙˙˙9€ 1€1€˙˙˙˙:@ ހ€; Q€j€< ހ €=ހ€>h~˙˙˙˙?€ H€Ť€˙˙˙˙@€ 1€1€˙˙˙˙A@ ހ€B Q€j€C †Ł˙˙˙˙D€ ŹÇ˙˙˙˙E€ Ą€ĐF Š€Ô˙˙˙˙G€ H€Ô˙˙˙˙H€ 1€1€˙˙˙˙I@ހ€JQ€j€K ŹŮ˙˙˙˙L€ Ą€ĐM Š€Ô˙˙˙˙N€ H€Ô˙˙˙˙O€ 1€1€˙˙˙˙P@ހ€QQ€j€R Źă˙˙˙˙S€ Ą€ĐT Š€Ô˙˙˙˙U€ H€Ô˙˙˙˙V€ 1€1€˙˙˙˙W@ހ€XQ€j€Y Źń˙˙˙˙Z€ Ą€Đ[ Š€Ô˙˙˙˙\€ H€Ô˙˙˙˙]€ 1€1€˙˙˙˙^@ހ€_Q€j€` Ź˙˙˙˙a€ Ą€Đb Š€Ô˙˙˙˙c€ H€Ô˙˙˙˙d€ 1€1€˙˙˙˙e@ހ€fQ€j€g Ź˙˙˙˙h€ Ą€Đi Š€Ô˙˙˙˙j€ H€Ô˙˙˙˙k€ 1€1€˙˙˙˙l@ހ€mQ€j€n Ź˙˙˙˙o€ Ą€Đp Š€Ô˙˙˙˙q€ H€Ô˙˙˙˙r€ 1€1€˙˙˙˙s@ހ€tQ€j€u †˙˙˙˙v€ ŹÇ˙˙˙˙w€ Ą€Đx Š€Ô˙˙˙˙y€ H€Ô˙˙˙˙z€ 1€1€˙˙˙˙{@ހ€|Q€j€} ŹŮ˙˙˙˙~€ Ą€Đ Š€Ô˙˙˙˙€€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙‚@ހ€ƒQ€j€„ Źă˙˙˙˙…€ Ą€Đ† Š€Ô˙˙˙˙‡€ H€Ô˙˙˙˙ˆ€ 1€1€˙˙˙˙‰@ހ€ŠQ€j€‹ Źń˙˙˙˙Œ€ Ą€Đ Š€Ô˙˙˙˙Ž€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙@ހ€‘Q€j€’ Ź˙˙˙˙“€ Ą€Đ” Š€Ô˙˙˙˙•€ H€Ô˙˙˙˙–€ 1€1€˙˙˙˙—@ހ€˜Q€j€™ Ź˙˙˙˙š€ Ą€Đ› Š€Ô˙˙˙˙œ€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙ž@ހ€ŸQ€j€  Ź˙˙˙˙Ą€ Ą€Đ˘ Š€Ô˙˙˙˙Ł€ H€Ô˙˙˙˙¤€ 1€1€˙˙˙˙Ľ@ހ€ŚQ€j€§ †&˙˙˙˙¨€ ŹÇ˙˙˙˙Š€ Ą€ĐŞ Š€Ô˙˙˙˙Ť€ H€Ô˙˙˙˙Ź€ 1€1€˙˙˙˙­@ހ€ŽQ€j€Ż ŹŮ˙˙˙˙°€ Ą€Đą Š€Ô˙˙˙˙˛€ H€Ô˙˙˙˙ł€ 1€1€˙˙˙˙´@ހ€ľQ€j€ś Źă˙˙˙˙ˇ€ Ą€Đ¸ Š€Ô˙˙˙˙š€ H€Ô˙˙˙˙ş€ 1€1€˙˙˙˙ť@ހ€źQ€j€˝ Źń˙˙˙˙ž€ Ą€Đż Š€Ô˙˙˙˙Ŕ€ H€Ô˙˙˙˙Á€ 1€1€˙˙˙˙Â@ހ€ĂQ€j€Ä Ź˙˙˙˙ŀ Ą€ĐĆ Š€Ô˙˙˙˙ǀ H€Ô˙˙˙˙Ȁ 1€1€˙˙˙˙É@ހ€ĘQ€j€Ë Ź˙˙˙˙̀ Ą€ĐÍ Š€Ô˙˙˙˙΀ H€Ô˙˙˙˙π 1€1€˙˙˙˙Đ@ހ€ŃQ€j€Ň Ź˙˙˙˙Ӏ Ą€ĐÔ Š€Ô˙˙˙˙Հ H€Ô˙˙˙˙ր 1€1€˙˙˙˙×@ހ€ŘQ€j€Ů †/˙˙˙˙ڀ ŹÇ˙˙˙˙ۀ Ą€ĐÜ Š€Ô˙˙˙˙݀ H€Ô˙˙˙˙ހ 1€1€˙˙˙˙ß@ހ€ŕQ€j€á ŹŮ˙˙˙˙†Ą€Đă Š€Ô˙˙˙˙ä€ H€Ô˙˙˙˙ĺ€ 1€1€˙˙˙˙ć@ހ€çQ€j€č Źă˙˙˙˙é€ Ą€Đę Š€Ô˙˙˙˙ë€ H€Ô˙˙˙˙ě€ 1€1€˙˙˙˙í@ހ€îQ€j€ď Źń˙˙˙˙đ€ Ą€Đń Š€Ô˙˙˙˙ň€ H€Ô˙˙˙˙ó€ 1€1€˙˙˙˙ô@ހ€őQ€j€ö Ź˙˙˙˙÷€ Ą€Đř Š€Ô˙˙˙˙ů€ H€Ô˙˙˙˙ú€ 1€1€˙˙˙˙ű@ހ€üQ€j€ý Ź˙˙˙˙ţ€ Ą€Đ˙ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙@ހ€Q€j€ Ź˙˙˙˙€ Ą€Đ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙ @ހ€ Q€j€  †8˙˙˙˙ € ŹÇ˙˙˙˙ € Ą€Đ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙@ހ€Q€j€ ŹŮ˙˙˙˙€ Ą€Đ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙@ހ€Q€j€ Źă˙˙˙˙€ Ą€Đ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙@ހ€ Q€j€! Źń˙˙˙˙"€ Ą€Đ# Š€Ô˙˙˙˙$€ H€Ô˙˙˙˙%€ 1€1€˙˙˙˙&@ހ€'Q€j€( Ź˙˙˙˙)€ Ą€Đ* Š€Ô˙˙˙˙+€ H€Ô˙˙˙˙,€ 1€1€˙˙˙˙-@ހ€.Q€j€/ Ź˙˙˙˙0€ Ą€Đ1 Š€Ô˙˙˙˙2€ H€Ô˙˙˙˙3€ 1€1€˙˙˙˙4@ހ€5Q€j€6 Ź˙˙˙˙7€ Ą€Đ8 Š€Ô˙˙˙˙9€ H€Ô˙˙˙˙:€ 1€1€˙˙˙˙;@ހ€<Q€j€= †A˙˙˙˙>€ ŹÇ˙˙˙˙?€ Ą€Đ@ Š€Ô˙˙˙˙A€ H€Ô˙˙˙˙B€ 1€1€˙˙˙˙C@ހ€DQ€j€E ŹŮ˙˙˙˙F€ Ą€ĐG Š€Ô˙˙˙˙H€ H€Ô˙˙˙˙I€ 1€1€˙˙˙˙J@ހ€KQ€j€L Źă˙˙˙˙M€ Ą€ĐN Š€Ô˙˙˙˙O€ H€Ô˙˙˙˙P€ 1€1€˙˙˙˙Q@ހ€RQ€j€S Źń˙˙˙˙T€ Ą€ĐU Š€Ô˙˙˙˙V€ H€Ô˙˙˙˙W€ 1€1€˙˙˙˙X@ހ€YQ€j€Z Ź˙˙˙˙[€ Ą€Đ\ Š€Ô˙˙˙˙]€ H€Ô˙˙˙˙^€ 1€1€˙˙˙˙_@ހ€`Q€j€a Ź˙˙˙˙b€ Ą€Đc Š€Ô˙˙˙˙d€ H€Ô˙˙˙˙e€ 1€1€˙˙˙˙f@ހ€gQ€j€h Ź˙˙˙˙i€ Ą€Đj Š€Ô˙˙˙˙k€ H€Ô˙˙˙˙l€ 1€1€˙˙˙˙m@ހ€nQ€j€o †J˙˙˙˙p€ ŹÇ˙˙˙˙q€ Ą€Đr Š€Ô˙˙˙˙s€ H€Ô˙˙˙˙t€ 1€1€˙˙˙˙u@ހ€vQ€j€w ŹŮ˙˙˙˙x€ Ą€Đy Š€Ô˙˙˙˙z€ H€Ô˙˙˙˙{€ 1€1€˙˙˙˙|@ހ€}Q€j€~ Źă˙˙˙˙€ Ą€Đ€ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙‚€ 1€1€˙˙˙˙ƒ@ހ€„Q€j€… Źń˙˙˙˙†€ Ą€Đ‡ Š€Ô˙˙˙˙ˆ€ H€Ô˙˙˙˙‰€ 1€1€˙˙˙˙Š@ހ€‹Q€j€Œ Ź˙˙˙˙€ Ą€ĐŽ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙‘@ހ€’Q€j€“ Ź˙˙˙˙”€ Ą€Đ• Š€Ô˙˙˙˙–€ H€Ô˙˙˙˙—€ 1€1€˙˙˙˙˜@ހ€™Q€j€š Ź˙˙˙˙›€ Ą€Đœ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙ž€ 1€1€˙˙˙˙Ÿ@ހ€ Q€j€Ą †S˙˙˙˙˘€ ŹÇ˙˙˙˙Ł€ Ą€Đ¤ Š€Ô˙˙˙˙Ľ€ H€Ô˙˙˙˙Ś€ 1€1€˙˙˙˙§@ހ€¨Q€j€Š ŹŮ˙˙˙˙Ş€ Ą€ĐŤ Š€Ô˙˙˙˙Ź€ H€Ô˙˙˙˙­€ 1€1€˙˙˙˙Ž@ހ€ŻQ€j€° Źă˙˙˙˙ą€ Ą€Đ˛ Š€Ô˙˙˙˙ł€ H€Ô˙˙˙˙´€ 1€1€˙˙˙˙ľ@ހ€śQ€j€ˇ Źń˙˙˙˙¸€ Ą€Đš Š€Ô˙˙˙˙ş€ H€Ô˙˙˙˙ť€ 1€1€˙˙˙˙ź@ހ€˝Q€j€ž Ź˙˙˙˙ż€ Ą€ĐŔ Š€Ô˙˙˙˙Á€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙Ă@ހ€ÄQ€j€Ĺ Ź˙˙˙˙Ć€ Ą€ĐÇ Š€Ô˙˙˙˙Č€ H€Ô˙˙˙˙É€ 1€1€˙˙˙˙Ę@ހ€ËQ€j€Ě Ź˙˙˙˙Í€ Ą€ĐÎ Š€Ô˙˙˙˙Ď€ H€Ô˙˙˙˙Đ€ 1€1€˙˙˙˙Ń@ހ€ŇQ€j€Ó L€\Ô@ Źl˙˙˙˙Ő€ Ą€ĐÖ Š€Ô˙˙˙˙×€ H€Ô˙˙˙˙Ř€ 1€1€˙˙˙˙Ů@ ހ€Ú Q€j€Ű Źr˙˙˙˙Ü€ Ą€ĐÝ Š€Ô˙˙˙˙Ţ€ H€Ô˙˙˙˙߀ 1€1€˙˙˙˙ŕ@ ހ€á Q€j€â Źy˙˙˙˙〠Ą€Đä Š€Ô˙˙˙˙ĺ€ H€Ô˙˙˙˙ć€ 1€1€˙˙˙˙ç@ ހ€č Q€j€é Ź˙˙˙˙ę€ Ą€Đë Š€Ô˙˙˙˙ě€ H€Ô˙˙˙˙í€ 1€1€˙˙˙˙î@ ހ€ď Q€j€đ ŹŽ˙˙˙˙ń€ Ą€Đň Š€Ô˙˙˙˙ó€ H€Ô˙˙˙˙ô€ 1€1€˙˙˙˙ő@ ހ€ö Q€j€÷ Źš˙˙˙˙ř€ Ą€Đů Š€Ô˙˙˙˙ú€ H€Ô˙˙˙˙ű€ 1€1€˙˙˙˙ü@ ހ€ý Q€j€ţ Śş˙˙˙˙˙€ ŹÄ˙˙˙˙€ Ą€Đ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙@ހ€Q€j€ ŹÉ˙˙˙˙€ Ą€Đ Š€Ô˙˙˙˙ € H€Ô˙˙˙˙ € 1€1€˙˙˙˙ @ހ€ Q€j€  ŹÎ˙˙˙˙€ Ą€Đ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙@ހ€Q€j€ ŹÔ˙˙˙˙€ Ą€Đ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙€ 1€1€˙˙˙˙@ހ€Q€j€ ŚŮ˙˙˙˙€ ŹÄ˙˙˙˙€ Ą€Đ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙ € 1€1€˙˙˙˙!@ހ€"Q€j€# ŹÉ˙˙˙˙$€ Ą€Đ% Š€Ô˙˙˙˙&€ H€Ô˙˙˙˙'€ 1€1€˙˙˙˙(@ހ€)Q€j€* ŹÎ˙˙˙˙+€ Ą€Đ, Š€Ô˙˙˙˙-€ H€Ô˙˙˙˙.€ 1€1€˙˙˙˙/@ހ€0Q€j€1 ŹÔ˙˙˙˙2€ Ą€Đ3 Š€Ô˙˙˙˙4€ H€Ô˙˙˙˙5€ 1€1€˙˙˙˙6@ހ€7Q€j€8 Śč˙˙˙˙9€ ŹÄ˙˙˙˙:€ Ą€Đ; Š€Ô˙˙˙˙<€ H€Ô˙˙˙˙=€ 1€1€˙˙˙˙>@ހ€?Q€j€@ ŹÉ˙˙˙˙A€ Ą€ĐB Š€Ô˙˙˙˙C€ H€Ô˙˙˙˙D€ 1€1€˙˙˙˙E@ހ€FQ€j€G ŹÎ˙˙˙˙H€ Ą€ĐI Š€Ô˙˙˙˙J€ H€Ô˙˙˙˙K€ 1€1€˙˙˙˙L@ހ€MQ€j€N ŹÔ˙˙˙˙O€ Ą€ĐP Š€Ô˙˙˙˙Q€ H€Ô˙˙˙˙R€ 1€1€˙˙˙˙S@ހ€TQ€j€U Źö˙˙˙˙V€ Ą€ĐW Š€Ô˙˙˙˙X€ H€Ô˙˙˙˙Y€ 1€1€˙˙˙˙Z@ ހ€[ Q€j€\ Ź˙˙˙˙]€ Ą€Đ^ Š€Ô˙˙˙˙_€ H€Ô˙˙˙˙`€ 1€1€˙˙˙˙a@ ހ€b Q€j€c Ź˙˙˙˙d€ Ą€Đe Š€Ô˙˙˙˙f€ H€Ô˙˙˙˙g€ 1€1€˙˙˙˙h@ ހ€i Q€j€j Ź"˙˙˙˙k€ Ą€Đl Š€Ô˙˙˙˙m€ H€Ô˙˙˙˙n€ 1€1€˙˙˙˙o@ ހ€p Q€j€q Ź+˙˙˙˙r€ Ą€Đs Š€Ô˙˙˙˙t€ H€Ô˙˙˙˙u€ 1€1€˙˙˙˙v@ ހ€w Q€j€x Ź2˙˙˙˙y€ Ą€Đz Š€Ô˙˙˙˙{€ H€Ô˙˙˙˙|€ 1€1€˙˙˙˙}@ ހ€~ Q€j€ =Y˙˙˙˙€€ Źb˙˙˙˙€ Ą€Đ‚ Š€Ô˙˙˙˙ƒ€ H€Ô˙˙˙˙„€ 1€1€˙˙˙˙…@ހ€†Q€j€‡ Źd˙˙˙˙ˆ€ Ą€Đ‰ Š€Ô˙˙˙˙Š€ H€Ô˙˙˙˙‹€ 1€1€˙˙˙˙Œ@ހ€Q€j€Ž Źf˙˙˙˙€ Ą€Đ Š€Ô˙˙˙˙‘€ H€Ô˙˙˙˙’€ 1€1€˙˙˙˙“@ހ€”Q€j€• Źh˙˙˙˙–€ Ą€Đ— Š€Ô˙˙˙˙˜€ H€Ô˙˙˙˙™€ 1€1€˙˙˙˙š@ހ€›Q€j€œ Š€Ô˙˙˙˙€ H€Ô˙˙˙˙ž€ 1€1€˙˙˙˙Ÿ@ ހ€  Q€j€Ą ހj˘ ހrŁ ˙˙˙˙¤€ ń€—˙˙˙˙Ľ€ 1€1€˙˙˙˙Ś€ ހ€§ €j€˙˙˙˙¨€ H€›€˙˙˙˙Š€1€1€˙˙˙˙Ş@ހ€ŤQ€j€Ź H€ €˙˙˙˙­€1€1€˙˙˙˙Ž@ހ€ŻQ€j€° ހœą L€˘˛@Ś€ŤłšË˙˙˙˙´€ Ő€Ö˙˙˙˙ľ€ 1€1€˙˙˙˙ś€ ހ€ˇ äj€˙˙˙˙¸€ Ś€ůš ˙˙˙˙ş€ Ő€˙˙˙˙ť@1€1€˙˙˙˙źހ€˝#j€ž5€5ż5€<Ŕ Ś€CÁ Ő€O˙˙˙˙ 1€1€˙˙˙˙Ăހ€Ä‹€j€Ĺ 5€`Ć 5€uÇ@ Ő€†˙˙˙˙Č€ 1€1€˙˙˙˙É€ހ€Ę•j€Ë€ހĽĚހƒ€ÍހąÎ5€€Ď5€˝Đ@ Ő€Ă˙˙˙˙Ń€ 1€1€˙˙˙˙Ň€ހ€ÓŇj€Ô€ހĽŐހƒ€Öހą×5€€Ř5€âŮ@ Ő€í˙˙˙˙Ú€ 1€1€˙˙˙˙Ű€ހ€Üýj€ Ý€ހĽŢހƒ€ßހŕ5€˝á@ Ő€˙˙˙˙â 1€1€˙˙˙˙ăހ€ä,j€ĺހĽćހƒ€ç Ő€:˙˙˙˙č€ 1€1€˙˙˙˙é€ހ€ęLj€˙˙˙˙ë€ހĽěŐ€Ă˙˙˙˙í€1€1€˙˙˙˙î€ހ€ďŇj€đ€ހĽńހƒ€ňހąó5€€ô5€âő@Ő€†˙˙˙˙ö€1€1€˙˙˙˙÷€ހ€ř•j€ů€ހĽúހƒ€űހąü5€€ý5€˝ţ@ހ[˙ Ő€b˙˙˙˙ 1€1€˙˙˙˙ހ€,j€ހĽހƒ€ Ő€{˙˙˙˙ 1€1€˙˙˙˙ހ€‡j€ ހĽ ހƒ€ ހ” š¤˙˙˙˙ € Ő€Ö˙˙˙˙€ 1€1€˙˙˙˙€ ހ€ äj€˙˙˙˙€ Ś€ů ˙˙˙˙€ Ő€˙˙˙˙@1€1€˙˙˙˙ހ€#j€5€55€< Ś€C Ő€O˙˙˙˙ 1€1€˙˙˙˙ހ€‹€j€ 5€` 5€u @ Ő€†˙˙˙˙!€ 1€1€˙˙˙˙"€ހ€#•j€$€ހĽ%ހƒ€&ހą'5€€(5€˝)@ Ő€Ă˙˙˙˙*€ 1€1€˙˙˙˙+€ހ€,Ňj€-€ހĽ.ހƒ€/ހą05€€15€â2@ Ő€í˙˙˙˙3€ 1€1€˙˙˙˙4€ހ€5ýj€ 6€ހĽ7ހƒ€8ހ95€˝:@ Ő€˙˙˙˙; 1€1€˙˙˙˙<ހ€=,j€>ހĽ?ހƒ€@ Ő€:˙˙˙˙A€ 1€1€˙˙˙˙B€ހ€CLj€˙˙˙˙D€ހĽEŐ€Ă˙˙˙˙F€1€1€˙˙˙˙G€ހ€HŇj€I€ހĽJހƒ€KހąL5€€M5€âN@Ő€†˙˙˙˙O€1€1€˙˙˙˙P€ހ€Q•j€R€ހĽSހƒ€TހąU5€€V5€˝W@ހ[X Ő€b˙˙˙˙Y 1€1€˙˙˙˙Zހ€[,j€\ހĽ]ހƒ€^ Ő€{˙˙˙˙_ 1€1€˙˙˙˙`ހ€a‡j€ bހĽcހƒ€dހ”ešą˙˙˙˙f€ Ő€Ö˙˙˙˙g€ 1€1€˙˙˙˙h€ ހ€i äj€˙˙˙˙j€ Ś€ůk ˙˙˙˙l€ Ő€˙˙˙˙m@1€1€˙˙˙˙nހ€o#j€p5€5q5€<r Ś€Cs Ő€O˙˙˙˙t 1€1€˙˙˙˙uހ€v‹€j€w 5€`x 5€uy@ Ő€†˙˙˙˙z€ 1€1€˙˙˙˙{€ހ€|•j€}€ހĽ~ހƒ€ހą€5€€5€˝‚@ Ő€Ă˙˙˙˙ƒ€ 1€1€˙˙˙˙„€ހ€…Ňj€†€ހĽ‡ހƒ€ˆހą‰5€€Š5€â‹@ Ő€í˙˙˙˙Œ€ 1€1€˙˙˙˙€ހ€Žýj€ €ހĽހƒ€‘ހ’5€˝“@ Ő€˙˙˙˙” 1€1€˙˙˙˙•ހ€–,j€—ހĽ˜ހƒ€™ Ő€:˙˙˙˙š€ 1€1€˙˙˙˙›€ހ€œLj€˙˙˙˙€ހĽžŐ€Ă˙˙˙˙Ÿ€1€1€˙˙˙˙ €ހ€ĄŇj€˘€ހĽŁހƒ€¤ހąĽ5€€Ś5€â§@Ő€†˙˙˙˙¨€1€1€˙˙˙˙Š€ހ€Ş•j€Ť€ހĽŹހƒ€­ހąŽ5€€Ż5€˝°@ހ[ą Ő€b˙˙˙˙˛ 1€1€˙˙˙˙łހ€´,j€ľހĽśހƒ€ˇ Ő€{˙˙˙˙¸ 1€1€˙˙˙˙šހ€ş‡j€ ťހĽźހƒ€˝ހ”žšž˙˙˙˙ż€ Ő€Ö˙˙˙˙Ŕ€ 1€1€˙˙˙˙Á€ ހ€Â äj€˙˙˙˙Ă€ Ś€ůÄ ˙˙˙˙Ĺ€ Ő€˙˙˙˙Ć@1€1€˙˙˙˙Çހ€Č#j€É5€5Ę5€<Ë Ś€CĚ Ő€O˙˙˙˙Í 1€1€˙˙˙˙Îހ€Ď‹€j€Đ 5€`Ń 5€uŇ@ Ő€†˙˙˙˙Ó€ 1€1€˙˙˙˙Ô€ހ€Ő•j€Ö€ހĽ×ހƒ€ŘހąŮ5€€Ú5€˝Ű@ Ő€Ă˙˙˙˙Ü€ 1€1€˙˙˙˙Ý€ހ€ŢŇj€ß€ހĽŕހƒ€áހąâ5€€ă5€âä@ Ő€í˙˙˙˙ĺ€ 1€1€˙˙˙˙ć€ހ€çýj€ č€ހĽéހƒ€ęހë5€˝ě@ Ő€˙˙˙˙í 1€1€˙˙˙˙îހ€ď,j€đހĽńހƒ€ň Ő€:˙˙˙˙ó€ 1€1€˙˙˙˙ô€ހ€őLj€˙˙˙˙ö€ހĽ÷Ő€Ă˙˙˙˙ř€1€1€˙˙˙˙ů€ހ€úŇj€ű€ހĽüހƒ€ýހąţ5€€˙5€â@Ő€†˙˙˙˙€1€1€˙˙˙˙€ހ€•j€€ހĽހƒ€ހą5€€5€˝ @ހ[  Ő€b˙˙˙˙  1€1€˙˙˙˙ ހ€ ,j€ހĽހƒ€ Ő€{˙˙˙˙ 1€1€˙˙˙˙ހ€‡j€ ހĽހƒ€ހ”šÇ˙˙˙˙€ Ő€Ö˙˙˙˙€ 1€1€˙˙˙˙€ ހ€ äj€˙˙˙˙€ Ś€ů ˙˙˙˙€ Ő€˙˙˙˙@1€1€˙˙˙˙ ހ€!#j€"5€5#5€<$ Ś€C% Ő€O˙˙˙˙& 1€1€˙˙˙˙'ހ€(‹€j€) 5€`* 5€u+@ Ő€†˙˙˙˙,€ 1€1€˙˙˙˙-€ހ€.•j€/€ހĽ0ހƒ€1ހą25€€35€˝4@ Ő€Ă˙˙˙˙5€ 1€1€˙˙˙˙6€ހ€7Ňj€8€ހĽ9ހƒ€:ހą;5€€<5€â=@ Ő€í˙˙˙˙>€ 1€1€˙˙˙˙?€ހ€@ýj€ A€ހĽBހƒ€CހD5€˝E@ Ő€˙˙˙˙F 1€1€˙˙˙˙Gހ€H,j€IހĽJހƒ€K Ő€:˙˙˙˙L€ 1€1€˙˙˙˙M€ހ€NLj€˙˙˙˙O€ހĽPŐ€Ă˙˙˙˙Q€1€1€˙˙˙˙R€ހ€SŇj€T€ހĽUހƒ€VހąW5€€X5€âY@Ő€†˙˙˙˙Z€1€1€˙˙˙˙[€ހ€\•j€]€ހĽ^ހƒ€_ހą`5€€a5€˝b@ހ[c Ő€b˙˙˙˙d 1€1€˙˙˙˙eހ€f,j€gހĽhހƒ€i Ő€{˙˙˙˙j 1€1€˙˙˙˙kހ€l‡j€ mހĽnހƒ€oހ”pL€Ňq@H€é˙˙˙˙r€ 1€1€˙˙˙˙s@ ހ€t Q€j€uH€Ť€˙˙˙˙v€ 1€1€˙˙˙˙w@ ހ€x Q€j€yH€ó˙˙˙˙z€ 1€1€˙˙˙˙{@ ހ€| Q€j€}˙˙˙˙~€ ń€—˙˙˙˙€ 1€1€˙˙˙˙€€ ހ€ €j€˙˙˙˙‚€ H€›€˙˙˙˙ƒ€ 1€1€˙˙˙˙„@ހ€…Q€j€† H€ €˙˙˙˙‡€ 1€1€˙˙˙˙ˆ@ހ€‰Q€j€Š˙˙˙˙‹€ń€—˙˙˙˙Œ€1€1€˙˙˙˙€ހ€Ž€j€˙˙˙˙€ H€›€˙˙˙˙€ 1€1€˙˙˙˙‘@ ހ€’ Q€j€“ H€ €˙˙˙˙”€ 1€1€˙˙˙˙•@ ހ€– Q€j€—ހœ˜H€Ť€˙˙˙˙™€1€1€˙˙˙˙š@ހ€›Q€j€œH€˙˙˙˙€1€1€˙˙˙˙ž@ހ€ŸQ€j€ H€˙˙˙˙Ą€1€1€˙˙˙˙˘@ހ€ŁQ€j€¤Ő€#˙˙˙˙Ľ€1€1€˙˙˙˙Ś€ހ€§2j€˙˙˙˙¨€H€M˙˙˙˙Š€1€1€˙˙˙˙Ş@ހ€ŤQ€j€ŹH€R˙˙˙˙­€1€1€˙˙˙˙Ž@ހ€ŻQ€j€°L€Uą@Ő€r˙˙˙˙˛1€1€˙˙˙˙łހ€´Ś€j€ľŐ€|˙˙˙˙ś1€1€˙˙˙˙ˇހ€¸Ś€j€šŐ€„˙˙˙˙ş1€1€˙˙˙˙ťހ€źŚ€j€˝Ő€–˙˙˙˙ž1€1€˙˙˙˙żހ€ŔŚ€j€ÁŐ€Ş˙˙˙˙€1€1€˙˙˙˙Ă@ހ€Ä €j€ĹŐ€#˙˙˙˙Ć1€1€˙˙˙˙Çހ€Čšj€ ÉހĘ.€&ËL€ĆĚ@ń€Ö˙˙˙˙Í€1€1€˙˙˙˙΀ހ€Ď€j€˙˙˙˙Đ€H€›€˙˙˙˙Ń€1€1€˙˙˙˙Ň@ހ€ÓQ€j€Ô°€ € ŐހÖ.€&×čţ˙˙˙˙Ř€ń€ ˙˙˙˙Ů€1€1€˙˙˙˙Ú€ހ€Ű€j€˙˙˙˙Ü€ހ›€Ý €˙˙˙˙Ţ€H€%˙˙˙˙߀1€1€˙˙˙˙ŕ@ހ€áQ€j€âH€,˙˙˙˙ă€1€1€˙˙˙˙ä@ހ€ĺQ€j€ćŚ€8猀Gčހb錀nęz‚ë €‘ě €ší €Łî €Źď €ľđ €žń €Çň €Đó €Ůô €âő €ëö €ő÷ €˙ř € ů €ú €űL€'ü@ހ3ýŐ€>˙˙˙˙ţ€1€1€˙˙˙˙˙€ހ€Ő€j€˙˙˙˙€ 1€1€˙˙˙˙€ ހ€ H€j€˙˙˙˙€ 1€1€˙˙˙˙@ ހ€ Q€j€Ő€N˙˙˙˙€1€1€˙˙˙˙ €ހ€ Ő€j€˙˙˙˙ € 1€1€˙˙˙˙ € ހ€  H€j€˙˙˙˙€ 1€1€˙˙˙˙@ ހ€ Q€j€Ő€^˙˙˙˙€1€1€˙˙˙˙€ހ€Ő€j€˙˙˙˙€ 1€1€˙˙˙˙€ ހ€ H€j€˙˙˙˙€ 1€1€˙˙˙˙@ ހ€ Q€j€Ő€n˙˙˙˙€1€1€˙˙˙˙€ހ€Ő€j€˙˙˙˙€ 1€1€˙˙˙˙ € ހ€! H€j€˙˙˙˙"€ 1€1€˙˙˙˙#@ ހ€$ Q€j€%Ő€~˙˙˙˙&€1€1€˙˙˙˙'€ހ€(Ő€j€˙˙˙˙)€ 1€1€˙˙˙˙*€ ހ€+ H€j€˙˙˙˙,€ 1€1€˙˙˙˙-@ ހ€. Q€j€/Ő€Ž˙˙˙˙0€1€1€˙˙˙˙1€ހ€2Ő€j€˙˙˙˙3€ 1€1€˙˙˙˙4€ ހ€5 H€j€˙˙˙˙6€ 1€1€˙˙˙˙7@ ހ€8 Q€j€9Ő€ž˙˙˙˙:€1€1€˙˙˙˙;€ހ€<Ő€j€˙˙˙˙=€ 1€1€˙˙˙˙>€ ހ€? H€j€˙˙˙˙@€ 1€1€˙˙˙˙A@ ހ€B Q€j€CŐ€ą˙˙˙˙D€1€1€˙˙˙˙E€ހ€FŐ€j€˙˙˙˙G€ 1€1€˙˙˙˙H€ ހ€I H€j€˙˙˙˙J€ 1€1€˙˙˙˙K@ ހ€L Q€j€MŐ€Ä˙˙˙˙N€1€1€˙˙˙˙O€ހ€PŐ€j€˙˙˙˙Q€ 1€1€˙˙˙˙R€ ހ€S H€j€˙˙˙˙T€ 1€1€˙˙˙˙U@ ހ€V Q€j€WŐ€×˙˙˙˙X€1€1€˙˙˙˙Y€ހ€ZŐ€j€˙˙˙˙[€ 1€1€˙˙˙˙\€ ހ€] H€j€˙˙˙˙^€ 1€1€˙˙˙˙_@ ހ€` Q€j€aŐ€ę˙˙˙˙b€1€1€˙˙˙˙c€ހ€dŐ€j€˙˙˙˙e€ 1€1€˙˙˙˙f€ ހ€g H€j€˙˙˙˙h€ 1€1€˙˙˙˙i@ ހ€j Q€j€kŐ€ý˙˙˙˙l€1€1€˙˙˙˙m€ހ€nŐ€j€˙˙˙˙o€ 1€1€˙˙˙˙p€ ހ€q H€j€˙˙˙˙r€ 1€1€˙˙˙˙s@ ހ€t Q€j€uހ vŐ€ ˙˙˙˙w€1€1€˙˙˙˙x€ހ€yH€j€˙˙˙˙z€ 1€1€˙˙˙˙{@ ހ€| Q€j€}Ő€+ ˙˙˙˙~€1€1€˙˙˙˙€ހ€€H€j€˙˙˙˙€ 1€1€˙˙˙˙‚@ ހ€ƒ Q€j€„Ő€= ˙˙˙˙…€1€1€˙˙˙˙†€ހ€‡H€j€˙˙˙˙ˆ€ 1€1€˙˙˙˙‰@ ހ€Š Q€j€‹Ő€O ˙˙˙˙Œ€1€1€˙˙˙˙€ހ€ŽH€j€˙˙˙˙€ 1€1€˙˙˙˙@ ހ€‘ Q€j€’Ő€a ˙˙˙˙“€1€1€˙˙˙˙”€ހ€•H€j€˙˙˙˙–€ 1€1€˙˙˙˙—@ ހ€˜ Q€j€™Ő€s ˙˙˙˙š€1€1€˙˙˙˙›€ހ€œH€j€˙˙˙˙€ 1€1€˙˙˙˙ž@ ހ€Ÿ Q€j€ H€… ˙˙˙˙Ą€1€1€˙˙˙˙˘@ހ€ŁQ€j€¤H€Ÿ ˙˙˙˙Ľ€1€1€˙˙˙˙Ś@ހ€§Q€j€¨Ś€ą ŠL€Î ŞL€â ŤShaderPPtrm_FileIDm_PathIDSerializedShaderm_ParsedFormSerializedPropertiesm_PropInfom_PropsSerializedPropertym_Descriptionm_Attributesm_Flagsm_DefValue[0]m_DefValue[1]m_DefValue[2]m_DefValue[3]SerializedTexturePropertym_DefTexturem_DefaultNamem_TexDimm_SubShadersSerializedSubShaderm_PassesSerializedPassm_NameIndicesSerializedShaderStatem_StateSerializedShaderRTBlendStatertBlend0SerializedShaderFloatValuesrcBlendvalnamedestBlendsrcBlendAlphadestBlendAlphablendOpblendOpAlphacolMaskrtBlend1rtBlend2rtBlend3rtBlend4rtBlend5rtBlend6rtBlend7rtSeparateBlendzTestzWritecullingoffsetFactoroffsetUnitsalphaToMaskSerializedStencilOpstencilOppassfailzFailcompstencilOpFrontstencilOpBackstencilReadMaskstencilWriteMaskstencilReffogStartfogEndfogDensitySerializedShaderVectorValuefogColorxyzwfogModegpuProgramIDSerializedTagMapm_Tagstagsm_LODlightingm_ProgramMaskSerializedProgramprogVertexm_SubProgramsSerializedSubProgramm_BlobIndexParserBindChannelsm_ChannelsShaderBindChannelsourcetargetm_SourceMapm_KeywordIndicesm_ShaderHardwareTierm_GpuProgramTypem_VectorParamsVectorParameterm_NameIndexm_ArraySizem_Dimm_MatrixParamsMatrixParameterm_RowCountm_TextureParamsTextureParameterm_SamplerIndexm_BufferParamsBufferBindingm_ConstantBuffersConstantBufferm_Sizem_ConstantBufferBindingsm_UAVParamsUAVParameterm_OriginalIndexprogFragmentprogGeometryprogHullprogDomainm_HasInstancingVariantm_UseNamem_TextureNamem_CustomEditorNamem_FallbackNamem_DependenciesSerializedShaderDependencyfromtom_DisableNoSubshadersMessageplatformsoffsetscompressedLengthsdecompressedLengthscompressedBlobPPtrm_ShaderIsBakedm_DefaultTexturesShaderCompilationInfom_CompileInfom_SnippetsShaderSnippetm_Codem_AssetPathm_PlatformMaskm_HardwareTierVariantsMaskm_StartLinem_TypesMaskHash128m_IncludesHashbytes[0]bytes[1]bytes[2]bytes[3]bytes[4]bytes[5]bytes[6]bytes[7]bytes[8]bytes[9]bytes[10]bytes[11]bytes[12]bytes[13]bytes[14]bytes[15]m_FromOtherm_Languagem_VariantsUser0m_VariantsUser1m_VariantsUser2m_VariantsUser3m_VariantsUser4m_VariantsUser5m_VariantsBuiltin0m_VariantsBuiltin1m_VariantsBuiltin2m_VariantsBuiltin3m_VariantsBuiltin4m_VariantsBuiltin5m_Targetm_TargetVariants0m_TargetVariants1m_TargetVariants2m_TargetVariants3m_TargetVariants4m_TargetVariants5m_NonStrippedUserKeywordsm_BuiltinKeywordsm_MeshComponentsFromSnippetsm_HasSurfaceShadersm_HasFixedFunctionShaders¸¸0>IčJ4 ű^Tř›A_œ‰ľJ-^Assets/Standard Assets/Effects/CinematicEffects(BETA)/DepthOfField/Shaders/DepthOfField.shader>´@V_MainTex-black _SecondTex-black _ThirdTex-black€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor,ů€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorÇ €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor¤¤€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorŇ­€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor‚ň€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor$0€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor$€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor$€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorrt€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor—B €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorîŽ €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorň €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColoróK €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColormş€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor|ý€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorżŠ€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorˆ€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorţ €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorŚä€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor[Ł€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorŇ€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorŒŻ€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor™÷€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorFč€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorqˆ€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorF€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColorÄQ€? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA €? €? pA A A A A C C unity_FogStart unity_FogEndunity_FogDensity unity_FogColor; Hidden/DepthOfField/DepthOfField,ů¨Z#line 716 "" #ifdef DUMMY_PREPROCESSOR_TO_WORK_AROUND_HLSL_COMPILER_LINE_HANDLING #endif #include "HLSLSupport.cginc" #include "UnityShaderVariables.cginc" #line 12 #pragma target 3.0 #pragma fragmentoption ARB_precision_hint_fastest #include "UnityCG.cginc" sampler2D _MainTex; sampler2D _SecondTex; sampler2D _ThirdTex; sampler2D _CameraDepthTexture; uniform half4 _MainTex_TexelSize; uniform half4 _BlurCoe; uniform half4 _BlurParams; uniform half4 _BoostParams; uniform half4 _Convolved_TexelSize; uniform float4 _Offsets; uniform half4 _MainTex_ST; uniform half4 _SecondTex_ST; uniform half4 _ThirdTex_ST; /////////////////////////////////////////////////////////////////////////////// // Verter Shaders and declaration /////////////////////////////////////////////////////////////////////////////// struct v2f { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; float2 uv1 : TEXCOORD1; }; struct v2fDepth { half4 pos : SV_POSITION; half2 uv : TEXCOORD0; }; struct v2fBlur { float4 pos : SV_POSITION; float2 uv : TEXCOORD0; float4 uv01 : TEXCOORD1; float4 uv23 : TEXCOORD2; float4 uv45 : TEXCOORD3; float4 uv67 : TEXCOORD4; float4 uv89 : TEXCOORD5; }; v2fDepth vert(appdata_img v) { v2fDepth o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.texcoord.xy; #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) o.uv.y = 1-o.uv.y; #endif return o; } v2fDepth vertNoFlip(appdata_img v) { v2fDepth o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv = v.texcoord.xy; return o; } v2f vert_d( appdata_img v ) { v2f o; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.uv1.xy = v.texcoord.xy; o.uv.xy = v.texcoord.xy; #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) o.uv.y = 1-o.uv.y; #endif return o; } v2f vertFlip( appdata_img v ) { v2f o; o.pos = mul (UNITY_MATRIX_MVP, v.vertex); o.uv1.xy = v.texcoord.xy; o.uv.xy = v.texcoord.xy; #if UNITY_UV_STARTS_AT_TOP if (_MainTex_TexelSize.y < 0) o.uv.y = 1-o.uv.y; if (_MainTex_TexelSize.y < 0) o.uv1.y = 1-o.uv1.y; #endif return o; } v2fBlur vertBlurPlusMinus (appdata_img v) { v2fBlur o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); o.uv.xy = v.texcoord.xy; o.uv01 = v.texcoord.xyxy + _Offsets.xyxy * float4(1,1, -1,-1) * _MainTex_TexelSize.xyxy / 6.0; o.uv23 = v.texcoord.xyxy + _Offsets.xyxy * float4(2,2, -2,-2) * _MainTex_TexelSize.xyxy / 6.0; o.uv45 = v.texcoord.xyxy + _Offsets.xyxy * float4(3,3, -3,-3) * _MainTex_TexelSize.xyxy / 6.0; o.uv67 = v.texcoord.xyxy + _Offsets.xyxy * float4(4,4, -4,-4) * _MainTex_TexelSize.xyxy / 6.0; o.uv89 = v.texcoord.xyxy + _Offsets.xyxy * float4(5,5, -5,-5) * _MainTex_TexelSize.xyxy / 6.0; return o; } /////////////////////////////////////////////////////////////////////////////// // Helpers /////////////////////////////////////////////////////////////////////////////// inline half3 getBoostAmount(half4 colorAndCoc) { half boost = colorAndCoc.a * (colorAndCoc.a < 0.0f ?_BoostParams.x:_BoostParams.y); half luma = dot(colorAndCoc.rgb, half3(0.3h, 0.59h, 0.11h)); return luma < _BoostParams.z ? half3(0.0h, 0.0h, 0.0h):colorAndCoc.rgb * boost.rrr; } inline half GetCocFromDepth(half2 uv, bool useExplicit) { half d = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture, uv); d = Linear01Depth (d); if (useExplicit) { half coc = d < _BlurCoe.z ? clamp((_BlurParams.x * d + _BlurParams.y), -1.0f, 0.0f):clamp((_BlurParams.z * d + _BlurParams.w), 0.0f, 1.0f); return coc; } else { half aperture = _BlurParams.x; half focalLength = _BlurParams.y; half focusDistance01 = _BlurParams.z; half focusRange01 = _BlurParams.w; half coc = aperture * abs(d - focusDistance01) / (d + 1e-5f) - focusRange01; coc = (d < focusDistance01 ? -1.0h:1.0h) * clamp(coc, 0.0f, 1.0f); return coc; } } /////////////////////////////////////////////////////////////////////////////// // Directional (hexagonal/octogonal) bokeh /////////////////////////////////////////////////////////////////////////////// #define SAMPLE_NUM_L 6 #define SAMPLE_NUM_M 11 #define SAMPLE_NUM_H 16 half4 shapeDirectionalBlur(half2 uv, bool mergePass, int numSample, bool sampleDilatedFG) { half4 centerTap = tex2Dlod (_MainTex, float4(uv,0,0)); half fgCoc = centerTap.a; half fgBlendFromPreviousPass = centerTap.a * _Offsets.z; if (sampleDilatedFG) { half2 cocs = tex2Dlod(_SecondTex, half4(uv,0,0)).rg; fgCoc = min(cocs.r, cocs.g); centerTap.a = cocs.g; } half bgRadius = smoothstep(0.0h, 0.85h, centerTap.a) * _BlurCoe.y; half fgRadius = smoothstep(0.0h, 0.85h, -fgCoc) * _BlurCoe.x; half radius = max(bgRadius, fgRadius); if (radius < 1e-2f ) { return half4(centerTap.rgb, (sampleDilatedFG||mergePass)?fgBlendFromPreviousPass:centerTap.a); } half radOtherFgRad = radius/(fgRadius + 1e-2h); half radOtherBgRad = radius/(bgRadius + 1e-2h); half2 range = radius * _MainTex_TexelSize.xy; half fgWeight = 0.001h; half bgWeight = 0.001h; half3 fgSum = half3(0,0,0); half3 bgSum = half3(0,0,0); for (int k = 0; k < numSample; k++) { half t = (half)k / half(numSample-1); half2 kVal = lerp(_Offsets.xy, -_Offsets.xy, t); half2 offset = kVal * range; half2 texCoord = uv + offset; half4 sample0 = tex2Dlod(_MainTex, half4(texCoord,0,0)); if (sampleDilatedFG) { sample0.a = tex2Dlod(_SecondTex, half4(texCoord,0,0)).g; } half dist = abs(2.0h * t - 1); half distanceFactor = saturate(-0.5f * abs(sample0.a - centerTap.a) * dist + 1.0f); half isNear = max(0.0h, -sample0.a); half isFar = max(0.0h, sample0.a) * distanceFactor; isNear *= 1- smoothstep(1.0h, 2.0h, dist * radOtherFgRad); isFar *= 1- smoothstep(1.0h, 2.0h, dist * radOtherBgRad); fgWeight += isNear; fgSum += sample0.rgb * isNear; bgWeight += isFar; bgSum += sample0.rgb * isFar; } half3 fgColor = fgSum / (fgWeight + 0.0001h); half3 bgColor = bgSum / (bgWeight + 0.0001h); half bgBlend = saturate (2.0h * bgWeight / numSample); half fgBlend = saturate (2.0h * fgWeight / numSample); half3 finalBg = lerp(centerTap.rgb, bgColor, bgBlend); half3 finalColor = lerp(finalBg, fgColor, max(max(0.0h , -centerTap.a) , fgBlend)); if (mergePass) { finalColor = min(finalColor, tex2Dlod(_ThirdTex, half4(uv,0,0)).rgb); } finalColor = lerp(centerTap.rgb, finalColor, saturate(bgBlend+fgBlend)); fgBlend = max(fgBlendFromPreviousPass, fgBlend); return half4(finalColor, (sampleDilatedFG||mergePass)?fgBlend:centerTap.a); } half4 fragShapeLowQuality(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, false, SAMPLE_NUM_L, false); } half4 fragShapeLowQualityDilateFg(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, false, SAMPLE_NUM_L, true); } half4 fragShapeLowQualityMerge(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, true, SAMPLE_NUM_L, false); } half4 fragShapeLowQualityMergeDilateFg(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, true, SAMPLE_NUM_L, true); } half4 fragShapeMediumQuality(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, false, SAMPLE_NUM_M, false); } half4 fragShapeMediumQualityDilateFg(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, false, SAMPLE_NUM_M, true); } half4 fragShapeMediumQualityMerge(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, true, SAMPLE_NUM_M, false); } half4 fragShapeMediumQualityMergeDilateFg(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, true, SAMPLE_NUM_M, true); } half4 fragShapeHighQuality(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, false, SAMPLE_NUM_H, false); } half4 fragShapeHighQualityDilateFg(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, false, SAMPLE_NUM_H, true); } half4 fragShapeHighQualityMerge(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, true, SAMPLE_NUM_H, false); } half4 fragShapeHighQualityMergeDilateFg(v2fDepth i) : COLOR { return shapeDirectionalBlur(i.uv, true, SAMPLE_NUM_H, true); } /////////////////////////////////////////////////////////////////////////////// // Disk Bokeh /////////////////////////////////////////////////////////////////////////////// static const half3 DiscBokeh48[48] = { //48 tap regularly spaced circular kernel (x,y, length) //fill free to change the shape to try other bokehs style :) half3( 0.99144h, 0.13053h, 1.0h), half3( 0.92388h, 0.38268h, 1.0h), half3( 0.79335h, 0.60876h, 1.0h), half3( 0.60876h, 0.79335h, 1.0h), half3( 0.38268h, 0.92388h, 1.0h), half3( 0.13053h, 0.99144h, 1.0h), half3(-0.13053h, 0.99144h, 1.0h), half3(-0.38268h, 0.92388h, 1.0h), half3(-0.60876h, 0.79335h, 1.0h), half3(-0.79335h, 0.60876h, 1.0h), half3(-0.92388h, 0.38268h, 1.0h), half3(-0.99144h, 0.13053h, 1.0h), half3(-0.99144h,-0.13053h, 1.0h), half3(-0.92388h,-0.38268h, 1.0h), half3(-0.79335h,-0.60876h, 1.0h), half3(-0.60876h,-0.79335h, 1.0h), half3(-0.38268h,-0.92388h, 1.0h), half3(-0.13053h,-0.99144h, 1.0h), half3( 0.13053h,-0.99144h, 1.0h), half3( 0.38268h,-0.92388h, 1.0h), half3( 0.60876h,-0.79335h, 1.0h), half3( 0.79335h,-0.60876h, 1.0h), half3( 0.92388h,-0.38268h, 1.0h), half3( 0.99144h,-0.13053h, 1.0h), half3( 0.64732h, 0.12876h, 0.66h), half3( 0.54877h, 0.36668h, 0.66h), half3( 0.36668h, 0.54877h, 0.66h), half3( 0.12876h, 0.64732h, 0.66h), half3(-0.12876h, 0.64732h, 0.66h), half3(-0.36668h, 0.54877h, 0.66h), half3(-0.54877h, 0.36668h, 0.66h), half3(-0.64732h, 0.12876h, 0.66h), half3(-0.64732h,-0.12876h, 0.66h), half3(-0.54877h,-0.36668h, 0.66h), half3(-0.36668h,-0.54877h, 0.66h), half3(-0.12876h,-0.64732h, 0.66h), half3( 0.12876h,-0.64732h, 0.66h), half3( 0.36668h,-0.54877h, 0.66h), half3( 0.54877h,-0.36668h, 0.66h), half3( 0.64732h,-0.12876h, 0.66h), half3( 0.30488h, 0.12629h, 0.33h), half3( 0.12629h, 0.30488h, 0.33h), half3(-0.12629h, 0.30488h, 0.33h), half3(-0.30488h, 0.12629h, 0.33h), half3(-0.30488h,-0.12629h, 0.33h), half3(-0.12629h,-0.30488h, 0.33h), half3( 0.12629h,-0.30488h, 0.33h), half3( 0.30488h,-0.12629h, 0.33h) }; inline float4 circleCocBokeh(float2 uv, bool sampleDilatedFG, int increment) { half4 centerTap = tex2Dlod(_MainTex, half4(uv,0,0)); half fgCoc = centerTap.a; if (sampleDilatedFG) { fgCoc = min(tex2Dlod(_SecondTex, half4(uv,0,0)).r, fgCoc); } half bgRadius = 0.5h * smoothstep(0.0h, 0.85h, centerTap.a) * _BlurCoe.y; half fgRadius = 0.5h * smoothstep(0.0h, 0.85h, -fgCoc) * _BlurCoe.x; half radius = max(bgRadius, fgRadius); if (radius < 1e-2f ) { return half4(centerTap.rgb, 0); } half2 poissonScale = radius * _MainTex_TexelSize.xy; half fgWeight = max(0,-centerTap.a); half bgWeight = max(0, centerTap.a); half3 fgSum = centerTap.rgb * fgWeight; half3 bgSum = centerTap.rgb * bgWeight; half radOtherFgRad = radius/(fgRadius + 1e-2h); half radOtherBgRad = radius/(bgRadius + 1e-2h); for (int l = 0; l < 48; l+= increment) { half2 sampleUV = uv + DiscBokeh48[l].xy * poissonScale.xy; half4 sample0 = tex2Dlod(_MainTex, half4(sampleUV,0,0)); half isNear = max(0.0h, -sample0.a); half distanceFactor = saturate(-0.5f * abs(sample0.a - centerTap.a) * DiscBokeh48[l].z + 1.0f); half isFar = max(0.0h, sample0.a) * distanceFactor; isNear *= 1- smoothstep(1.0h, 2.0h, DiscBokeh48[l].z * radOtherFgRad); isFar *= 1- smoothstep(1.0h, 2.0h, DiscBokeh48[l].z * radOtherBgRad); fgWeight += isNear; fgSum += sample0.rgb * isNear; bgWeight += isFar; bgSum += sample0.rgb * isFar; } half3 fgColor = fgSum / (fgWeight + 0.0001h); half3 bgColor = bgSum / (bgWeight + 0.0001h); half bgBlend = saturate (2.0h * bgWeight / 49.0h); half fgBlend = saturate (2.0h * fgWeight / 49.0h); half3 finalBg = lerp(centerTap.rgb, bgColor, bgBlend); half3 finalColor = lerp(finalBg, fgColor, max(max(0.0h , -centerTap.a) , fgBlend)); half4 returnValue = half4(finalColor, fgBlend ); return returnValue; } float4 fragCircleBlurWithDilatedFg (v2fDepth i) : SV_Target { return circleCocBokeh(i.uv, true, 1); } float4 fragCircleBlur (v2fDepth i) : SV_Target { return circleCocBokeh(i.uv, false, 1); } float4 fragCircleBlurWithDilatedFgLowQuality (v2fDepth i) : SV_Target { return circleCocBokeh(i.uv, true, 2); } float4 fragCircleBlurLowQuality (v2fDepth i) : SV_Target { return circleCocBokeh(i.uv, false, 2); } /////////////////////////////////////////////////////////////////////////////// // Prefilter blur /////////////////////////////////////////////////////////////////////////////// #define DISC_PREFILTER_SAMPLE 9 static const half2 DiscPrefilter[DISC_PREFILTER_SAMPLE] = { half2(0.01288369f, 0.5416069f), half2(-0.9192798f, -0.09529364f), half2(0.7596578f, 0.1922738f), half2(-0.14132f, -0.2880242f), half2(-0.5249333f, 0.7777638f), half2(-0.5871695f, -0.7403569f), half2(0.3202196f, -0.6442268f), half2(0.8553214f, -0.3920982f), half2(0.5827708f, 0.7599297f) }; float4 fragCocPrefilter (v2fDepth i) : SV_Target { half4 centerTap = tex2Dlod(_MainTex, half4(i.uv.xy,0,0)); half radius = 0.33h * 0.5h * (centerTap.a < 0.0f ? -(centerTap.a * _BlurCoe.x):(centerTap.a * _BlurCoe.y)); half2 poissonScale = radius * _MainTex_TexelSize.xy; if (radius < 0.01h ) { return centerTap; } half sampleCount = 1; half3 sum = centerTap.rgb * 1; for (int l = 0; l < DISC_PREFILTER_SAMPLE; l++) { half2 sampleUV = i.uv + DiscPrefilter[l].xy * poissonScale.xy; half4 sample0 = tex2Dlod(_MainTex, half4(sampleUV.xy,0,0)); half weight = max(sample0.a * centerTap.a,0.0h); sum += sample0.rgb * weight; sampleCount += weight; } half4 returnValue = half4(sum / sampleCount, centerTap.a); return returnValue; } /////////////////////////////////////////////////////////////////////////////// // Final merge and upsample /////////////////////////////////////////////////////////////////////////////// float4 upSampleConvolved(half2 uv, bool useBicubic) { if (useBicubic) { //bicubic upsampling (B-spline) half2 convolvedTexelPos = uv * _Convolved_TexelSize.xy; half2 convolvedTexelCenter = floor( convolvedTexelPos - 0.5h ) + 0.5h; half2 f = convolvedTexelPos - convolvedTexelCenter; half2 f2 = f * f; half2 f3 = f * f2; half2 w0 = -0.166h * f3 + 0.5h * f2 - 0.5h * f + 0.166h; half2 w1 = 0.5h * f3 - f2 + 0.666h; half2 w3 = 0.166h * f3; half2 w2 = 1.0h - w0 - w1 - w3; half2 s0 = w0 + w1; half2 s1 = w2 + w3; half2 f0 = w1 / s0; half2 f1 = w3 / s1; half2 t0 = _Convolved_TexelSize.zw * (convolvedTexelCenter - 1.0h + f0); half2 t1 = _Convolved_TexelSize.zw * (convolvedTexelCenter + 1.0h + f1); return tex2Dlod(_SecondTex, half4(t0.x, t0.y, 0, 0)) * s0.x * s0.y + tex2Dlod(_SecondTex, half4(t1.x, t0.y, 0, 0)) * s1.x * s0.y + tex2Dlod(_SecondTex, half4(t0.x, t1.y, 0, 0)) * s0.x * s1.y + tex2Dlod(_SecondTex, half4(t1.x, t1.y, 0, 0)) * s1.x * s1.y; } else { return tex2Dlod(_SecondTex, half4(uv,0,0)); } } float4 circleCocMerge (half2 uv, bool useExplicit, bool useBicubic) { half4 convolvedTap = upSampleConvolved(uv, useBicubic); half4 sourceTap = tex2Dlod(_MainTex, half4(uv,0,0)); half coc = GetCocFromDepth(uv, useExplicit); sourceTap.rgb += getBoostAmount(half4(sourceTap.rgb, coc)); coc = (coc * _BlurCoe.y > 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA) 1.0h )?coc:0.0h; half blendValue = smoothstep(0.0, 0.33h, max(coc, convolvedTap.a)); half3 returnValue = lerp(sourceTap.rgb, convolvedTap.rgb, blendValue); return (blendValue < 1e-2f) ? sourceTap : half4(returnValue.rgb, sourceTap.a); } float4 fragMergeBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, true); } float4 fragMergeExplicitBicubic (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, true); } float4 fragMerge (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, false, false); } float4 fragMergeExplicit (v2fDepth i) : SV_Target { return circleCocMerge(i.uv, true, false); } /////////////////////////////////////////////////////////////////////////////// // Downsampling and COC computation /////////////////////////////////////////////////////////////////////////////// half4 captureCoc(half2 uvColor, half2 uvDepth, bool useExplicit) { half4 color = tex2Dlod (_MainTex, half4(uvColor, 0, 0 )); //TODO should use gather4 on supported platform! //TODO do only 1 tap on high resolution mode half cocA = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,+0.25f), useExplicit); half cocB = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(+0.25f,-0.25f), useExplicit); half cocC = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,+0.25f), useExplicit); half cocD = GetCocFromDepth(uvDepth + _MainTex_TexelSize.xy * half2(-0.25f,-0.25f), useExplicit); half cocAB = (abs(cocA)