BsRenderSettings.cpp 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346
  1. //********************************** Banshee Engine (www.banshee3d.com) **************************************************//
  2. //**************** Copyright (c) 2016 Marko Pintera ([email protected]). All rights reserved. **********************//
  3. #include "Renderer/BsRenderSettings.h"
  4. #include "Private/RTTI/BsRenderSettingsRTTI.h"
  5. namespace bs
  6. {
  7. AutoExposureSettings::AutoExposureSettings()
  8. : histogramLog2Min(-8.0f), histogramLog2Max(4.0f), histogramPctLow(0.8f), histogramPctHigh(0.985f)
  9. , minEyeAdaptation(0.003f), maxEyeAdaptation(2.0f), eyeAdaptationSpeedUp(3.0f), eyeAdaptationSpeedDown(3.0f)
  10. { }
  11. RTTITypeBase* AutoExposureSettings::getRTTIStatic()
  12. {
  13. return AutoExposureSettingsRTTI::instance();
  14. }
  15. RTTITypeBase* AutoExposureSettings::getRTTI() const
  16. {
  17. return AutoExposureSettings::getRTTIStatic();
  18. }
  19. TonemappingSettings::TonemappingSettings()
  20. : filmicCurveShoulderStrength(0.15f), filmicCurveLinearStrength(0.5f), filmicCurveLinearAngle(0.1f)
  21. , filmicCurveToeStrength(0.2f), filmicCurveToeNumerator(0.02f), filmicCurveToeDenominator(0.3f)
  22. , filmicCurveLinearWhitePoint(11.2f)
  23. { }
  24. RTTITypeBase* TonemappingSettings::getRTTIStatic()
  25. {
  26. return TonemappingSettingsRTTI::instance();
  27. }
  28. RTTITypeBase* TonemappingSettings::getRTTI() const
  29. {
  30. return TonemappingSettings::getRTTIStatic();
  31. }
  32. WhiteBalanceSettings::WhiteBalanceSettings()
  33. : temperature(6500.0f), tint(0.0f)
  34. { }
  35. RTTITypeBase* WhiteBalanceSettings::getRTTIStatic()
  36. {
  37. return WhiteBalanceSettingsRTTI::instance();
  38. }
  39. RTTITypeBase* WhiteBalanceSettings::getRTTI() const
  40. {
  41. return WhiteBalanceSettings::getRTTIStatic();
  42. }
  43. ColorGradingSettings::ColorGradingSettings()
  44. : saturation(Vector3::ONE), contrast(Vector3::ONE), gain(Vector3::ONE), offset(Vector3::ZERO)
  45. { }
  46. RTTITypeBase* ColorGradingSettings::getRTTIStatic()
  47. {
  48. return ColorGradingSettingsRTTI::instance();
  49. }
  50. RTTITypeBase* ColorGradingSettings::getRTTI() const
  51. {
  52. return ColorGradingSettings::getRTTIStatic();
  53. }
  54. AmbientOcclusionSettings::AmbientOcclusionSettings()
  55. : enabled(true), radius(1.5f), bias(1.0f), fadeDistance(500.0f), fadeRange(50.0f), intensity(1.0f), power(4.0f)
  56. , quality(3)
  57. { }
  58. RTTITypeBase* AmbientOcclusionSettings::getRTTIStatic()
  59. {
  60. return AmbientOcclusionSettingsRTTI::instance();
  61. }
  62. RTTITypeBase* AmbientOcclusionSettings::getRTTI() const
  63. {
  64. return AmbientOcclusionSettings::getRTTIStatic();
  65. }
  66. DepthOfFieldSettings::DepthOfFieldSettings()
  67. : enabled(false), focalDistance(0.75f), focalRange(0.75f), nearTransitionRange(0.25f), farTransitionRange(0.25f)
  68. , nearBlurAmount(0.15f), farBlurAmount(0.15f)
  69. { }
  70. RTTITypeBase* DepthOfFieldSettings::getRTTIStatic()
  71. {
  72. return DepthOfFieldSettingsRTTI::instance();
  73. }
  74. RTTITypeBase* DepthOfFieldSettings::getRTTI() const
  75. {
  76. return DepthOfFieldSettings::getRTTIStatic();
  77. }
  78. ScreenSpaceReflectionsSettings::ScreenSpaceReflectionsSettings()
  79. : enabled(true), quality(2), intensity(1.0f), maxRoughness(0.8f)
  80. { }
  81. RTTITypeBase* ScreenSpaceReflectionsSettings::getRTTIStatic()
  82. {
  83. return ScreenSpaceReflectionsSettingsRTTI::instance();
  84. }
  85. RTTITypeBase* ScreenSpaceReflectionsSettings::getRTTI() const
  86. {
  87. return ScreenSpaceReflectionsSettings::getRTTIStatic();
  88. }
  89. RTTITypeBase* ShadowSettings::getRTTIStatic()
  90. {
  91. return ShadowSettingsRTTI::instance();
  92. }
  93. RTTITypeBase* ShadowSettings::getRTTI() const
  94. {
  95. return ShadowSettings::getRTTIStatic();
  96. }
  97. RenderSettings::RenderSettings()
  98. : enableAutoExposure(true), enableTonemapping(true), enableFXAA(true), exposureScale(0.0f), gamma(2.2f)
  99. , enableHDR(true), enableLighting(true), enableShadows(true), enableIndirectLighting(false), overlayOnly(false)
  100. { }
  101. RTTITypeBase* RenderSettings::getRTTIStatic()
  102. {
  103. return RenderSettingsRTTI::instance();
  104. }
  105. RTTITypeBase* RenderSettings::getRTTI() const
  106. {
  107. return RenderSettings::getRTTIStatic();
  108. }
  109. void RenderSettings::_getSyncData(UINT8* buffer, UINT32& size)
  110. {
  111. UINT32 bufferSize = 0;
  112. bufferSize += rttiGetElemSize(enableAutoExposure);
  113. bufferSize += rttiGetElemSize(enableTonemapping);
  114. bufferSize += rttiGetElemSize(exposureScale);
  115. bufferSize += rttiGetElemSize(gamma);
  116. bufferSize += rttiGetElemSize(enableFXAA);
  117. bufferSize += rttiGetElemSize(enableHDR);
  118. bufferSize += rttiGetElemSize(enableLighting);
  119. bufferSize += rttiGetElemSize(enableShadows);
  120. bufferSize += rttiGetElemSize(enableIndirectLighting);
  121. bufferSize += rttiGetElemSize(overlayOnly);
  122. bufferSize += rttiGetElemSize(autoExposure.histogramLog2Min);
  123. bufferSize += rttiGetElemSize(autoExposure.histogramLog2Max);
  124. bufferSize += rttiGetElemSize(autoExposure.histogramPctLow);
  125. bufferSize += rttiGetElemSize(autoExposure.histogramPctHigh);
  126. bufferSize += rttiGetElemSize(autoExposure.minEyeAdaptation);
  127. bufferSize += rttiGetElemSize(autoExposure.maxEyeAdaptation);
  128. bufferSize += rttiGetElemSize(autoExposure.eyeAdaptationSpeedUp);
  129. bufferSize += rttiGetElemSize(autoExposure.eyeAdaptationSpeedDown);
  130. bufferSize += rttiGetElemSize(tonemapping.filmicCurveShoulderStrength);
  131. bufferSize += rttiGetElemSize(tonemapping.filmicCurveLinearStrength);
  132. bufferSize += rttiGetElemSize(tonemapping.filmicCurveLinearAngle);
  133. bufferSize += rttiGetElemSize(tonemapping.filmicCurveToeStrength);
  134. bufferSize += rttiGetElemSize(tonemapping.filmicCurveToeNumerator);
  135. bufferSize += rttiGetElemSize(tonemapping.filmicCurveToeDenominator);
  136. bufferSize += rttiGetElemSize(tonemapping.filmicCurveLinearWhitePoint);
  137. bufferSize += rttiGetElemSize(whiteBalance.temperature);
  138. bufferSize += rttiGetElemSize(whiteBalance.tint);
  139. bufferSize += rttiGetElemSize(colorGrading.saturation);
  140. bufferSize += rttiGetElemSize(colorGrading.contrast);
  141. bufferSize += rttiGetElemSize(colorGrading.gain);
  142. bufferSize += rttiGetElemSize(colorGrading.offset);
  143. bufferSize += rttiGetElemSize(depthOfField.enabled);
  144. bufferSize += rttiGetElemSize(depthOfField.focalDistance);
  145. bufferSize += rttiGetElemSize(depthOfField.focalRange);
  146. bufferSize += rttiGetElemSize(depthOfField.nearTransitionRange);
  147. bufferSize += rttiGetElemSize(depthOfField.farTransitionRange);
  148. bufferSize += rttiGetElemSize(depthOfField.nearBlurAmount);
  149. bufferSize += rttiGetElemSize(depthOfField.farBlurAmount);
  150. bufferSize += rttiGetElemSize(ambientOcclusion.enabled);
  151. bufferSize += rttiGetElemSize(ambientOcclusion.radius);
  152. bufferSize += rttiGetElemSize(ambientOcclusion.bias);
  153. bufferSize += rttiGetElemSize(ambientOcclusion.fadeRange);
  154. bufferSize += rttiGetElemSize(ambientOcclusion.fadeDistance);
  155. bufferSize += rttiGetElemSize(ambientOcclusion.intensity);
  156. bufferSize += rttiGetElemSize(ambientOcclusion.power);
  157. bufferSize += rttiGetElemSize(ambientOcclusion.quality);
  158. bufferSize += rttiGetElemSize(screenSpaceReflections.enabled);
  159. bufferSize += rttiGetElemSize(screenSpaceReflections.intensity);
  160. bufferSize += rttiGetElemSize(screenSpaceReflections.maxRoughness);
  161. bufferSize += rttiGetElemSize(screenSpaceReflections.quality);
  162. bufferSize += rttiGetElemSize(shadowSettings.directionalShadowDistance);
  163. bufferSize += rttiGetElemSize(shadowSettings.numCascades);
  164. bufferSize += rttiGetElemSize(shadowSettings.cascadeDistributionExponent);
  165. bufferSize += rttiGetElemSize(shadowSettings.shadowFilteringQuality);
  166. if (buffer == nullptr)
  167. {
  168. size = bufferSize;
  169. return;
  170. }
  171. if (bufferSize != size)
  172. {
  173. LOGERR("Invalid buffer size");
  174. return;
  175. }
  176. char* writeDst = (char*)buffer;
  177. writeDst = rttiWriteElem(enableAutoExposure, writeDst);
  178. writeDst = rttiWriteElem(enableTonemapping, writeDst);
  179. writeDst = rttiWriteElem(exposureScale, writeDst);
  180. writeDst = rttiWriteElem(gamma, writeDst);
  181. writeDst = rttiWriteElem(enableFXAA, writeDst);
  182. writeDst = rttiWriteElem(enableHDR, writeDst);
  183. writeDst = rttiWriteElem(enableLighting, writeDst);
  184. writeDst = rttiWriteElem(enableShadows, writeDst);
  185. writeDst = rttiWriteElem(enableIndirectLighting, writeDst);
  186. writeDst = rttiWriteElem(overlayOnly, writeDst);
  187. writeDst = rttiWriteElem(autoExposure.histogramLog2Min, writeDst);
  188. writeDst = rttiWriteElem(autoExposure.histogramLog2Max, writeDst);
  189. writeDst = rttiWriteElem(autoExposure.histogramPctLow, writeDst);
  190. writeDst = rttiWriteElem(autoExposure.histogramPctHigh, writeDst);
  191. writeDst = rttiWriteElem(autoExposure.minEyeAdaptation, writeDst);
  192. writeDst = rttiWriteElem(autoExposure.maxEyeAdaptation, writeDst);
  193. writeDst = rttiWriteElem(autoExposure.eyeAdaptationSpeedUp, writeDst);
  194. writeDst = rttiWriteElem(autoExposure.eyeAdaptationSpeedDown, writeDst);
  195. writeDst = rttiWriteElem(tonemapping.filmicCurveShoulderStrength, writeDst);
  196. writeDst = rttiWriteElem(tonemapping.filmicCurveLinearStrength, writeDst);
  197. writeDst = rttiWriteElem(tonemapping.filmicCurveLinearAngle, writeDst);
  198. writeDst = rttiWriteElem(tonemapping.filmicCurveToeStrength, writeDst);
  199. writeDst = rttiWriteElem(tonemapping.filmicCurveToeNumerator, writeDst);
  200. writeDst = rttiWriteElem(tonemapping.filmicCurveToeDenominator, writeDst);
  201. writeDst = rttiWriteElem(tonemapping.filmicCurveLinearWhitePoint, writeDst);
  202. writeDst = rttiWriteElem(whiteBalance.temperature, writeDst);
  203. writeDst = rttiWriteElem(whiteBalance.tint, writeDst);
  204. writeDst = rttiWriteElem(colorGrading.saturation, writeDst);
  205. writeDst = rttiWriteElem(colorGrading.contrast, writeDst);
  206. writeDst = rttiWriteElem(colorGrading.gain, writeDst);
  207. writeDst = rttiWriteElem(colorGrading.offset, writeDst);
  208. writeDst = rttiWriteElem(depthOfField.enabled, writeDst);
  209. writeDst = rttiWriteElem(depthOfField.focalDistance, writeDst);
  210. writeDst = rttiWriteElem(depthOfField.focalRange, writeDst);
  211. writeDst = rttiWriteElem(depthOfField.nearTransitionRange, writeDst);
  212. writeDst = rttiWriteElem(depthOfField.farTransitionRange, writeDst);
  213. writeDst = rttiWriteElem(depthOfField.nearBlurAmount, writeDst);
  214. writeDst = rttiWriteElem(depthOfField.farBlurAmount, writeDst);
  215. writeDst = rttiWriteElem(ambientOcclusion.enabled, writeDst);
  216. writeDst = rttiWriteElem(ambientOcclusion.radius, writeDst);
  217. writeDst = rttiWriteElem(ambientOcclusion.bias, writeDst);
  218. writeDst = rttiWriteElem(ambientOcclusion.fadeRange, writeDst);
  219. writeDst = rttiWriteElem(ambientOcclusion.fadeDistance, writeDst);
  220. writeDst = rttiWriteElem(ambientOcclusion.intensity, writeDst);
  221. writeDst = rttiWriteElem(ambientOcclusion.power, writeDst);
  222. writeDst = rttiWriteElem(ambientOcclusion.quality, writeDst);
  223. writeDst = rttiWriteElem(screenSpaceReflections.enabled, writeDst);
  224. writeDst = rttiWriteElem(screenSpaceReflections.intensity, writeDst);
  225. writeDst = rttiWriteElem(screenSpaceReflections.maxRoughness, writeDst);
  226. writeDst = rttiWriteElem(screenSpaceReflections.quality, writeDst);
  227. writeDst = rttiWriteElem(shadowSettings.directionalShadowDistance, writeDst);
  228. writeDst = rttiWriteElem(shadowSettings.numCascades, writeDst);
  229. writeDst = rttiWriteElem(shadowSettings.cascadeDistributionExponent, writeDst);
  230. writeDst = rttiWriteElem(shadowSettings.shadowFilteringQuality, writeDst);
  231. }
  232. void RenderSettings::_setSyncData(UINT8* buffer, UINT32 size)
  233. {
  234. char* readSource = (char*)buffer;
  235. readSource = rttiReadElem(enableAutoExposure, readSource);
  236. readSource = rttiReadElem(enableTonemapping, readSource);
  237. readSource = rttiReadElem(exposureScale, readSource);
  238. readSource = rttiReadElem(gamma, readSource);
  239. readSource = rttiReadElem(enableFXAA, readSource);
  240. readSource = rttiReadElem(enableHDR, readSource);
  241. readSource = rttiReadElem(enableLighting, readSource);
  242. readSource = rttiReadElem(enableShadows, readSource);
  243. readSource = rttiReadElem(enableIndirectLighting, readSource);
  244. readSource = rttiReadElem(overlayOnly, readSource);
  245. readSource = rttiReadElem(autoExposure.histogramLog2Min, readSource);
  246. readSource = rttiReadElem(autoExposure.histogramLog2Max, readSource);
  247. readSource = rttiReadElem(autoExposure.histogramPctLow, readSource);
  248. readSource = rttiReadElem(autoExposure.histogramPctHigh, readSource);
  249. readSource = rttiReadElem(autoExposure.minEyeAdaptation, readSource);
  250. readSource = rttiReadElem(autoExposure.maxEyeAdaptation, readSource);
  251. readSource = rttiReadElem(autoExposure.eyeAdaptationSpeedUp, readSource);
  252. readSource = rttiReadElem(autoExposure.eyeAdaptationSpeedDown, readSource);
  253. readSource = rttiReadElem(tonemapping.filmicCurveShoulderStrength, readSource);
  254. readSource = rttiReadElem(tonemapping.filmicCurveLinearStrength, readSource);
  255. readSource = rttiReadElem(tonemapping.filmicCurveLinearAngle, readSource);
  256. readSource = rttiReadElem(tonemapping.filmicCurveToeStrength, readSource);
  257. readSource = rttiReadElem(tonemapping.filmicCurveToeNumerator, readSource);
  258. readSource = rttiReadElem(tonemapping.filmicCurveToeDenominator, readSource);
  259. readSource = rttiReadElem(tonemapping.filmicCurveLinearWhitePoint, readSource);
  260. readSource = rttiReadElem(whiteBalance.temperature, readSource);
  261. readSource = rttiReadElem(whiteBalance.tint, readSource);
  262. readSource = rttiReadElem(colorGrading.saturation, readSource);
  263. readSource = rttiReadElem(colorGrading.contrast, readSource);
  264. readSource = rttiReadElem(colorGrading.gain, readSource);
  265. readSource = rttiReadElem(colorGrading.offset, readSource);
  266. readSource = rttiReadElem(depthOfField.enabled, readSource);
  267. readSource = rttiReadElem(depthOfField.focalDistance, readSource);
  268. readSource = rttiReadElem(depthOfField.focalRange, readSource);
  269. readSource = rttiReadElem(depthOfField.nearTransitionRange, readSource);
  270. readSource = rttiReadElem(depthOfField.farTransitionRange, readSource);
  271. readSource = rttiReadElem(depthOfField.nearBlurAmount, readSource);
  272. readSource = rttiReadElem(depthOfField.farBlurAmount, readSource);
  273. readSource = rttiReadElem(ambientOcclusion.enabled, readSource);
  274. readSource = rttiReadElem(ambientOcclusion.radius, readSource);
  275. readSource = rttiReadElem(ambientOcclusion.bias, readSource);
  276. readSource = rttiReadElem(ambientOcclusion.fadeRange, readSource);
  277. readSource = rttiReadElem(ambientOcclusion.fadeDistance, readSource);
  278. readSource = rttiReadElem(ambientOcclusion.intensity, readSource);
  279. readSource = rttiReadElem(ambientOcclusion.power, readSource);
  280. readSource = rttiReadElem(ambientOcclusion.quality, readSource);
  281. readSource = rttiReadElem(screenSpaceReflections.enabled, readSource);
  282. readSource = rttiReadElem(screenSpaceReflections.intensity, readSource);
  283. readSource = rttiReadElem(screenSpaceReflections.maxRoughness, readSource);
  284. readSource = rttiReadElem(screenSpaceReflections.quality, readSource);
  285. readSource = rttiReadElem(shadowSettings.directionalShadowDistance, readSource);
  286. readSource = rttiReadElem(shadowSettings.numCascades, readSource);
  287. readSource = rttiReadElem(shadowSettings.cascadeDistributionExponent, readSource);
  288. readSource = rttiReadElem(shadowSettings.shadowFilteringQuality, readSource);
  289. }
  290. }