leaf.effect 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303
  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. tilingOffset: { value: [1.0, 1.0, 0.0, 0.0] }
  10. mainColor: { value: [1.0, 1.0, 1.0, 1.0], target: albedo, linear: true, editor: { displayName: Albedo, type: color } }
  11. albedoScale: { value: [1.0, 1.0, 1.0], target: albedoScaleAndCutoff.xyz }
  12. alphaThreshold: { value: 0.5, target: albedoScaleAndCutoff.w, editor: { slide: true, range: [0, 1.0], step: 0.001 } }
  13. occlusion: { value: 0.0, target: pbrParams.x, editor: { slide: true, range: [0, 1.0], step: 0.001 } }
  14. roughness: { value: 0.5, target: pbrParams.y, editor: { slide: true, range: [0, 1.0], step: 0.001 } }
  15. specularIntensity: { value: 0.5, target: pbrParams.w, editor: { slide: true, range: [0.0, 1.0], step: 0.001 } }
  16. normalStrength: { value: 1.0, target: emissiveScaleParam.w, editor: { parent: USE_NORMAL_MAP, slide: true, range: [0, 5.0], step: 0.001 } }
  17. mainTexture: { value: grey, target: albedoMap, editor: { displayName: AlbedoMap } }
  18. normalMap: { value: normal }
  19. pbrMap: { value: grey, editor: { displayName: PbrOrRoughnessMap } }
  20. occlusionMap: { value: white }
  21. thicknessMap: { value: white, editor: { parent: USE_THICKNESS_MAP } }
  22. scatterColorMap: { value: white, editor: { parent: USE_SCATTER_MAP } }
  23. extinction: { value: 0.0, target: scatterParams.y, editor: { displayName: Scatter Extinction, slide: true, range: [0, 3.0], step: 0.001 } }
  24. thickness: { value: 1.0, target: scatterParams.z, editor: { displayName: Thickness Scaling, slide: true, range: [0, 3.0], step: 0.001 } }
  25. scatterColor: { value: [0.5, 0.75, 0.2, 1.0], linear: true, editor: { displayName: Scatter Color, type: color, tooltip: 'The color of scattered lighting' } }
  26. rasterizerState: &r1
  27. cullMode: None
  28. depthStencilState: &d1
  29. depthFunc: less_equal
  30. depthTest: true
  31. depthWrite: true
  32. - &forward-add
  33. vert: standard-vs
  34. frag: standard-fs
  35. phase: forward-add
  36. propertyIndex: 0
  37. embeddedMacros: { CC_FORWARD_ADD: true }
  38. depthStencilState:
  39. depthFunc: equal
  40. depthTest: true
  41. depthWrite: false
  42. blendState:
  43. targets:
  44. - blend: true
  45. blendSrc: one
  46. blendDst: one
  47. blendSrcAlpha: zero
  48. blendDstAlpha: one
  49. - &shadow-caster
  50. vert: shadow-caster-vs
  51. frag: shadow-caster-fs
  52. phase: shadow-caster
  53. propertyIndex: 0
  54. rasterizerState:
  55. cullMode: none
  56. properties:
  57. tilingOffset: { value: [1.0, 1.0, 0.0, 0.0] }
  58. mainColor: { value: [1.0, 1.0, 1.0, 1.0], target: albedo, editor: { displayName: Albedo, type: color } }
  59. albedoScale: { value: [1.0, 1.0, 1.0], target: albedoScaleAndCutoff.xyz }
  60. alphaThreshold: { value: 0.5, target: albedoScaleAndCutoff.w, editor: { parent: USE_ALPHA_TEST } }
  61. mainTexture: { value: grey, target: albedoMap, editor: { displayName: AlbedoMap } }
  62. - &deferred-forward
  63. vert: standard-vs
  64. frag: standard-fs
  65. phase: deferred-forward
  66. propertyIndex: 0
  67. rasterizerState: *r1
  68. depthStencilState: *d1
  69. - name: transparent
  70. passes:
  71. - vert: standard-vs
  72. frag: standard-fs
  73. embeddedMacros: { CC_FORCE_FORWARD_SHADING: true }
  74. depthStencilState: &dt
  75. depthTest: true
  76. depthWrite: false
  77. blendState: &b1
  78. targets:
  79. - blend: true
  80. blendSrc: src_alpha
  81. blendDst: one_minus_src_alpha
  82. blendDstAlpha: one_minus_src_alpha
  83. properties: *props
  84. - *forward-add
  85. - *shadow-caster
  86. - &deferred-forward-transparent
  87. vert: standard-vs
  88. frag: standard-fs
  89. phase: deferred-forward
  90. embeddedMacros: { CC_PIPELINE_TYPE: 0 }
  91. depthStencilState: *dt
  92. blendState: *b1
  93. propertyIndex: 0
  94. }%
  95. CCProgram shared-ubos %{
  96. uniform Constants {
  97. vec4 tilingOffset;
  98. vec4 albedo;
  99. vec4 albedoScaleAndCutoff;
  100. vec4 pbrParams;
  101. vec4 emissiveScaleParam;
  102. vec4 scatterColor;
  103. vec4 scatterParams;
  104. };
  105. }%
  106. CCProgram macro-remapping %{
  107. // ui displayed macros
  108. #pragma define-meta HAS_SECOND_UV
  109. #pragma define-meta USE_TWOSIDE
  110. //use FSInput_faceSideSign for different textures #pragma define-meta USE_TWOSIDE_MATERIAL
  111. #pragma define-meta USE_VERTEX_COLOR
  112. #pragma define-meta USE_DITHERED_ALPHA_TEST
  113. #define CC_SURFACES_USE_SECOND_UV HAS_SECOND_UV
  114. #define CC_SURFACES_USE_TWO_SIDED USE_TWOSIDE
  115. #define CC_SURFACES_USE_VERTEX_COLOR USE_VERTEX_COLOR
  116. #define CC_SURFACES_LIGHTING_TRANSMIT_DIFFUSE 1
  117. #define CC_SURFACES_TRANSFER_CLIP_POS 1
  118. // depend on UI macros
  119. #if USE_NORMAL_MAP
  120. #define CC_SURFACES_USE_TANGENT_SPACE 1
  121. #endif
  122. }%
  123. CCProgram surface-vertex %{
  124. #define CC_SURFACES_VERTEX_MODIFY_UV
  125. void SurfacesVertexModifyUV(inout SurfacesStandardVertexIntermediate In)
  126. {
  127. In.texCoord = In.texCoord * tilingOffset.xy + tilingOffset.zw;
  128. #if CC_SURFACES_USE_SECOND_UV
  129. In.texCoord1 = In.texCoord1 * tilingOffset.xy + tilingOffset.zw;
  130. #endif
  131. }
  132. }%
  133. CCProgram surface-fragment %{
  134. #if USE_ALBEDO_MAP
  135. uniform sampler2D albedoMap;
  136. #pragma define-meta ALBEDO_UV options([v_uv, v_uv1])
  137. #endif
  138. #if USE_NORMAL_MAP
  139. uniform sampler2D normalMap;
  140. #pragma define-meta NORMAL_UV options([v_uv, v_uv1])
  141. #endif
  142. #pragma define-meta DEFAULT_UV options([v_uv, v_uv1])
  143. #if USE_PBR_MAP
  144. uniform sampler2D pbrMap;
  145. #endif
  146. #if USE_OCCLUSION_MAP
  147. uniform sampler2D occlusionMap;
  148. #endif
  149. #if USE_THICKNESS_MAP
  150. uniform sampler2D thicknessMap;
  151. #endif
  152. #if USE_SCATTER_MAP
  153. uniform sampler2D scatterColorMap;
  154. #endif
  155. #pragma define OCCLUSION_CHANNEL r
  156. #pragma define ROUGHNESS_CHANNEL g
  157. #pragma define METALLIC_CHANNEL b
  158. #pragma define SPECULAR_INTENSITY_CHANNEL a
  159. #if USE_ALPHA_TEST
  160. #pragma define-meta ALPHA_TEST_CHANNEL options([a, r])
  161. #endif
  162. //////////////////User Defines
  163. #include <common/effect/special-effects>
  164. #define CC_SURFACES_FRAGMENT_MODIFY_TRANSMIT_SCATTERING_PARAMS
  165. vec4 SurfacesFragmentModifyTransmitScatteringParams()
  166. {
  167. float distance = 1.0;
  168. #if USE_THICKNESS_MAP
  169. distance = texture(thicknessMap, FSInput_texcoord).r;
  170. #elif USE_ALBEDO_MAP
  171. distance = length(texture(albedoMap, FSInput_texcoord).rgb);
  172. #endif
  173. return vec4(scatterParams.y, 0.0, 1.0, distance * scatterParams.z);
  174. }
  175. #define CC_SURFACES_FRAGMENT_MODIFY_TRANSMIT_IN_SCATTERING_COLOR
  176. vec3 SurfacesFragmentModifyTransmitInScatteringColor()
  177. {
  178. return vec3(0.0);
  179. }
  180. #define CC_SURFACES_FRAGMENT_MODIFY_TRANSMIT_OUT_SCATTERING_COLOR
  181. vec3 SurfacesFragmentModifyTransmitOutScatteringColor()
  182. {
  183. vec3 col = scatterColor.rgb;
  184. #if USE_SCATTER_MAP
  185. col *= texture(scatterColorMap, FSInput_texcoord).rgb;
  186. #elif USE_ALBEDO_MAP
  187. col *= texture(albedoMap, FSInput_texcoord).rgb;
  188. #endif
  189. return col;
  190. }
  191. #include <surfaces/data-structures/standard>
  192. #define CC_SURFACES_FRAGMENT_MODIFY_SHARED_DATA
  193. void SurfacesFragmentModifySharedData(inout SurfacesMaterialData surfaceData)
  194. {
  195. surfaceData.metallic = 0.0;
  196. }
  197. #include <common-functions>
  198. }%
  199. CCProgram standard-vs %{
  200. precision highp float;
  201. // 1. surface internal macros, for technique usage or remapping some user (material) macros to surface internal macros
  202. #include <macro-remapping>
  203. #include <surfaces/effect-macros/common-macros>
  204. // 2. common include with corresponding shader stage, include before surface functions
  205. #include <surfaces/includes/common-vs>
  206. // 3. user surface functions that can use user (effect) parameters (ubo Constants)
  207. // see surfaces/default-functions/xxx.chunk
  208. #include <shared-ubos>
  209. #include <surface-vertex>
  210. // 4. surface include with corresponding shader stage and shading-model (optional)
  211. #include <surfaces/includes/standard-vs>
  212. // 5. shader entry with corresponding shader stage and technique usage/type
  213. #include <shading-entries/main-functions/render-to-scene/vs>
  214. }%
  215. CCProgram shadow-caster-vs %{
  216. precision highp float;
  217. #include <surfaces/effect-macros/render-to-shadowmap>
  218. #include <surfaces/includes/common-vs>
  219. #include <shared-ubos>
  220. #include <surface-vertex>
  221. #include <shading-entries/main-functions/render-to-shadowmap/vs>
  222. }%
  223. CCProgram standard-fs %{
  224. // shading-model : standard
  225. // lighting-model : standard (isotropy / anisotropy pbr)
  226. // shader stage : fs
  227. // technique usage/type : render-to-scene
  228. precision highp float;
  229. // 1. surface internal macros, for technique usage or remapping some user (material) macros to surface internal macros
  230. #include <macro-remapping>
  231. #include <surfaces/effect-macros/common-macros>
  232. // 2. common include with corresponding shader stage, include before surface functions
  233. #include <surfaces/includes/common-fs>
  234. // 3. user surface functions that can use user (effect) parameters (ubo Constants)
  235. // see surfaces/default-functions/xxx.chunk
  236. #include <shared-ubos>
  237. #include <surface-fragment>
  238. // 4. lighting-model (optional)
  239. #include <lighting-models/includes/standard>
  240. // 5. surface include with corresponding shader stage and shading-model (optional)
  241. #include <surfaces/includes/standard-fs>
  242. // 6. shader entry with corresponding shader stage and technique usage/type
  243. #include <shading-entries/main-functions/render-to-scene/fs>
  244. }%
  245. CCProgram shadow-caster-fs %{
  246. precision highp float;
  247. #include <surfaces/effect-macros/render-to-shadowmap>
  248. #include <surfaces/includes/common-fs>
  249. #include <shared-ubos>
  250. #include <surface-fragment>
  251. #include <shading-entries/main-functions/render-to-shadowmap/fs>
  252. }%
  253. CCProgram reflect-map-fs %{
  254. precision highp float;
  255. #include <macro-remapping>
  256. #include <surfaces/effect-macros/common-macros>
  257. #include <surfaces/includes/common-fs>
  258. #include <shared-ubos>
  259. #include <surface-fragment>
  260. #include <lighting-models/includes/standard>
  261. #include <surfaces/includes/standard-fs>
  262. #include <shading-entries/main-functions/render-to-reflectmap/fs>
  263. }%