dace6a58-1705-48c7-a275-70afc9534e88.json 200 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556
  1. {
  2. "__type__": "cc.EffectAsset",
  3. "_name": "pipeline/post-process/hbao",
  4. "_objFlags": 0,
  5. "__editorExtras__": {},
  6. "_native": "",
  7. "techniques": [
  8. {
  9. "passes": [
  10. {
  11. "pass": "hbao-pass",
  12. "rasterizerState": {
  13. "cullMode": 0
  14. },
  15. "program": "pipeline/post-process/hbao|hbao-vs|hbao-fs",
  16. "depthStencilState": {
  17. "depthTest": false,
  18. "depthWrite": false
  19. }
  20. },
  21. {
  22. "pass": "blurx-pass",
  23. "rasterizerState": {
  24. "cullMode": 0
  25. },
  26. "program": "pipeline/post-process/hbao|hbao-vs|blurx-fs",
  27. "depthStencilState": {
  28. "depthTest": false,
  29. "depthWrite": false
  30. }
  31. },
  32. {
  33. "pass": "blury-pass",
  34. "rasterizerState": {
  35. "cullMode": 0
  36. },
  37. "program": "pipeline/post-process/hbao|hbao-vs|blury-fs",
  38. "depthStencilState": {
  39. "depthTest": false,
  40. "depthWrite": false
  41. }
  42. },
  43. {
  44. "pass": "combine-pass",
  45. "rasterizerState": {
  46. "cullMode": 0
  47. },
  48. "blendState": {
  49. "targets": [
  50. {
  51. "blend": true,
  52. "blendSrc": 0,
  53. "blendDst": 2,
  54. "blendSrcAlpha": 0,
  55. "blendDstAlpha": 1
  56. }
  57. ]
  58. },
  59. "program": "pipeline/post-process/hbao|hbao-vs|combine-fs",
  60. "depthStencilState": {
  61. "depthTest": false,
  62. "depthWrite": false
  63. }
  64. }
  65. ]
  66. }
  67. ],
  68. "shaders": [
  69. {
  70. "blocks": [
  71. {
  72. "name": "hbaoUBO",
  73. "members": [
  74. {
  75. "name": "uvDepthToEyePosParams",
  76. "type": 16,
  77. "count": 1
  78. },
  79. {
  80. "name": "radiusParam",
  81. "type": 16,
  82. "count": 1
  83. },
  84. {
  85. "name": "miscParam",
  86. "type": 16,
  87. "count": 1
  88. },
  89. {
  90. "name": "randomTexSize",
  91. "type": 16,
  92. "count": 1
  93. },
  94. {
  95. "name": "blurParam",
  96. "type": 16,
  97. "count": 1
  98. }
  99. ],
  100. "defines": [],
  101. "stageFlags": 16,
  102. "binding": 0
  103. }
  104. ],
  105. "samplerTextures": [
  106. {
  107. "name": "RandomTex",
  108. "type": 28,
  109. "count": 1,
  110. "defines": [],
  111. "stageFlags": 16,
  112. "sampleType": 0,
  113. "binding": 2
  114. }
  115. ],
  116. "samplers": [],
  117. "textures": [],
  118. "buffers": [],
  119. "images": [],
  120. "subpassInputs": [],
  121. "attributes": [
  122. {
  123. "name": "a_position",
  124. "defines": [],
  125. "format": 32,
  126. "location": 0
  127. },
  128. {
  129. "name": "a_normal",
  130. "defines": [],
  131. "format": 32,
  132. "location": 1
  133. },
  134. {
  135. "name": "a_texCoord",
  136. "defines": [],
  137. "format": 21,
  138. "location": 2
  139. },
  140. {
  141. "name": "a_tangent",
  142. "defines": [],
  143. "format": 44,
  144. "location": 3
  145. },
  146. {
  147. "name": "a_joints",
  148. "defines": [
  149. "CC_USE_SKINNING"
  150. ],
  151. "location": 4
  152. },
  153. {
  154. "name": "a_weights",
  155. "defines": [
  156. "CC_USE_SKINNING"
  157. ],
  158. "format": 44,
  159. "location": 5
  160. },
  161. {
  162. "name": "a_jointAnimInfo",
  163. "defines": [
  164. "USE_INSTANCING",
  165. "CC_USE_BAKED_ANIMATION"
  166. ],
  167. "format": 44,
  168. "isInstanced": true,
  169. "location": 6
  170. },
  171. {
  172. "name": "a_matWorld0",
  173. "defines": [
  174. "USE_INSTANCING"
  175. ],
  176. "format": 44,
  177. "isInstanced": true,
  178. "location": 7
  179. },
  180. {
  181. "name": "a_matWorld1",
  182. "defines": [
  183. "USE_INSTANCING"
  184. ],
  185. "format": 44,
  186. "isInstanced": true,
  187. "location": 8
  188. },
  189. {
  190. "name": "a_matWorld2",
  191. "defines": [
  192. "USE_INSTANCING"
  193. ],
  194. "format": 44,
  195. "isInstanced": true,
  196. "location": 9
  197. },
  198. {
  199. "name": "a_lightingMapUVParam",
  200. "defines": [
  201. "USE_INSTANCING",
  202. "CC_USE_LIGHTMAP"
  203. ],
  204. "format": 44,
  205. "isInstanced": true,
  206. "location": 10
  207. },
  208. {
  209. "name": "a_localShadowBiasAndProbeId",
  210. "defines": [
  211. "USE_INSTANCING"
  212. ],
  213. "format": 44,
  214. "isInstanced": true,
  215. "location": 11
  216. },
  217. {
  218. "name": "a_reflectionProbeData",
  219. "defines": [
  220. "USE_INSTANCING",
  221. "CC_USE_REFLECTION_PROBE"
  222. ],
  223. "format": 44,
  224. "isInstanced": true,
  225. "location": 12
  226. },
  227. {
  228. "name": "a_sh_linear_const_r",
  229. "defines": [
  230. "USE_INSTANCING",
  231. "CC_USE_LIGHT_PROBE"
  232. ],
  233. "format": 44,
  234. "isInstanced": true,
  235. "location": 13
  236. },
  237. {
  238. "name": "a_sh_linear_const_g",
  239. "defines": [
  240. "USE_INSTANCING",
  241. "CC_USE_LIGHT_PROBE"
  242. ],
  243. "format": 44,
  244. "isInstanced": true,
  245. "location": 14
  246. },
  247. {
  248. "name": "a_sh_linear_const_b",
  249. "defines": [
  250. "USE_INSTANCING",
  251. "CC_USE_LIGHT_PROBE"
  252. ],
  253. "format": 44,
  254. "isInstanced": true,
  255. "location": 15
  256. },
  257. {
  258. "name": "a_vertexId",
  259. "defines": [
  260. "CC_USE_MORPH"
  261. ],
  262. "format": 11,
  263. "location": 16
  264. }
  265. ],
  266. "varyings": [
  267. {
  268. "name": "v_uv",
  269. "type": 14,
  270. "count": 1,
  271. "defines": [],
  272. "stageFlags": 17,
  273. "location": 0
  274. }
  275. ],
  276. "fragColors": [
  277. {
  278. "name": "fragColor",
  279. "typename": "vec4",
  280. "type": 16,
  281. "count": 1,
  282. "defines": [],
  283. "stageFlags": 16,
  284. "location": 0
  285. }
  286. ],
  287. "descriptors": [
  288. {
  289. "rate": 0,
  290. "blocks": [],
  291. "samplerTextures": [],
  292. "samplers": [],
  293. "textures": [],
  294. "buffers": [],
  295. "images": [],
  296. "subpassInputs": []
  297. },
  298. {
  299. "rate": 1,
  300. "blocks": [
  301. {
  302. "name": "hbaoUBO",
  303. "members": [
  304. {
  305. "name": "uvDepthToEyePosParams",
  306. "type": 16,
  307. "count": 1
  308. },
  309. {
  310. "name": "radiusParam",
  311. "type": 16,
  312. "count": 1
  313. },
  314. {
  315. "name": "miscParam",
  316. "type": 16,
  317. "count": 1
  318. },
  319. {
  320. "name": "randomTexSize",
  321. "type": 16,
  322. "count": 1
  323. },
  324. {
  325. "name": "blurParam",
  326. "type": 16,
  327. "count": 1
  328. }
  329. ],
  330. "defines": [],
  331. "stageFlags": 16,
  332. "binding": 0
  333. }
  334. ],
  335. "samplerTextures": [
  336. {
  337. "name": "RandomTex",
  338. "type": 28,
  339. "count": 1,
  340. "defines": [],
  341. "stageFlags": 16,
  342. "sampleType": 0,
  343. "binding": 2
  344. }
  345. ],
  346. "samplers": [],
  347. "textures": [],
  348. "buffers": [],
  349. "images": [],
  350. "subpassInputs": []
  351. },
  352. {
  353. "rate": 2,
  354. "blocks": [],
  355. "samplerTextures": [],
  356. "samplers": [],
  357. "textures": [],
  358. "buffers": [],
  359. "images": [],
  360. "subpassInputs": []
  361. },
  362. {
  363. "rate": 3,
  364. "blocks": [
  365. {
  366. "tags": {
  367. "builtin": "global"
  368. },
  369. "name": "CCGlobal",
  370. "members": [
  371. {
  372. "name": "cc_time",
  373. "typename": "vec4",
  374. "type": 16,
  375. "count": 1,
  376. "precision": "highp "
  377. },
  378. {
  379. "name": "cc_screenSize",
  380. "typename": "vec4",
  381. "type": 16,
  382. "count": 1,
  383. "precision": "mediump "
  384. },
  385. {
  386. "name": "cc_nativeSize",
  387. "typename": "vec4",
  388. "type": 16,
  389. "count": 1,
  390. "precision": "mediump "
  391. },
  392. {
  393. "name": "cc_probeInfo",
  394. "typename": "vec4",
  395. "type": 16,
  396. "count": 1,
  397. "precision": "mediump "
  398. },
  399. {
  400. "name": "cc_debug_view_mode",
  401. "typename": "vec4",
  402. "type": 16,
  403. "count": 1,
  404. "precision": "mediump "
  405. }
  406. ],
  407. "defines": [],
  408. "stageFlags": 17
  409. },
  410. {
  411. "tags": {
  412. "builtin": "global"
  413. },
  414. "name": "CCCamera",
  415. "members": [
  416. {
  417. "name": "cc_matView",
  418. "typename": "mat4",
  419. "type": 25,
  420. "count": 1,
  421. "precision": "highp "
  422. },
  423. {
  424. "name": "cc_matViewInv",
  425. "typename": "mat4",
  426. "type": 25,
  427. "count": 1,
  428. "precision": "highp "
  429. },
  430. {
  431. "name": "cc_matProj",
  432. "typename": "mat4",
  433. "type": 25,
  434. "count": 1,
  435. "precision": "highp "
  436. },
  437. {
  438. "name": "cc_matProjInv",
  439. "typename": "mat4",
  440. "type": 25,
  441. "count": 1,
  442. "precision": "highp "
  443. },
  444. {
  445. "name": "cc_matViewProj",
  446. "typename": "mat4",
  447. "type": 25,
  448. "count": 1,
  449. "precision": "highp "
  450. },
  451. {
  452. "name": "cc_matViewProjInv",
  453. "typename": "mat4",
  454. "type": 25,
  455. "count": 1,
  456. "precision": "highp "
  457. },
  458. {
  459. "name": "cc_cameraPos",
  460. "typename": "vec4",
  461. "type": 16,
  462. "count": 1,
  463. "precision": "highp "
  464. },
  465. {
  466. "name": "cc_surfaceTransform",
  467. "typename": "vec4",
  468. "type": 16,
  469. "count": 1,
  470. "precision": "mediump "
  471. },
  472. {
  473. "name": "cc_screenScale",
  474. "typename": "vec4",
  475. "type": 16,
  476. "count": 1,
  477. "precision": "mediump "
  478. },
  479. {
  480. "name": "cc_exposure",
  481. "typename": "vec4",
  482. "type": 16,
  483. "count": 1,
  484. "precision": "mediump "
  485. },
  486. {
  487. "name": "cc_mainLitDir",
  488. "typename": "vec4",
  489. "type": 16,
  490. "count": 1,
  491. "precision": "mediump "
  492. },
  493. {
  494. "name": "cc_mainLitColor",
  495. "typename": "vec4",
  496. "type": 16,
  497. "count": 1,
  498. "precision": "mediump "
  499. },
  500. {
  501. "name": "cc_ambientSky",
  502. "typename": "vec4",
  503. "type": 16,
  504. "count": 1,
  505. "precision": "mediump "
  506. },
  507. {
  508. "name": "cc_ambientGround",
  509. "typename": "vec4",
  510. "type": 16,
  511. "count": 1,
  512. "precision": "mediump "
  513. },
  514. {
  515. "name": "cc_fogColor",
  516. "typename": "vec4",
  517. "type": 16,
  518. "count": 1,
  519. "precision": "mediump "
  520. },
  521. {
  522. "name": "cc_fogBase",
  523. "typename": "vec4",
  524. "type": 16,
  525. "count": 1,
  526. "precision": "mediump "
  527. },
  528. {
  529. "name": "cc_fogAdd",
  530. "typename": "vec4",
  531. "type": 16,
  532. "count": 1,
  533. "precision": "mediump "
  534. },
  535. {
  536. "name": "cc_nearFar",
  537. "typename": "vec4",
  538. "type": 16,
  539. "count": 1,
  540. "precision": "mediump "
  541. },
  542. {
  543. "name": "cc_viewPort",
  544. "typename": "vec4",
  545. "type": 16,
  546. "count": 1,
  547. "precision": "mediump "
  548. }
  549. ],
  550. "defines": [],
  551. "stageFlags": 17
  552. }
  553. ],
  554. "samplerTextures": [
  555. {
  556. "name": "DepthTex",
  557. "type": 28,
  558. "count": 1,
  559. "defines": [],
  560. "stageFlags": 16,
  561. "sampleType": 0,
  562. "binding": 1
  563. },
  564. {
  565. "name": "AOTexNearest",
  566. "type": 28,
  567. "count": 1,
  568. "defines": [],
  569. "stageFlags": 16,
  570. "sampleType": 0,
  571. "binding": 3
  572. }
  573. ],
  574. "samplers": [],
  575. "textures": [],
  576. "buffers": [],
  577. "images": [],
  578. "subpassInputs": []
  579. }
  580. ],
  581. "hash": 4212493832,
  582. "glsl4": {
  583. "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}",
  584. "frag": "\nprecision highp float;\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)\nfloat saturate(float value) { return clamp(value, 0.0, 1.0); }\nvec2 saturate(vec2 value) { return clamp(value, vec2(0.0), vec2(1.0)); }\nvec3 saturate(vec3 value) { return clamp(value, vec3(0.0), vec3(1.0)); }\nvec4 saturate(vec4 value) { return clamp(value, vec4(0.0), vec4(1.0)); }\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\nfloat GetCameraDepthRH(float depthHS, mat4 matProj)\n{\n return -matProj[3][2] / (depthHS + matProj[2][2]);\n}\nfloat GetCameraDepthRH(float depthHS, float matProj32, float matProj22)\n{\n return -matProj32 / (depthHS + matProj22);\n}\nvec4 GetWorldPosFromNDCPosRH(vec3 posHS, mat4 matProj, mat4 matViewProjInv)\n{\n float w = -GetCameraDepthRH(posHS.z, matProj);\n return matViewProjInv * vec4(posHS * w, w);\n}\nfloat rsqrt(float value) { return 1.0 / sqrt(value); }\nvec2 rsqrt(vec2 value) { return vec2(1.0) / sqrt(value); }\nvec3 rsqrt(vec3 value) { return vec3(1.0) / sqrt(value); }\nvec4 rsqrt(vec4 value) { return vec4(1.0) / sqrt(value); }\nfloat rand(vec2 seeds_zero_to_one) {\n return fract(sin(dot(seeds_zero_to_one.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n#if CC_USE_FOG != 4\n float LinearFog(vec4 pos, vec3 cameraPos, float fogStart, float fogEnd) {\n vec4 wPos = pos;\n float cam_dis = distance(cameraPos, wPos.xyz);\n return clamp((fogEnd - cam_dis) / (fogEnd - fogStart), 0., 1.);\n }\n float ExpFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n vec4 wPos = pos;\n float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n float f = exp(-cam_dis * fogDensity);\n return f;\n }\n float ExpSquaredFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n vec4 wPos = pos;\n float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n float f = exp(-cam_dis * cam_dis * fogDensity * fogDensity);\n return f;\n }\n float LayeredFog(vec4 pos, vec3 cameraPos, float fogTop, float fogRange, float fogAtten) {\n vec4 wPos = pos;\n vec3 camWorldProj = cameraPos.xyz;\n camWorldProj.y = 0.;\n vec3 worldPosProj = wPos.xyz;\n worldPosProj.y = 0.;\n float fDeltaD = distance(worldPosProj, camWorldProj) / fogAtten * 2.0;\n float fDeltaY, fDensityIntegral;\n if (cameraPos.y > fogTop) {\n if (wPos.y < fogTop) {\n fDeltaY = (fogTop - wPos.y) / fogRange * 2.0;\n fDensityIntegral = fDeltaY * fDeltaY * 0.5;\n }\n else {\n fDeltaY = 0.;\n fDensityIntegral = 0.;\n }\n }\n else {\n if (wPos.y < fogTop) {\n float fDeltaA = (fogTop - cameraPos.y) / fogRange * 2.;\n float fDeltaB = (fogTop - wPos.y) / fogRange * 2.;\n fDeltaY = abs(fDeltaA - fDeltaB);\n fDensityIntegral = abs((fDeltaA * fDeltaA * 0.5) - (fDeltaB * fDeltaB * 0.5));\n }\n else {\n fDeltaY = abs(fogTop - cameraPos.y) / fogRange * 2.;\n fDensityIntegral = abs(fDeltaY * fDeltaY * 0.5);\n }\n }\n float fDensity;\n if (fDeltaY != 0.) {\n fDensity = (sqrt(1.0 + ((fDeltaD / fDeltaY) * (fDeltaD / fDeltaY)))) * fDensityIntegral;\n }\n else {\n fDensity = 0.;\n }\n float f = exp(-fDensity);\n return f;\n }\n#endif\nvoid CC_TRANSFER_FOG_BASE(vec4 pos, out float factor)\n{\n#if CC_USE_FOG == 0\n\tfactor = LinearFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.y);\n#elif CC_USE_FOG == 1\n\tfactor = ExpFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 2\n\tfactor = ExpSquaredFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 3\n\tfactor = LayeredFog(pos, cc_cameraPos.xyz, cc_fogAdd.x, cc_fogAdd.y, cc_fogAdd.z);\n#else\n\tfactor = 1.0;\n#endif\n}\nlayout(set = 1, binding = 0) uniform hbaoUBO {\n vec4 uvDepthToEyePosParams;\n vec4 radiusParam;\n vec4 miscParam;\n vec4 randomTexSize;\n vec4 blurParam;\n};\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nlayout(set = 1, binding = 1) uniform sampler2D DepthTex;\nlayout(set = 1, binding = 2) uniform sampler2D RandomTex;\nvec2 fixUV(vec2 uv)\n{\n return saturate(uv);\n}\nfloat InvLength(vec2 v)\n{\n\treturn rsqrt(dot(v,v));\n}\nfloat Tangent(vec3 P, vec3 S)\n{\n\treturn (P.z - S.z) * InvLength(S.xy - P.xy);\n}\nvec3 UVToEye(vec2 uv, float eye_z)\n{\n uv = g_UVToViewA * uv + g_UVToViewB;\n return vec3(uv * eye_z, eye_z);\n}\nfloat GetLinearDepth(vec2 uv) {\n float depthHS = 0.0;\n #if defined(CC_USE_WGPU)\n depthHS = textureLod(DepthTex, fixUV(uv), 0.0).r * 2.0 - 1.0;\n #else\n depthHS = texture(DepthTex, fixUV(uv)).r * 2.0 - 1.0;\n #endif\n return -GetCameraDepthRH(depthHS, cc_matProj);\n}\nvec3 FetchEyePos(vec2 uv)\n{\n float depth = GetLinearDepth(uv);\n return UVToEye(uv, depth);\n}\nfloat Length2(vec3 v)\n{\n \treturn dot(v, v);\n}\nvec3 MinDiff(vec3 P, vec3 Pr, vec3 Pl)\n{\n \tvec3 V1 = Pr - P;\n \tvec3 V2 = P - Pl;\n \treturn (Length2(V1) < Length2(V2)) ? V1 : V2;\n}\nfloat Falloff(float d2)\n{\n return d2 * g_NegInvR2 + 1.0;\n}\nvec2 SnapUVOffset(vec2 uv)\n{\n return round(uv * g_AOResolution) * g_InvAOResolution;\n}\nfloat TanToSin(float x)\n{\n \treturn x * rsqrt(x*x + 1.0);\n}\nvec3 TangentVector(vec2 deltaUV, vec3 dPdu, vec3 dPdv)\n{\n \treturn deltaUV.x * dPdu + deltaUV.y * dPdv;\n}\nfloat Tangent(vec3 T)\n{\n \treturn -T.z * InvLength(T.xy);\n}\nfloat BiasedTangent(vec3 T)\n{\n return Tangent(T) + g_TanAngleBias;\n}\nvec2 RotateDirections(vec2 Dir, vec2 CosSin)\n{\n \treturn vec2(Dir.x*CosSin.x - Dir.y*CosSin.y,\n \t\tDir.x*CosSin.y + Dir.y*CosSin.x);\n}\nfloat IntegerateOcclusion(vec2 uv0,\n vec2 snapped_duv,\n vec3 P,\n vec3 dPdu,\n vec3 dPdv,\n inout float tanH)\n{\n float ao = 0.0;\n vec3 T1 = TangentVector(snapped_duv, dPdu, dPdv);\n float tanT = BiasedTangent(T1);\n float sinT = TanToSin(tanT);\n vec3 S = FetchEyePos(uv0 + snapped_duv);\n float tanS = Tangent(P, S);\n float sinS = TanToSin(tanS);\n float d2 = Length2(S - P);\n if ((d2 < g_R2) && (tanS > tanT))\n {\n ao = Falloff(d2) * (sinS - sinT);\n tanH = max(tanH, tanS);\n }\n return ao;\n}\nfloat HorizonOcclusion(vec2 deltaUV,\n vec2 texelDeltaUV,\n vec2 uv0,\n vec3 P,\n float numSteps,\n float randstep,\n vec3 dPdu,\n vec3 dPdv)\n{\n float ao = 0.0;\n vec2 uv = uv0 + SnapUVOffset( randstep * deltaUV );\n deltaUV = SnapUVOffset( deltaUV );\n vec3 T = deltaUV.x * dPdu + deltaUV.y * dPdv;\n float tanH = BiasedTangent(T);\n#if SAMPLE_FIRST_STEP\n vec2 snapped_duv = SnapUVOffset( randstep * deltaUV + texelDeltaUV );\n ao = IntegerateOcclusion(uv0, snapped_duv, P, dPdu, dPdv, tanH);\n --numSteps;\n#endif\n float sinH = tanH / sqrt(1.0 + tanH*tanH);\n for (float j = 1.0; j <= NUM_STEPS_LOOP; j += 1.0)\n {\n if (j <= numSteps)\n {\n uv += deltaUV;\n vec3 S = FetchEyePos(uv);\n float tanS = Tangent(P, S);\n float d2 = Length2(S - P);\n if ((d2 < g_R2) && (tanS > tanH))\n {\n float sinS = tanS / sqrt(1.0 + tanS*tanS);\n ao += Falloff(d2) * (sinS - sinH);\n tanH = tanS;\n sinH = sinS;\n }\n }\n }\n return ao;\n}\nvoid ComputeSteps(inout vec2 step_size_uv, inout float numSteps, float ray_radius_pix, float rand)\n{\n numSteps = min(NUM_STEPS, ray_radius_pix);\n float step_size_pix = ray_radius_pix / (numSteps + 1.0);\n float maxNumSteps = g_MaxRadiusPixels / step_size_pix;\n if (maxNumSteps < numSteps)\n {\n numSteps = floor(maxNumSteps + rand);\n numSteps = max(numSteps, 1.0);\n step_size_pix = g_MaxRadiusPixels / numSteps;\n }\n step_size_uv = step_size_pix * g_InvAOResolution;\n}\nfloat CalculateAO(vec2 uv)\n{\n vec3 P = FetchEyePos(uv);\n vec3 rand = texture(RandomTex, uv * g_AOResolution.xy * randomTexSize.zw).xyz;\n vec2 ray_radius_uv = 0.5 * g_R * g_FocalLen / P.z;\n float ray_radius_pix = ray_radius_uv.x * g_AOResolution.x;\n if (ray_radius_pix < 1.0)\n {\n return 1.0;\n }\n float numSteps;\n vec2 step_size;\n ComputeSteps(step_size, numSteps, ray_radius_pix, rand.z);\n vec3 Pr = FetchEyePos(uv + vec2(g_InvAOResolution.x, 0.0));\n vec3 Pl = FetchEyePos(uv + vec2(-g_InvAOResolution.x, 0.0));\n vec3 Pt = FetchEyePos(uv + vec2(0.0, g_InvAOResolution.y));\n vec3 Pb = FetchEyePos(uv + vec2(0.0, -g_InvAOResolution.y));\n vec3 dPdu = MinDiff(P, Pr, Pl);\n vec3 dPdv = MinDiff(P, Pt, Pb) * (g_AOResolution.y * g_InvAOResolution.x);\n float ao = 0.0;\n float alpha = CONSTANT_2PI * INV_NUM_DIRECTIONS;\n for (int d = 0; d < NUM_DIRECTIONS; ++d)\n {\n float angle = alpha * float(d);\n vec2 dir = RotateDirections(vec2(cos(angle), sin(angle)), rand.xy);\n vec2 deltaUV = dir * step_size.xy;\n vec2 texelDeltaUV = dir * g_InvAOResolution;\n ao += HorizonOcclusion(deltaUV, texelDeltaUV, uv, P, numSteps, rand.z, dPdu, dPdv);\n }\n ao = 1.0 - ao * INV_NUM_DIRECTIONS * g_Strength;\n #if CC_USE_FOG != 4 && !CC_USE_FLOAT_OUTPUT\n float fogFactor = 1.0;\n float depth = 0.0;\n #if defined(CC_USE_WGPU)\n depth = textureLod(DepthTex, uv, 0.0).r;\n #else\n depth = texture(DepthTex, uv).r;\n #endif\n vec3 posHS = vec3(uv, depth) * 2.0 - vec3(1.0);\n posHS.xy = cc_cameraPos.w == 0.0 ? vec2(posHS.xy.x, -posHS.xy.y) : posHS.xy;\n vec4 worldPos = GetWorldPosFromNDCPosRH(posHS, cc_matProj, cc_matViewProjInv);\n CC_TRANSFER_FOG_BASE(vec4(worldPos.xyz, 1.0), fogFactor);\n ao = mix(1.0, ao, pow(fogFactor * 0.9, 4.0));\n #endif\n return ao;\n}\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nlayout(set = 1, binding = 3) uniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\n#define g_AOSaturation blurParam.w\nlayout(location = 0) in vec2 v_uv;\nlayout(location = 0) out vec4 fragColor;\nvoid main () {\n float ao = CalculateAO(v_uv);\n fragColor = vec4(ao, ao, ao, 1.0);\n}"
  585. },
  586. "glsl3": {
  587. "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}",
  588. "frag": "\nprecision highp float;\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)\nfloat saturate(float value) { return clamp(value, 0.0, 1.0); }\nvec2 saturate(vec2 value) { return clamp(value, vec2(0.0), vec2(1.0)); }\nvec3 saturate(vec3 value) { return clamp(value, vec3(0.0), vec3(1.0)); }\nvec4 saturate(vec4 value) { return clamp(value, vec4(0.0), vec4(1.0)); }\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\nfloat GetCameraDepthRH(float depthHS, mat4 matProj)\n{\n return -matProj[3][2] / (depthHS + matProj[2][2]);\n}\nfloat GetCameraDepthRH(float depthHS, float matProj32, float matProj22)\n{\n return -matProj32 / (depthHS + matProj22);\n}\nvec4 GetWorldPosFromNDCPosRH(vec3 posHS, mat4 matProj, mat4 matViewProjInv)\n{\n float w = -GetCameraDepthRH(posHS.z, matProj);\n return matViewProjInv * vec4(posHS * w, w);\n}\nfloat rsqrt(float value) { return 1.0 / sqrt(value); }\nvec2 rsqrt(vec2 value) { return vec2(1.0) / sqrt(value); }\nvec3 rsqrt(vec3 value) { return vec3(1.0) / sqrt(value); }\nvec4 rsqrt(vec4 value) { return vec4(1.0) / sqrt(value); }\nfloat rand(vec2 seeds_zero_to_one) {\n return fract(sin(dot(seeds_zero_to_one.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n#if CC_USE_FOG != 4\n float LinearFog(vec4 pos, vec3 cameraPos, float fogStart, float fogEnd) {\n vec4 wPos = pos;\n float cam_dis = distance(cameraPos, wPos.xyz);\n return clamp((fogEnd - cam_dis) / (fogEnd - fogStart), 0., 1.);\n }\n float ExpFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n vec4 wPos = pos;\n float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n float f = exp(-cam_dis * fogDensity);\n return f;\n }\n float ExpSquaredFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n vec4 wPos = pos;\n float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n float f = exp(-cam_dis * cam_dis * fogDensity * fogDensity);\n return f;\n }\n float LayeredFog(vec4 pos, vec3 cameraPos, float fogTop, float fogRange, float fogAtten) {\n vec4 wPos = pos;\n vec3 camWorldProj = cameraPos.xyz;\n camWorldProj.y = 0.;\n vec3 worldPosProj = wPos.xyz;\n worldPosProj.y = 0.;\n float fDeltaD = distance(worldPosProj, camWorldProj) / fogAtten * 2.0;\n float fDeltaY, fDensityIntegral;\n if (cameraPos.y > fogTop) {\n if (wPos.y < fogTop) {\n fDeltaY = (fogTop - wPos.y) / fogRange * 2.0;\n fDensityIntegral = fDeltaY * fDeltaY * 0.5;\n }\n else {\n fDeltaY = 0.;\n fDensityIntegral = 0.;\n }\n }\n else {\n if (wPos.y < fogTop) {\n float fDeltaA = (fogTop - cameraPos.y) / fogRange * 2.;\n float fDeltaB = (fogTop - wPos.y) / fogRange * 2.;\n fDeltaY = abs(fDeltaA - fDeltaB);\n fDensityIntegral = abs((fDeltaA * fDeltaA * 0.5) - (fDeltaB * fDeltaB * 0.5));\n }\n else {\n fDeltaY = abs(fogTop - cameraPos.y) / fogRange * 2.;\n fDensityIntegral = abs(fDeltaY * fDeltaY * 0.5);\n }\n }\n float fDensity;\n if (fDeltaY != 0.) {\n fDensity = (sqrt(1.0 + ((fDeltaD / fDeltaY) * (fDeltaD / fDeltaY)))) * fDensityIntegral;\n }\n else {\n fDensity = 0.;\n }\n float f = exp(-fDensity);\n return f;\n }\n#endif\nvoid CC_TRANSFER_FOG_BASE(vec4 pos, out float factor)\n{\n#if CC_USE_FOG == 0\n\tfactor = LinearFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.y);\n#elif CC_USE_FOG == 1\n\tfactor = ExpFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 2\n\tfactor = ExpSquaredFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 3\n\tfactor = LayeredFog(pos, cc_cameraPos.xyz, cc_fogAdd.x, cc_fogAdd.y, cc_fogAdd.z);\n#else\n\tfactor = 1.0;\n#endif\n}\nlayout(std140) uniform hbaoUBO {\n vec4 uvDepthToEyePosParams;\n vec4 radiusParam;\n vec4 miscParam;\n vec4 randomTexSize;\n vec4 blurParam;\n};\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nuniform sampler2D DepthTex;\nuniform sampler2D RandomTex;\nvec2 fixUV(vec2 uv)\n{\n return saturate(uv);\n}\nfloat InvLength(vec2 v)\n{\n\treturn rsqrt(dot(v,v));\n}\nfloat Tangent(vec3 P, vec3 S)\n{\n\treturn (P.z - S.z) * InvLength(S.xy - P.xy);\n}\nvec3 UVToEye(vec2 uv, float eye_z)\n{\n uv = g_UVToViewA * uv + g_UVToViewB;\n return vec3(uv * eye_z, eye_z);\n}\nfloat GetLinearDepth(vec2 uv) {\n float depthHS = 0.0;\n #if defined(CC_USE_WGPU)\n depthHS = textureLod(DepthTex, fixUV(uv), 0.0).r * 2.0 - 1.0;\n #else\n depthHS = texture(DepthTex, fixUV(uv)).r * 2.0 - 1.0;\n #endif\n return -GetCameraDepthRH(depthHS, cc_matProj);\n}\nvec3 FetchEyePos(vec2 uv)\n{\n float depth = GetLinearDepth(uv);\n return UVToEye(uv, depth);\n}\nfloat Length2(vec3 v)\n{\n \treturn dot(v, v);\n}\nvec3 MinDiff(vec3 P, vec3 Pr, vec3 Pl)\n{\n \tvec3 V1 = Pr - P;\n \tvec3 V2 = P - Pl;\n \treturn (Length2(V1) < Length2(V2)) ? V1 : V2;\n}\nfloat Falloff(float d2)\n{\n return d2 * g_NegInvR2 + 1.0;\n}\nvec2 SnapUVOffset(vec2 uv)\n{\n return round(uv * g_AOResolution) * g_InvAOResolution;\n}\nfloat TanToSin(float x)\n{\n \treturn x * rsqrt(x*x + 1.0);\n}\nvec3 TangentVector(vec2 deltaUV, vec3 dPdu, vec3 dPdv)\n{\n \treturn deltaUV.x * dPdu + deltaUV.y * dPdv;\n}\nfloat Tangent(vec3 T)\n{\n \treturn -T.z * InvLength(T.xy);\n}\nfloat BiasedTangent(vec3 T)\n{\n return Tangent(T) + g_TanAngleBias;\n}\nvec2 RotateDirections(vec2 Dir, vec2 CosSin)\n{\n \treturn vec2(Dir.x*CosSin.x - Dir.y*CosSin.y,\n \t\tDir.x*CosSin.y + Dir.y*CosSin.x);\n}\nfloat IntegerateOcclusion(vec2 uv0,\n vec2 snapped_duv,\n vec3 P,\n vec3 dPdu,\n vec3 dPdv,\n inout float tanH)\n{\n float ao = 0.0;\n vec3 T1 = TangentVector(snapped_duv, dPdu, dPdv);\n float tanT = BiasedTangent(T1);\n float sinT = TanToSin(tanT);\n vec3 S = FetchEyePos(uv0 + snapped_duv);\n float tanS = Tangent(P, S);\n float sinS = TanToSin(tanS);\n float d2 = Length2(S - P);\n if ((d2 < g_R2) && (tanS > tanT))\n {\n ao = Falloff(d2) * (sinS - sinT);\n tanH = max(tanH, tanS);\n }\n return ao;\n}\nfloat HorizonOcclusion(vec2 deltaUV,\n vec2 texelDeltaUV,\n vec2 uv0,\n vec3 P,\n float numSteps,\n float randstep,\n vec3 dPdu,\n vec3 dPdv)\n{\n float ao = 0.0;\n vec2 uv = uv0 + SnapUVOffset( randstep * deltaUV );\n deltaUV = SnapUVOffset( deltaUV );\n vec3 T = deltaUV.x * dPdu + deltaUV.y * dPdv;\n float tanH = BiasedTangent(T);\n#if SAMPLE_FIRST_STEP\n vec2 snapped_duv = SnapUVOffset( randstep * deltaUV + texelDeltaUV );\n ao = IntegerateOcclusion(uv0, snapped_duv, P, dPdu, dPdv, tanH);\n --numSteps;\n#endif\n float sinH = tanH / sqrt(1.0 + tanH*tanH);\n for (float j = 1.0; j <= NUM_STEPS_LOOP; j += 1.0)\n {\n if (j <= numSteps)\n {\n uv += deltaUV;\n vec3 S = FetchEyePos(uv);\n float tanS = Tangent(P, S);\n float d2 = Length2(S - P);\n if ((d2 < g_R2) && (tanS > tanH))\n {\n float sinS = tanS / sqrt(1.0 + tanS*tanS);\n ao += Falloff(d2) * (sinS - sinH);\n tanH = tanS;\n sinH = sinS;\n }\n }\n }\n return ao;\n}\nvoid ComputeSteps(inout vec2 step_size_uv, inout float numSteps, float ray_radius_pix, float rand)\n{\n numSteps = min(NUM_STEPS, ray_radius_pix);\n float step_size_pix = ray_radius_pix / (numSteps + 1.0);\n float maxNumSteps = g_MaxRadiusPixels / step_size_pix;\n if (maxNumSteps < numSteps)\n {\n numSteps = floor(maxNumSteps + rand);\n numSteps = max(numSteps, 1.0);\n step_size_pix = g_MaxRadiusPixels / numSteps;\n }\n step_size_uv = step_size_pix * g_InvAOResolution;\n}\nfloat CalculateAO(vec2 uv)\n{\n vec3 P = FetchEyePos(uv);\n vec3 rand = texture(RandomTex, uv * g_AOResolution.xy * randomTexSize.zw).xyz;\n vec2 ray_radius_uv = 0.5 * g_R * g_FocalLen / P.z;\n float ray_radius_pix = ray_radius_uv.x * g_AOResolution.x;\n if (ray_radius_pix < 1.0)\n {\n return 1.0;\n }\n float numSteps;\n vec2 step_size;\n ComputeSteps(step_size, numSteps, ray_radius_pix, rand.z);\n vec3 Pr = FetchEyePos(uv + vec2(g_InvAOResolution.x, 0.0));\n vec3 Pl = FetchEyePos(uv + vec2(-g_InvAOResolution.x, 0.0));\n vec3 Pt = FetchEyePos(uv + vec2(0.0, g_InvAOResolution.y));\n vec3 Pb = FetchEyePos(uv + vec2(0.0, -g_InvAOResolution.y));\n vec3 dPdu = MinDiff(P, Pr, Pl);\n vec3 dPdv = MinDiff(P, Pt, Pb) * (g_AOResolution.y * g_InvAOResolution.x);\n float ao = 0.0;\n float alpha = CONSTANT_2PI * INV_NUM_DIRECTIONS;\n for (int d = 0; d < NUM_DIRECTIONS; ++d)\n {\n float angle = alpha * float(d);\n vec2 dir = RotateDirections(vec2(cos(angle), sin(angle)), rand.xy);\n vec2 deltaUV = dir * step_size.xy;\n vec2 texelDeltaUV = dir * g_InvAOResolution;\n ao += HorizonOcclusion(deltaUV, texelDeltaUV, uv, P, numSteps, rand.z, dPdu, dPdv);\n }\n ao = 1.0 - ao * INV_NUM_DIRECTIONS * g_Strength;\n #if CC_USE_FOG != 4 && !CC_USE_FLOAT_OUTPUT\n float fogFactor = 1.0;\n float depth = 0.0;\n #if defined(CC_USE_WGPU)\n depth = textureLod(DepthTex, uv, 0.0).r;\n #else\n depth = texture(DepthTex, uv).r;\n #endif\n vec3 posHS = vec3(uv, depth) * 2.0 - vec3(1.0);\n posHS.xy = cc_cameraPos.w == 0.0 ? vec2(posHS.xy.x, -posHS.xy.y) : posHS.xy;\n vec4 worldPos = GetWorldPosFromNDCPosRH(posHS, cc_matProj, cc_matViewProjInv);\n CC_TRANSFER_FOG_BASE(vec4(worldPos.xyz, 1.0), fogFactor);\n ao = mix(1.0, ao, pow(fogFactor * 0.9, 4.0));\n #endif\n return ao;\n}\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nuniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\n#define g_AOSaturation blurParam.w\nin vec2 v_uv;\nlayout(location = 0) out vec4 fragColor;\nvoid main () {\n float ao = CalculateAO(v_uv);\n fragColor = vec4(ao, ao, ao, 1.0);\n}"
  589. },
  590. "glsl1": {
  591. "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}",
  592. "frag": "\nprecision highp float;\nprecision highp float;\nuniform mediump vec4 cc_screenSize;\nuniform highp mat4 cc_matProj;\n uniform highp mat4 cc_matViewProjInv;\n uniform highp vec4 cc_cameraPos;\n uniform mediump vec4 cc_fogBase;\n uniform mediump vec4 cc_fogAdd;\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)\nfloat saturate(float value) { return clamp(value, 0.0, 1.0); }\nvec2 saturate(vec2 value) { return clamp(value, vec2(0.0), vec2(1.0)); }\nvec3 saturate(vec3 value) { return clamp(value, vec3(0.0), vec3(1.0)); }\nvec4 saturate(vec4 value) { return clamp(value, vec4(0.0), vec4(1.0)); }\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\nfloat GetCameraDepthRH(float depthHS, mat4 matProj)\n{\n return -matProj[3][2] / (depthHS + matProj[2][2]);\n}\nfloat GetCameraDepthRH(float depthHS, float matProj32, float matProj22)\n{\n return -matProj32 / (depthHS + matProj22);\n}\nvec4 GetWorldPosFromNDCPosRH(vec3 posHS, mat4 matProj, mat4 matViewProjInv)\n{\n float w = -GetCameraDepthRH(posHS.z, matProj);\n return matViewProjInv * vec4(posHS * w, w);\n}\n float round(float value) {\n float f = fract(value);\n return value - f + (f < 0.5 ? 0.0 : 1.0);\n }\n vec2 round(vec2 value) { return vec2(round(value.x), round(value.y)); }\n vec3 round(vec3 value) { return vec3(round(value.x), round(value.y), round(value.z)); }\n vec4 round(vec4 value) { return vec4(round(value.x), round(value.y), round(value.z), round(value.w)); }\nfloat rsqrt(float value) { return 1.0 / sqrt(value); }\nvec2 rsqrt(vec2 value) { return vec2(1.0) / sqrt(value); }\nvec3 rsqrt(vec3 value) { return vec3(1.0) / sqrt(value); }\nvec4 rsqrt(vec4 value) { return vec4(1.0) / sqrt(value); }\nfloat rand(vec2 seeds_zero_to_one) {\n return fract(sin(dot(seeds_zero_to_one.xy, vec2(12.9898, 78.233))) * 43758.5453);\n}\n#if CC_USE_FOG != 4\n float LinearFog(vec4 pos, vec3 cameraPos, float fogStart, float fogEnd) {\n vec4 wPos = pos;\n float cam_dis = distance(cameraPos, wPos.xyz);\n return clamp((fogEnd - cam_dis) / (fogEnd - fogStart), 0., 1.);\n }\n float ExpFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n vec4 wPos = pos;\n float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n float f = exp(-cam_dis * fogDensity);\n return f;\n }\n float ExpSquaredFog(vec4 pos, vec3 cameraPos, float fogStart, float fogDensity, float fogAtten) {\n vec4 wPos = pos;\n float cam_dis = max(distance(cameraPos, wPos.xyz) - fogStart, 0.0) / fogAtten * 4.;\n float f = exp(-cam_dis * cam_dis * fogDensity * fogDensity);\n return f;\n }\n float LayeredFog(vec4 pos, vec3 cameraPos, float fogTop, float fogRange, float fogAtten) {\n vec4 wPos = pos;\n vec3 camWorldProj = cameraPos.xyz;\n camWorldProj.y = 0.;\n vec3 worldPosProj = wPos.xyz;\n worldPosProj.y = 0.;\n float fDeltaD = distance(worldPosProj, camWorldProj) / fogAtten * 2.0;\n float fDeltaY, fDensityIntegral;\n if (cameraPos.y > fogTop) {\n if (wPos.y < fogTop) {\n fDeltaY = (fogTop - wPos.y) / fogRange * 2.0;\n fDensityIntegral = fDeltaY * fDeltaY * 0.5;\n }\n else {\n fDeltaY = 0.;\n fDensityIntegral = 0.;\n }\n }\n else {\n if (wPos.y < fogTop) {\n float fDeltaA = (fogTop - cameraPos.y) / fogRange * 2.;\n float fDeltaB = (fogTop - wPos.y) / fogRange * 2.;\n fDeltaY = abs(fDeltaA - fDeltaB);\n fDensityIntegral = abs((fDeltaA * fDeltaA * 0.5) - (fDeltaB * fDeltaB * 0.5));\n }\n else {\n fDeltaY = abs(fogTop - cameraPos.y) / fogRange * 2.;\n fDensityIntegral = abs(fDeltaY * fDeltaY * 0.5);\n }\n }\n float fDensity;\n if (fDeltaY != 0.) {\n fDensity = (sqrt(1.0 + ((fDeltaD / fDeltaY) * (fDeltaD / fDeltaY)))) * fDensityIntegral;\n }\n else {\n fDensity = 0.;\n }\n float f = exp(-fDensity);\n return f;\n }\n#endif\nvoid CC_TRANSFER_FOG_BASE(vec4 pos, out float factor)\n{\n#if CC_USE_FOG == 0\n\tfactor = LinearFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.y);\n#elif CC_USE_FOG == 1\n\tfactor = ExpFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 2\n\tfactor = ExpSquaredFog(pos, cc_cameraPos.xyz, cc_fogBase.x, cc_fogBase.z, cc_fogAdd.z);\n#elif CC_USE_FOG == 3\n\tfactor = LayeredFog(pos, cc_cameraPos.xyz, cc_fogAdd.x, cc_fogAdd.y, cc_fogAdd.z);\n#else\n\tfactor = 1.0;\n#endif\n}\n uniform vec4 uvDepthToEyePosParams;\n uniform vec4 radiusParam;\n uniform vec4 miscParam;\n uniform vec4 randomTexSize;\n uniform vec4 blurParam;\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nuniform sampler2D DepthTex;\nuniform sampler2D RandomTex;\nvec2 fixUV(vec2 uv)\n{\n return saturate(uv);\n}\nfloat InvLength(vec2 v)\n{\n\treturn rsqrt(dot(v,v));\n}\nfloat Tangent(vec3 P, vec3 S)\n{\n\treturn (P.z - S.z) * InvLength(S.xy - P.xy);\n}\nvec3 UVToEye(vec2 uv, float eye_z)\n{\n uv = g_UVToViewA * uv + g_UVToViewB;\n return vec3(uv * eye_z, eye_z);\n}\nfloat GetLinearDepth(vec2 uv) {\n float depthHS = 0.0;\n #if defined(CC_USE_WGPU)\n depthHS = texture2DLod(DepthTex, fixUV(uv), 0.0).r * 2.0 - 1.0;\n #else\n depthHS = texture2D(DepthTex, fixUV(uv)).r * 2.0 - 1.0;\n #endif\n return -GetCameraDepthRH(depthHS, cc_matProj);\n}\nvec3 FetchEyePos(vec2 uv)\n{\n float depth = GetLinearDepth(uv);\n return UVToEye(uv, depth);\n}\nfloat Length2(vec3 v)\n{\n \treturn dot(v, v);\n}\nvec3 MinDiff(vec3 P, vec3 Pr, vec3 Pl)\n{\n \tvec3 V1 = Pr - P;\n \tvec3 V2 = P - Pl;\n \treturn (Length2(V1) < Length2(V2)) ? V1 : V2;\n}\nfloat Falloff(float d2)\n{\n return d2 * g_NegInvR2 + 1.0;\n}\nvec2 SnapUVOffset(vec2 uv)\n{\n return round(uv * g_AOResolution) * g_InvAOResolution;\n}\nfloat TanToSin(float x)\n{\n \treturn x * rsqrt(x*x + 1.0);\n}\nvec3 TangentVector(vec2 deltaUV, vec3 dPdu, vec3 dPdv)\n{\n \treturn deltaUV.x * dPdu + deltaUV.y * dPdv;\n}\nfloat Tangent(vec3 T)\n{\n \treturn -T.z * InvLength(T.xy);\n}\nfloat BiasedTangent(vec3 T)\n{\n return Tangent(T) + g_TanAngleBias;\n}\nvec2 RotateDirections(vec2 Dir, vec2 CosSin)\n{\n \treturn vec2(Dir.x*CosSin.x - Dir.y*CosSin.y,\n \t\tDir.x*CosSin.y + Dir.y*CosSin.x);\n}\nfloat IntegerateOcclusion(vec2 uv0,\n vec2 snapped_duv,\n vec3 P,\n vec3 dPdu,\n vec3 dPdv,\n inout float tanH)\n{\n float ao = 0.0;\n vec3 T1 = TangentVector(snapped_duv, dPdu, dPdv);\n float tanT = BiasedTangent(T1);\n float sinT = TanToSin(tanT);\n vec3 S = FetchEyePos(uv0 + snapped_duv);\n float tanS = Tangent(P, S);\n float sinS = TanToSin(tanS);\n float d2 = Length2(S - P);\n if ((d2 < g_R2) && (tanS > tanT))\n {\n ao = Falloff(d2) * (sinS - sinT);\n tanH = max(tanH, tanS);\n }\n return ao;\n}\nfloat HorizonOcclusion(vec2 deltaUV,\n vec2 texelDeltaUV,\n vec2 uv0,\n vec3 P,\n float numSteps,\n float randstep,\n vec3 dPdu,\n vec3 dPdv)\n{\n float ao = 0.0;\n vec2 uv = uv0 + SnapUVOffset( randstep * deltaUV );\n deltaUV = SnapUVOffset( deltaUV );\n vec3 T = deltaUV.x * dPdu + deltaUV.y * dPdv;\n float tanH = BiasedTangent(T);\n#if SAMPLE_FIRST_STEP\n vec2 snapped_duv = SnapUVOffset( randstep * deltaUV + texelDeltaUV );\n ao = IntegerateOcclusion(uv0, snapped_duv, P, dPdu, dPdv, tanH);\n --numSteps;\n#endif\n float sinH = tanH / sqrt(1.0 + tanH*tanH);\n for (float j = 1.0; j <= NUM_STEPS_LOOP; j += 1.0)\n {\n if (j <= numSteps)\n {\n uv += deltaUV;\n vec3 S = FetchEyePos(uv);\n float tanS = Tangent(P, S);\n float d2 = Length2(S - P);\n if ((d2 < g_R2) && (tanS > tanH))\n {\n float sinS = tanS / sqrt(1.0 + tanS*tanS);\n ao += Falloff(d2) * (sinS - sinH);\n tanH = tanS;\n sinH = sinS;\n }\n }\n }\n return ao;\n}\nvoid ComputeSteps(inout vec2 step_size_uv, inout float numSteps, float ray_radius_pix, float rand)\n{\n numSteps = min(NUM_STEPS, ray_radius_pix);\n float step_size_pix = ray_radius_pix / (numSteps + 1.0);\n float maxNumSteps = g_MaxRadiusPixels / step_size_pix;\n if (maxNumSteps < numSteps)\n {\n numSteps = floor(maxNumSteps + rand);\n numSteps = max(numSteps, 1.0);\n step_size_pix = g_MaxRadiusPixels / numSteps;\n }\n step_size_uv = step_size_pix * g_InvAOResolution;\n}\nfloat CalculateAO(vec2 uv)\n{\n vec3 P = FetchEyePos(uv);\n vec3 rand = texture2D(RandomTex, uv * g_AOResolution.xy * randomTexSize.zw).xyz;\n vec2 ray_radius_uv = 0.5 * g_R * g_FocalLen / P.z;\n float ray_radius_pix = ray_radius_uv.x * g_AOResolution.x;\n if (ray_radius_pix < 1.0)\n {\n return 1.0;\n }\n float numSteps;\n vec2 step_size;\n ComputeSteps(step_size, numSteps, ray_radius_pix, rand.z);\n vec3 Pr = FetchEyePos(uv + vec2(g_InvAOResolution.x, 0.0));\n vec3 Pl = FetchEyePos(uv + vec2(-g_InvAOResolution.x, 0.0));\n vec3 Pt = FetchEyePos(uv + vec2(0.0, g_InvAOResolution.y));\n vec3 Pb = FetchEyePos(uv + vec2(0.0, -g_InvAOResolution.y));\n vec3 dPdu = MinDiff(P, Pr, Pl);\n vec3 dPdv = MinDiff(P, Pt, Pb) * (g_AOResolution.y * g_InvAOResolution.x);\n float ao = 0.0;\n float alpha = CONSTANT_2PI * INV_NUM_DIRECTIONS;\n for (int d = 0; d < NUM_DIRECTIONS; ++d)\n {\n float angle = alpha * float(d);\n vec2 dir = RotateDirections(vec2(cos(angle), sin(angle)), rand.xy);\n vec2 deltaUV = dir * step_size.xy;\n vec2 texelDeltaUV = dir * g_InvAOResolution;\n ao += HorizonOcclusion(deltaUV, texelDeltaUV, uv, P, numSteps, rand.z, dPdu, dPdv);\n }\n ao = 1.0 - ao * INV_NUM_DIRECTIONS * g_Strength;\n #if CC_USE_FOG != 4 && !CC_USE_FLOAT_OUTPUT\n float fogFactor = 1.0;\n float depth = 0.0;\n #if defined(CC_USE_WGPU)\n depth = texture2DLod(DepthTex, uv, 0.0).r;\n #else\n depth = texture2D(DepthTex, uv).r;\n #endif\n vec3 posHS = vec3(uv, depth) * 2.0 - vec3(1.0);\n posHS.xy = cc_cameraPos.w == 0.0 ? vec2(posHS.xy.x, -posHS.xy.y) : posHS.xy;\n vec4 worldPos = GetWorldPosFromNDCPosRH(posHS, cc_matProj, cc_matViewProjInv);\n CC_TRANSFER_FOG_BASE(vec4(worldPos.xyz, 1.0), fogFactor);\n ao = mix(1.0, ao, pow(fogFactor * 0.9, 4.0));\n #endif\n return ao;\n}\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nuniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\n#define g_AOSaturation blurParam.w\nvarying vec2 v_uv;\nvoid main () {\n float ao = CalculateAO(v_uv);\n gl_FragColor = vec4(ao, ao, ao, 1.0);\n}"
  593. },
  594. "builtins": {
  595. "globals": {
  596. "blocks": [
  597. {
  598. "name": "CCGlobal",
  599. "defines": []
  600. },
  601. {
  602. "name": "CCCamera",
  603. "defines": []
  604. }
  605. ],
  606. "samplerTextures": [],
  607. "buffers": [],
  608. "images": []
  609. },
  610. "locals": {
  611. "blocks": [],
  612. "samplerTextures": [],
  613. "buffers": [],
  614. "images": []
  615. },
  616. "statistics": {
  617. "CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS": 42,
  618. "CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS": 47
  619. }
  620. },
  621. "defines": [
  622. {
  623. "name": "USE_INSTANCING",
  624. "type": "boolean",
  625. "defines": [],
  626. "editor": {
  627. "elevated": true
  628. }
  629. },
  630. {
  631. "name": "CC_USE_SKINNING",
  632. "type": "boolean",
  633. "defines": []
  634. },
  635. {
  636. "name": "CC_USE_BAKED_ANIMATION",
  637. "type": "boolean",
  638. "defines": [
  639. "USE_INSTANCING"
  640. ]
  641. },
  642. {
  643. "name": "CC_USE_LIGHTMAP",
  644. "type": "boolean",
  645. "defines": [
  646. "USE_INSTANCING"
  647. ]
  648. },
  649. {
  650. "name": "CC_USE_REFLECTION_PROBE",
  651. "type": "boolean",
  652. "defines": [
  653. "USE_INSTANCING"
  654. ]
  655. },
  656. {
  657. "name": "CC_RECEIVE_SHADOW",
  658. "type": "boolean",
  659. "defines": [
  660. "USE_INSTANCING"
  661. ]
  662. },
  663. {
  664. "name": "CC_USE_LIGHT_PROBE",
  665. "type": "boolean",
  666. "defines": [
  667. "USE_INSTANCING"
  668. ]
  669. },
  670. {
  671. "name": "CC_USE_MORPH",
  672. "type": "boolean",
  673. "defines": []
  674. },
  675. {
  676. "name": "CC_USE_FOG",
  677. "type": "number",
  678. "defines": [],
  679. "range": [
  680. 0,
  681. 4
  682. ]
  683. },
  684. {
  685. "name": "SAMPLE_FIRST_STEP",
  686. "type": "boolean",
  687. "defines": []
  688. },
  689. {
  690. "name": "CC_USE_FLOAT_OUTPUT",
  691. "type": "boolean",
  692. "defines": [
  693. "CC_USE_FOG"
  694. ]
  695. }
  696. ],
  697. "name": "pipeline/post-process/hbao|hbao-vs|hbao-fs"
  698. },
  699. {
  700. "blocks": [
  701. {
  702. "name": "hbaoUBO",
  703. "members": [
  704. {
  705. "name": "uvDepthToEyePosParams",
  706. "type": 16,
  707. "count": 1
  708. },
  709. {
  710. "name": "radiusParam",
  711. "type": 16,
  712. "count": 1
  713. },
  714. {
  715. "name": "miscParam",
  716. "type": 16,
  717. "count": 1
  718. },
  719. {
  720. "name": "randomTexSize",
  721. "type": 16,
  722. "count": 1
  723. },
  724. {
  725. "name": "blurParam",
  726. "type": 16,
  727. "count": 1
  728. }
  729. ],
  730. "defines": [],
  731. "stageFlags": 16,
  732. "binding": 0
  733. }
  734. ],
  735. "samplerTextures": [
  736. {
  737. "name": "RandomTex",
  738. "type": 28,
  739. "count": 1,
  740. "defines": [],
  741. "stageFlags": 16,
  742. "sampleType": 0,
  743. "binding": 2
  744. }
  745. ],
  746. "samplers": [],
  747. "textures": [],
  748. "buffers": [],
  749. "images": [],
  750. "subpassInputs": [],
  751. "attributes": [
  752. {
  753. "name": "a_position",
  754. "defines": [],
  755. "format": 32,
  756. "location": 0
  757. },
  758. {
  759. "name": "a_normal",
  760. "defines": [],
  761. "format": 32,
  762. "location": 1
  763. },
  764. {
  765. "name": "a_texCoord",
  766. "defines": [],
  767. "format": 21,
  768. "location": 2
  769. },
  770. {
  771. "name": "a_tangent",
  772. "defines": [],
  773. "format": 44,
  774. "location": 3
  775. },
  776. {
  777. "name": "a_joints",
  778. "defines": [
  779. "CC_USE_SKINNING"
  780. ],
  781. "location": 4
  782. },
  783. {
  784. "name": "a_weights",
  785. "defines": [
  786. "CC_USE_SKINNING"
  787. ],
  788. "format": 44,
  789. "location": 5
  790. },
  791. {
  792. "name": "a_jointAnimInfo",
  793. "defines": [
  794. "USE_INSTANCING",
  795. "CC_USE_BAKED_ANIMATION"
  796. ],
  797. "format": 44,
  798. "isInstanced": true,
  799. "location": 6
  800. },
  801. {
  802. "name": "a_matWorld0",
  803. "defines": [
  804. "USE_INSTANCING"
  805. ],
  806. "format": 44,
  807. "isInstanced": true,
  808. "location": 7
  809. },
  810. {
  811. "name": "a_matWorld1",
  812. "defines": [
  813. "USE_INSTANCING"
  814. ],
  815. "format": 44,
  816. "isInstanced": true,
  817. "location": 8
  818. },
  819. {
  820. "name": "a_matWorld2",
  821. "defines": [
  822. "USE_INSTANCING"
  823. ],
  824. "format": 44,
  825. "isInstanced": true,
  826. "location": 9
  827. },
  828. {
  829. "name": "a_lightingMapUVParam",
  830. "defines": [
  831. "USE_INSTANCING",
  832. "CC_USE_LIGHTMAP"
  833. ],
  834. "format": 44,
  835. "isInstanced": true,
  836. "location": 10
  837. },
  838. {
  839. "name": "a_localShadowBiasAndProbeId",
  840. "defines": [
  841. "USE_INSTANCING"
  842. ],
  843. "format": 44,
  844. "isInstanced": true,
  845. "location": 11
  846. },
  847. {
  848. "name": "a_reflectionProbeData",
  849. "defines": [
  850. "USE_INSTANCING",
  851. "CC_USE_REFLECTION_PROBE"
  852. ],
  853. "format": 44,
  854. "isInstanced": true,
  855. "location": 12
  856. },
  857. {
  858. "name": "a_sh_linear_const_r",
  859. "defines": [
  860. "USE_INSTANCING",
  861. "CC_USE_LIGHT_PROBE"
  862. ],
  863. "format": 44,
  864. "isInstanced": true,
  865. "location": 13
  866. },
  867. {
  868. "name": "a_sh_linear_const_g",
  869. "defines": [
  870. "USE_INSTANCING",
  871. "CC_USE_LIGHT_PROBE"
  872. ],
  873. "format": 44,
  874. "isInstanced": true,
  875. "location": 14
  876. },
  877. {
  878. "name": "a_sh_linear_const_b",
  879. "defines": [
  880. "USE_INSTANCING",
  881. "CC_USE_LIGHT_PROBE"
  882. ],
  883. "format": 44,
  884. "isInstanced": true,
  885. "location": 15
  886. },
  887. {
  888. "name": "a_vertexId",
  889. "defines": [
  890. "CC_USE_MORPH"
  891. ],
  892. "format": 11,
  893. "location": 16
  894. }
  895. ],
  896. "varyings": [
  897. {
  898. "name": "v_uv",
  899. "type": 14,
  900. "count": 1,
  901. "defines": [],
  902. "stageFlags": 17,
  903. "location": 0
  904. }
  905. ],
  906. "fragColors": [
  907. {
  908. "name": "fragColor",
  909. "typename": "vec4",
  910. "type": 16,
  911. "count": 1,
  912. "defines": [],
  913. "stageFlags": 16,
  914. "location": 0
  915. }
  916. ],
  917. "descriptors": [
  918. {
  919. "rate": 0,
  920. "blocks": [],
  921. "samplerTextures": [],
  922. "samplers": [],
  923. "textures": [],
  924. "buffers": [],
  925. "images": [],
  926. "subpassInputs": []
  927. },
  928. {
  929. "rate": 1,
  930. "blocks": [
  931. {
  932. "name": "hbaoUBO",
  933. "members": [
  934. {
  935. "name": "uvDepthToEyePosParams",
  936. "type": 16,
  937. "count": 1
  938. },
  939. {
  940. "name": "radiusParam",
  941. "type": 16,
  942. "count": 1
  943. },
  944. {
  945. "name": "miscParam",
  946. "type": 16,
  947. "count": 1
  948. },
  949. {
  950. "name": "randomTexSize",
  951. "type": 16,
  952. "count": 1
  953. },
  954. {
  955. "name": "blurParam",
  956. "type": 16,
  957. "count": 1
  958. }
  959. ],
  960. "defines": [],
  961. "stageFlags": 16,
  962. "binding": 0
  963. }
  964. ],
  965. "samplerTextures": [
  966. {
  967. "name": "RandomTex",
  968. "type": 28,
  969. "count": 1,
  970. "defines": [],
  971. "stageFlags": 16,
  972. "sampleType": 0,
  973. "binding": 2
  974. }
  975. ],
  976. "samplers": [],
  977. "textures": [],
  978. "buffers": [],
  979. "images": [],
  980. "subpassInputs": []
  981. },
  982. {
  983. "rate": 2,
  984. "blocks": [],
  985. "samplerTextures": [],
  986. "samplers": [],
  987. "textures": [],
  988. "buffers": [],
  989. "images": [],
  990. "subpassInputs": []
  991. },
  992. {
  993. "rate": 3,
  994. "blocks": [
  995. {
  996. "tags": {
  997. "builtin": "global"
  998. },
  999. "name": "CCGlobal",
  1000. "members": [
  1001. {
  1002. "name": "cc_time",
  1003. "typename": "vec4",
  1004. "type": 16,
  1005. "count": 1,
  1006. "precision": "highp "
  1007. },
  1008. {
  1009. "name": "cc_screenSize",
  1010. "typename": "vec4",
  1011. "type": 16,
  1012. "count": 1,
  1013. "precision": "mediump "
  1014. },
  1015. {
  1016. "name": "cc_nativeSize",
  1017. "typename": "vec4",
  1018. "type": 16,
  1019. "count": 1,
  1020. "precision": "mediump "
  1021. },
  1022. {
  1023. "name": "cc_probeInfo",
  1024. "typename": "vec4",
  1025. "type": 16,
  1026. "count": 1,
  1027. "precision": "mediump "
  1028. },
  1029. {
  1030. "name": "cc_debug_view_mode",
  1031. "typename": "vec4",
  1032. "type": 16,
  1033. "count": 1,
  1034. "precision": "mediump "
  1035. }
  1036. ],
  1037. "defines": [],
  1038. "stageFlags": 17
  1039. },
  1040. {
  1041. "tags": {
  1042. "builtin": "global"
  1043. },
  1044. "name": "CCCamera",
  1045. "members": [
  1046. {
  1047. "name": "cc_matView",
  1048. "typename": "mat4",
  1049. "type": 25,
  1050. "count": 1,
  1051. "precision": "highp "
  1052. },
  1053. {
  1054. "name": "cc_matViewInv",
  1055. "typename": "mat4",
  1056. "type": 25,
  1057. "count": 1,
  1058. "precision": "highp "
  1059. },
  1060. {
  1061. "name": "cc_matProj",
  1062. "typename": "mat4",
  1063. "type": 25,
  1064. "count": 1,
  1065. "precision": "highp "
  1066. },
  1067. {
  1068. "name": "cc_matProjInv",
  1069. "typename": "mat4",
  1070. "type": 25,
  1071. "count": 1,
  1072. "precision": "highp "
  1073. },
  1074. {
  1075. "name": "cc_matViewProj",
  1076. "typename": "mat4",
  1077. "type": 25,
  1078. "count": 1,
  1079. "precision": "highp "
  1080. },
  1081. {
  1082. "name": "cc_matViewProjInv",
  1083. "typename": "mat4",
  1084. "type": 25,
  1085. "count": 1,
  1086. "precision": "highp "
  1087. },
  1088. {
  1089. "name": "cc_cameraPos",
  1090. "typename": "vec4",
  1091. "type": 16,
  1092. "count": 1,
  1093. "precision": "highp "
  1094. },
  1095. {
  1096. "name": "cc_surfaceTransform",
  1097. "typename": "vec4",
  1098. "type": 16,
  1099. "count": 1,
  1100. "precision": "mediump "
  1101. },
  1102. {
  1103. "name": "cc_screenScale",
  1104. "typename": "vec4",
  1105. "type": 16,
  1106. "count": 1,
  1107. "precision": "mediump "
  1108. },
  1109. {
  1110. "name": "cc_exposure",
  1111. "typename": "vec4",
  1112. "type": 16,
  1113. "count": 1,
  1114. "precision": "mediump "
  1115. },
  1116. {
  1117. "name": "cc_mainLitDir",
  1118. "typename": "vec4",
  1119. "type": 16,
  1120. "count": 1,
  1121. "precision": "mediump "
  1122. },
  1123. {
  1124. "name": "cc_mainLitColor",
  1125. "typename": "vec4",
  1126. "type": 16,
  1127. "count": 1,
  1128. "precision": "mediump "
  1129. },
  1130. {
  1131. "name": "cc_ambientSky",
  1132. "typename": "vec4",
  1133. "type": 16,
  1134. "count": 1,
  1135. "precision": "mediump "
  1136. },
  1137. {
  1138. "name": "cc_ambientGround",
  1139. "typename": "vec4",
  1140. "type": 16,
  1141. "count": 1,
  1142. "precision": "mediump "
  1143. },
  1144. {
  1145. "name": "cc_fogColor",
  1146. "typename": "vec4",
  1147. "type": 16,
  1148. "count": 1,
  1149. "precision": "mediump "
  1150. },
  1151. {
  1152. "name": "cc_fogBase",
  1153. "typename": "vec4",
  1154. "type": 16,
  1155. "count": 1,
  1156. "precision": "mediump "
  1157. },
  1158. {
  1159. "name": "cc_fogAdd",
  1160. "typename": "vec4",
  1161. "type": 16,
  1162. "count": 1,
  1163. "precision": "mediump "
  1164. },
  1165. {
  1166. "name": "cc_nearFar",
  1167. "typename": "vec4",
  1168. "type": 16,
  1169. "count": 1,
  1170. "precision": "mediump "
  1171. },
  1172. {
  1173. "name": "cc_viewPort",
  1174. "typename": "vec4",
  1175. "type": 16,
  1176. "count": 1,
  1177. "precision": "mediump "
  1178. }
  1179. ],
  1180. "defines": [],
  1181. "stageFlags": 17
  1182. }
  1183. ],
  1184. "samplerTextures": [
  1185. {
  1186. "name": "DepthTex",
  1187. "type": 28,
  1188. "count": 1,
  1189. "defines": [],
  1190. "stageFlags": 16,
  1191. "sampleType": 0,
  1192. "binding": 1
  1193. },
  1194. {
  1195. "name": "AOTexNearest",
  1196. "type": 28,
  1197. "count": 1,
  1198. "defines": [],
  1199. "stageFlags": 16,
  1200. "sampleType": 0,
  1201. "binding": 3
  1202. }
  1203. ],
  1204. "samplers": [],
  1205. "textures": [],
  1206. "buffers": [],
  1207. "images": [],
  1208. "subpassInputs": []
  1209. }
  1210. ],
  1211. "hash": 4208032054,
  1212. "glsl4": {
  1213. "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}",
  1214. "frag": "\nprecision highp float;\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)\nfloat saturate(float value) { return clamp(value, 0.0, 1.0); }\nvec2 saturate(vec2 value) { return clamp(value, vec2(0.0), vec2(1.0)); }\nvec3 saturate(vec3 value) { return clamp(value, vec3(0.0), vec3(1.0)); }\nvec4 saturate(vec4 value) { return clamp(value, vec4(0.0), vec4(1.0)); }\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\nfloat GetCameraDepthRH(float depthHS, mat4 matProj)\n{\n return -matProj[3][2] / (depthHS + matProj[2][2]);\n}\nfloat GetCameraDepthRH(float depthHS, float matProj32, float matProj22)\n{\n return -matProj32 / (depthHS + matProj22);\n}\n#if CC_USE_FOG != 4\n#endif\nlayout(set = 1, binding = 0) uniform hbaoUBO {\n vec4 uvDepthToEyePosParams;\n vec4 radiusParam;\n vec4 miscParam;\n vec4 randomTexSize;\n vec4 blurParam;\n};\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nlayout(set = 1, binding = 1) uniform sampler2D DepthTex;\nlayout(set = 1, binding = 2) uniform sampler2D RandomTex;\nvec2 fixUV(vec2 uv)\n{\n return saturate(uv);\n}\nfloat GetLinearDepth(vec2 uv) {\n float depthHS = 0.0;\n #if defined(CC_USE_WGPU)\n depthHS = textureLod(DepthTex, fixUV(uv), 0.0).r * 2.0 - 1.0;\n #else\n depthHS = texture(DepthTex, fixUV(uv)).r * 2.0 - 1.0;\n #endif\n return -GetCameraDepthRH(depthHS, cc_matProj);\n}\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nlayout(set = 1, binding = 3) uniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\nfloat CrossBilateralWeight(float r, float d, float d0, float blurFalloff, float blurDepthThreshold)\n{\n return exp2(-r*r*blurFalloff) * (abs(d - d0) < blurDepthThreshold ? 1.0 : 0.0);\n}\nvec2 SumWeightedAO(int i, float centerCameraDepth, vec2 centerUV, vec2 sampleDir, float blurFalloff, float blurDepthThreshold)\n{\n float r = 2.0 * float(i) + 0.5;\n vec2 sampleUV = centerUV + r * sampleDir * g_InvFullResolution;\n float d = GetLinearDepthBilinear(sampleUV);\n float sampledAO = texture(AOTexNearest, fixUV(sampleUV)).x;\n float w = CrossBilateralWeight(r, d, centerCameraDepth, blurFalloff, blurDepthThreshold);\n return vec2(w * sampledAO, w);\n}\nfloat BlurCore(vec2 uv, vec2 sampleDir)\n{\n float ao = texture(AOTexNearest, uv).x;\n float weight = 1.0;\n float centerCameraDepth = GetLinearDepth(uv);\n for(int i = -HALF_KERNEL_RADIUS; i <= HALF_KERNEL_RADIUS; i++)\n {\n vec2 aoAndW = SumWeightedAO(i, centerCameraDepth, uv, sampleDir, g_BlurFallOff, g_BlurDepthThreshold);\n ao += aoAndW.x;\n weight += aoAndW.y;\n }\n return ao / weight;\n}\n#define g_AOSaturation blurParam.w\nlayout(location = 0) in vec2 v_uv;\nlayout(location = 0) out vec4 fragColor;\nvoid main () {\n float ao = BlurCore(v_uv, vec2(1.0, 0.0));\n fragColor = vec4(ao, ao, ao, 1.0);\n}"
  1215. },
  1216. "glsl3": {
  1217. "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}",
  1218. "frag": "\nprecision highp float;\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)\nfloat saturate(float value) { return clamp(value, 0.0, 1.0); }\nvec2 saturate(vec2 value) { return clamp(value, vec2(0.0), vec2(1.0)); }\nvec3 saturate(vec3 value) { return clamp(value, vec3(0.0), vec3(1.0)); }\nvec4 saturate(vec4 value) { return clamp(value, vec4(0.0), vec4(1.0)); }\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\nfloat GetCameraDepthRH(float depthHS, mat4 matProj)\n{\n return -matProj[3][2] / (depthHS + matProj[2][2]);\n}\nfloat GetCameraDepthRH(float depthHS, float matProj32, float matProj22)\n{\n return -matProj32 / (depthHS + matProj22);\n}\n#if CC_USE_FOG != 4\n#endif\nlayout(std140) uniform hbaoUBO {\n vec4 uvDepthToEyePosParams;\n vec4 radiusParam;\n vec4 miscParam;\n vec4 randomTexSize;\n vec4 blurParam;\n};\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nuniform sampler2D DepthTex;\nuniform sampler2D RandomTex;\nvec2 fixUV(vec2 uv)\n{\n return saturate(uv);\n}\nfloat GetLinearDepth(vec2 uv) {\n float depthHS = 0.0;\n #if defined(CC_USE_WGPU)\n depthHS = textureLod(DepthTex, fixUV(uv), 0.0).r * 2.0 - 1.0;\n #else\n depthHS = texture(DepthTex, fixUV(uv)).r * 2.0 - 1.0;\n #endif\n return -GetCameraDepthRH(depthHS, cc_matProj);\n}\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nuniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\nfloat CrossBilateralWeight(float r, float d, float d0, float blurFalloff, float blurDepthThreshold)\n{\n return exp2(-r*r*blurFalloff) * (abs(d - d0) < blurDepthThreshold ? 1.0 : 0.0);\n}\nvec2 SumWeightedAO(int i, float centerCameraDepth, vec2 centerUV, vec2 sampleDir, float blurFalloff, float blurDepthThreshold)\n{\n float r = 2.0 * float(i) + 0.5;\n vec2 sampleUV = centerUV + r * sampleDir * g_InvFullResolution;\n float d = GetLinearDepthBilinear(sampleUV);\n float sampledAO = texture(AOTexNearest, fixUV(sampleUV)).x;\n float w = CrossBilateralWeight(r, d, centerCameraDepth, blurFalloff, blurDepthThreshold);\n return vec2(w * sampledAO, w);\n}\nfloat BlurCore(vec2 uv, vec2 sampleDir)\n{\n float ao = texture(AOTexNearest, uv).x;\n float weight = 1.0;\n float centerCameraDepth = GetLinearDepth(uv);\n for(int i = -HALF_KERNEL_RADIUS; i <= HALF_KERNEL_RADIUS; i++)\n {\n vec2 aoAndW = SumWeightedAO(i, centerCameraDepth, uv, sampleDir, g_BlurFallOff, g_BlurDepthThreshold);\n ao += aoAndW.x;\n weight += aoAndW.y;\n }\n return ao / weight;\n}\n#define g_AOSaturation blurParam.w\nin vec2 v_uv;\nlayout(location = 0) out vec4 fragColor;\nvoid main () {\n float ao = BlurCore(v_uv, vec2(1.0, 0.0));\n fragColor = vec4(ao, ao, ao, 1.0);\n}"
  1219. },
  1220. "glsl1": {
  1221. "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}",
  1222. "frag": "\nprecision highp float;\nprecision highp float;\nuniform mediump vec4 cc_screenSize;\nuniform highp mat4 cc_matProj;\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)\nfloat saturate(float value) { return clamp(value, 0.0, 1.0); }\nvec2 saturate(vec2 value) { return clamp(value, vec2(0.0), vec2(1.0)); }\nvec3 saturate(vec3 value) { return clamp(value, vec3(0.0), vec3(1.0)); }\nvec4 saturate(vec4 value) { return clamp(value, vec4(0.0), vec4(1.0)); }\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\nfloat GetCameraDepthRH(float depthHS, mat4 matProj)\n{\n return -matProj[3][2] / (depthHS + matProj[2][2]);\n}\nfloat GetCameraDepthRH(float depthHS, float matProj32, float matProj22)\n{\n return -matProj32 / (depthHS + matProj22);\n}\n#if CC_USE_FOG != 4\n#endif\n uniform vec4 uvDepthToEyePosParams;\n uniform vec4 radiusParam;\n uniform vec4 miscParam;\n uniform vec4 blurParam;\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nuniform sampler2D DepthTex;\nuniform sampler2D RandomTex;\nvec2 fixUV(vec2 uv)\n{\n return saturate(uv);\n}\nfloat GetLinearDepth(vec2 uv) {\n float depthHS = 0.0;\n #if defined(CC_USE_WGPU)\n depthHS = texture2DLod(DepthTex, fixUV(uv), 0.0).r * 2.0 - 1.0;\n #else\n depthHS = texture2D(DepthTex, fixUV(uv)).r * 2.0 - 1.0;\n #endif\n return -GetCameraDepthRH(depthHS, cc_matProj);\n}\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nuniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\nfloat CrossBilateralWeight(float r, float d, float d0, float blurFalloff, float blurDepthThreshold)\n{\n return exp2(-r*r*blurFalloff) * (abs(d - d0) < blurDepthThreshold ? 1.0 : 0.0);\n}\nvec2 SumWeightedAO(int i, float centerCameraDepth, vec2 centerUV, vec2 sampleDir, float blurFalloff, float blurDepthThreshold)\n{\n float r = 2.0 * float(i) + 0.5;\n vec2 sampleUV = centerUV + r * sampleDir * g_InvFullResolution;\n float d = GetLinearDepthBilinear(sampleUV);\n float sampledAO = texture2D(AOTexNearest, fixUV(sampleUV)).x;\n float w = CrossBilateralWeight(r, d, centerCameraDepth, blurFalloff, blurDepthThreshold);\n return vec2(w * sampledAO, w);\n}\nfloat BlurCore(vec2 uv, vec2 sampleDir)\n{\n float ao = texture2D(AOTexNearest, uv).x;\n float weight = 1.0;\n float centerCameraDepth = GetLinearDepth(uv);\n for(int i = -HALF_KERNEL_RADIUS; i <= HALF_KERNEL_RADIUS; i++)\n {\n vec2 aoAndW = SumWeightedAO(i, centerCameraDepth, uv, sampleDir, g_BlurFallOff, g_BlurDepthThreshold);\n ao += aoAndW.x;\n weight += aoAndW.y;\n }\n return ao / weight;\n}\n#define g_AOSaturation blurParam.w\nvarying vec2 v_uv;\nvoid main () {\n float ao = BlurCore(v_uv, vec2(1.0, 0.0));\n gl_FragColor = vec4(ao, ao, ao, 1.0);\n}"
  1223. },
  1224. "builtins": {
  1225. "globals": {
  1226. "blocks": [
  1227. {
  1228. "name": "CCGlobal",
  1229. "defines": []
  1230. },
  1231. {
  1232. "name": "CCCamera",
  1233. "defines": []
  1234. }
  1235. ],
  1236. "samplerTextures": [],
  1237. "buffers": [],
  1238. "images": []
  1239. },
  1240. "locals": {
  1241. "blocks": [],
  1242. "samplerTextures": [],
  1243. "buffers": [],
  1244. "images": []
  1245. },
  1246. "statistics": {
  1247. "CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS": 42,
  1248. "CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS": 47
  1249. }
  1250. },
  1251. "defines": [
  1252. {
  1253. "name": "USE_INSTANCING",
  1254. "type": "boolean",
  1255. "defines": [],
  1256. "editor": {
  1257. "elevated": true
  1258. }
  1259. },
  1260. {
  1261. "name": "CC_USE_SKINNING",
  1262. "type": "boolean",
  1263. "defines": []
  1264. },
  1265. {
  1266. "name": "CC_USE_BAKED_ANIMATION",
  1267. "type": "boolean",
  1268. "defines": [
  1269. "USE_INSTANCING"
  1270. ]
  1271. },
  1272. {
  1273. "name": "CC_USE_LIGHTMAP",
  1274. "type": "boolean",
  1275. "defines": [
  1276. "USE_INSTANCING"
  1277. ]
  1278. },
  1279. {
  1280. "name": "CC_USE_REFLECTION_PROBE",
  1281. "type": "boolean",
  1282. "defines": [
  1283. "USE_INSTANCING"
  1284. ]
  1285. },
  1286. {
  1287. "name": "CC_RECEIVE_SHADOW",
  1288. "type": "boolean",
  1289. "defines": [
  1290. "USE_INSTANCING"
  1291. ]
  1292. },
  1293. {
  1294. "name": "CC_USE_LIGHT_PROBE",
  1295. "type": "boolean",
  1296. "defines": [
  1297. "USE_INSTANCING"
  1298. ]
  1299. },
  1300. {
  1301. "name": "CC_USE_MORPH",
  1302. "type": "boolean",
  1303. "defines": []
  1304. },
  1305. {
  1306. "name": "CC_USE_FOG",
  1307. "type": "number",
  1308. "defines": [],
  1309. "range": [
  1310. 0,
  1311. 4
  1312. ]
  1313. }
  1314. ],
  1315. "name": "pipeline/post-process/hbao|hbao-vs|blurx-fs"
  1316. },
  1317. {
  1318. "blocks": [
  1319. {
  1320. "name": "hbaoUBO",
  1321. "members": [
  1322. {
  1323. "name": "uvDepthToEyePosParams",
  1324. "type": 16,
  1325. "count": 1
  1326. },
  1327. {
  1328. "name": "radiusParam",
  1329. "type": 16,
  1330. "count": 1
  1331. },
  1332. {
  1333. "name": "miscParam",
  1334. "type": 16,
  1335. "count": 1
  1336. },
  1337. {
  1338. "name": "randomTexSize",
  1339. "type": 16,
  1340. "count": 1
  1341. },
  1342. {
  1343. "name": "blurParam",
  1344. "type": 16,
  1345. "count": 1
  1346. }
  1347. ],
  1348. "defines": [],
  1349. "stageFlags": 16,
  1350. "binding": 0
  1351. }
  1352. ],
  1353. "samplerTextures": [
  1354. {
  1355. "name": "RandomTex",
  1356. "type": 28,
  1357. "count": 1,
  1358. "defines": [],
  1359. "stageFlags": 16,
  1360. "sampleType": 0,
  1361. "binding": 2
  1362. }
  1363. ],
  1364. "samplers": [],
  1365. "textures": [],
  1366. "buffers": [],
  1367. "images": [],
  1368. "subpassInputs": [],
  1369. "attributes": [
  1370. {
  1371. "name": "a_position",
  1372. "defines": [],
  1373. "format": 32,
  1374. "location": 0
  1375. },
  1376. {
  1377. "name": "a_normal",
  1378. "defines": [],
  1379. "format": 32,
  1380. "location": 1
  1381. },
  1382. {
  1383. "name": "a_texCoord",
  1384. "defines": [],
  1385. "format": 21,
  1386. "location": 2
  1387. },
  1388. {
  1389. "name": "a_tangent",
  1390. "defines": [],
  1391. "format": 44,
  1392. "location": 3
  1393. },
  1394. {
  1395. "name": "a_joints",
  1396. "defines": [
  1397. "CC_USE_SKINNING"
  1398. ],
  1399. "location": 4
  1400. },
  1401. {
  1402. "name": "a_weights",
  1403. "defines": [
  1404. "CC_USE_SKINNING"
  1405. ],
  1406. "format": 44,
  1407. "location": 5
  1408. },
  1409. {
  1410. "name": "a_jointAnimInfo",
  1411. "defines": [
  1412. "USE_INSTANCING",
  1413. "CC_USE_BAKED_ANIMATION"
  1414. ],
  1415. "format": 44,
  1416. "isInstanced": true,
  1417. "location": 6
  1418. },
  1419. {
  1420. "name": "a_matWorld0",
  1421. "defines": [
  1422. "USE_INSTANCING"
  1423. ],
  1424. "format": 44,
  1425. "isInstanced": true,
  1426. "location": 7
  1427. },
  1428. {
  1429. "name": "a_matWorld1",
  1430. "defines": [
  1431. "USE_INSTANCING"
  1432. ],
  1433. "format": 44,
  1434. "isInstanced": true,
  1435. "location": 8
  1436. },
  1437. {
  1438. "name": "a_matWorld2",
  1439. "defines": [
  1440. "USE_INSTANCING"
  1441. ],
  1442. "format": 44,
  1443. "isInstanced": true,
  1444. "location": 9
  1445. },
  1446. {
  1447. "name": "a_lightingMapUVParam",
  1448. "defines": [
  1449. "USE_INSTANCING",
  1450. "CC_USE_LIGHTMAP"
  1451. ],
  1452. "format": 44,
  1453. "isInstanced": true,
  1454. "location": 10
  1455. },
  1456. {
  1457. "name": "a_localShadowBiasAndProbeId",
  1458. "defines": [
  1459. "USE_INSTANCING"
  1460. ],
  1461. "format": 44,
  1462. "isInstanced": true,
  1463. "location": 11
  1464. },
  1465. {
  1466. "name": "a_reflectionProbeData",
  1467. "defines": [
  1468. "USE_INSTANCING",
  1469. "CC_USE_REFLECTION_PROBE"
  1470. ],
  1471. "format": 44,
  1472. "isInstanced": true,
  1473. "location": 12
  1474. },
  1475. {
  1476. "name": "a_sh_linear_const_r",
  1477. "defines": [
  1478. "USE_INSTANCING",
  1479. "CC_USE_LIGHT_PROBE"
  1480. ],
  1481. "format": 44,
  1482. "isInstanced": true,
  1483. "location": 13
  1484. },
  1485. {
  1486. "name": "a_sh_linear_const_g",
  1487. "defines": [
  1488. "USE_INSTANCING",
  1489. "CC_USE_LIGHT_PROBE"
  1490. ],
  1491. "format": 44,
  1492. "isInstanced": true,
  1493. "location": 14
  1494. },
  1495. {
  1496. "name": "a_sh_linear_const_b",
  1497. "defines": [
  1498. "USE_INSTANCING",
  1499. "CC_USE_LIGHT_PROBE"
  1500. ],
  1501. "format": 44,
  1502. "isInstanced": true,
  1503. "location": 15
  1504. },
  1505. {
  1506. "name": "a_vertexId",
  1507. "defines": [
  1508. "CC_USE_MORPH"
  1509. ],
  1510. "format": 11,
  1511. "location": 16
  1512. }
  1513. ],
  1514. "varyings": [
  1515. {
  1516. "name": "v_uv",
  1517. "type": 14,
  1518. "count": 1,
  1519. "defines": [],
  1520. "stageFlags": 17,
  1521. "location": 0
  1522. }
  1523. ],
  1524. "fragColors": [
  1525. {
  1526. "name": "fragColor",
  1527. "typename": "vec4",
  1528. "type": 16,
  1529. "count": 1,
  1530. "defines": [],
  1531. "stageFlags": 16,
  1532. "location": 0
  1533. }
  1534. ],
  1535. "descriptors": [
  1536. {
  1537. "rate": 0,
  1538. "blocks": [],
  1539. "samplerTextures": [],
  1540. "samplers": [],
  1541. "textures": [],
  1542. "buffers": [],
  1543. "images": [],
  1544. "subpassInputs": []
  1545. },
  1546. {
  1547. "rate": 1,
  1548. "blocks": [
  1549. {
  1550. "name": "hbaoUBO",
  1551. "members": [
  1552. {
  1553. "name": "uvDepthToEyePosParams",
  1554. "type": 16,
  1555. "count": 1
  1556. },
  1557. {
  1558. "name": "radiusParam",
  1559. "type": 16,
  1560. "count": 1
  1561. },
  1562. {
  1563. "name": "miscParam",
  1564. "type": 16,
  1565. "count": 1
  1566. },
  1567. {
  1568. "name": "randomTexSize",
  1569. "type": 16,
  1570. "count": 1
  1571. },
  1572. {
  1573. "name": "blurParam",
  1574. "type": 16,
  1575. "count": 1
  1576. }
  1577. ],
  1578. "defines": [],
  1579. "stageFlags": 16,
  1580. "binding": 0
  1581. }
  1582. ],
  1583. "samplerTextures": [
  1584. {
  1585. "name": "RandomTex",
  1586. "type": 28,
  1587. "count": 1,
  1588. "defines": [],
  1589. "stageFlags": 16,
  1590. "sampleType": 0,
  1591. "binding": 2
  1592. }
  1593. ],
  1594. "samplers": [],
  1595. "textures": [],
  1596. "buffers": [],
  1597. "images": [],
  1598. "subpassInputs": []
  1599. },
  1600. {
  1601. "rate": 2,
  1602. "blocks": [],
  1603. "samplerTextures": [],
  1604. "samplers": [],
  1605. "textures": [],
  1606. "buffers": [],
  1607. "images": [],
  1608. "subpassInputs": []
  1609. },
  1610. {
  1611. "rate": 3,
  1612. "blocks": [
  1613. {
  1614. "tags": {
  1615. "builtin": "global"
  1616. },
  1617. "name": "CCGlobal",
  1618. "members": [
  1619. {
  1620. "name": "cc_time",
  1621. "typename": "vec4",
  1622. "type": 16,
  1623. "count": 1,
  1624. "precision": "highp "
  1625. },
  1626. {
  1627. "name": "cc_screenSize",
  1628. "typename": "vec4",
  1629. "type": 16,
  1630. "count": 1,
  1631. "precision": "mediump "
  1632. },
  1633. {
  1634. "name": "cc_nativeSize",
  1635. "typename": "vec4",
  1636. "type": 16,
  1637. "count": 1,
  1638. "precision": "mediump "
  1639. },
  1640. {
  1641. "name": "cc_probeInfo",
  1642. "typename": "vec4",
  1643. "type": 16,
  1644. "count": 1,
  1645. "precision": "mediump "
  1646. },
  1647. {
  1648. "name": "cc_debug_view_mode",
  1649. "typename": "vec4",
  1650. "type": 16,
  1651. "count": 1,
  1652. "precision": "mediump "
  1653. }
  1654. ],
  1655. "defines": [],
  1656. "stageFlags": 17
  1657. },
  1658. {
  1659. "tags": {
  1660. "builtin": "global"
  1661. },
  1662. "name": "CCCamera",
  1663. "members": [
  1664. {
  1665. "name": "cc_matView",
  1666. "typename": "mat4",
  1667. "type": 25,
  1668. "count": 1,
  1669. "precision": "highp "
  1670. },
  1671. {
  1672. "name": "cc_matViewInv",
  1673. "typename": "mat4",
  1674. "type": 25,
  1675. "count": 1,
  1676. "precision": "highp "
  1677. },
  1678. {
  1679. "name": "cc_matProj",
  1680. "typename": "mat4",
  1681. "type": 25,
  1682. "count": 1,
  1683. "precision": "highp "
  1684. },
  1685. {
  1686. "name": "cc_matProjInv",
  1687. "typename": "mat4",
  1688. "type": 25,
  1689. "count": 1,
  1690. "precision": "highp "
  1691. },
  1692. {
  1693. "name": "cc_matViewProj",
  1694. "typename": "mat4",
  1695. "type": 25,
  1696. "count": 1,
  1697. "precision": "highp "
  1698. },
  1699. {
  1700. "name": "cc_matViewProjInv",
  1701. "typename": "mat4",
  1702. "type": 25,
  1703. "count": 1,
  1704. "precision": "highp "
  1705. },
  1706. {
  1707. "name": "cc_cameraPos",
  1708. "typename": "vec4",
  1709. "type": 16,
  1710. "count": 1,
  1711. "precision": "highp "
  1712. },
  1713. {
  1714. "name": "cc_surfaceTransform",
  1715. "typename": "vec4",
  1716. "type": 16,
  1717. "count": 1,
  1718. "precision": "mediump "
  1719. },
  1720. {
  1721. "name": "cc_screenScale",
  1722. "typename": "vec4",
  1723. "type": 16,
  1724. "count": 1,
  1725. "precision": "mediump "
  1726. },
  1727. {
  1728. "name": "cc_exposure",
  1729. "typename": "vec4",
  1730. "type": 16,
  1731. "count": 1,
  1732. "precision": "mediump "
  1733. },
  1734. {
  1735. "name": "cc_mainLitDir",
  1736. "typename": "vec4",
  1737. "type": 16,
  1738. "count": 1,
  1739. "precision": "mediump "
  1740. },
  1741. {
  1742. "name": "cc_mainLitColor",
  1743. "typename": "vec4",
  1744. "type": 16,
  1745. "count": 1,
  1746. "precision": "mediump "
  1747. },
  1748. {
  1749. "name": "cc_ambientSky",
  1750. "typename": "vec4",
  1751. "type": 16,
  1752. "count": 1,
  1753. "precision": "mediump "
  1754. },
  1755. {
  1756. "name": "cc_ambientGround",
  1757. "typename": "vec4",
  1758. "type": 16,
  1759. "count": 1,
  1760. "precision": "mediump "
  1761. },
  1762. {
  1763. "name": "cc_fogColor",
  1764. "typename": "vec4",
  1765. "type": 16,
  1766. "count": 1,
  1767. "precision": "mediump "
  1768. },
  1769. {
  1770. "name": "cc_fogBase",
  1771. "typename": "vec4",
  1772. "type": 16,
  1773. "count": 1,
  1774. "precision": "mediump "
  1775. },
  1776. {
  1777. "name": "cc_fogAdd",
  1778. "typename": "vec4",
  1779. "type": 16,
  1780. "count": 1,
  1781. "precision": "mediump "
  1782. },
  1783. {
  1784. "name": "cc_nearFar",
  1785. "typename": "vec4",
  1786. "type": 16,
  1787. "count": 1,
  1788. "precision": "mediump "
  1789. },
  1790. {
  1791. "name": "cc_viewPort",
  1792. "typename": "vec4",
  1793. "type": 16,
  1794. "count": 1,
  1795. "precision": "mediump "
  1796. }
  1797. ],
  1798. "defines": [],
  1799. "stageFlags": 17
  1800. }
  1801. ],
  1802. "samplerTextures": [
  1803. {
  1804. "name": "DepthTex",
  1805. "type": 28,
  1806. "count": 1,
  1807. "defines": [],
  1808. "stageFlags": 16,
  1809. "sampleType": 0,
  1810. "binding": 1
  1811. },
  1812. {
  1813. "name": "AOTexNearest",
  1814. "type": 28,
  1815. "count": 1,
  1816. "defines": [],
  1817. "stageFlags": 16,
  1818. "sampleType": 0,
  1819. "binding": 3
  1820. }
  1821. ],
  1822. "samplers": [],
  1823. "textures": [],
  1824. "buffers": [],
  1825. "images": [],
  1826. "subpassInputs": []
  1827. }
  1828. ],
  1829. "hash": 1325701544,
  1830. "glsl4": {
  1831. "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}",
  1832. "frag": "\nprecision highp float;\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)\nfloat saturate(float value) { return clamp(value, 0.0, 1.0); }\nvec2 saturate(vec2 value) { return clamp(value, vec2(0.0), vec2(1.0)); }\nvec3 saturate(vec3 value) { return clamp(value, vec3(0.0), vec3(1.0)); }\nvec4 saturate(vec4 value) { return clamp(value, vec4(0.0), vec4(1.0)); }\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\nfloat GetCameraDepthRH(float depthHS, mat4 matProj)\n{\n return -matProj[3][2] / (depthHS + matProj[2][2]);\n}\nfloat GetCameraDepthRH(float depthHS, float matProj32, float matProj22)\n{\n return -matProj32 / (depthHS + matProj22);\n}\n#if CC_USE_FOG != 4\n#endif\nlayout(set = 1, binding = 0) uniform hbaoUBO {\n vec4 uvDepthToEyePosParams;\n vec4 radiusParam;\n vec4 miscParam;\n vec4 randomTexSize;\n vec4 blurParam;\n};\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nlayout(set = 1, binding = 1) uniform sampler2D DepthTex;\nlayout(set = 1, binding = 2) uniform sampler2D RandomTex;\nvec2 fixUV(vec2 uv)\n{\n return saturate(uv);\n}\nfloat GetLinearDepth(vec2 uv) {\n float depthHS = 0.0;\n #if defined(CC_USE_WGPU)\n depthHS = textureLod(DepthTex, fixUV(uv), 0.0).r * 2.0 - 1.0;\n #else\n depthHS = texture(DepthTex, fixUV(uv)).r * 2.0 - 1.0;\n #endif\n return -GetCameraDepthRH(depthHS, cc_matProj);\n}\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nlayout(set = 1, binding = 3) uniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\nfloat CrossBilateralWeight(float r, float d, float d0, float blurFalloff, float blurDepthThreshold)\n{\n return exp2(-r*r*blurFalloff) * (abs(d - d0) < blurDepthThreshold ? 1.0 : 0.0);\n}\nvec2 SumWeightedAO(int i, float centerCameraDepth, vec2 centerUV, vec2 sampleDir, float blurFalloff, float blurDepthThreshold)\n{\n float r = 2.0 * float(i) + 0.5;\n vec2 sampleUV = centerUV + r * sampleDir * g_InvFullResolution;\n float d = GetLinearDepthBilinear(sampleUV);\n float sampledAO = texture(AOTexNearest, fixUV(sampleUV)).x;\n float w = CrossBilateralWeight(r, d, centerCameraDepth, blurFalloff, blurDepthThreshold);\n return vec2(w * sampledAO, w);\n}\nfloat BlurCore(vec2 uv, vec2 sampleDir)\n{\n float ao = texture(AOTexNearest, uv).x;\n float weight = 1.0;\n float centerCameraDepth = GetLinearDepth(uv);\n for(int i = -HALF_KERNEL_RADIUS; i <= HALF_KERNEL_RADIUS; i++)\n {\n vec2 aoAndW = SumWeightedAO(i, centerCameraDepth, uv, sampleDir, g_BlurFallOff, g_BlurDepthThreshold);\n ao += aoAndW.x;\n weight += aoAndW.y;\n }\n return ao / weight;\n}\n#define g_AOSaturation blurParam.w\nlayout(location = 0) in vec2 v_uv;\nlayout(location = 0) out vec4 fragColor;\nvoid main () {\n float ao = BlurCore(v_uv, vec2(0.0, 1.0));\n fragColor = vec4(ao, ao, ao, 1.0);\n}"
  1833. },
  1834. "glsl3": {
  1835. "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}",
  1836. "frag": "\nprecision highp float;\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)\nfloat saturate(float value) { return clamp(value, 0.0, 1.0); }\nvec2 saturate(vec2 value) { return clamp(value, vec2(0.0), vec2(1.0)); }\nvec3 saturate(vec3 value) { return clamp(value, vec3(0.0), vec3(1.0)); }\nvec4 saturate(vec4 value) { return clamp(value, vec4(0.0), vec4(1.0)); }\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\nfloat GetCameraDepthRH(float depthHS, mat4 matProj)\n{\n return -matProj[3][2] / (depthHS + matProj[2][2]);\n}\nfloat GetCameraDepthRH(float depthHS, float matProj32, float matProj22)\n{\n return -matProj32 / (depthHS + matProj22);\n}\n#if CC_USE_FOG != 4\n#endif\nlayout(std140) uniform hbaoUBO {\n vec4 uvDepthToEyePosParams;\n vec4 radiusParam;\n vec4 miscParam;\n vec4 randomTexSize;\n vec4 blurParam;\n};\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nuniform sampler2D DepthTex;\nuniform sampler2D RandomTex;\nvec2 fixUV(vec2 uv)\n{\n return saturate(uv);\n}\nfloat GetLinearDepth(vec2 uv) {\n float depthHS = 0.0;\n #if defined(CC_USE_WGPU)\n depthHS = textureLod(DepthTex, fixUV(uv), 0.0).r * 2.0 - 1.0;\n #else\n depthHS = texture(DepthTex, fixUV(uv)).r * 2.0 - 1.0;\n #endif\n return -GetCameraDepthRH(depthHS, cc_matProj);\n}\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nuniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\nfloat CrossBilateralWeight(float r, float d, float d0, float blurFalloff, float blurDepthThreshold)\n{\n return exp2(-r*r*blurFalloff) * (abs(d - d0) < blurDepthThreshold ? 1.0 : 0.0);\n}\nvec2 SumWeightedAO(int i, float centerCameraDepth, vec2 centerUV, vec2 sampleDir, float blurFalloff, float blurDepthThreshold)\n{\n float r = 2.0 * float(i) + 0.5;\n vec2 sampleUV = centerUV + r * sampleDir * g_InvFullResolution;\n float d = GetLinearDepthBilinear(sampleUV);\n float sampledAO = texture(AOTexNearest, fixUV(sampleUV)).x;\n float w = CrossBilateralWeight(r, d, centerCameraDepth, blurFalloff, blurDepthThreshold);\n return vec2(w * sampledAO, w);\n}\nfloat BlurCore(vec2 uv, vec2 sampleDir)\n{\n float ao = texture(AOTexNearest, uv).x;\n float weight = 1.0;\n float centerCameraDepth = GetLinearDepth(uv);\n for(int i = -HALF_KERNEL_RADIUS; i <= HALF_KERNEL_RADIUS; i++)\n {\n vec2 aoAndW = SumWeightedAO(i, centerCameraDepth, uv, sampleDir, g_BlurFallOff, g_BlurDepthThreshold);\n ao += aoAndW.x;\n weight += aoAndW.y;\n }\n return ao / weight;\n}\n#define g_AOSaturation blurParam.w\nin vec2 v_uv;\nlayout(location = 0) out vec4 fragColor;\nvoid main () {\n float ao = BlurCore(v_uv, vec2(0.0, 1.0));\n fragColor = vec4(ao, ao, ao, 1.0);\n}"
  1837. },
  1838. "glsl1": {
  1839. "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}",
  1840. "frag": "\nprecision highp float;\nprecision highp float;\nuniform mediump vec4 cc_screenSize;\nuniform highp mat4 cc_matProj;\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)\nfloat saturate(float value) { return clamp(value, 0.0, 1.0); }\nvec2 saturate(vec2 value) { return clamp(value, vec2(0.0), vec2(1.0)); }\nvec3 saturate(vec3 value) { return clamp(value, vec3(0.0), vec3(1.0)); }\nvec4 saturate(vec4 value) { return clamp(value, vec4(0.0), vec4(1.0)); }\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\nfloat GetCameraDepthRH(float depthHS, mat4 matProj)\n{\n return -matProj[3][2] / (depthHS + matProj[2][2]);\n}\nfloat GetCameraDepthRH(float depthHS, float matProj32, float matProj22)\n{\n return -matProj32 / (depthHS + matProj22);\n}\n#if CC_USE_FOG != 4\n#endif\n uniform vec4 uvDepthToEyePosParams;\n uniform vec4 radiusParam;\n uniform vec4 miscParam;\n uniform vec4 blurParam;\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nuniform sampler2D DepthTex;\nuniform sampler2D RandomTex;\nvec2 fixUV(vec2 uv)\n{\n return saturate(uv);\n}\nfloat GetLinearDepth(vec2 uv) {\n float depthHS = 0.0;\n #if defined(CC_USE_WGPU)\n depthHS = texture2DLod(DepthTex, fixUV(uv), 0.0).r * 2.0 - 1.0;\n #else\n depthHS = texture2D(DepthTex, fixUV(uv)).r * 2.0 - 1.0;\n #endif\n return -GetCameraDepthRH(depthHS, cc_matProj);\n}\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nuniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\nfloat CrossBilateralWeight(float r, float d, float d0, float blurFalloff, float blurDepthThreshold)\n{\n return exp2(-r*r*blurFalloff) * (abs(d - d0) < blurDepthThreshold ? 1.0 : 0.0);\n}\nvec2 SumWeightedAO(int i, float centerCameraDepth, vec2 centerUV, vec2 sampleDir, float blurFalloff, float blurDepthThreshold)\n{\n float r = 2.0 * float(i) + 0.5;\n vec2 sampleUV = centerUV + r * sampleDir * g_InvFullResolution;\n float d = GetLinearDepthBilinear(sampleUV);\n float sampledAO = texture2D(AOTexNearest, fixUV(sampleUV)).x;\n float w = CrossBilateralWeight(r, d, centerCameraDepth, blurFalloff, blurDepthThreshold);\n return vec2(w * sampledAO, w);\n}\nfloat BlurCore(vec2 uv, vec2 sampleDir)\n{\n float ao = texture2D(AOTexNearest, uv).x;\n float weight = 1.0;\n float centerCameraDepth = GetLinearDepth(uv);\n for(int i = -HALF_KERNEL_RADIUS; i <= HALF_KERNEL_RADIUS; i++)\n {\n vec2 aoAndW = SumWeightedAO(i, centerCameraDepth, uv, sampleDir, g_BlurFallOff, g_BlurDepthThreshold);\n ao += aoAndW.x;\n weight += aoAndW.y;\n }\n return ao / weight;\n}\n#define g_AOSaturation blurParam.w\nvarying vec2 v_uv;\nvoid main () {\n float ao = BlurCore(v_uv, vec2(0.0, 1.0));\n gl_FragColor = vec4(ao, ao, ao, 1.0);\n}"
  1841. },
  1842. "builtins": {
  1843. "globals": {
  1844. "blocks": [
  1845. {
  1846. "name": "CCGlobal",
  1847. "defines": []
  1848. },
  1849. {
  1850. "name": "CCCamera",
  1851. "defines": []
  1852. }
  1853. ],
  1854. "samplerTextures": [],
  1855. "buffers": [],
  1856. "images": []
  1857. },
  1858. "locals": {
  1859. "blocks": [],
  1860. "samplerTextures": [],
  1861. "buffers": [],
  1862. "images": []
  1863. },
  1864. "statistics": {
  1865. "CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS": 42,
  1866. "CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS": 47
  1867. }
  1868. },
  1869. "defines": [
  1870. {
  1871. "name": "USE_INSTANCING",
  1872. "type": "boolean",
  1873. "defines": [],
  1874. "editor": {
  1875. "elevated": true
  1876. }
  1877. },
  1878. {
  1879. "name": "CC_USE_SKINNING",
  1880. "type": "boolean",
  1881. "defines": []
  1882. },
  1883. {
  1884. "name": "CC_USE_BAKED_ANIMATION",
  1885. "type": "boolean",
  1886. "defines": [
  1887. "USE_INSTANCING"
  1888. ]
  1889. },
  1890. {
  1891. "name": "CC_USE_LIGHTMAP",
  1892. "type": "boolean",
  1893. "defines": [
  1894. "USE_INSTANCING"
  1895. ]
  1896. },
  1897. {
  1898. "name": "CC_USE_REFLECTION_PROBE",
  1899. "type": "boolean",
  1900. "defines": [
  1901. "USE_INSTANCING"
  1902. ]
  1903. },
  1904. {
  1905. "name": "CC_RECEIVE_SHADOW",
  1906. "type": "boolean",
  1907. "defines": [
  1908. "USE_INSTANCING"
  1909. ]
  1910. },
  1911. {
  1912. "name": "CC_USE_LIGHT_PROBE",
  1913. "type": "boolean",
  1914. "defines": [
  1915. "USE_INSTANCING"
  1916. ]
  1917. },
  1918. {
  1919. "name": "CC_USE_MORPH",
  1920. "type": "boolean",
  1921. "defines": []
  1922. },
  1923. {
  1924. "name": "CC_USE_FOG",
  1925. "type": "number",
  1926. "defines": [],
  1927. "range": [
  1928. 0,
  1929. 4
  1930. ]
  1931. }
  1932. ],
  1933. "name": "pipeline/post-process/hbao|hbao-vs|blury-fs"
  1934. },
  1935. {
  1936. "blocks": [
  1937. {
  1938. "name": "hbaoUBO",
  1939. "members": [
  1940. {
  1941. "name": "uvDepthToEyePosParams",
  1942. "type": 16,
  1943. "count": 1
  1944. },
  1945. {
  1946. "name": "radiusParam",
  1947. "type": 16,
  1948. "count": 1
  1949. },
  1950. {
  1951. "name": "miscParam",
  1952. "type": 16,
  1953. "count": 1
  1954. },
  1955. {
  1956. "name": "randomTexSize",
  1957. "type": 16,
  1958. "count": 1
  1959. },
  1960. {
  1961. "name": "blurParam",
  1962. "type": 16,
  1963. "count": 1
  1964. }
  1965. ],
  1966. "defines": [],
  1967. "stageFlags": 16,
  1968. "binding": 0
  1969. }
  1970. ],
  1971. "samplerTextures": [
  1972. {
  1973. "name": "RandomTex",
  1974. "type": 28,
  1975. "count": 1,
  1976. "defines": [],
  1977. "stageFlags": 16,
  1978. "sampleType": 0,
  1979. "binding": 2
  1980. }
  1981. ],
  1982. "samplers": [],
  1983. "textures": [],
  1984. "buffers": [],
  1985. "images": [],
  1986. "subpassInputs": [],
  1987. "attributes": [
  1988. {
  1989. "name": "a_position",
  1990. "defines": [],
  1991. "format": 32,
  1992. "location": 0
  1993. },
  1994. {
  1995. "name": "a_normal",
  1996. "defines": [],
  1997. "format": 32,
  1998. "location": 1
  1999. },
  2000. {
  2001. "name": "a_texCoord",
  2002. "defines": [],
  2003. "format": 21,
  2004. "location": 2
  2005. },
  2006. {
  2007. "name": "a_tangent",
  2008. "defines": [],
  2009. "format": 44,
  2010. "location": 3
  2011. },
  2012. {
  2013. "name": "a_joints",
  2014. "defines": [
  2015. "CC_USE_SKINNING"
  2016. ],
  2017. "location": 4
  2018. },
  2019. {
  2020. "name": "a_weights",
  2021. "defines": [
  2022. "CC_USE_SKINNING"
  2023. ],
  2024. "format": 44,
  2025. "location": 5
  2026. },
  2027. {
  2028. "name": "a_jointAnimInfo",
  2029. "defines": [
  2030. "USE_INSTANCING",
  2031. "CC_USE_BAKED_ANIMATION"
  2032. ],
  2033. "format": 44,
  2034. "isInstanced": true,
  2035. "location": 6
  2036. },
  2037. {
  2038. "name": "a_matWorld0",
  2039. "defines": [
  2040. "USE_INSTANCING"
  2041. ],
  2042. "format": 44,
  2043. "isInstanced": true,
  2044. "location": 7
  2045. },
  2046. {
  2047. "name": "a_matWorld1",
  2048. "defines": [
  2049. "USE_INSTANCING"
  2050. ],
  2051. "format": 44,
  2052. "isInstanced": true,
  2053. "location": 8
  2054. },
  2055. {
  2056. "name": "a_matWorld2",
  2057. "defines": [
  2058. "USE_INSTANCING"
  2059. ],
  2060. "format": 44,
  2061. "isInstanced": true,
  2062. "location": 9
  2063. },
  2064. {
  2065. "name": "a_lightingMapUVParam",
  2066. "defines": [
  2067. "USE_INSTANCING",
  2068. "CC_USE_LIGHTMAP"
  2069. ],
  2070. "format": 44,
  2071. "isInstanced": true,
  2072. "location": 10
  2073. },
  2074. {
  2075. "name": "a_localShadowBiasAndProbeId",
  2076. "defines": [
  2077. "USE_INSTANCING"
  2078. ],
  2079. "format": 44,
  2080. "isInstanced": true,
  2081. "location": 11
  2082. },
  2083. {
  2084. "name": "a_reflectionProbeData",
  2085. "defines": [
  2086. "USE_INSTANCING",
  2087. "CC_USE_REFLECTION_PROBE"
  2088. ],
  2089. "format": 44,
  2090. "isInstanced": true,
  2091. "location": 12
  2092. },
  2093. {
  2094. "name": "a_sh_linear_const_r",
  2095. "defines": [
  2096. "USE_INSTANCING",
  2097. "CC_USE_LIGHT_PROBE"
  2098. ],
  2099. "format": 44,
  2100. "isInstanced": true,
  2101. "location": 13
  2102. },
  2103. {
  2104. "name": "a_sh_linear_const_g",
  2105. "defines": [
  2106. "USE_INSTANCING",
  2107. "CC_USE_LIGHT_PROBE"
  2108. ],
  2109. "format": 44,
  2110. "isInstanced": true,
  2111. "location": 14
  2112. },
  2113. {
  2114. "name": "a_sh_linear_const_b",
  2115. "defines": [
  2116. "USE_INSTANCING",
  2117. "CC_USE_LIGHT_PROBE"
  2118. ],
  2119. "format": 44,
  2120. "isInstanced": true,
  2121. "location": 15
  2122. },
  2123. {
  2124. "name": "a_vertexId",
  2125. "defines": [
  2126. "CC_USE_MORPH"
  2127. ],
  2128. "format": 11,
  2129. "location": 16
  2130. }
  2131. ],
  2132. "varyings": [
  2133. {
  2134. "name": "v_uv",
  2135. "type": 14,
  2136. "count": 1,
  2137. "defines": [],
  2138. "stageFlags": 17,
  2139. "location": 0
  2140. }
  2141. ],
  2142. "fragColors": [
  2143. {
  2144. "name": "fragColor",
  2145. "typename": "vec4",
  2146. "type": 16,
  2147. "count": 1,
  2148. "defines": [],
  2149. "stageFlags": 16,
  2150. "location": 0
  2151. }
  2152. ],
  2153. "descriptors": [
  2154. {
  2155. "rate": 0,
  2156. "blocks": [],
  2157. "samplerTextures": [],
  2158. "samplers": [],
  2159. "textures": [],
  2160. "buffers": [],
  2161. "images": [],
  2162. "subpassInputs": []
  2163. },
  2164. {
  2165. "rate": 1,
  2166. "blocks": [
  2167. {
  2168. "name": "hbaoUBO",
  2169. "members": [
  2170. {
  2171. "name": "uvDepthToEyePosParams",
  2172. "type": 16,
  2173. "count": 1
  2174. },
  2175. {
  2176. "name": "radiusParam",
  2177. "type": 16,
  2178. "count": 1
  2179. },
  2180. {
  2181. "name": "miscParam",
  2182. "type": 16,
  2183. "count": 1
  2184. },
  2185. {
  2186. "name": "randomTexSize",
  2187. "type": 16,
  2188. "count": 1
  2189. },
  2190. {
  2191. "name": "blurParam",
  2192. "type": 16,
  2193. "count": 1
  2194. }
  2195. ],
  2196. "defines": [],
  2197. "stageFlags": 16,
  2198. "binding": 0
  2199. }
  2200. ],
  2201. "samplerTextures": [
  2202. {
  2203. "name": "RandomTex",
  2204. "type": 28,
  2205. "count": 1,
  2206. "defines": [],
  2207. "stageFlags": 16,
  2208. "sampleType": 0,
  2209. "binding": 2
  2210. }
  2211. ],
  2212. "samplers": [],
  2213. "textures": [],
  2214. "buffers": [],
  2215. "images": [],
  2216. "subpassInputs": []
  2217. },
  2218. {
  2219. "rate": 2,
  2220. "blocks": [],
  2221. "samplerTextures": [],
  2222. "samplers": [],
  2223. "textures": [],
  2224. "buffers": [],
  2225. "images": [],
  2226. "subpassInputs": []
  2227. },
  2228. {
  2229. "rate": 3,
  2230. "blocks": [
  2231. {
  2232. "tags": {
  2233. "builtin": "global"
  2234. },
  2235. "name": "CCGlobal",
  2236. "members": [
  2237. {
  2238. "name": "cc_time",
  2239. "typename": "vec4",
  2240. "type": 16,
  2241. "count": 1,
  2242. "precision": "highp "
  2243. },
  2244. {
  2245. "name": "cc_screenSize",
  2246. "typename": "vec4",
  2247. "type": 16,
  2248. "count": 1,
  2249. "precision": "mediump "
  2250. },
  2251. {
  2252. "name": "cc_nativeSize",
  2253. "typename": "vec4",
  2254. "type": 16,
  2255. "count": 1,
  2256. "precision": "mediump "
  2257. },
  2258. {
  2259. "name": "cc_probeInfo",
  2260. "typename": "vec4",
  2261. "type": 16,
  2262. "count": 1,
  2263. "precision": "mediump "
  2264. },
  2265. {
  2266. "name": "cc_debug_view_mode",
  2267. "typename": "vec4",
  2268. "type": 16,
  2269. "count": 1,
  2270. "precision": "mediump "
  2271. }
  2272. ],
  2273. "defines": [],
  2274. "stageFlags": 17
  2275. },
  2276. {
  2277. "tags": {
  2278. "builtin": "global"
  2279. },
  2280. "name": "CCCamera",
  2281. "members": [
  2282. {
  2283. "name": "cc_matView",
  2284. "typename": "mat4",
  2285. "type": 25,
  2286. "count": 1,
  2287. "precision": "highp "
  2288. },
  2289. {
  2290. "name": "cc_matViewInv",
  2291. "typename": "mat4",
  2292. "type": 25,
  2293. "count": 1,
  2294. "precision": "highp "
  2295. },
  2296. {
  2297. "name": "cc_matProj",
  2298. "typename": "mat4",
  2299. "type": 25,
  2300. "count": 1,
  2301. "precision": "highp "
  2302. },
  2303. {
  2304. "name": "cc_matProjInv",
  2305. "typename": "mat4",
  2306. "type": 25,
  2307. "count": 1,
  2308. "precision": "highp "
  2309. },
  2310. {
  2311. "name": "cc_matViewProj",
  2312. "typename": "mat4",
  2313. "type": 25,
  2314. "count": 1,
  2315. "precision": "highp "
  2316. },
  2317. {
  2318. "name": "cc_matViewProjInv",
  2319. "typename": "mat4",
  2320. "type": 25,
  2321. "count": 1,
  2322. "precision": "highp "
  2323. },
  2324. {
  2325. "name": "cc_cameraPos",
  2326. "typename": "vec4",
  2327. "type": 16,
  2328. "count": 1,
  2329. "precision": "highp "
  2330. },
  2331. {
  2332. "name": "cc_surfaceTransform",
  2333. "typename": "vec4",
  2334. "type": 16,
  2335. "count": 1,
  2336. "precision": "mediump "
  2337. },
  2338. {
  2339. "name": "cc_screenScale",
  2340. "typename": "vec4",
  2341. "type": 16,
  2342. "count": 1,
  2343. "precision": "mediump "
  2344. },
  2345. {
  2346. "name": "cc_exposure",
  2347. "typename": "vec4",
  2348. "type": 16,
  2349. "count": 1,
  2350. "precision": "mediump "
  2351. },
  2352. {
  2353. "name": "cc_mainLitDir",
  2354. "typename": "vec4",
  2355. "type": 16,
  2356. "count": 1,
  2357. "precision": "mediump "
  2358. },
  2359. {
  2360. "name": "cc_mainLitColor",
  2361. "typename": "vec4",
  2362. "type": 16,
  2363. "count": 1,
  2364. "precision": "mediump "
  2365. },
  2366. {
  2367. "name": "cc_ambientSky",
  2368. "typename": "vec4",
  2369. "type": 16,
  2370. "count": 1,
  2371. "precision": "mediump "
  2372. },
  2373. {
  2374. "name": "cc_ambientGround",
  2375. "typename": "vec4",
  2376. "type": 16,
  2377. "count": 1,
  2378. "precision": "mediump "
  2379. },
  2380. {
  2381. "name": "cc_fogColor",
  2382. "typename": "vec4",
  2383. "type": 16,
  2384. "count": 1,
  2385. "precision": "mediump "
  2386. },
  2387. {
  2388. "name": "cc_fogBase",
  2389. "typename": "vec4",
  2390. "type": 16,
  2391. "count": 1,
  2392. "precision": "mediump "
  2393. },
  2394. {
  2395. "name": "cc_fogAdd",
  2396. "typename": "vec4",
  2397. "type": 16,
  2398. "count": 1,
  2399. "precision": "mediump "
  2400. },
  2401. {
  2402. "name": "cc_nearFar",
  2403. "typename": "vec4",
  2404. "type": 16,
  2405. "count": 1,
  2406. "precision": "mediump "
  2407. },
  2408. {
  2409. "name": "cc_viewPort",
  2410. "typename": "vec4",
  2411. "type": 16,
  2412. "count": 1,
  2413. "precision": "mediump "
  2414. }
  2415. ],
  2416. "defines": [],
  2417. "stageFlags": 17
  2418. }
  2419. ],
  2420. "samplerTextures": [
  2421. {
  2422. "name": "DepthTex",
  2423. "type": 28,
  2424. "count": 1,
  2425. "defines": [],
  2426. "stageFlags": 16,
  2427. "sampleType": 0,
  2428. "binding": 1
  2429. },
  2430. {
  2431. "name": "AOTexNearest",
  2432. "type": 28,
  2433. "count": 1,
  2434. "defines": [],
  2435. "stageFlags": 16,
  2436. "sampleType": 0,
  2437. "binding": 3
  2438. }
  2439. ],
  2440. "samplers": [],
  2441. "textures": [],
  2442. "buffers": [],
  2443. "images": [],
  2444. "subpassInputs": []
  2445. }
  2446. ],
  2447. "hash": 2936562803,
  2448. "glsl4": {
  2449. "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}",
  2450. "frag": "\nprecision highp float;\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\n#if CC_USE_FOG != 4\n#endif\nlayout(set = 1, binding = 0) uniform hbaoUBO {\n vec4 uvDepthToEyePosParams;\n vec4 radiusParam;\n vec4 miscParam;\n vec4 randomTexSize;\n vec4 blurParam;\n};\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nlayout(set = 1, binding = 1) uniform sampler2D DepthTex;\nlayout(set = 1, binding = 2) uniform sampler2D RandomTex;\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nlayout(set = 1, binding = 3) uniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\n#define g_AOSaturation blurParam.w\nfloat Combine(vec2 uv)\n{\n float ao = texture(AOTexNearest, uv).x;\n return g_AOSaturation > 1.0 ? pow(ao, g_AOSaturation) : mix(1.0, ao, g_AOSaturation);\n}\nlayout(location = 0) in vec2 v_uv;\nlayout(location = 0) out vec4 fragColor;\nvoid main () {\n float ao = Combine(v_uv);\n fragColor = vec4(1.0, 1.0, 1.0, ao);\n}"
  2451. },
  2452. "glsl3": {
  2453. "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}",
  2454. "frag": "\nprecision highp float;\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\n#if CC_USE_FOG != 4\n#endif\nlayout(std140) uniform hbaoUBO {\n vec4 uvDepthToEyePosParams;\n vec4 radiusParam;\n vec4 miscParam;\n vec4 randomTexSize;\n vec4 blurParam;\n};\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nuniform sampler2D DepthTex;\nuniform sampler2D RandomTex;\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nuniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\n#define g_AOSaturation blurParam.w\nfloat Combine(vec2 uv)\n{\n float ao = texture(AOTexNearest, uv).x;\n return g_AOSaturation > 1.0 ? pow(ao, g_AOSaturation) : mix(1.0, ao, g_AOSaturation);\n}\nin vec2 v_uv;\nlayout(location = 0) out vec4 fragColor;\nvoid main () {\n float ao = Combine(v_uv);\n fragColor = vec4(1.0, 1.0, 1.0, ao);\n}"
  2455. },
  2456. "glsl1": {
  2457. "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}",
  2458. "frag": "\nprecision highp float;\nprecision highp float;\nuniform mediump vec4 cc_screenSize;\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\n#if defined(CC_USE_METAL) || defined(CC_USE_WGPU)\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y) y = -y\n#else\n#define CC_HANDLE_SAMPLE_NDC_FLIP_STATIC(y)\n#endif\n#if CC_USE_FOG != 4\n#endif\n uniform vec4 uvDepthToEyePosParams;\n uniform vec4 radiusParam;\n uniform vec4 miscParam;\n uniform vec4 blurParam;\n#define NUM_STEPS 8.0\n#define NUM_STEPS_LOOP NUM_STEPS*2.0\n#define INV_NUM_DIRECTIONS 0.125\n#define NUM_DIRECTIONS 8\n#define CONSTANT_2PI 6.2831852\n#define g_AOResolution cc_screenSize.xy\n#define g_InvAOResolution cc_screenSize.zw\n#define g_UVToViewA uvDepthToEyePosParams.xy\n#define g_UVToViewB uvDepthToEyePosParams.zw\n#define g_R radiusParam.x\n#define g_R2 radiusParam.y\n#define g_NegInvR2 radiusParam.z\n#define g_MaxRadiusPixels radiusParam.w\n#define g_FocalLen miscParam.xy\n#define g_TanAngleBias miscParam.z\n#define g_Strength miscParam.w\nuniform sampler2D DepthTex;\nuniform sampler2D RandomTex;\n#define KERNEL_FALLOFF 3.0f\n#define KERNEL_RADIUS 8\n#define HALF_KERNEL_RADIUS 4\n#define g_InvFullResolution cc_screenSize.zw\n#define g_BlurFallOff blurParam.x\n#define g_BlurDepthThreshold blurParam.y\n#define g_BlurSimpleRadius blurParam.z\nuniform sampler2D AOTexNearest;\n#define AOTexBilinear AOTexNearest\n#define GetLinearDepthBilinear GetLinearDepth\n#define g_AOSaturation blurParam.w\nfloat Combine(vec2 uv)\n{\n float ao = texture2D(AOTexNearest, uv).x;\n return g_AOSaturation > 1.0 ? pow(ao, g_AOSaturation) : mix(1.0, ao, g_AOSaturation);\n}\nvarying vec2 v_uv;\nvoid main () {\n float ao = Combine(v_uv);\n gl_FragColor = vec4(1.0, 1.0, 1.0, ao);\n}"
  2459. },
  2460. "builtins": {
  2461. "globals": {
  2462. "blocks": [
  2463. {
  2464. "name": "CCGlobal",
  2465. "defines": []
  2466. },
  2467. {
  2468. "name": "CCCamera",
  2469. "defines": []
  2470. }
  2471. ],
  2472. "samplerTextures": [],
  2473. "buffers": [],
  2474. "images": []
  2475. },
  2476. "locals": {
  2477. "blocks": [],
  2478. "samplerTextures": [],
  2479. "buffers": [],
  2480. "images": []
  2481. },
  2482. "statistics": {
  2483. "CC_EFFECT_USED_VERTEX_UNIFORM_VECTORS": 42,
  2484. "CC_EFFECT_USED_FRAGMENT_UNIFORM_VECTORS": 47
  2485. }
  2486. },
  2487. "defines": [
  2488. {
  2489. "name": "USE_INSTANCING",
  2490. "type": "boolean",
  2491. "defines": [],
  2492. "editor": {
  2493. "elevated": true
  2494. }
  2495. },
  2496. {
  2497. "name": "CC_USE_SKINNING",
  2498. "type": "boolean",
  2499. "defines": []
  2500. },
  2501. {
  2502. "name": "CC_USE_BAKED_ANIMATION",
  2503. "type": "boolean",
  2504. "defines": [
  2505. "USE_INSTANCING"
  2506. ]
  2507. },
  2508. {
  2509. "name": "CC_USE_LIGHTMAP",
  2510. "type": "boolean",
  2511. "defines": [
  2512. "USE_INSTANCING"
  2513. ]
  2514. },
  2515. {
  2516. "name": "CC_USE_REFLECTION_PROBE",
  2517. "type": "boolean",
  2518. "defines": [
  2519. "USE_INSTANCING"
  2520. ]
  2521. },
  2522. {
  2523. "name": "CC_RECEIVE_SHADOW",
  2524. "type": "boolean",
  2525. "defines": [
  2526. "USE_INSTANCING"
  2527. ]
  2528. },
  2529. {
  2530. "name": "CC_USE_LIGHT_PROBE",
  2531. "type": "boolean",
  2532. "defines": [
  2533. "USE_INSTANCING"
  2534. ]
  2535. },
  2536. {
  2537. "name": "CC_USE_MORPH",
  2538. "type": "boolean",
  2539. "defines": []
  2540. },
  2541. {
  2542. "name": "CC_USE_FOG",
  2543. "type": "number",
  2544. "defines": [],
  2545. "range": [
  2546. 0,
  2547. 4
  2548. ]
  2549. }
  2550. ],
  2551. "name": "pipeline/post-process/hbao|hbao-vs|combine-fs"
  2552. }
  2553. ],
  2554. "combinations": [],
  2555. "hideInEditor": false
  2556. }