houdini-fluid-v3-liquid.effect 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  1. // Copyright (c) 2017-2022 Xiamen Yaji Software Co., Ltd.
  2. CCEffect %{
  3. techniques:
  4. - name: opaque
  5. passes:
  6. - vert: standard-vs
  7. frag: standard-fs
  8. properties: &props
  9. vatSpeed: { value: 1.0, target: vatAnimParams.x, editor: { displayName: AnimationSpeed } }
  10. vatNormalIntensity: { value: 0.5, target: vatAnimParams.y, editor: { displayName: AnimationNormalIntensity, slide: true, range: [0, 1.0], step: 0.001 } }
  11. vatLoopStartFrame: { value: 0, target: vatBBMin.w, editor: { parent: USE_LOOP_ANIMATION, displayName: UnusedAnimationLoopStartFrame } }
  12. vatLoopEndFrame: { value: 0, target: vatBBMax.w, editor: { parent: USE_LOOP_ANIMATION, displayName: UnusedAnimationLoopEndFrame } }
  13. vatFrameCount: { value: 0.0, target: vatAnimParams.z, editor: { displayName: NumOfFrames } }
  14. vatBoundingBoxMax: { value: [1.0, 1.0, 1.0], target: vatBBMax.xyz, editor: { parent: USE_EDGE_FADING, displayName: BoundingBoxMax } }
  15. vatBoundingBoxMin: { value: [-1.0, -1.0, -1.0], target: vatBBMin.xyz, editor: { parent: USE_EDGE_FADING, displayName: BoundingBoxMin } }
  16. vatLUTTextureWidth: { value: 0, target: vatLUTParams.x, editor: { parent: USE_LOOKUP_AUTO_FRAME_COUNT, displayName: LUTTextureWidth } }
  17. vatLUTTextureHeight: { value: 0, target: vatLUTParams.y, editor: { parent: USE_LOOKUP_AUTO_FRAME_COUNT, displayName: LUTTextureHeight } }
  18. vatVertexCount: { value: 0.0, target: vatLUTParams.z, editor: { parent: USE_LOOKUP_AUTO_FRAME_COUNT, displayName: FBXVertexCount } }
  19. ReflectionIntensity: { value: 30.0, target: vatLUTParams.w, editor: { parent: USE_REFRACTION, displayName: ReflectionIntensity } }
  20. IOR: { value: 1.33, target: vatAnimParams.w, editor: { parent: USE_REFRACTION, displayName: IndexOfRefraction } }
  21. mainColor: { value: [1.0, 1.0, 1.0, 1.0], target: albedo, linear: true, editor: { displayName: Albedo, type: color } }
  22. albedoScale: { value: [1.0, 1.0, 1.0], target: albedoScaleAndCutoff.xyz }
  23. alphaThreshold: { value: 0.5, target: albedoScaleAndCutoff.w, editor: { parent: USE_ALPHA_TEST, slide: true, range: [0, 1.0], step: 0.001 } }
  24. occlusion: { value: 0.0, target: pbrParams.x, editor: { slide: true, range: [0, 1.0], step: 0.001 } }
  25. roughness: { value: 0.5, target: pbrParams.y, editor: { slide: true, range: [0, 1.0], step: 0.001 } }
  26. metallic: { value: 0.0, target: pbrParams.z, editor: { slide: true, range: [0, 1.0], step: 0.001 } }
  27. specularIntensity: { value: 0.5, target: pbrParams.w, editor: { slide: true, range: [0.0, 1.0], step: 0.001 } }
  28. emissive: { value: [0.0, 0.0, 0.0, 1.0], linear: true, editor: { type: color } }
  29. emissiveScale: { value: [1.0, 1.0, 1.0], target: emissiveScaleParam.xyz }
  30. normalStrength: { value: 1.0, target: emissiveScaleParam.w, editor: { parent: USE_NORMAL_MAP, slide: true, range: [0, 5.0], step: 0.001 } }
  31. mainTexture: { value: grey, target: albedoMap, editor: { displayName: AlbedoMap } }
  32. normalMap: { value: normal }
  33. normalMapDetailed: { value: normal }
  34. waterSpeed: { value: 0.2, target: waterParam.x, editor: { parent: USE_NORMAL_MAP, slide: true, range: [0, 1.0], step: 0.001 } }
  35. detailedSpeed: { value: 0.2, target: waterParam.y, editor: { parent: USE_NORMAL_MAP, slide: true, range: [0, 1.0], step: 0.001 } }
  36. detailedTiling: { value: 0.2, target: waterParam.z, editor: { parent: USE_NORMAL_MAP, slide: true, range: [0, 1.0], step: 0.001 } }
  37. detailedIntensity: { value: 0.5, target: waterParam.w, editor: { parent: USE_NORMAL_MAP, slide: true, range: [0, 1.0], step: 0.001 } }
  38. waterInScatterColor: { value: [0.07, 0.13, 0.087, 1.0], target: waterColor, linear: true, editor: { parent: USE_WATER_SCATTERING, type: color } }
  39. waterScatterCoef: { value: 3.0, target: waterColor.w, editor: { parent: USE_WATER_SCATTERING, range: [0, 10.0] } }
  40. pbrMap: { value: grey }
  41. occlusionMap: { value: white }
  42. emissiveMap: { value: grey }
  43. vatPositionMap: { value: grey, target: vatPositionTexture, editor: { displayName: PositionMap } }
  44. vatPosSignMap: { value: white, target: vatPosSignTexture, editor: { displayName: PosSignMap } }
  45. vatRotationMap: { value: grey, target: vatRotationTexture, editor: { displayName: RotationMap } }
  46. vatRotSignMap: { value: white, target: vatRotSignTexture, editor: { displayName: RotSignMap } }
  47. vatRotAlphaMap: { value: grey, target: vatRotAlphaTexture, editor: { displayName: RotAlphaMap } }
  48. vatLookupMap: { value: grey, target: vatLookupTexture, editor: { parent: USE_LOOKUP_TEXTURE, displayName: LookupMap } }
  49. rasterizerState: &r1
  50. cullMode: none
  51. - &forward-add
  52. vert: standard-vs
  53. frag: standard-fs
  54. phase: forward-add
  55. propertyIndex: 0
  56. embeddedMacros: { CC_FORWARD_ADD: true }
  57. rasterizerState:
  58. cullMode: none
  59. depthStencilState:
  60. depthFunc: equal
  61. depthTest: true
  62. depthWrite: false
  63. blendState:
  64. targets:
  65. - blend: true
  66. blendSrc: one
  67. blendDst: one
  68. blendSrcAlpha: zero
  69. blendDstAlpha: one
  70. - &shadow-caster
  71. vert: shadow-caster-vs
  72. frag: shadow-caster-fs
  73. phase: shadow-caster
  74. propertyIndex: 0
  75. rasterizerState:
  76. cullMode: front
  77. properties:
  78. mainColor: { value: [1.0, 1.0, 1.0, 1.0], target: albedo, editor: { displayName: Albedo, type: color } }
  79. albedoScale: { value: [1.0, 1.0, 1.0], target: albedoScaleAndCutoff.xyz }
  80. alphaThreshold: { value: 0.5, target: albedoScaleAndCutoff.w, editor: { parent: USE_ALPHA_TEST } }
  81. mainTexture: { value: grey, target: albedoMap, editor: { displayName: AlbedoMap } }
  82. - &reflect-map
  83. vert: standard-vs
  84. frag: reflect-map-fs
  85. phase: reflect-map
  86. propertyIndex: 0
  87. - &deferred-forward
  88. vert: standard-vs
  89. frag: standard-fs
  90. phase: deferred-forward
  91. propertyIndex: 0
  92. rasterizerState: *r1
  93. - name: transparent
  94. passes:
  95. - vert: standard-vs
  96. frag: standard-fs
  97. embeddedMacros: { CC_FORCE_FORWARD_SHADING: true }
  98. depthStencilState: &d1
  99. depthTest: true
  100. depthWrite: false
  101. blendState: &b1
  102. targets:
  103. - blend: true
  104. blendSrc: src_alpha
  105. blendDst: one_minus_src_alpha
  106. blendDstAlpha: one_minus_src_alpha
  107. properties: *props
  108. - *forward-add
  109. - *shadow-caster
  110. - &deferred-forward
  111. vert: standard-vs
  112. frag: standard-fs
  113. phase: deferred-forward
  114. embeddedMacros: { CC_PIPELINE_TYPE: 0 }
  115. depthStencilState: *d1
  116. blendState: *b1
  117. propertyIndex: 0
  118. }%
  119. CCProgram shared-ubos %{
  120. uniform Constants {
  121. vec4 vatAnimParams;
  122. vec4 vatNoLUTParams;
  123. vec4 vatLUTParams;
  124. vec4 vatBBMax;
  125. vec4 vatBBMin;
  126. vec4 albedo;
  127. vec4 albedoScaleAndCutoff;
  128. vec4 pbrParams;
  129. vec4 emissive;
  130. vec4 emissiveScaleParam;
  131. vec4 anisotropyParam;
  132. vec4 waterParam;
  133. vec4 waterColor;
  134. };
  135. }%
  136. CCProgram macro-remapping %{
  137. // ui displayed macros
  138. #pragma define-meta HAS_SECOND_UV
  139. #pragma define-meta USE_TWOSIDE
  140. #pragma define-meta USE_REFRACTION default(true)
  141. #define CC_SURFACES_USE_SECOND_UV HAS_SECOND_UV
  142. #define CC_SURFACES_USE_TWO_SIDED USE_TWOSIDE
  143. #define CC_SURFACES_LIGHTING_USE_FRESNEL USE_REFRACTION
  144. #define CC_SURFACES_LIGHTING_TRANSMIT_SPECULAR USE_REFRACTION
  145. #define CC_SURFACES_TRANSFER_LOCAL_POS 1
  146. // depend on UI macros
  147. #if USE_NORMAL_MAP
  148. #define CC_SURFACES_USE_TANGENT_SPACE 1
  149. #endif
  150. }%
  151. CCProgram surface-vertex %{
  152. #include <common/math/transform>
  153. #include <common/math/number>
  154. #include <common/texture/texture-misc>
  155. #include <common/mesh/vat-animation>
  156. uniform highp sampler2D vatPositionTexture;
  157. uniform highp sampler2D vatPosSignTexture;
  158. uniform highp sampler2D vatRotationTexture;
  159. uniform highp sampler2D vatRotSignTexture;
  160. uniform highp sampler2D vatRotAlphaTexture;
  161. #if USE_LOOKUP_TEXTURE
  162. uniform highp sampler2D vatLookupTexture;
  163. #endif
  164. #define CC_SURFACES_VERTEX_MODIFY_LOCAL_POS
  165. vec3 SurfacesVertexModifyLocalPos(in SurfacesStandardVertexIntermediate In)
  166. {
  167. vec3 pos = In.position.xyz;
  168. vec2 originUV = In.texCoord, thisFrameUV, nextFrameUV;
  169. #if CC_SURFACES_USE_SECOND_UV
  170. originUV = In.texCoord1;
  171. #endif
  172. float numOfFrames = vatAnimParams.z, speed = vatAnimParams.x;
  173. #if USE_LOOKUP_AUTO_FRAME_COUNT
  174. numOfFrames = VATCalculateFrameCount(vatLUTParams.xy, vatLUTParams.z);
  175. #endif
  176. float frameLerp = VATGetAnimUV(thisFrameUV, nextFrameUV, originUV, numOfFrames, speed, cc_time.x
  177. #if USE_LOOKUP_TEXTURE
  178. , vatLookupTexture
  179. #endif
  180. );
  181. pos = VATGetLocalPosition(thisFrameUV
  182. #if USE_SMOOTH_ANIMATION
  183. , nextFrameUV, frameLerp
  184. #endif
  185. , vatPositionTexture, vatPosSignTexture);
  186. return pos;
  187. }
  188. #define CC_SURFACES_VERTEX_MODIFY_LOCAL_SHARED_DATA
  189. void SurfacesVertexModifyLocalSharedData(inout SurfacesStandardVertexIntermediate In)
  190. {
  191. vec3 normal = In.normal.xyz;
  192. vec2 originUV = In.texCoord, thisFrameUV, nextFrameUV;
  193. #if CC_SURFACES_USE_SECOND_UV
  194. originUV = In.texCoord1;
  195. #endif
  196. float numOfFrames = vatNoLUTParams.x, speed = vatAnimParams.x;
  197. #if USE_LOOKUP_AUTO_FRAME_COUNT
  198. numOfFrames = VATCalculateFrameCount(vatLUTParams.xy, vatLUTParams.z);
  199. #endif
  200. float frameLerp = VATGetAnimUV(thisFrameUV, nextFrameUV, originUV, numOfFrames, speed, cc_time.x
  201. #if USE_LOOKUP_TEXTURE
  202. , vatLookupTexture
  203. #endif
  204. );
  205. normal = VATGetLocalNormal(vec3(0.0, 1.0, 0.0), thisFrameUV
  206. #if USE_SMOOTH_ANIMATION
  207. , nextFrameUV, frameLerp
  208. #endif
  209. , vatRotationTexture, vatRotSignTexture, vatRotAlphaTexture);
  210. normal = mix(In.normal.xyz, normal, vec3(vatAnimParams.y));
  211. In.normal.xyz = normalize(normal);
  212. #if CC_SURFACES_USE_TANGENT_SPACE
  213. vec3 originTangent = vec3(1.0, 0.0, 0.0);
  214. vec3 tangent = VATGetLocalNormal(originTangent, thisFrameUV
  215. #if USE_SMOOTH_ANIMATION
  216. , nextFrameUV, frameLerp
  217. #endif
  218. , vatRotationTexture, vatRotSignTexture, vatRotAlphaTexture);
  219. tangent = mix(originTangent, tangent, vec3(vatAnimParams.y));
  220. In.tangent.xyz = normalize(tangent);
  221. #endif
  222. }
  223. #define CC_SURFACES_VERTEX_MODIFY_UV
  224. void SurfacesVertexModifyUV(inout SurfacesStandardVertexIntermediate In)
  225. {
  226. #if USE_EDGE_FADING
  227. vec3 voxelUV = VATCalculateFluidVoxelUV(vatBBMin.xyz, vatBBMax.xyz, In.position.xyz);
  228. In.texCoord = voxelUV.xz;
  229. #endif
  230. }
  231. }%
  232. CCProgram surface-fragment %{
  233. #include <common/mesh/vat-animation>
  234. #if USE_ALBEDO_MAP
  235. uniform sampler2D albedoMap;
  236. #pragma define-meta ALBEDO_UV options([v_uv, v_uv1])
  237. #endif
  238. #if USE_NORMAL_MAP
  239. uniform sampler2D normalMap;
  240. uniform sampler2D normalMapDetailed;
  241. #pragma define-meta NORMAL_UV options([v_uv, v_uv1])
  242. #endif
  243. #pragma define-meta DEFAULT_UV options([v_uv, v_uv1])
  244. #if USE_PBR_MAP
  245. uniform sampler2D pbrMap;
  246. #endif
  247. #if USE_OCCLUSION_MAP
  248. uniform sampler2D occlusionMap;
  249. #endif
  250. #if USE_EMISSIVE_MAP
  251. uniform sampler2D emissiveMap;
  252. #pragma define-meta EMISSIVE_UV options([v_uv, v_uv1])
  253. #endif
  254. #pragma define OCCLUSION_CHANNEL r
  255. #pragma define ROUGHNESS_CHANNEL g
  256. #pragma define METALLIC_CHANNEL b
  257. #pragma define SPECULAR_INTENSITY_CHANNEL a
  258. #if USE_ALPHA_TEST
  259. #pragma define-meta ALPHA_TEST_CHANNEL options([a, r])
  260. #endif
  261. ////////////////////////////////////////////////////////////////water material
  262. vec3 GetDetailedNormal(vec2 texCoord, float tiling, sampler2D normalMap, sampler2D normalMapDetailed, vec3 N, vec3 T)
  263. {
  264. float waterSpeed = waterParam.x;
  265. float detailedSpeed = waterParam.y;
  266. float detailedTiling = waterParam.z * tiling;
  267. float detailedIntensity = waterParam.w;
  268. float normalIntensity = emissiveScaleParam.w;
  269. vec2 uv = texCoord * tiling + vec2(cc_time.w, cc_time.w) * waterSpeed;
  270. vec3 nmmp = texture(normalMap, uv).xyz - vec3(0.5);
  271. vec2 uvDetailed = texCoord * detailedTiling + vec2(0.0, cc_time.w) * detailedSpeed;
  272. vec3 nmmpDetailed = texture(normalMapDetailed, uvDetailed).xyz - vec3(0.5);
  273. // normal blending
  274. nmmp = normalize(vec3(nmmp.xy + nmmpDetailed.xy * detailedIntensity, nmmp.z));
  275. return normalize(CalculateNormalFromTangentSpace(nmmp, normalIntensity, N, T, FSInput_mirrorNormal));
  276. }
  277. vec3 GetFresnel(vec3 fresnel)
  278. {
  279. return saturate(fresnel * 1.5);
  280. }
  281. float GetVATEdgeFadeCoef()
  282. {
  283. float opacity = 1.0;
  284. vec3 coef = vec3(FSInput_texcoord.x, 0.0, FSInput_texcoord.y);
  285. if(coef.z < 0.3)
  286. opacity *= coef.z / 0.3;
  287. if(coef.z > 0.95)
  288. opacity *= (1.0 - coef.z) / (1.0-0.95);
  289. float edge = 0.2;
  290. if(coef.x < edge)
  291. opacity *= coef.x / edge;
  292. if(coef.x > (1.0 - edge))
  293. opacity *= (1.0 - coef.x) / edge;
  294. return opacity;
  295. }
  296. #define CC_SURFACES_FRAGMENT_MODIFY_WORLD_NORMAL
  297. vec3 SurfacesFragmentModifyWorldNormal()
  298. {
  299. vec3 normal = FSInput_worldNormal;
  300. #if USE_NORMAL_MAP
  301. #if USE_EDGE_FADING
  302. vec3 normalFadeTo = GetDetailedNormal(NORMAL_UV, 2.0, normalMap, normalMapDetailed, vec3(0.0, 1.0, 0.0), vec3(1.0, 0.0, 0.0));
  303. float fade = GetVATEdgeFadeCoef();
  304. normal = mix(normalFadeTo, normal, fade);
  305. #endif
  306. #endif
  307. return normalize(normal);
  308. }
  309. #define CC_SURFACES_FRAGMENT_MODIFY_IOR
  310. float SurfacesFragmentModifyIOR()
  311. {
  312. return vatAnimParams.w;
  313. }
  314. #define CC_SURFACES_FRAGMENT_MODIFY_TRANSMIT_SCATTERING_PARAMS
  315. vec4 SurfacesFragmentModifyTransmitScatteringParams()
  316. {
  317. #if USE_WATER_SCATTERING
  318. float depth = 1.0;
  319. return vec4(waterColor.w, 1.0, 1.0, depth);
  320. #else
  321. return vec4(0.0, 0.0, 0.0, 0.0);
  322. #endif
  323. }
  324. #define CC_SURFACES_FRAGMENT_MODIFY_TRANSMIT_IN_SCATTERING_COLOR
  325. vec3 SurfacesFragmentModifyTransmitInScatteringColor()
  326. {
  327. return waterColor.rgb;
  328. }
  329. #include <../effects/advanced/common-functions>
  330. #include <surfaces/data-structures/standard>
  331. #define CC_SURFACES_FRAGMENT_MODIFY_SHARED_DATA
  332. void SurfacesFragmentModifySharedData(inout SurfacesMaterialData surfaceData)
  333. {
  334. #if USE_EDGE_FADING && CC_SURFACES_TRANSFER_LOCAL_POS
  335. surfaceData.baseColor.a = GetVATEdgeFadeCoef();
  336. vec3 voxelUV = VATCalculateFluidVoxelUV(vatBBMin.xyz, vatBBMax.xyz, FSInput_localPos.xyz);
  337. if(voxelUV.y < 0.5) discard;
  338. #endif
  339. }
  340. #include <lighting-models/includes/common>
  341. #define CC_SURFACES_LIGHTING_MODIFY_FINAL_RESULT
  342. void SurfacesLightingModifyFinalResult(inout LightingResult result, in LightingIntermediateData lightingData, in SurfacesMaterialData surfaceData, in LightingMiscData miscData)
  343. {
  344. // enhanced reflection for waves
  345. #if USE_REFRACTION
  346. float curve = saturate(surfaceData.worldNormal.y);
  347. float multiplier = 1.0 + pow(1.0 - curve, 0.3) * vatLUTParams.w;
  348. result.environmentSpecular *= multiplier;
  349. #endif
  350. #if CC_SURFACES_LIGHTING_USE_FRESNEL
  351. result.fresnel = GetFresnel(result.fresnel);
  352. #endif
  353. }
  354. }%
  355. CCProgram standard-vs %{
  356. precision highp float;
  357. // 1. surface internal macros, for technique usage or remapping some user (material) macros to surface internal macros
  358. #include <macro-remapping>
  359. #include <surfaces/effect-macros/common-macros>
  360. // 2. common include with corresponding shader stage, include before surface functions
  361. #include <surfaces/includes/common-vs>
  362. // 3. user surface functions that can use user (effect) parameters (ubo Constants)
  363. // see surfaces/default-functions/xxx.chunk
  364. #include <shared-ubos>
  365. #include <surface-vertex>
  366. // 4. surface include with corresponding shader stage and shading-model (optional)
  367. #include <surfaces/includes/standard-vs>
  368. // 5. shader entry with corresponding shader stage and technique usage/type
  369. #include <shading-entries/main-functions/render-to-scene/vs>
  370. }%
  371. CCProgram shadow-caster-vs %{
  372. precision highp float;
  373. #include <macro-remapping>
  374. #include <surfaces/effect-macros/render-to-shadowmap>
  375. #include <surfaces/includes/common-vs>
  376. #include <shared-ubos>
  377. #include <surface-vertex>
  378. #include <shading-entries/main-functions/render-to-shadowmap/vs>
  379. }%
  380. CCProgram standard-fs %{
  381. // shading-model : standard
  382. // lighting-model : standard (isotropy / anisotropy pbr)
  383. // shader stage : fs
  384. // technique usage/type : render-to-scene
  385. precision highp float;
  386. // 1. surface internal macros, for technique usage or remapping some user (material) macros to surface internal macros
  387. #include <macro-remapping>
  388. #include <surfaces/effect-macros/common-macros>
  389. // 2. common include with corresponding shader stage, include before surface functions
  390. #include <surfaces/includes/common-fs>
  391. // 3. user surface functions that can use user (effect) parameters (ubo Constants)
  392. // see surfaces/default-functions/xxx.chunk
  393. #include <shared-ubos>
  394. #include <surface-fragment>
  395. // 4. lighting-model (optional)
  396. #include <lighting-models/includes/standard>
  397. // 5. surface include with corresponding shader stage and shading-model (optional)
  398. #include <surfaces/includes/standard-fs>
  399. // 6. shader entry with corresponding shader stage and technique usage/type
  400. #include <shading-entries/main-functions/render-to-scene/fs>
  401. }%
  402. CCProgram shadow-caster-fs %{
  403. precision highp float;
  404. #include <macro-remapping>
  405. #include <surfaces/effect-macros/render-to-shadowmap>
  406. #include <surfaces/includes/common-fs>
  407. #include <shared-ubos>
  408. #include <surface-fragment>
  409. #include <shading-entries/main-functions/render-to-shadowmap/fs>
  410. }%
  411. CCProgram reflect-map-fs %{
  412. precision highp float;
  413. #include <macro-remapping>
  414. #include <surfaces/effect-macros/common-macros>
  415. #include <surfaces/includes/common-fs>
  416. #include <shared-ubos>
  417. #include <surface-fragment>
  418. #include <lighting-models/includes/standard>
  419. #include <surfaces/includes/standard-fs>
  420. #include <shading-entries/main-functions/render-to-reflectmap/fs>
  421. }%