ec8106fe-05bf-4e94-943c-e0d3b7bb5e45.json 73 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564
  1. {
  2. "__type__": "cc.EffectAsset",
  3. "_name": "pipeline/post-process",
  4. "_objFlags": 0,
  5. "__editorExtras__": {},
  6. "_native": "",
  7. "techniques": [
  8. {
  9. "passes": [
  10. {
  11. "pass": "post-process",
  12. "rasterizerState": {
  13. "cullMode": 0
  14. },
  15. "blendState": {
  16. "targets": [
  17. {
  18. "blend": true,
  19. "blendSrc": 2,
  20. "blendDst": 4,
  21. "blendSrcAlpha": 2,
  22. "blendDstAlpha": 4
  23. }
  24. ]
  25. },
  26. "program": "pipeline/post-process|post-process-vs|post-process-fs",
  27. "depthStencilState": {
  28. "depthTest": false,
  29. "depthWrite": false
  30. }
  31. }
  32. ]
  33. }
  34. ],
  35. "shaders": [
  36. {
  37. "blocks": [],
  38. "samplerTextures": [],
  39. "samplers": [],
  40. "textures": [],
  41. "buffers": [],
  42. "images": [],
  43. "subpassInputs": [],
  44. "attributes": [
  45. {
  46. "name": "a_position",
  47. "defines": [],
  48. "format": 32,
  49. "location": 0
  50. },
  51. {
  52. "name": "a_normal",
  53. "defines": [],
  54. "format": 32,
  55. "location": 1
  56. },
  57. {
  58. "name": "a_texCoord",
  59. "defines": [],
  60. "format": 21,
  61. "location": 2
  62. },
  63. {
  64. "name": "a_tangent",
  65. "defines": [],
  66. "format": 44,
  67. "location": 3
  68. },
  69. {
  70. "name": "a_joints",
  71. "defines": [
  72. "CC_USE_SKINNING"
  73. ],
  74. "location": 4
  75. },
  76. {
  77. "name": "a_weights",
  78. "defines": [
  79. "CC_USE_SKINNING"
  80. ],
  81. "format": 44,
  82. "location": 5
  83. },
  84. {
  85. "name": "a_jointAnimInfo",
  86. "defines": [
  87. "USE_INSTANCING",
  88. "CC_USE_BAKED_ANIMATION"
  89. ],
  90. "format": 44,
  91. "isInstanced": true,
  92. "location": 6
  93. },
  94. {
  95. "name": "a_matWorld0",
  96. "defines": [
  97. "USE_INSTANCING"
  98. ],
  99. "format": 44,
  100. "isInstanced": true,
  101. "location": 7
  102. },
  103. {
  104. "name": "a_matWorld1",
  105. "defines": [
  106. "USE_INSTANCING"
  107. ],
  108. "format": 44,
  109. "isInstanced": true,
  110. "location": 8
  111. },
  112. {
  113. "name": "a_matWorld2",
  114. "defines": [
  115. "USE_INSTANCING"
  116. ],
  117. "format": 44,
  118. "isInstanced": true,
  119. "location": 9
  120. },
  121. {
  122. "name": "a_lightingMapUVParam",
  123. "defines": [
  124. "USE_INSTANCING",
  125. "CC_USE_LIGHTMAP"
  126. ],
  127. "format": 44,
  128. "isInstanced": true,
  129. "location": 10
  130. },
  131. {
  132. "name": "a_localShadowBiasAndProbeId",
  133. "defines": [
  134. "USE_INSTANCING"
  135. ],
  136. "format": 44,
  137. "isInstanced": true,
  138. "location": 11
  139. },
  140. {
  141. "name": "a_reflectionProbeData",
  142. "defines": [
  143. "USE_INSTANCING",
  144. "CC_USE_REFLECTION_PROBE"
  145. ],
  146. "format": 44,
  147. "isInstanced": true,
  148. "location": 12
  149. },
  150. {
  151. "name": "a_sh_linear_const_r",
  152. "defines": [
  153. "USE_INSTANCING",
  154. "CC_USE_LIGHT_PROBE"
  155. ],
  156. "format": 44,
  157. "isInstanced": true,
  158. "location": 13
  159. },
  160. {
  161. "name": "a_sh_linear_const_g",
  162. "defines": [
  163. "USE_INSTANCING",
  164. "CC_USE_LIGHT_PROBE"
  165. ],
  166. "format": 44,
  167. "isInstanced": true,
  168. "location": 14
  169. },
  170. {
  171. "name": "a_sh_linear_const_b",
  172. "defines": [
  173. "USE_INSTANCING",
  174. "CC_USE_LIGHT_PROBE"
  175. ],
  176. "format": 44,
  177. "isInstanced": true,
  178. "location": 15
  179. },
  180. {
  181. "name": "a_vertexId",
  182. "defines": [
  183. "CC_USE_MORPH"
  184. ],
  185. "format": 11,
  186. "location": 16
  187. }
  188. ],
  189. "varyings": [
  190. {
  191. "name": "v_uv",
  192. "type": 14,
  193. "count": 1,
  194. "defines": [],
  195. "stageFlags": 17,
  196. "location": 0
  197. }
  198. ],
  199. "fragColors": [
  200. {
  201. "name": "fragColor",
  202. "typename": "vec4",
  203. "type": 16,
  204. "count": 1,
  205. "defines": [],
  206. "stageFlags": 16,
  207. "location": 0
  208. }
  209. ],
  210. "descriptors": [
  211. {
  212. "rate": 0,
  213. "blocks": [],
  214. "samplerTextures": [],
  215. "samplers": [],
  216. "textures": [],
  217. "buffers": [],
  218. "images": [],
  219. "subpassInputs": []
  220. },
  221. {
  222. "rate": 1,
  223. "blocks": [],
  224. "samplerTextures": [],
  225. "samplers": [],
  226. "textures": [],
  227. "buffers": [],
  228. "images": [],
  229. "subpassInputs": []
  230. },
  231. {
  232. "rate": 2,
  233. "blocks": [],
  234. "samplerTextures": [],
  235. "samplers": [],
  236. "textures": [],
  237. "buffers": [],
  238. "images": [],
  239. "subpassInputs": []
  240. },
  241. {
  242. "rate": 3,
  243. "blocks": [
  244. {
  245. "tags": {
  246. "builtin": "global"
  247. },
  248. "name": "CCGlobal",
  249. "members": [
  250. {
  251. "name": "cc_time",
  252. "typename": "vec4",
  253. "type": 16,
  254. "count": 1,
  255. "precision": "highp "
  256. },
  257. {
  258. "name": "cc_screenSize",
  259. "typename": "vec4",
  260. "type": 16,
  261. "count": 1,
  262. "precision": "mediump "
  263. },
  264. {
  265. "name": "cc_nativeSize",
  266. "typename": "vec4",
  267. "type": 16,
  268. "count": 1,
  269. "precision": "mediump "
  270. },
  271. {
  272. "name": "cc_probeInfo",
  273. "typename": "vec4",
  274. "type": 16,
  275. "count": 1,
  276. "precision": "mediump "
  277. },
  278. {
  279. "name": "cc_debug_view_mode",
  280. "typename": "vec4",
  281. "type": 16,
  282. "count": 1,
  283. "precision": "mediump "
  284. }
  285. ],
  286. "defines": [],
  287. "stageFlags": 17
  288. },
  289. {
  290. "tags": {
  291. "builtin": "global"
  292. },
  293. "name": "CCCamera",
  294. "members": [
  295. {
  296. "name": "cc_matView",
  297. "typename": "mat4",
  298. "type": 25,
  299. "count": 1,
  300. "precision": "highp "
  301. },
  302. {
  303. "name": "cc_matViewInv",
  304. "typename": "mat4",
  305. "type": 25,
  306. "count": 1,
  307. "precision": "highp "
  308. },
  309. {
  310. "name": "cc_matProj",
  311. "typename": "mat4",
  312. "type": 25,
  313. "count": 1,
  314. "precision": "highp "
  315. },
  316. {
  317. "name": "cc_matProjInv",
  318. "typename": "mat4",
  319. "type": 25,
  320. "count": 1,
  321. "precision": "highp "
  322. },
  323. {
  324. "name": "cc_matViewProj",
  325. "typename": "mat4",
  326. "type": 25,
  327. "count": 1,
  328. "precision": "highp "
  329. },
  330. {
  331. "name": "cc_matViewProjInv",
  332. "typename": "mat4",
  333. "type": 25,
  334. "count": 1,
  335. "precision": "highp "
  336. },
  337. {
  338. "name": "cc_cameraPos",
  339. "typename": "vec4",
  340. "type": 16,
  341. "count": 1,
  342. "precision": "highp "
  343. },
  344. {
  345. "name": "cc_surfaceTransform",
  346. "typename": "vec4",
  347. "type": 16,
  348. "count": 1,
  349. "precision": "mediump "
  350. },
  351. {
  352. "name": "cc_screenScale",
  353. "typename": "vec4",
  354. "type": 16,
  355. "count": 1,
  356. "precision": "mediump "
  357. },
  358. {
  359. "name": "cc_exposure",
  360. "typename": "vec4",
  361. "type": 16,
  362. "count": 1,
  363. "precision": "mediump "
  364. },
  365. {
  366. "name": "cc_mainLitDir",
  367. "typename": "vec4",
  368. "type": 16,
  369. "count": 1,
  370. "precision": "mediump "
  371. },
  372. {
  373. "name": "cc_mainLitColor",
  374. "typename": "vec4",
  375. "type": 16,
  376. "count": 1,
  377. "precision": "mediump "
  378. },
  379. {
  380. "name": "cc_ambientSky",
  381. "typename": "vec4",
  382. "type": 16,
  383. "count": 1,
  384. "precision": "mediump "
  385. },
  386. {
  387. "name": "cc_ambientGround",
  388. "typename": "vec4",
  389. "type": 16,
  390. "count": 1,
  391. "precision": "mediump "
  392. },
  393. {
  394. "name": "cc_fogColor",
  395. "typename": "vec4",
  396. "type": 16,
  397. "count": 1,
  398. "precision": "mediump "
  399. },
  400. {
  401. "name": "cc_fogBase",
  402. "typename": "vec4",
  403. "type": 16,
  404. "count": 1,
  405. "precision": "mediump "
  406. },
  407. {
  408. "name": "cc_fogAdd",
  409. "typename": "vec4",
  410. "type": 16,
  411. "count": 1,
  412. "precision": "mediump "
  413. },
  414. {
  415. "name": "cc_nearFar",
  416. "typename": "vec4",
  417. "type": 16,
  418. "count": 1,
  419. "precision": "mediump "
  420. },
  421. {
  422. "name": "cc_viewPort",
  423. "typename": "vec4",
  424. "type": 16,
  425. "count": 1,
  426. "precision": "mediump "
  427. }
  428. ],
  429. "defines": [],
  430. "stageFlags": 17
  431. }
  432. ],
  433. "samplerTextures": [
  434. {
  435. "name": "outputResultMap",
  436. "type": 28,
  437. "count": 1,
  438. "defines": [],
  439. "stageFlags": 16,
  440. "binding": 0
  441. }
  442. ],
  443. "samplers": [],
  444. "textures": [],
  445. "buffers": [],
  446. "images": [],
  447. "subpassInputs": []
  448. }
  449. ],
  450. "hash": 3172169360,
  451. "glsl4": {
  452. "vert": "\nprecision highp float;\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\n#define LIGHT_MAP_TYPE_DISABLED 0\n#define LIGHT_MAP_TYPE_ALL_IN_ONE 1\n#define LIGHT_MAP_TYPE_INDIRECT_OCCLUSION 2\n#define REFLECTION_PROBE_TYPE_NONE 0\n#define REFLECTION_PROBE_TYPE_CUBE 1\n#define REFLECTION_PROBE_TYPE_PLANAR 2\n#define REFLECTION_PROBE_TYPE_BLEND 3\n#define REFLECTION_PROBE_TYPE_BLEND_AND_SKYBOX 4\n#define LIGHT_TYPE_DIRECTIONAL 0.0\n#define LIGHT_TYPE_SPHERE 1.0\n#define LIGHT_TYPE_SPOT 2.0\n#define LIGHT_TYPE_POINT 3.0\n#define LIGHT_TYPE_RANGED_DIRECTIONAL 4.0\n#define IS_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_DIRECTIONAL)) < EPSILON_LOWP)\n#define IS_SPHERE_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPHERE)) < EPSILON_LOWP)\n#define IS_SPOT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPOT)) < EPSILON_LOWP)\n#define IS_POINT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_POINT)) < EPSILON_LOWP)\n#define IS_RANGED_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_RANGED_DIRECTIONAL)) < EPSILON_LOWP)\n#define TONE_MAPPING_ACES 0\n#define TONE_MAPPING_LINEAR 1\n#define SURFACES_MAX_TRANSMIT_DEPTH_VALUE 999999.0\n#ifndef CC_SURFACES_DEBUG_VIEW_SINGLE\n #define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#endif\n#ifndef CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n #define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#endif\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nlayout(location = 0) in vec3 a_position;\nlayout(location = 1) in vec3 a_normal;\nlayout(location = 2) in vec2 a_texCoord;\nlayout(location = 3) in vec4 a_tangent;\n#if CC_USE_SKINNING\n layout(location = 4) in u32vec4 a_joints;\n layout(location = 5) in vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n layout(location = 6) in highp vec4 a_jointAnimInfo;\n #endif\n layout(location = 7) in vec4 a_matWorld0;\n layout(location = 8) in vec4 a_matWorld1;\n layout(location = 9) in vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n layout(location = 10) in vec4 a_lightingMapUVParam;\n #endif\n #if CC_USE_REFLECTION_PROBE || CC_RECEIVE_SHADOW\n #if CC_RECEIVE_SHADOW\n #endif\n layout(location = 11) in vec4 a_localShadowBiasAndProbeId;\n #endif\n #if CC_USE_REFLECTION_PROBE\n layout(location = 12) in vec4 a_reflectionProbeData;\n #endif\n #if CC_USE_LIGHT_PROBE\n layout(location = 13) in vec4 a_sh_linear_const_r;\n layout(location = 14) in vec4 a_sh_linear_const_g;\n layout(location = 15) in vec4 a_sh_linear_const_b;\n #endif\n#endif\n#if CC_USE_MORPH\n#endif\nlayout(set = 0, binding = 0) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_probeInfo;\n mediump vec4 cc_debug_view_mode;\n};\nlayout(set = 0, binding = 1) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n};\nlayout(location = 0) out vec2 v_uv;\nvoid main () {\n StandardVertInput In;\n In.position = vec4(a_position, 1.0);\n In.normal = a_normal;\n In.tangent = a_tangent;\n In.position.xy = cc_cameraPos.w == 0.0 ? vec2(In.position.xy.x, -In.position.xy.y) : In.position.xy;\n gl_Position = In.position;\n v_uv = a_texCoord;\n}",
  453. "frag": "\n precision highp float;\n layout(set = 0, binding = 0) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_probeInfo;\n mediump vec4 cc_debug_view_mode;\n };\n layout(set = 0, binding = 1) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n };\n #if ANTIALIAS_TYPE == 1\n vec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture(tex, v_rgbSE).xyz;\n vec4 texColor = texture(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * (1.0 / 8.0)), (1.0/ 128.0));\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(8.0, 8.0),\n max(vec2(-8.0, -8.0),\n dir * rcpDirMin)) * inverseVP;\n vec3 rgbA = 0.5 * (\n texture(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n }\n #endif\n #if ANTIALIAS_TYPE == 2\n vec4 fragTextureGrad (sampler2D tex, vec2 P, vec2 dPdx, vec2 dPdy) {\n return textureGrad(tex, P, dPdx, dPdy);\n }\n vec4 fragTextureGrad (samplerCube tex, vec3 P, vec3 dPdx, vec3 dPdy) {\n return textureGrad(tex, P, dPdx, dPdy);\n }\n #define FxaaTex sampler2D\n #define int2 vec2\n #define float2 vec2\n #define float3 vec3\n #define float4 vec4\n #define FxaaBool3 bvec3\n #define FxaaInt2 vec2\n #define FxaaFloat2 vec2\n #define FxaaFloat3 vec3\n #define FxaaFloat4 vec4\n #define FxaaBool2Float(a) mix(0.0, 1.0, (a))\n #define FxaaPow3(x, y) pow(x, y)\n #define FxaaSel3(f, t, b) mix((f), (t), (b))\n #define FxaaToFloat3(a) FxaaFloat3((a), (a), (a))\n float4 FxaaTexLod0(FxaaTex tex, float2 pos) {\n return texture(tex, pos.xy);\n }\n float4 FxaaTexGrad(FxaaTex tex, float2 pos, float2 grad) {\n return fragTextureGrad(tex, pos.xy, grad, grad);\n }\n float4 FxaaTexOff(FxaaTex tex, float2 pos, int2 off, float2 rcpFrame) {\n return FxaaTexLod0(tex, pos.xy + vec2(off.x, off.y) * rcpFrame);\n }\n #define FXAA_SRGB_ROP 0\n #ifndef FXAA_PRESET\n #define FXAA_PRESET 3\n #endif\n #if (FXAA_PRESET == 0)\n #define FXAA_EDGE_THRESHOLD (1.0/4.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/12.0)\n #define FXAA_SEARCH_STEPS 2\n #define FXAA_SEARCH_ACCELERATION 4\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 1\n #define FXAA_SUBPIX_CAP (2.0/3.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 1)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/16.0)\n #define FXAA_SEARCH_STEPS 4\n #define FXAA_SEARCH_ACCELERATION 3\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 2)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 8\n #define FXAA_SEARCH_ACCELERATION 2\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 3)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 16\n #define FXAA_SEARCH_ACCELERATION 1\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 4)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 24\n #define FXAA_SEARCH_ACCELERATION 1\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 5)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 32\n #define FXAA_SEARCH_ACCELERATION 1\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #define FXAA_SUBPIX_TRIM_SCALE (1.0/(1.0 - FXAA_SUBPIX_TRIM))\n float FxaaLuma(float3 rgb) {\n return rgb.y * (0.587/0.299) + rgb.x; }\n float3 FxaaLerp3(float3 a, float3 b, float amountOfA) {\n return (FxaaToFloat3(-amountOfA) * b) +\n ((a * FxaaToFloat3(amountOfA)) + b); }\n float3 FxaaFilterReturn(float3 rgb) {\n #if FXAA_SRGB_ROP\n return FxaaSel3(\n rgb * FxaaToFloat3(1.0/12.92),\n FxaaPow3(\n rgb * FxaaToFloat3(1.0/1.055) + FxaaToFloat3(0.055/1.055),\n FxaaToFloat3(2.4)),\n rgb > FxaaToFloat3(0.04045));\n #else\n return rgb;\n #endif\n }\n float3 FxaaPixelShader(\n float2 pos,\n FxaaTex tex,\n float2 rcpFrame) {\n float3 rgbN = FxaaTexOff(tex, pos.xy, FxaaInt2( 0,-1), rcpFrame).xyz;\n float3 rgbW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1, 0), rcpFrame).xyz;\n float3 rgbM = FxaaTexOff(tex, pos.xy, FxaaInt2( 0, 0), rcpFrame).xyz;\n float3 rgbE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1, 0), rcpFrame).xyz;\n float3 rgbS = FxaaTexOff(tex, pos.xy, FxaaInt2( 0, 1), rcpFrame).xyz;\n float lumaN = FxaaLuma(rgbN);\n float lumaW = FxaaLuma(rgbW);\n float lumaM = FxaaLuma(rgbM);\n float lumaE = FxaaLuma(rgbE);\n float lumaS = FxaaLuma(rgbS);\n float rangeMin = min(lumaM, min(min(lumaN, lumaW), min(lumaS, lumaE)));\n float rangeMax = max(lumaM, max(max(lumaN, lumaW), max(lumaS, lumaE)));\n float range = rangeMax - rangeMin;\n #if FXAA_DEBUG\n float lumaO = lumaM / (1.0 + (0.587/0.299));\n #endif\n if(range < max(FXAA_EDGE_THRESHOLD_MIN, rangeMax * FXAA_EDGE_THRESHOLD)) {\n #if FXAA_DEBUG\n return FxaaFilterReturn(FxaaToFloat3(lumaO));\n #endif\n return FxaaFilterReturn(rgbM); }\n #if FXAA_SUBPIX > 0\n #if FXAA_SUBPIX_FASTER\n float3 rgbL = (rgbN + rgbW + rgbE + rgbS + rgbM) *\n FxaaToFloat3(1.0/5.0);\n #else\n float3 rgbL = rgbN + rgbW + rgbM + rgbE + rgbS;\n #endif\n #endif\n #if FXAA_SUBPIX != 0\n float lumaL = (lumaN + lumaW + lumaE + lumaS) * 0.25;\n float rangeL = abs(lumaL - lumaM);\n #endif\n #if FXAA_SUBPIX == 1\n float blendL = max(0.0,\n (rangeL / range) - FXAA_SUBPIX_TRIM) * FXAA_SUBPIX_TRIM_SCALE;\n blendL = min(FXAA_SUBPIX_CAP, blendL);\n #endif\n #if FXAA_SUBPIX == 2\n float blendL = rangeL / range;\n #endif\n float3 rgbNW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1,-1), rcpFrame).xyz;\n float3 rgbNE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1,-1), rcpFrame).xyz;\n float3 rgbSW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1, 1), rcpFrame).xyz;\n float3 rgbSE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1, 1), rcpFrame).xyz;\n #if (FXAA_SUBPIX_FASTER == 0) && (FXAA_SUBPIX > 0)\n rgbL += (rgbNW + rgbNE + rgbSW + rgbSE);\n rgbL *= FxaaToFloat3(1.0/9.0);\n #endif\n float lumaNW = FxaaLuma(rgbNW);\n float lumaNE = FxaaLuma(rgbNE);\n float lumaSW = FxaaLuma(rgbSW);\n float lumaSE = FxaaLuma(rgbSE);\n float edgeVert =\n abs((0.25 * lumaNW) + (-0.5 * lumaN) + (0.25 * lumaNE)) +\n abs((0.50 * lumaW ) + (-1.0 * lumaM) + (0.50 * lumaE )) +\n abs((0.25 * lumaSW) + (-0.5 * lumaS) + (0.25 * lumaSE));\n float edgeHorz =\n abs((0.25 * lumaNW) + (-0.5 * lumaW) + (0.25 * lumaSW)) +\n abs((0.50 * lumaN ) + (-1.0 * lumaM) + (0.50 * lumaS )) +\n abs((0.25 * lumaNE) + (-0.5 * lumaE) + (0.25 * lumaSE));\n bool horzSpan = edgeHorz >= edgeVert;\n float lengthSign = horzSpan ? -rcpFrame.y : -rcpFrame.x;\n if(!horzSpan) lumaN = lumaW;\n if(!horzSpan) lumaS = lumaE;\n float gradientN = abs(lumaN - lumaM);\n float gradientS = abs(lumaS - lumaM);\n lumaN = (lumaN + lumaM) * 0.5;\n lumaS = (lumaS + lumaM) * 0.5;\n bool pairN = gradientN >= gradientS;\n if(!pairN) lumaN = lumaS;\n if(!pairN) gradientN = gradientS;\n if(!pairN) lengthSign *= -1.0;\n float2 posN;\n posN.x = pos.x + (horzSpan ? 0.0 : lengthSign * 0.5);\n posN.y = pos.y + (horzSpan ? lengthSign * 0.5 : 0.0);\n gradientN *= FXAA_SEARCH_THRESHOLD;\n float2 posP = posN;\n float2 offNP = horzSpan ?\n FxaaFloat2(rcpFrame.x, 0.0) :\n FxaaFloat2(0.0, rcpFrame.y);\n float lumaEndN = lumaN;\n float lumaEndP = lumaN;\n bool doneN = false;\n bool doneP = false;\n #if FXAA_SEARCH_ACCELERATION == 1\n posN += offNP * FxaaFloat2(-1.0, -1.0);\n posP += offNP * FxaaFloat2( 1.0, 1.0);\n #endif\n #if FXAA_SEARCH_ACCELERATION == 2\n posN += offNP * FxaaFloat2(-1.5, -1.5);\n posP += offNP * FxaaFloat2( 1.5, 1.5);\n offNP *= FxaaFloat2(2.0, 2.0);\n #endif\n #if FXAA_SEARCH_ACCELERATION == 3\n posN += offNP * FxaaFloat2(-2.0, -2.0);\n posP += offNP * FxaaFloat2( 2.0, 2.0);\n offNP *= FxaaFloat2(3.0, 3.0);\n #endif\n #if FXAA_SEARCH_ACCELERATION == 4\n posN += offNP * FxaaFloat2(-2.5, -2.5);\n posP += offNP * FxaaFloat2( 2.5, 2.5);\n offNP *= FxaaFloat2(4.0, 4.0);\n #endif\n for(int i = 0; i < FXAA_SEARCH_STEPS; i++) {\n #if FXAA_SEARCH_ACCELERATION == 1\n if(!doneN) lumaEndN =\n FxaaLuma(FxaaTexLod0(tex, posN.xy).xyz);\n if(!doneP) lumaEndP =\n FxaaLuma(FxaaTexLod0(tex, posP.xy).xyz);\n #else\n if(!doneN) lumaEndN =\n FxaaLuma(FxaaTexGrad(tex, posN.xy, offNP).xyz);\n if(!doneP) lumaEndP =\n FxaaLuma(FxaaTexGrad(tex, posP.xy, offNP).xyz);\n #endif\n doneN = doneN || (abs(lumaEndN - lumaN) >= gradientN);\n doneP = doneP || (abs(lumaEndP - lumaN) >= gradientN);\n if(doneN && doneP) break;\n if(!doneN) posN -= offNP;\n if(!doneP) posP += offNP; }\n float dstN = horzSpan ? pos.x - posN.x : pos.y - posN.y;\n float dstP = horzSpan ? posP.x - pos.x : posP.y - pos.y;\n bool directionN = dstN < dstP;\n lumaEndN = directionN ? lumaEndN : lumaEndP;\n if(((lumaM - lumaN) < 0.0) == ((lumaEndN - lumaN) < 0.0))\n lengthSign = 0.0;\n float spanLength = (dstP + dstN);\n dstN = directionN ? dstN : dstP;\n float subPixelOffset = (0.5 + (dstN * (-1.0/spanLength))) * lengthSign;\n float3 rgbF = FxaaTexLod0(tex, FxaaFloat2(\n pos.x + (horzSpan ? 0.0 : subPixelOffset),\n pos.y + (horzSpan ? subPixelOffset : 0.0))).xyz;\n #if FXAA_SUBPIX == 0\n return FxaaFilterReturn(rgbF);\n #else\n return FxaaFilterReturn(FxaaLerp3(rgbL, rgbF, blendL));\n #endif\n }\n #endif\n layout(location = 0) in vec2 v_uv;\n layout(set = 1, binding = 0) uniform sampler2D outputResultMap;\n layout(location = 0) out vec4 fragColor;\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\nvoid main () {\n #if ANTIALIAS_TYPE == 1\n mediump vec2 v_rgbNW;\n mediump vec2 v_rgbNE;\n mediump vec2 v_rgbSW;\n mediump vec2 v_rgbSE;\n mediump vec2 v_rgbM;\n vec2 resolution = cc_screenSize.xy;\n vec2 fragCoord = v_uv * resolution;\n texcoords(fragCoord, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n fragColor = fxaa(outputResultMap, fragCoord, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n #elif ANTIALIAS_TYPE == 2\n vec3 color = FxaaPixelShader(v_uv, outputResultMap, 1.0 / cc_screenSize.xy);\n fragColor = vec4(color, texture(outputResultMap, v_uv).a);\n #else\n fragColor = texture(outputResultMap, v_uv);\n #endif\n }"
  454. },
  455. "glsl3": {
  456. "vert": "\nprecision highp float;\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\n#define LIGHT_MAP_TYPE_DISABLED 0\n#define LIGHT_MAP_TYPE_ALL_IN_ONE 1\n#define LIGHT_MAP_TYPE_INDIRECT_OCCLUSION 2\n#define REFLECTION_PROBE_TYPE_NONE 0\n#define REFLECTION_PROBE_TYPE_CUBE 1\n#define REFLECTION_PROBE_TYPE_PLANAR 2\n#define REFLECTION_PROBE_TYPE_BLEND 3\n#define REFLECTION_PROBE_TYPE_BLEND_AND_SKYBOX 4\n#define LIGHT_TYPE_DIRECTIONAL 0.0\n#define LIGHT_TYPE_SPHERE 1.0\n#define LIGHT_TYPE_SPOT 2.0\n#define LIGHT_TYPE_POINT 3.0\n#define LIGHT_TYPE_RANGED_DIRECTIONAL 4.0\n#define IS_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_DIRECTIONAL)) < EPSILON_LOWP)\n#define IS_SPHERE_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPHERE)) < EPSILON_LOWP)\n#define IS_SPOT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPOT)) < EPSILON_LOWP)\n#define IS_POINT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_POINT)) < EPSILON_LOWP)\n#define IS_RANGED_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_RANGED_DIRECTIONAL)) < EPSILON_LOWP)\n#define TONE_MAPPING_ACES 0\n#define TONE_MAPPING_LINEAR 1\n#define SURFACES_MAX_TRANSMIT_DEPTH_VALUE 999999.0\n#ifndef CC_SURFACES_DEBUG_VIEW_SINGLE\n #define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#endif\n#ifndef CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n #define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#endif\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nin vec3 a_position;\nin vec3 a_normal;\nin vec2 a_texCoord;\nin vec4 a_tangent;\n#if CC_USE_SKINNING\n in vec4 a_joints;\n in vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n in highp vec4 a_jointAnimInfo;\n #endif\n in vec4 a_matWorld0;\n in vec4 a_matWorld1;\n in vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n in vec4 a_lightingMapUVParam;\n #endif\n #if CC_USE_REFLECTION_PROBE || CC_RECEIVE_SHADOW\n #if CC_RECEIVE_SHADOW\n #endif\n in vec4 a_localShadowBiasAndProbeId;\n #endif\n #if CC_USE_REFLECTION_PROBE\n in vec4 a_reflectionProbeData;\n #endif\n #if CC_USE_LIGHT_PROBE\n in vec4 a_sh_linear_const_r;\n in vec4 a_sh_linear_const_g;\n in vec4 a_sh_linear_const_b;\n #endif\n#endif\n#if CC_USE_MORPH\n in float a_vertexId;\n#endif\nlayout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_probeInfo;\n mediump vec4 cc_debug_view_mode;\n};\nlayout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n};\nout vec2 v_uv;\nvoid main () {\n StandardVertInput In;\n In.position = vec4(a_position, 1.0);\n In.normal = a_normal;\n In.tangent = a_tangent;\n In.position.xy = cc_cameraPos.w == 0.0 ? vec2(In.position.xy.x, -In.position.xy.y) : In.position.xy;\n gl_Position = In.position;\n v_uv = a_texCoord;\n}",
  457. "frag": "\n precision highp float;\n layout(std140) uniform CCGlobal {\n highp vec4 cc_time;\n mediump vec4 cc_screenSize;\n mediump vec4 cc_nativeSize;\n mediump vec4 cc_probeInfo;\n mediump vec4 cc_debug_view_mode;\n };\n layout(std140) uniform CCCamera {\n highp mat4 cc_matView;\n highp mat4 cc_matViewInv;\n highp mat4 cc_matProj;\n highp mat4 cc_matProjInv;\n highp mat4 cc_matViewProj;\n highp mat4 cc_matViewProjInv;\n highp vec4 cc_cameraPos;\n mediump vec4 cc_surfaceTransform;\n mediump vec4 cc_screenScale;\n mediump vec4 cc_exposure;\n mediump vec4 cc_mainLitDir;\n mediump vec4 cc_mainLitColor;\n mediump vec4 cc_ambientSky;\n mediump vec4 cc_ambientGround;\n mediump vec4 cc_fogColor;\n mediump vec4 cc_fogBase;\n mediump vec4 cc_fogAdd;\n mediump vec4 cc_nearFar;\n mediump vec4 cc_viewPort;\n };\n #if ANTIALIAS_TYPE == 1\n vec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture(tex, v_rgbSE).xyz;\n vec4 texColor = texture(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * (1.0 / 8.0)), (1.0/ 128.0));\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(8.0, 8.0),\n max(vec2(-8.0, -8.0),\n dir * rcpDirMin)) * inverseVP;\n vec3 rgbA = 0.5 * (\n texture(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n }\n #endif\n #if ANTIALIAS_TYPE == 2\n vec4 fragTextureGrad (sampler2D tex, vec2 P, vec2 dPdx, vec2 dPdy) {\n return textureGrad(tex, P, dPdx, dPdy);\n }\n vec4 fragTextureGrad (samplerCube tex, vec3 P, vec3 dPdx, vec3 dPdy) {\n return textureGrad(tex, P, dPdx, dPdy);\n }\n #define FxaaTex sampler2D\n #define int2 vec2\n #define float2 vec2\n #define float3 vec3\n #define float4 vec4\n #define FxaaBool3 bvec3\n #define FxaaInt2 vec2\n #define FxaaFloat2 vec2\n #define FxaaFloat3 vec3\n #define FxaaFloat4 vec4\n #define FxaaBool2Float(a) mix(0.0, 1.0, (a))\n #define FxaaPow3(x, y) pow(x, y)\n #define FxaaSel3(f, t, b) mix((f), (t), (b))\n #define FxaaToFloat3(a) FxaaFloat3((a), (a), (a))\n float4 FxaaTexLod0(FxaaTex tex, float2 pos) {\n return texture(tex, pos.xy);\n }\n float4 FxaaTexGrad(FxaaTex tex, float2 pos, float2 grad) {\n return fragTextureGrad(tex, pos.xy, grad, grad);\n }\n float4 FxaaTexOff(FxaaTex tex, float2 pos, int2 off, float2 rcpFrame) {\n return FxaaTexLod0(tex, pos.xy + vec2(off.x, off.y) * rcpFrame);\n }\n #define FXAA_SRGB_ROP 0\n #ifndef FXAA_PRESET\n #define FXAA_PRESET 3\n #endif\n #if (FXAA_PRESET == 0)\n #define FXAA_EDGE_THRESHOLD (1.0/4.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/12.0)\n #define FXAA_SEARCH_STEPS 2\n #define FXAA_SEARCH_ACCELERATION 4\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 1\n #define FXAA_SUBPIX_CAP (2.0/3.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 1)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/16.0)\n #define FXAA_SEARCH_STEPS 4\n #define FXAA_SEARCH_ACCELERATION 3\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 2)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 8\n #define FXAA_SEARCH_ACCELERATION 2\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 3)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 16\n #define FXAA_SEARCH_ACCELERATION 1\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 4)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 24\n #define FXAA_SEARCH_ACCELERATION 1\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 5)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 32\n #define FXAA_SEARCH_ACCELERATION 1\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #define FXAA_SUBPIX_TRIM_SCALE (1.0/(1.0 - FXAA_SUBPIX_TRIM))\n float FxaaLuma(float3 rgb) {\n return rgb.y * (0.587/0.299) + rgb.x; }\n float3 FxaaLerp3(float3 a, float3 b, float amountOfA) {\n return (FxaaToFloat3(-amountOfA) * b) +\n ((a * FxaaToFloat3(amountOfA)) + b); }\n float3 FxaaFilterReturn(float3 rgb) {\n #if FXAA_SRGB_ROP\n return FxaaSel3(\n rgb * FxaaToFloat3(1.0/12.92),\n FxaaPow3(\n rgb * FxaaToFloat3(1.0/1.055) + FxaaToFloat3(0.055/1.055),\n FxaaToFloat3(2.4)),\n rgb > FxaaToFloat3(0.04045));\n #else\n return rgb;\n #endif\n }\n float3 FxaaPixelShader(\n float2 pos,\n FxaaTex tex,\n float2 rcpFrame) {\n float3 rgbN = FxaaTexOff(tex, pos.xy, FxaaInt2( 0,-1), rcpFrame).xyz;\n float3 rgbW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1, 0), rcpFrame).xyz;\n float3 rgbM = FxaaTexOff(tex, pos.xy, FxaaInt2( 0, 0), rcpFrame).xyz;\n float3 rgbE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1, 0), rcpFrame).xyz;\n float3 rgbS = FxaaTexOff(tex, pos.xy, FxaaInt2( 0, 1), rcpFrame).xyz;\n float lumaN = FxaaLuma(rgbN);\n float lumaW = FxaaLuma(rgbW);\n float lumaM = FxaaLuma(rgbM);\n float lumaE = FxaaLuma(rgbE);\n float lumaS = FxaaLuma(rgbS);\n float rangeMin = min(lumaM, min(min(lumaN, lumaW), min(lumaS, lumaE)));\n float rangeMax = max(lumaM, max(max(lumaN, lumaW), max(lumaS, lumaE)));\n float range = rangeMax - rangeMin;\n #if FXAA_DEBUG\n float lumaO = lumaM / (1.0 + (0.587/0.299));\n #endif\n if(range < max(FXAA_EDGE_THRESHOLD_MIN, rangeMax * FXAA_EDGE_THRESHOLD)) {\n #if FXAA_DEBUG\n return FxaaFilterReturn(FxaaToFloat3(lumaO));\n #endif\n return FxaaFilterReturn(rgbM); }\n #if FXAA_SUBPIX > 0\n #if FXAA_SUBPIX_FASTER\n float3 rgbL = (rgbN + rgbW + rgbE + rgbS + rgbM) *\n FxaaToFloat3(1.0/5.0);\n #else\n float3 rgbL = rgbN + rgbW + rgbM + rgbE + rgbS;\n #endif\n #endif\n #if FXAA_SUBPIX != 0\n float lumaL = (lumaN + lumaW + lumaE + lumaS) * 0.25;\n float rangeL = abs(lumaL - lumaM);\n #endif\n #if FXAA_SUBPIX == 1\n float blendL = max(0.0,\n (rangeL / range) - FXAA_SUBPIX_TRIM) * FXAA_SUBPIX_TRIM_SCALE;\n blendL = min(FXAA_SUBPIX_CAP, blendL);\n #endif\n #if FXAA_SUBPIX == 2\n float blendL = rangeL / range;\n #endif\n float3 rgbNW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1,-1), rcpFrame).xyz;\n float3 rgbNE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1,-1), rcpFrame).xyz;\n float3 rgbSW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1, 1), rcpFrame).xyz;\n float3 rgbSE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1, 1), rcpFrame).xyz;\n #if (FXAA_SUBPIX_FASTER == 0) && (FXAA_SUBPIX > 0)\n rgbL += (rgbNW + rgbNE + rgbSW + rgbSE);\n rgbL *= FxaaToFloat3(1.0/9.0);\n #endif\n float lumaNW = FxaaLuma(rgbNW);\n float lumaNE = FxaaLuma(rgbNE);\n float lumaSW = FxaaLuma(rgbSW);\n float lumaSE = FxaaLuma(rgbSE);\n float edgeVert =\n abs((0.25 * lumaNW) + (-0.5 * lumaN) + (0.25 * lumaNE)) +\n abs((0.50 * lumaW ) + (-1.0 * lumaM) + (0.50 * lumaE )) +\n abs((0.25 * lumaSW) + (-0.5 * lumaS) + (0.25 * lumaSE));\n float edgeHorz =\n abs((0.25 * lumaNW) + (-0.5 * lumaW) + (0.25 * lumaSW)) +\n abs((0.50 * lumaN ) + (-1.0 * lumaM) + (0.50 * lumaS )) +\n abs((0.25 * lumaNE) + (-0.5 * lumaE) + (0.25 * lumaSE));\n bool horzSpan = edgeHorz >= edgeVert;\n float lengthSign = horzSpan ? -rcpFrame.y : -rcpFrame.x;\n if(!horzSpan) lumaN = lumaW;\n if(!horzSpan) lumaS = lumaE;\n float gradientN = abs(lumaN - lumaM);\n float gradientS = abs(lumaS - lumaM);\n lumaN = (lumaN + lumaM) * 0.5;\n lumaS = (lumaS + lumaM) * 0.5;\n bool pairN = gradientN >= gradientS;\n if(!pairN) lumaN = lumaS;\n if(!pairN) gradientN = gradientS;\n if(!pairN) lengthSign *= -1.0;\n float2 posN;\n posN.x = pos.x + (horzSpan ? 0.0 : lengthSign * 0.5);\n posN.y = pos.y + (horzSpan ? lengthSign * 0.5 : 0.0);\n gradientN *= FXAA_SEARCH_THRESHOLD;\n float2 posP = posN;\n float2 offNP = horzSpan ?\n FxaaFloat2(rcpFrame.x, 0.0) :\n FxaaFloat2(0.0, rcpFrame.y);\n float lumaEndN = lumaN;\n float lumaEndP = lumaN;\n bool doneN = false;\n bool doneP = false;\n #if FXAA_SEARCH_ACCELERATION == 1\n posN += offNP * FxaaFloat2(-1.0, -1.0);\n posP += offNP * FxaaFloat2( 1.0, 1.0);\n #endif\n #if FXAA_SEARCH_ACCELERATION == 2\n posN += offNP * FxaaFloat2(-1.5, -1.5);\n posP += offNP * FxaaFloat2( 1.5, 1.5);\n offNP *= FxaaFloat2(2.0, 2.0);\n #endif\n #if FXAA_SEARCH_ACCELERATION == 3\n posN += offNP * FxaaFloat2(-2.0, -2.0);\n posP += offNP * FxaaFloat2( 2.0, 2.0);\n offNP *= FxaaFloat2(3.0, 3.0);\n #endif\n #if FXAA_SEARCH_ACCELERATION == 4\n posN += offNP * FxaaFloat2(-2.5, -2.5);\n posP += offNP * FxaaFloat2( 2.5, 2.5);\n offNP *= FxaaFloat2(4.0, 4.0);\n #endif\n for(int i = 0; i < FXAA_SEARCH_STEPS; i++) {\n #if FXAA_SEARCH_ACCELERATION == 1\n if(!doneN) lumaEndN =\n FxaaLuma(FxaaTexLod0(tex, posN.xy).xyz);\n if(!doneP) lumaEndP =\n FxaaLuma(FxaaTexLod0(tex, posP.xy).xyz);\n #else\n if(!doneN) lumaEndN =\n FxaaLuma(FxaaTexGrad(tex, posN.xy, offNP).xyz);\n if(!doneP) lumaEndP =\n FxaaLuma(FxaaTexGrad(tex, posP.xy, offNP).xyz);\n #endif\n doneN = doneN || (abs(lumaEndN - lumaN) >= gradientN);\n doneP = doneP || (abs(lumaEndP - lumaN) >= gradientN);\n if(doneN && doneP) break;\n if(!doneN) posN -= offNP;\n if(!doneP) posP += offNP; }\n float dstN = horzSpan ? pos.x - posN.x : pos.y - posN.y;\n float dstP = horzSpan ? posP.x - pos.x : posP.y - pos.y;\n bool directionN = dstN < dstP;\n lumaEndN = directionN ? lumaEndN : lumaEndP;\n if(((lumaM - lumaN) < 0.0) == ((lumaEndN - lumaN) < 0.0))\n lengthSign = 0.0;\n float spanLength = (dstP + dstN);\n dstN = directionN ? dstN : dstP;\n float subPixelOffset = (0.5 + (dstN * (-1.0/spanLength))) * lengthSign;\n float3 rgbF = FxaaTexLod0(tex, FxaaFloat2(\n pos.x + (horzSpan ? 0.0 : subPixelOffset),\n pos.y + (horzSpan ? subPixelOffset : 0.0))).xyz;\n #if FXAA_SUBPIX == 0\n return FxaaFilterReturn(rgbF);\n #else\n return FxaaFilterReturn(FxaaLerp3(rgbL, rgbF, blendL));\n #endif\n }\n #endif\n in vec2 v_uv;\n uniform sampler2D outputResultMap;\n layout(location = 0) out vec4 fragColor;\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\nvoid main () {\n #if ANTIALIAS_TYPE == 1\n mediump vec2 v_rgbNW;\n mediump vec2 v_rgbNE;\n mediump vec2 v_rgbSW;\n mediump vec2 v_rgbSE;\n mediump vec2 v_rgbM;\n vec2 resolution = cc_screenSize.xy;\n vec2 fragCoord = v_uv * resolution;\n texcoords(fragCoord, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n fragColor = fxaa(outputResultMap, fragCoord, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n #elif ANTIALIAS_TYPE == 2\n vec3 color = FxaaPixelShader(v_uv, outputResultMap, 1.0 / cc_screenSize.xy);\n fragColor = vec4(color, texture(outputResultMap, v_uv).a);\n #else\n fragColor = texture(outputResultMap, v_uv);\n #endif\n }"
  458. },
  459. "glsl1": {
  460. "vert": "\nprecision highp float;\n#define QUATER_PI 0.78539816340\n#define HALF_PI 1.57079632679\n#define PI 3.14159265359\n#define PI2 6.28318530718\n#define PI4 12.5663706144\n#define INV_QUATER_PI 1.27323954474\n#define INV_HALF_PI 0.63661977237\n#define INV_PI 0.31830988618\n#define INV_PI2 0.15915494309\n#define INV_PI4 0.07957747155\n#define EPSILON 1e-6\n#define EPSILON_LOWP 1e-4\n#define LOG2 1.442695\n#define EXP_VALUE 2.71828183\n#define FP_MAX 65504.0\n#define FP_SCALE 0.0009765625\n#define FP_SCALE_INV 1024.0\n#define GRAY_VECTOR vec3(0.299, 0.587, 0.114)\n#define LIGHT_MAP_TYPE_DISABLED 0\n#define LIGHT_MAP_TYPE_ALL_IN_ONE 1\n#define LIGHT_MAP_TYPE_INDIRECT_OCCLUSION 2\n#define REFLECTION_PROBE_TYPE_NONE 0\n#define REFLECTION_PROBE_TYPE_CUBE 1\n#define REFLECTION_PROBE_TYPE_PLANAR 2\n#define REFLECTION_PROBE_TYPE_BLEND 3\n#define REFLECTION_PROBE_TYPE_BLEND_AND_SKYBOX 4\n#define LIGHT_TYPE_DIRECTIONAL 0.0\n#define LIGHT_TYPE_SPHERE 1.0\n#define LIGHT_TYPE_SPOT 2.0\n#define LIGHT_TYPE_POINT 3.0\n#define LIGHT_TYPE_RANGED_DIRECTIONAL 4.0\n#define IS_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_DIRECTIONAL)) < EPSILON_LOWP)\n#define IS_SPHERE_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPHERE)) < EPSILON_LOWP)\n#define IS_SPOT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_SPOT)) < EPSILON_LOWP)\n#define IS_POINT_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_POINT)) < EPSILON_LOWP)\n#define IS_RANGED_DIRECTIONAL_LIGHT(light_type) (abs(float(light_type) - float(LIGHT_TYPE_RANGED_DIRECTIONAL)) < EPSILON_LOWP)\n#define TONE_MAPPING_ACES 0\n#define TONE_MAPPING_LINEAR 1\n#define SURFACES_MAX_TRANSMIT_DEPTH_VALUE 999999.0\n#ifndef CC_SURFACES_DEBUG_VIEW_SINGLE\n #define CC_SURFACES_DEBUG_VIEW_SINGLE 1\n#endif\n#ifndef CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC\n #define CC_SURFACES_DEBUG_VIEW_COMPOSITE_AND_MISC 2\n#endif\nstruct StandardVertInput {\n highp vec4 position;\n vec3 normal;\n vec4 tangent;\n};\nattribute vec3 a_position;\nattribute vec3 a_normal;\nattribute vec2 a_texCoord;\nattribute vec4 a_tangent;\n#if CC_USE_SKINNING\n attribute vec4 a_joints;\n attribute vec4 a_weights;\n#endif\n#if USE_INSTANCING\n #if CC_USE_BAKED_ANIMATION\n attribute highp vec4 a_jointAnimInfo;\n #endif\n attribute vec4 a_matWorld0;\n attribute vec4 a_matWorld1;\n attribute vec4 a_matWorld2;\n #if CC_USE_LIGHTMAP\n attribute vec4 a_lightingMapUVParam;\n #endif\n #if CC_USE_REFLECTION_PROBE || CC_RECEIVE_SHADOW\n #if CC_RECEIVE_SHADOW\n #endif\n attribute vec4 a_localShadowBiasAndProbeId;\n #endif\n #if CC_USE_REFLECTION_PROBE\n attribute vec4 a_reflectionProbeData;\n #endif\n #if CC_USE_LIGHT_PROBE\n attribute vec4 a_sh_linear_const_r;\n attribute vec4 a_sh_linear_const_g;\n attribute vec4 a_sh_linear_const_b;\n #endif\n#endif\n#if CC_USE_MORPH\n attribute float a_vertexId;\n#endif\nuniform highp vec4 cc_cameraPos;\nvarying vec2 v_uv;\nvoid main () {\n StandardVertInput In;\n In.position = vec4(a_position, 1.0);\n In.normal = a_normal;\n In.tangent = a_tangent;\n In.position.xy = cc_cameraPos.w == 0.0 ? vec2(In.position.xy.x, -In.position.xy.y) : In.position.xy;\n gl_Position = In.position;\n v_uv = a_texCoord;\n}",
  461. "frag": "\n#ifdef GL_EXT_shader_texture_lod\n#extension GL_EXT_shader_texture_lod: enable\n#endif\n precision highp float;\n uniform mediump vec4 cc_screenSize;\n #if ANTIALIAS_TYPE == 1\n vec4 fxaa(sampler2D tex, vec2 fragCoord, vec2 resolution,\n vec2 v_rgbNW, vec2 v_rgbNE,\n vec2 v_rgbSW, vec2 v_rgbSE,\n vec2 v_rgbM) {\n vec4 color;\n mediump vec2 inverseVP = vec2(1.0 / resolution.x, 1.0 / resolution.y);\n vec3 rgbNW = texture2D(tex, v_rgbNW).xyz;\n vec3 rgbNE = texture2D(tex, v_rgbNE).xyz;\n vec3 rgbSW = texture2D(tex, v_rgbSW).xyz;\n vec3 rgbSE = texture2D(tex, v_rgbSE).xyz;\n vec4 texColor = texture2D(tex, v_rgbM);\n vec3 rgbM = texColor.xyz;\n vec3 luma = vec3(0.299, 0.587, 0.114);\n float lumaNW = dot(rgbNW, luma);\n float lumaNE = dot(rgbNE, luma);\n float lumaSW = dot(rgbSW, luma);\n float lumaSE = dot(rgbSE, luma);\n float lumaM = dot(rgbM, luma);\n float lumaMin = min(lumaM, min(min(lumaNW, lumaNE), min(lumaSW, lumaSE)));\n float lumaMax = max(lumaM, max(max(lumaNW, lumaNE), max(lumaSW, lumaSE)));\n mediump vec2 dir;\n dir.x = -((lumaNW + lumaNE) - (lumaSW + lumaSE));\n dir.y = ((lumaNW + lumaSW) - (lumaNE + lumaSE));\n float dirReduce = max((lumaNW + lumaNE + lumaSW + lumaSE) *\n (0.25 * (1.0 / 8.0)), (1.0/ 128.0));\n float rcpDirMin = 1.0 / (min(abs(dir.x), abs(dir.y)) + dirReduce);\n dir = min(vec2(8.0, 8.0),\n max(vec2(-8.0, -8.0),\n dir * rcpDirMin)) * inverseVP;\n vec3 rgbA = 0.5 * (\n texture2D(tex, fragCoord * inverseVP + dir * (1.0 / 3.0 - 0.5)).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * (2.0 / 3.0 - 0.5)).xyz);\n vec3 rgbB = rgbA * 0.5 + 0.25 * (\n texture2D(tex, fragCoord * inverseVP + dir * -0.5).xyz +\n texture2D(tex, fragCoord * inverseVP + dir * 0.5).xyz);\n float lumaB = dot(rgbB, luma);\n if ((lumaB < lumaMin) || (lumaB > lumaMax))\n color = vec4(rgbA, texColor.a);\n else\n color = vec4(rgbB, texColor.a);\n return color;\n }\n #endif\n #if ANTIALIAS_TYPE == 2\n vec4 fragTextureGrad (sampler2D tex, vec2 P, vec2 dPdx, vec2 dPdy) {\n #ifdef GL_EXT_shader_texture_lod\n return texture2DGradEXT(tex, P, dPdx, dPdy);\n #else\n return texture2D(tex, P);\n #endif\n }\n vec4 fragTextureGrad (samplerCube tex, vec3 P, vec3 dPdx, vec3 dPdy) {\n #ifdef GL_EXT_shader_texture_lod\n return textureCubeGradEXT(tex, P, dPdx, dPdy);\n #else\n return textureCube(tex, P);\n #endif\n }\n #define FxaaTex sampler2D\n #define int2 vec2\n #define float2 vec2\n #define float3 vec3\n #define float4 vec4\n #define FxaaBool3 bvec3\n #define FxaaInt2 vec2\n #define FxaaFloat2 vec2\n #define FxaaFloat3 vec3\n #define FxaaFloat4 vec4\n #define FxaaBool2Float(a) mix(0.0, 1.0, (a))\n #define FxaaPow3(x, y) pow(x, y)\n #define FxaaSel3(f, t, b) mix((f), (t), (b))\n #define FxaaToFloat3(a) FxaaFloat3((a), (a), (a))\n float4 FxaaTexLod0(FxaaTex tex, float2 pos) {\n return texture2D(tex, pos.xy);\n }\n float4 FxaaTexGrad(FxaaTex tex, float2 pos, float2 grad) {\n return fragTextureGrad(tex, pos.xy, grad, grad);\n }\n float4 FxaaTexOff(FxaaTex tex, float2 pos, int2 off, float2 rcpFrame) {\n return FxaaTexLod0(tex, pos.xy + vec2(off.x, off.y) * rcpFrame);\n }\n #define FXAA_SRGB_ROP 0\n #ifndef FXAA_PRESET\n #define FXAA_PRESET 3\n #endif\n #if (FXAA_PRESET == 0)\n #define FXAA_EDGE_THRESHOLD (1.0/4.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/12.0)\n #define FXAA_SEARCH_STEPS 2\n #define FXAA_SEARCH_ACCELERATION 4\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 1\n #define FXAA_SUBPIX_CAP (2.0/3.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 1)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/16.0)\n #define FXAA_SEARCH_STEPS 4\n #define FXAA_SEARCH_ACCELERATION 3\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 2)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 8\n #define FXAA_SEARCH_ACCELERATION 2\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 3)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 16\n #define FXAA_SEARCH_ACCELERATION 1\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 4)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 24\n #define FXAA_SEARCH_ACCELERATION 1\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #if (FXAA_PRESET == 5)\n #define FXAA_EDGE_THRESHOLD (1.0/8.0)\n #define FXAA_EDGE_THRESHOLD_MIN (1.0/24.0)\n #define FXAA_SEARCH_STEPS 32\n #define FXAA_SEARCH_ACCELERATION 1\n #define FXAA_SEARCH_THRESHOLD (1.0/4.0)\n #define FXAA_SUBPIX 1\n #define FXAA_SUBPIX_FASTER 0\n #define FXAA_SUBPIX_CAP (3.0/4.0)\n #define FXAA_SUBPIX_TRIM (1.0/4.0)\n #endif\n #define FXAA_SUBPIX_TRIM_SCALE (1.0/(1.0 - FXAA_SUBPIX_TRIM))\n float FxaaLuma(float3 rgb) {\n return rgb.y * (0.587/0.299) + rgb.x; }\n float3 FxaaLerp3(float3 a, float3 b, float amountOfA) {\n return (FxaaToFloat3(-amountOfA) * b) +\n ((a * FxaaToFloat3(amountOfA)) + b); }\n float3 FxaaFilterReturn(float3 rgb) {\n #if FXAA_SRGB_ROP\n return FxaaSel3(\n rgb * FxaaToFloat3(1.0/12.92),\n FxaaPow3(\n rgb * FxaaToFloat3(1.0/1.055) + FxaaToFloat3(0.055/1.055),\n FxaaToFloat3(2.4)),\n rgb > FxaaToFloat3(0.04045));\n #else\n return rgb;\n #endif\n }\n float3 FxaaPixelShader(\n float2 pos,\n FxaaTex tex,\n float2 rcpFrame) {\n float3 rgbN = FxaaTexOff(tex, pos.xy, FxaaInt2( 0,-1), rcpFrame).xyz;\n float3 rgbW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1, 0), rcpFrame).xyz;\n float3 rgbM = FxaaTexOff(tex, pos.xy, FxaaInt2( 0, 0), rcpFrame).xyz;\n float3 rgbE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1, 0), rcpFrame).xyz;\n float3 rgbS = FxaaTexOff(tex, pos.xy, FxaaInt2( 0, 1), rcpFrame).xyz;\n float lumaN = FxaaLuma(rgbN);\n float lumaW = FxaaLuma(rgbW);\n float lumaM = FxaaLuma(rgbM);\n float lumaE = FxaaLuma(rgbE);\n float lumaS = FxaaLuma(rgbS);\n float rangeMin = min(lumaM, min(min(lumaN, lumaW), min(lumaS, lumaE)));\n float rangeMax = max(lumaM, max(max(lumaN, lumaW), max(lumaS, lumaE)));\n float range = rangeMax - rangeMin;\n #if FXAA_DEBUG\n float lumaO = lumaM / (1.0 + (0.587/0.299));\n #endif\n if(range < max(FXAA_EDGE_THRESHOLD_MIN, rangeMax * FXAA_EDGE_THRESHOLD)) {\n #if FXAA_DEBUG\n return FxaaFilterReturn(FxaaToFloat3(lumaO));\n #endif\n return FxaaFilterReturn(rgbM); }\n #if FXAA_SUBPIX > 0\n #if FXAA_SUBPIX_FASTER\n float3 rgbL = (rgbN + rgbW + rgbE + rgbS + rgbM) *\n FxaaToFloat3(1.0/5.0);\n #else\n float3 rgbL = rgbN + rgbW + rgbM + rgbE + rgbS;\n #endif\n #endif\n #if FXAA_SUBPIX != 0\n float lumaL = (lumaN + lumaW + lumaE + lumaS) * 0.25;\n float rangeL = abs(lumaL - lumaM);\n #endif\n #if FXAA_SUBPIX == 1\n float blendL = max(0.0,\n (rangeL / range) - FXAA_SUBPIX_TRIM) * FXAA_SUBPIX_TRIM_SCALE;\n blendL = min(FXAA_SUBPIX_CAP, blendL);\n #endif\n #if FXAA_SUBPIX == 2\n float blendL = rangeL / range;\n #endif\n float3 rgbNW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1,-1), rcpFrame).xyz;\n float3 rgbNE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1,-1), rcpFrame).xyz;\n float3 rgbSW = FxaaTexOff(tex, pos.xy, FxaaInt2(-1, 1), rcpFrame).xyz;\n float3 rgbSE = FxaaTexOff(tex, pos.xy, FxaaInt2( 1, 1), rcpFrame).xyz;\n #if (FXAA_SUBPIX_FASTER == 0) && (FXAA_SUBPIX > 0)\n rgbL += (rgbNW + rgbNE + rgbSW + rgbSE);\n rgbL *= FxaaToFloat3(1.0/9.0);\n #endif\n float lumaNW = FxaaLuma(rgbNW);\n float lumaNE = FxaaLuma(rgbNE);\n float lumaSW = FxaaLuma(rgbSW);\n float lumaSE = FxaaLuma(rgbSE);\n float edgeVert =\n abs((0.25 * lumaNW) + (-0.5 * lumaN) + (0.25 * lumaNE)) +\n abs((0.50 * lumaW ) + (-1.0 * lumaM) + (0.50 * lumaE )) +\n abs((0.25 * lumaSW) + (-0.5 * lumaS) + (0.25 * lumaSE));\n float edgeHorz =\n abs((0.25 * lumaNW) + (-0.5 * lumaW) + (0.25 * lumaSW)) +\n abs((0.50 * lumaN ) + (-1.0 * lumaM) + (0.50 * lumaS )) +\n abs((0.25 * lumaNE) + (-0.5 * lumaE) + (0.25 * lumaSE));\n bool horzSpan = edgeHorz >= edgeVert;\n float lengthSign = horzSpan ? -rcpFrame.y : -rcpFrame.x;\n if(!horzSpan) lumaN = lumaW;\n if(!horzSpan) lumaS = lumaE;\n float gradientN = abs(lumaN - lumaM);\n float gradientS = abs(lumaS - lumaM);\n lumaN = (lumaN + lumaM) * 0.5;\n lumaS = (lumaS + lumaM) * 0.5;\n bool pairN = gradientN >= gradientS;\n if(!pairN) lumaN = lumaS;\n if(!pairN) gradientN = gradientS;\n if(!pairN) lengthSign *= -1.0;\n float2 posN;\n posN.x = pos.x + (horzSpan ? 0.0 : lengthSign * 0.5);\n posN.y = pos.y + (horzSpan ? lengthSign * 0.5 : 0.0);\n gradientN *= FXAA_SEARCH_THRESHOLD;\n float2 posP = posN;\n float2 offNP = horzSpan ?\n FxaaFloat2(rcpFrame.x, 0.0) :\n FxaaFloat2(0.0, rcpFrame.y);\n float lumaEndN = lumaN;\n float lumaEndP = lumaN;\n bool doneN = false;\n bool doneP = false;\n #if FXAA_SEARCH_ACCELERATION == 1\n posN += offNP * FxaaFloat2(-1.0, -1.0);\n posP += offNP * FxaaFloat2( 1.0, 1.0);\n #endif\n #if FXAA_SEARCH_ACCELERATION == 2\n posN += offNP * FxaaFloat2(-1.5, -1.5);\n posP += offNP * FxaaFloat2( 1.5, 1.5);\n offNP *= FxaaFloat2(2.0, 2.0);\n #endif\n #if FXAA_SEARCH_ACCELERATION == 3\n posN += offNP * FxaaFloat2(-2.0, -2.0);\n posP += offNP * FxaaFloat2( 2.0, 2.0);\n offNP *= FxaaFloat2(3.0, 3.0);\n #endif\n #if FXAA_SEARCH_ACCELERATION == 4\n posN += offNP * FxaaFloat2(-2.5, -2.5);\n posP += offNP * FxaaFloat2( 2.5, 2.5);\n offNP *= FxaaFloat2(4.0, 4.0);\n #endif\n for(int i = 0; i < FXAA_SEARCH_STEPS; i++) {\n #if FXAA_SEARCH_ACCELERATION == 1\n if(!doneN) lumaEndN =\n FxaaLuma(FxaaTexLod0(tex, posN.xy).xyz);\n if(!doneP) lumaEndP =\n FxaaLuma(FxaaTexLod0(tex, posP.xy).xyz);\n #else\n if(!doneN) lumaEndN =\n FxaaLuma(FxaaTexGrad(tex, posN.xy, offNP).xyz);\n if(!doneP) lumaEndP =\n FxaaLuma(FxaaTexGrad(tex, posP.xy, offNP).xyz);\n #endif\n doneN = doneN || (abs(lumaEndN - lumaN) >= gradientN);\n doneP = doneP || (abs(lumaEndP - lumaN) >= gradientN);\n if(doneN && doneP) break;\n if(!doneN) posN -= offNP;\n if(!doneP) posP += offNP; }\n float dstN = horzSpan ? pos.x - posN.x : pos.y - posN.y;\n float dstP = horzSpan ? posP.x - pos.x : posP.y - pos.y;\n bool directionN = dstN < dstP;\n lumaEndN = directionN ? lumaEndN : lumaEndP;\n if(((lumaM - lumaN) < 0.0) == ((lumaEndN - lumaN) < 0.0))\n lengthSign = 0.0;\n float spanLength = (dstP + dstN);\n dstN = directionN ? dstN : dstP;\n float subPixelOffset = (0.5 + (dstN * (-1.0/spanLength))) * lengthSign;\n float3 rgbF = FxaaTexLod0(tex, FxaaFloat2(\n pos.x + (horzSpan ? 0.0 : subPixelOffset),\n pos.y + (horzSpan ? subPixelOffset : 0.0))).xyz;\n #if FXAA_SUBPIX == 0\n return FxaaFilterReturn(rgbF);\n #else\n return FxaaFilterReturn(FxaaLerp3(rgbL, rgbF, blendL));\n #endif\n }\n #endif\n varying vec2 v_uv;\n uniform sampler2D outputResultMap;\nvoid texcoords(vec2 fragCoord, vec2 resolution,\n out vec2 v_rgbNW, out vec2 v_rgbNE,\n out vec2 v_rgbSW, out vec2 v_rgbSE,\n out vec2 v_rgbM) {\n vec2 inverseVP = 1.0 / resolution.xy;\n v_rgbNW = (fragCoord + vec2(-1.0, -1.0)) * inverseVP;\n v_rgbNE = (fragCoord + vec2(1.0, -1.0)) * inverseVP;\n v_rgbSW = (fragCoord + vec2(-1.0, 1.0)) * inverseVP;\n v_rgbSE = (fragCoord + vec2(1.0, 1.0)) * inverseVP;\n v_rgbM = vec2(fragCoord * inverseVP);\n}\nvoid main () {\n #if ANTIALIAS_TYPE == 1\n mediump vec2 v_rgbNW;\n mediump vec2 v_rgbNE;\n mediump vec2 v_rgbSW;\n mediump vec2 v_rgbSE;\n mediump vec2 v_rgbM;\n vec2 resolution = cc_screenSize.xy;\n vec2 fragCoord = v_uv * resolution;\n texcoords(fragCoord, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n gl_FragColor = fxaa(outputResultMap, fragCoord, resolution, v_rgbNW, v_rgbNE, v_rgbSW, v_rgbSE, v_rgbM);\n #elif ANTIALIAS_TYPE == 2\n vec3 color = FxaaPixelShader(v_uv, outputResultMap, 1.0 / cc_screenSize.xy);\n gl_FragColor = vec4(color, texture2D(outputResultMap, v_uv).a);\n #else\n gl_FragColor = texture2D(outputResultMap, v_uv);\n #endif\n }"
  462. },
  463. "builtins": {
  464. "globals": {
  465. "blocks": [
  466. {
  467. "name": "CCGlobal",
  468. "defines": []
  469. },
  470. {
  471. "name": "CCCamera",
  472. "defines": []
  473. }
  474. ],
  475. "samplerTextures": [],
  476. "buffers": [],
  477. "images": []
  478. },
  479. "locals": {
  480. "blocks": [],
  481. "samplerTextures": [],
  482. "buffers": [],
  483. "images": []
  484. },
  485. "statistics": {
  486. "CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS": 42,
  487. "CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS": 42
  488. }
  489. },
  490. "defines": [
  491. {
  492. "name": "USE_INSTANCING",
  493. "type": "boolean",
  494. "defines": [],
  495. "editor": {
  496. "elevated": true
  497. }
  498. },
  499. {
  500. "name": "CC_USE_SKINNING",
  501. "type": "boolean",
  502. "defines": []
  503. },
  504. {
  505. "name": "CC_USE_BAKED_ANIMATION",
  506. "type": "boolean",
  507. "defines": [
  508. "USE_INSTANCING"
  509. ]
  510. },
  511. {
  512. "name": "CC_USE_LIGHTMAP",
  513. "type": "boolean",
  514. "defines": [
  515. "USE_INSTANCING"
  516. ]
  517. },
  518. {
  519. "name": "CC_USE_REFLECTION_PROBE",
  520. "type": "boolean",
  521. "defines": [
  522. "USE_INSTANCING"
  523. ]
  524. },
  525. {
  526. "name": "CC_RECEIVE_SHADOW",
  527. "type": "boolean",
  528. "defines": [
  529. "USE_INSTANCING"
  530. ]
  531. },
  532. {
  533. "name": "CC_USE_LIGHT_PROBE",
  534. "type": "boolean",
  535. "defines": [
  536. "USE_INSTANCING"
  537. ]
  538. },
  539. {
  540. "name": "CC_USE_MORPH",
  541. "type": "boolean",
  542. "defines": []
  543. },
  544. {
  545. "name": "ANTIALIAS_TYPE",
  546. "type": "number",
  547. "defines": [],
  548. "range": [
  549. 0,
  550. 3
  551. ]
  552. },
  553. {
  554. "name": "FXAA_DEBUG",
  555. "type": "boolean",
  556. "defines": []
  557. }
  558. ],
  559. "name": "pipeline/post-process|post-process-vs|post-process-fs"
  560. }
  561. ],
  562. "combinations": [],
  563. "hideInEditor": false
  564. }