2df0a40b-26c2-47ce-be0d-4d3cd4164737.json 65 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573
  1. {
  2. "__type__": "cc.EffectAsset",
  3. "_name": "pipeline/post-process/fxaa-hq",
  4. "_objFlags": 0,
  5. "__editorExtras__": {},
  6. "_native": "",
  7. "techniques": [
  8. {
  9. "name": "fxaa",
  10. "passes": [
  11. {
  12. "pass": "fxaa",
  13. "rasterizerState": {
  14. "cullMode": 0
  15. },
  16. "program": "pipeline/post-process/fxaa-hq|fxaa-vs|fxaa-edge-fs:frag",
  17. "depthStencilState": {
  18. "depthTest": false,
  19. "depthWrite": false
  20. }
  21. }
  22. ]
  23. }
  24. ],
  25. "shaders": [
  26. {
  27. "blocks": [
  28. {
  29. "name": "fxaaUBO",
  30. "members": [
  31. {
  32. "name": "texSize",
  33. "type": 16,
  34. "count": 1
  35. }
  36. ],
  37. "defines": [],
  38. "stageFlags": 16,
  39. "binding": 0
  40. }
  41. ],
  42. "samplerTextures": [],
  43. "samplers": [],
  44. "textures": [],
  45. "buffers": [],
  46. "images": [],
  47. "subpassInputs": [],
  48. "attributes": [
  49. {
  50. "name": "a_position",
  51. "defines": [],
  52. "format": 32,
  53. "location": 0
  54. },
  55. {
  56. "name": "a_normal",
  57. "defines": [],
  58. "format": 32,
  59. "location": 1
  60. },
  61. {
  62. "name": "a_texCoord",
  63. "defines": [],
  64. "format": 21,
  65. "location": 2
  66. },
  67. {
  68. "name": "a_tangent",
  69. "defines": [],
  70. "format": 44,
  71. "location": 3
  72. },
  73. {
  74. "name": "a_joints",
  75. "defines": [
  76. "CC_USE_SKINNING"
  77. ],
  78. "location": 4
  79. },
  80. {
  81. "name": "a_weights",
  82. "defines": [
  83. "CC_USE_SKINNING"
  84. ],
  85. "format": 44,
  86. "location": 5
  87. },
  88. {
  89. "name": "a_jointAnimInfo",
  90. "defines": [
  91. "USE_INSTANCING",
  92. "CC_USE_BAKED_ANIMATION"
  93. ],
  94. "format": 44,
  95. "isInstanced": true,
  96. "location": 6
  97. },
  98. {
  99. "name": "a_matWorld0",
  100. "defines": [
  101. "USE_INSTANCING"
  102. ],
  103. "format": 44,
  104. "isInstanced": true,
  105. "location": 7
  106. },
  107. {
  108. "name": "a_matWorld1",
  109. "defines": [
  110. "USE_INSTANCING"
  111. ],
  112. "format": 44,
  113. "isInstanced": true,
  114. "location": 8
  115. },
  116. {
  117. "name": "a_matWorld2",
  118. "defines": [
  119. "USE_INSTANCING"
  120. ],
  121. "format": 44,
  122. "isInstanced": true,
  123. "location": 9
  124. },
  125. {
  126. "name": "a_lightingMapUVParam",
  127. "defines": [
  128. "USE_INSTANCING",
  129. "CC_USE_LIGHTMAP"
  130. ],
  131. "format": 44,
  132. "isInstanced": true,
  133. "location": 10
  134. },
  135. {
  136. "name": "a_localShadowBiasAndProbeId",
  137. "defines": [
  138. "USE_INSTANCING"
  139. ],
  140. "format": 44,
  141. "isInstanced": true,
  142. "location": 11
  143. },
  144. {
  145. "name": "a_reflectionProbeData",
  146. "defines": [
  147. "USE_INSTANCING",
  148. "CC_USE_REFLECTION_PROBE"
  149. ],
  150. "format": 44,
  151. "isInstanced": true,
  152. "location": 12
  153. },
  154. {
  155. "name": "a_sh_linear_const_r",
  156. "defines": [
  157. "USE_INSTANCING",
  158. "CC_USE_LIGHT_PROBE"
  159. ],
  160. "format": 44,
  161. "isInstanced": true,
  162. "location": 13
  163. },
  164. {
  165. "name": "a_sh_linear_const_g",
  166. "defines": [
  167. "USE_INSTANCING",
  168. "CC_USE_LIGHT_PROBE"
  169. ],
  170. "format": 44,
  171. "isInstanced": true,
  172. "location": 14
  173. },
  174. {
  175. "name": "a_sh_linear_const_b",
  176. "defines": [
  177. "USE_INSTANCING",
  178. "CC_USE_LIGHT_PROBE"
  179. ],
  180. "format": 44,
  181. "isInstanced": true,
  182. "location": 15
  183. },
  184. {
  185. "name": "a_vertexId",
  186. "defines": [
  187. "CC_USE_MORPH"
  188. ],
  189. "format": 11,
  190. "location": 16
  191. }
  192. ],
  193. "varyings": [
  194. {
  195. "name": "v_uv",
  196. "type": 14,
  197. "count": 1,
  198. "defines": [],
  199. "stageFlags": 17,
  200. "location": 0
  201. }
  202. ],
  203. "fragColors": [
  204. {
  205. "name": "cc_FragColor",
  206. "typename": "vec4",
  207. "type": 16,
  208. "count": 1,
  209. "defines": [],
  210. "stageFlags": 16,
  211. "location": 0
  212. }
  213. ],
  214. "descriptors": [
  215. {
  216. "rate": 0,
  217. "blocks": [],
  218. "samplerTextures": [],
  219. "samplers": [],
  220. "textures": [],
  221. "buffers": [],
  222. "images": [],
  223. "subpassInputs": []
  224. },
  225. {
  226. "rate": 1,
  227. "blocks": [
  228. {
  229. "name": "fxaaUBO",
  230. "members": [
  231. {
  232. "name": "texSize",
  233. "type": 16,
  234. "count": 1
  235. }
  236. ],
  237. "defines": [],
  238. "stageFlags": 16,
  239. "binding": 0
  240. }
  241. ],
  242. "samplerTextures": [],
  243. "samplers": [],
  244. "textures": [],
  245. "buffers": [],
  246. "images": [],
  247. "subpassInputs": []
  248. },
  249. {
  250. "rate": 2,
  251. "blocks": [],
  252. "samplerTextures": [],
  253. "samplers": [],
  254. "textures": [],
  255. "buffers": [],
  256. "images": [],
  257. "subpassInputs": []
  258. },
  259. {
  260. "rate": 3,
  261. "blocks": [
  262. {
  263. "tags": {
  264. "builtin": "global"
  265. },
  266. "name": "CCGlobal",
  267. "members": [
  268. {
  269. "name": "cc_time",
  270. "typename": "vec4",
  271. "type": 16,
  272. "count": 1,
  273. "precision": "highp "
  274. },
  275. {
  276. "name": "cc_screenSize",
  277. "typename": "vec4",
  278. "type": 16,
  279. "count": 1,
  280. "precision": "mediump "
  281. },
  282. {
  283. "name": "cc_nativeSize",
  284. "typename": "vec4",
  285. "type": 16,
  286. "count": 1,
  287. "precision": "mediump "
  288. },
  289. {
  290. "name": "cc_probeInfo",
  291. "typename": "vec4",
  292. "type": 16,
  293. "count": 1,
  294. "precision": "mediump "
  295. },
  296. {
  297. "name": "cc_debug_view_mode",
  298. "typename": "vec4",
  299. "type": 16,
  300. "count": 1,
  301. "precision": "mediump "
  302. }
  303. ],
  304. "defines": [],
  305. "stageFlags": 17
  306. },
  307. {
  308. "tags": {
  309. "builtin": "global"
  310. },
  311. "name": "CCCamera",
  312. "members": [
  313. {
  314. "name": "cc_matView",
  315. "typename": "mat4",
  316. "type": 25,
  317. "count": 1,
  318. "precision": "highp "
  319. },
  320. {
  321. "name": "cc_matViewInv",
  322. "typename": "mat4",
  323. "type": 25,
  324. "count": 1,
  325. "precision": "highp "
  326. },
  327. {
  328. "name": "cc_matProj",
  329. "typename": "mat4",
  330. "type": 25,
  331. "count": 1,
  332. "precision": "highp "
  333. },
  334. {
  335. "name": "cc_matProjInv",
  336. "typename": "mat4",
  337. "type": 25,
  338. "count": 1,
  339. "precision": "highp "
  340. },
  341. {
  342. "name": "cc_matViewProj",
  343. "typename": "mat4",
  344. "type": 25,
  345. "count": 1,
  346. "precision": "highp "
  347. },
  348. {
  349. "name": "cc_matViewProjInv",
  350. "typename": "mat4",
  351. "type": 25,
  352. "count": 1,
  353. "precision": "highp "
  354. },
  355. {
  356. "name": "cc_cameraPos",
  357. "typename": "vec4",
  358. "type": 16,
  359. "count": 1,
  360. "precision": "highp "
  361. },
  362. {
  363. "name": "cc_surfaceTransform",
  364. "typename": "vec4",
  365. "type": 16,
  366. "count": 1,
  367. "precision": "mediump "
  368. },
  369. {
  370. "name": "cc_screenScale",
  371. "typename": "vec4",
  372. "type": 16,
  373. "count": 1,
  374. "precision": "mediump "
  375. },
  376. {
  377. "name": "cc_exposure",
  378. "typename": "vec4",
  379. "type": 16,
  380. "count": 1,
  381. "precision": "mediump "
  382. },
  383. {
  384. "name": "cc_mainLitDir",
  385. "typename": "vec4",
  386. "type": 16,
  387. "count": 1,
  388. "precision": "mediump "
  389. },
  390. {
  391. "name": "cc_mainLitColor",
  392. "typename": "vec4",
  393. "type": 16,
  394. "count": 1,
  395. "precision": "mediump "
  396. },
  397. {
  398. "name": "cc_ambientSky",
  399. "typename": "vec4",
  400. "type": 16,
  401. "count": 1,
  402. "precision": "mediump "
  403. },
  404. {
  405. "name": "cc_ambientGround",
  406. "typename": "vec4",
  407. "type": 16,
  408. "count": 1,
  409. "precision": "mediump "
  410. },
  411. {
  412. "name": "cc_fogColor",
  413. "typename": "vec4",
  414. "type": 16,
  415. "count": 1,
  416. "precision": "mediump "
  417. },
  418. {
  419. "name": "cc_fogBase",
  420. "typename": "vec4",
  421. "type": 16,
  422. "count": 1,
  423. "precision": "mediump "
  424. },
  425. {
  426. "name": "cc_fogAdd",
  427. "typename": "vec4",
  428. "type": 16,
  429. "count": 1,
  430. "precision": "mediump "
  431. },
  432. {
  433. "name": "cc_nearFar",
  434. "typename": "vec4",
  435. "type": 16,
  436. "count": 1,
  437. "precision": "mediump "
  438. },
  439. {
  440. "name": "cc_viewPort",
  441. "typename": "vec4",
  442. "type": 16,
  443. "count": 1,
  444. "precision": "mediump "
  445. }
  446. ],
  447. "defines": [],
  448. "stageFlags": 17
  449. }
  450. ],
  451. "samplerTextures": [
  452. {
  453. "name": "sceneColorMap",
  454. "type": 28,
  455. "count": 1,
  456. "defines": [],
  457. "stageFlags": 16,
  458. "binding": 1
  459. }
  460. ],
  461. "samplers": [],
  462. "textures": [],
  463. "buffers": [],
  464. "images": [],
  465. "subpassInputs": []
  466. }
  467. ],
  468. "hash": 4003332407,
  469. "glsl4": {
  470. "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}",
  471. "frag": "\nprecision highp float;\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};\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\nvec4 fragTextureGrad (sampler2D tex, vec2 P, vec2 dPdx, vec2 dPdy) {\n return textureGrad(tex, P, dPdx, dPdy);\n}\nvec4 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))\nfloat4 FxaaTexLod0(FxaaTex tex, float2 pos) {\n return texture(tex, pos.xy);\n}\nfloat4 FxaaTexGrad(FxaaTex tex, float2 pos, float2 grad) {\n return fragTextureGrad(tex, pos.xy, grad, grad);\n}\nfloat4 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))\nfloat FxaaLuma(float3 rgb) {\n return rgb.y * (0.587/0.299) + rgb.x; }\nfloat3 FxaaLerp3(float3 a, float3 b, float amountOfA) {\n return (FxaaToFloat3(-amountOfA) * b) +\n ((a * FxaaToFloat3(amountOfA)) + b); }\nfloat3 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}\nfloat3 FxaaPixelShader(\nfloat2 pos,\nFxaaTex tex,\nfloat2 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}\nlayout(set = 1, binding = 0) uniform fxaaUBO {\n vec4 texSize;\n};\nlayout(location = 0) in vec2 v_uv;\nlayout(set = 1, binding = 1) uniform sampler2D sceneColorMap;\nvec4 frag () {\n vec3 color = FxaaPixelShader(v_uv, sceneColorMap, texSize.zw);\n float alpha = texture(sceneColorMap, v_uv).a;\n return vec4(color, alpha);\n}\nlayout(location = 0) out vec4 cc_FragColor;\nvoid main() { cc_FragColor = frag(); }"
  472. },
  473. "glsl3": {
  474. "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}",
  475. "frag": "\nprecision highp float;\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};\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\nvec4 fragTextureGrad (sampler2D tex, vec2 P, vec2 dPdx, vec2 dPdy) {\n return textureGrad(tex, P, dPdx, dPdy);\n}\nvec4 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))\nfloat4 FxaaTexLod0(FxaaTex tex, float2 pos) {\n return texture(tex, pos.xy);\n}\nfloat4 FxaaTexGrad(FxaaTex tex, float2 pos, float2 grad) {\n return fragTextureGrad(tex, pos.xy, grad, grad);\n}\nfloat4 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))\nfloat FxaaLuma(float3 rgb) {\n return rgb.y * (0.587/0.299) + rgb.x; }\nfloat3 FxaaLerp3(float3 a, float3 b, float amountOfA) {\n return (FxaaToFloat3(-amountOfA) * b) +\n ((a * FxaaToFloat3(amountOfA)) + b); }\nfloat3 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}\nfloat3 FxaaPixelShader(\nfloat2 pos,\nFxaaTex tex,\nfloat2 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}\nlayout(std140) uniform fxaaUBO {\n vec4 texSize;\n};\nin vec2 v_uv;\nuniform sampler2D sceneColorMap;\nvec4 frag () {\n vec3 color = FxaaPixelShader(v_uv, sceneColorMap, texSize.zw);\n float alpha = texture(sceneColorMap, v_uv).a;\n return vec4(color, alpha);\n}\nlayout(location = 0) out vec4 cc_FragColor;\nvoid main() { cc_FragColor = frag(); }"
  476. },
  477. "glsl1": {
  478. "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}",
  479. "frag": "\n#ifdef GL_EXT_shader_texture_lod\n#extension GL_EXT_shader_texture_lod: enable\n#endif\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\nvec4 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}\nvec4 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))\nfloat4 FxaaTexLod0(FxaaTex tex, float2 pos) {\n return texture2D(tex, pos.xy);\n}\nfloat4 FxaaTexGrad(FxaaTex tex, float2 pos, float2 grad) {\n return fragTextureGrad(tex, pos.xy, grad, grad);\n}\nfloat4 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))\nfloat FxaaLuma(float3 rgb) {\n return rgb.y * (0.587/0.299) + rgb.x; }\nfloat3 FxaaLerp3(float3 a, float3 b, float amountOfA) {\n return (FxaaToFloat3(-amountOfA) * b) +\n ((a * FxaaToFloat3(amountOfA)) + b); }\nfloat3 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}\nfloat3 FxaaPixelShader(\nfloat2 pos,\nFxaaTex tex,\nfloat2 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 uniform vec4 texSize;\nvarying vec2 v_uv;\nuniform sampler2D sceneColorMap;\nvec4 frag () {\n vec3 color = FxaaPixelShader(v_uv, sceneColorMap, texSize.zw);\n float alpha = texture2D(sceneColorMap, v_uv).a;\n return vec4(color, alpha);\n}\nvoid main() { gl_FragColor = frag(); }"
  480. },
  481. "builtins": {
  482. "globals": {
  483. "blocks": [
  484. {
  485. "name": "CCGlobal",
  486. "defines": []
  487. },
  488. {
  489. "name": "CCCamera",
  490. "defines": []
  491. }
  492. ],
  493. "samplerTextures": [],
  494. "buffers": [],
  495. "images": []
  496. },
  497. "locals": {
  498. "blocks": [],
  499. "samplerTextures": [],
  500. "buffers": [],
  501. "images": []
  502. },
  503. "statistics": {
  504. "CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS": 42,
  505. "CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS": 43
  506. }
  507. },
  508. "defines": [
  509. {
  510. "name": "USE_INSTANCING",
  511. "type": "boolean",
  512. "defines": [],
  513. "editor": {
  514. "elevated": true
  515. }
  516. },
  517. {
  518. "name": "CC_USE_SKINNING",
  519. "type": "boolean",
  520. "defines": []
  521. },
  522. {
  523. "name": "CC_USE_BAKED_ANIMATION",
  524. "type": "boolean",
  525. "defines": [
  526. "USE_INSTANCING"
  527. ]
  528. },
  529. {
  530. "name": "CC_USE_LIGHTMAP",
  531. "type": "boolean",
  532. "defines": [
  533. "USE_INSTANCING"
  534. ]
  535. },
  536. {
  537. "name": "CC_USE_REFLECTION_PROBE",
  538. "type": "boolean",
  539. "defines": [
  540. "USE_INSTANCING"
  541. ]
  542. },
  543. {
  544. "name": "CC_RECEIVE_SHADOW",
  545. "type": "boolean",
  546. "defines": [
  547. "USE_INSTANCING"
  548. ]
  549. },
  550. {
  551. "name": "CC_USE_LIGHT_PROBE",
  552. "type": "boolean",
  553. "defines": [
  554. "USE_INSTANCING"
  555. ]
  556. },
  557. {
  558. "name": "CC_USE_MORPH",
  559. "type": "boolean",
  560. "defines": []
  561. },
  562. {
  563. "name": "FXAA_DEBUG",
  564. "type": "boolean",
  565. "defines": []
  566. }
  567. ],
  568. "name": "pipeline/post-process/fxaa-hq|fxaa-vs|fxaa-edge-fs:frag"
  569. }
  570. ],
  571. "combinations": [],
  572. "hideInEditor": false
  573. }