PostFX_Bloom.scrapeh 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245
  1. //////////////////////////////////////////////////////////////////////////////
  2. // ©2008 Electronic Arts Inc
  3. //
  4. // Scrape script for bloom post effect
  5. //////////////////////////////////////////////////////////////////////////////
  6. #ifndef SCRAPE_SCRIPT_POSTFX_BLOOM_SCRAPEH
  7. #define SCRAPE_SCRIPT_POSTFX_BLOOM_SCRAPEH
  8. //
  9. // Bloom
  10. //
  11. var shader PostEffectBloomShader PostFX_Bloom.fx
  12. // The following values are the basic render target sizes used on each platform.
  13. // They normally need to be set through code to accommodate the various display resolutions/aspect ratios,
  14. // but they can overridden here for experimentation.
  15. #define CODE_DRIVEN_TEXTURE_SIZES 1
  16. #if CODE_DRIVEN_TEXTURE_SIZES
  17. #define HIGH_X $PostEffect.Bloom.TextureSizeHigh.x
  18. #define HIGH_Y $PostEffect.Bloom.TextureSizeHigh.y
  19. #define MEDIUM_X $PostEffect.Bloom.TextureSizeMedium.x
  20. #define MEDIUM_Y $PostEffect.Bloom.TextureSizeMedium.y
  21. #define LOW_X $PostEffect.Bloom.TextureSizeLow.x
  22. #define LOW_Y $PostEffect.Bloom.TextureSizeLow.y
  23. #else
  24. #define WIDESCREEN 1
  25. #if defined(EA_PLATFORM_WINDOWS)
  26. // The PC seems to have most resolutions map somewhat "nice" to 256 wide based render targets,
  27. // eg our main 1024 screen res is 4x downsampled, up to big displays of 2560x1600 which can be 10x downsampled.
  28. #if !WIDESCREEN // 4:3
  29. #define HIGH_X 256 // 1024 / 4
  30. #define HIGH_Y 192 // 768 / 4
  31. #define MEDIUM_X 64 // HIGH_X / 4
  32. #define MEDIUM_Y 48 // HIGH_Y / 4
  33. #define LOW_X 16 // MEDIUM_X / 4
  34. #define LOW_Y 12 // MEDIUM_Y / 4
  35. #else // 16:9
  36. #define HIGH_X 256
  37. #define HIGH_Y 144
  38. #define MEDIUM_X 64
  39. #define MEDIUM_Y 36
  40. #define LOW_X 16
  41. #define LOW_Y 9
  42. #endif
  43. #else // XENON
  44. // On the Xenon our two resolutions are 960x720 and 1280x720,
  45. // both map nicely to 4x downsampling with a height of 180 and variable width.
  46. #if !WIDESCREEN // 4:3
  47. #define HIGH_X 240
  48. #define HIGH_Y 180
  49. #define MEDIUM_X 60
  50. #define MEDIUM_Y 45
  51. #define LOW_X 15
  52. #define LOW_Y 11
  53. #else // 16:9
  54. #define HIGH_X 320
  55. #define HIGH_Y 180
  56. #define MEDIUM_X 80
  57. #define MEDIUM_Y 45
  58. #define LOW_X 20
  59. #define LOW_Y 11
  60. #endif
  61. #endif
  62. #endif
  63. #define BLOOM_SURFACE_FORMAT $PostEffect.Bloom.SurfaceFormat
  64. #define BLOOM_TEXTURE_FORMAT $PostEffect.Bloom.TextureFormat
  65. var texture BloomTextureHigh0 HIGH_X HIGH_Y BLOOM_TEXTURE_FORMAT
  66. #if defined(EA_PLATFORM_WINDOWS)
  67. var texture BloomTextureHigh1 HIGH_X HIGH_Y BLOOM_TEXTURE_FORMAT
  68. #define BloomRenderTargetHigh0 BloomTextureHigh0
  69. #define BloomRenderTargetHigh1 BloomTextureHigh1
  70. #elif defined(EA_PLATFORM_XENON)
  71. #define BloomTextureHigh1 BloomTextureHigh0
  72. var surface BloomRenderTargetHigh0 edram HIGH_X HIGH_Y BLOOM_SURFACE_FORMAT
  73. #define BloomRenderTargetHigh1 BloomRenderTargetHigh0
  74. #endif
  75. var texture BloomTextureMedium0 MEDIUM_X MEDIUM_Y BLOOM_TEXTURE_FORMAT
  76. #if defined(EA_PLATFORM_WINDOWS)
  77. var texture BloomTextureMedium1 MEDIUM_X MEDIUM_Y BLOOM_TEXTURE_FORMAT
  78. #define BloomRenderTargetMedium0 BloomTextureMedium0
  79. #define BloomRenderTargetMedium1 BloomTextureMedium1
  80. #elif defined(EA_PLATFORM_XENON)
  81. #define BloomTextureMedium1 BloomTextureMedium0
  82. var surface BloomRenderTargetMedium0 edram MEDIUM_X MEDIUM_Y BLOOM_SURFACE_FORMAT
  83. #define BloomRenderTargetMedium1 BloomRenderTargetMedium0
  84. #endif
  85. var texture BloomTextureLow0 LOW_X LOW_Y BLOOM_TEXTURE_FORMAT
  86. #if defined(EA_PLATFORM_WINDOWS)
  87. var texture BloomTextureLow1 LOW_X LOW_Y BLOOM_TEXTURE_FORMAT
  88. #define BloomRenderTargetLow0 BloomTextureLow0
  89. #define BloomRenderTargetLow1 BloomTextureLow1
  90. #elif defined(EA_PLATFORM_XENON)
  91. #define BloomTextureLow1 BloomTextureLow0
  92. var surface BloomRenderTargetLow0 edram LOW_X LOW_Y BLOOM_SURFACE_FORMAT
  93. #define BloomRenderTargetLow1 BloomRenderTargetLow0
  94. #endif
  95. proc PostEffectBloom
  96. if PostEffect Bloom.IsEnabled
  97. beginevent UpdatePostFXBloom
  98. // Fill debug pattern
  99. //setshader PostEffectBloomShader DebugPattern
  100. //renderfullquad
  101. // Copy frame buffer to RT
  102. callproc copyFrameBufferToTexture
  103. setdepth NULL
  104. // Downsample to high res texture
  105. settexture PostEffect Bloom.SourceTexture PostEffectFrameBufferTexture
  106. settosize PostEffect Bloom.SourceTextureSize PostEffectFrameBufferTexture
  107. settarget 0 BloomRenderTargetHigh0
  108. settosize PostEffect Bloom.TargetTextureSize BloomRenderTargetHigh0
  109. setshader PostEffectBloomShader DownsampleInitial
  110. renderquad
  111. XENON_RESOLVE(BloomTextureHigh0)
  112. // Downsample to medium res texture
  113. settexture PostEffect Bloom.SourceTexture BloomTextureHigh0
  114. settosize PostEffect Bloom.SourceTextureSize BloomTextureHigh0
  115. settarget 0 BloomRenderTargetMedium0
  116. setshader PostEffectBloomShader Downsample4x4
  117. renderquad
  118. XENON_RESOLVE(BloomTextureMedium0)
  119. // Downsample to low res texture
  120. settexture PostEffect Bloom.SourceTexture BloomTextureMedium0
  121. settosize PostEffect Bloom.SourceTextureSize BloomTextureMedium0
  122. settarget 0 BloomRenderTargetLow0
  123. setshader PostEffectBloomShader Downsample4x4
  124. renderquad
  125. XENON_RESOLVE(BloomTextureLow0)
  126. // Blur low res texture
  127. settexture PostEffect Bloom.SourceTexture BloomTextureLow0
  128. settosize PostEffect Bloom.SourceTextureSize BloomTextureLow0
  129. settarget 0 BloomRenderTargetLow1
  130. setshader PostEffectBloomShader BlurGaussian11x11U
  131. renderquad
  132. XENON_RESOLVE(BloomTextureLow1)
  133. settarget 0 BloomRenderTargetLow0
  134. settexture PostEffect Bloom.SourceTexture BloomTextureLow1
  135. settosize PostEffect Bloom.SourceTextureSize BloomTextureLow1
  136. setshader PostEffectBloomShader BlurGaussian11x11V
  137. renderquad
  138. XENON_RESOLVE(BloomTextureLow0)
  139. // Accumulate low and medium res texture
  140. settexture PostEffect FrameBufferTexture BloomTextureMedium0
  141. settexture PostEffect Bloom.SourceTexture BloomTextureLow0
  142. settarget 0 BloomRenderTargetMedium1
  143. setshader PostEffectBloomShader Accumulate
  144. renderquad
  145. XENON_RESOLVE(BloomTextureMedium1)
  146. // Blur medium res texture
  147. settexture PostEffect Bloom.SourceTexture BloomTextureMedium1
  148. settosize PostEffect Bloom.SourceTextureSize BloomTextureMedium1
  149. settarget 0 BloomRenderTargetMedium0
  150. setshader PostEffectBloomShader BlurGaussian11x11U
  151. renderquad
  152. XENON_RESOLVE(BloomTextureMedium0)
  153. settexture PostEffect Bloom.SourceTexture BloomTextureMedium0
  154. settosize PostEffect Bloom.SourceTextureSize BloomTextureMedium0
  155. settarget 0 BloomRenderTargetMedium1
  156. setshader PostEffectBloomShader BlurGaussian11x11V
  157. renderquad
  158. XENON_RESOLVE(BloomTextureMedium1)
  159. // Accumulate medium and high res texture
  160. settexture PostEffect FrameBufferTexture BloomTextureHigh0
  161. settexture PostEffect Bloom.SourceTexture BloomTextureMedium1
  162. settarget 0 BloomRenderTargetHigh1
  163. setshader PostEffectBloomShader Accumulate
  164. renderquad
  165. XENON_RESOLVE(BloomTextureHigh1)
  166. // Blur high res texture
  167. settexture PostEffect Bloom.SourceTexture BloomTextureHigh1
  168. settosize PostEffect Bloom.SourceTextureSize BloomTextureHigh1
  169. settarget 0 BloomRenderTargetHigh0
  170. setshader PostEffectBloomShader BlurGaussian11x11U
  171. renderquad
  172. XENON_RESOLVE(BloomTextureHigh0)
  173. settexture PostEffect Bloom.SourceTexture BloomTextureHigh0
  174. settosize PostEffect Bloom.SourceTextureSize BloomTextureHigh0
  175. settarget 0 BloomRenderTargetHigh1
  176. setshader PostEffectBloomShader BlurGaussian11x11V
  177. renderquad
  178. XENON_RESOLVE(BloomTextureHigh1)
  179. // Reset render target to screen
  180. callproc setFrameRenderTarget
  181. // Accumulate high res texture and frame buffer
  182. settexture PostEffect FrameBufferTexture PostEffectFrameBufferTexture
  183. settexture PostEffect Bloom.SourceTexture BloomTextureHigh1
  184. setshader PostEffectBloomShader AccumulateFinal
  185. renderquad
  186. // Fill half the screen with an intermediate texture for debugging
  187. //callproc setFrameRenderTarget
  188. //settexture PostEffect FrameBufferTexture BloomTextureHigh1
  189. //setshader PostEffectBloomShader DebugDisplay
  190. //renderfullquad
  191. callproc setFrameDepthBuffer
  192. endevent UpdatePostFXBloom
  193. endif
  194. endproc
  195. #endif // SCRAPE_SCRIPT_POSTFX_BLOOM_SCRAPEH