renderer_scene_render_rd.h 69 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128
  1. /*************************************************************************/
  2. /* renderer_scene_render_rd.h */
  3. /*************************************************************************/
  4. /* This file is part of: */
  5. /* GODOT ENGINE */
  6. /* https://godotengine.org */
  7. /*************************************************************************/
  8. /* Copyright (c) 2007-2021 Juan Linietsky, Ariel Manzur. */
  9. /* Copyright (c) 2014-2021 Godot Engine contributors (cf. AUTHORS.md). */
  10. /* */
  11. /* Permission is hereby granted, free of charge, to any person obtaining */
  12. /* a copy of this software and associated documentation files (the */
  13. /* "Software"), to deal in the Software without restriction, including */
  14. /* without limitation the rights to use, copy, modify, merge, publish, */
  15. /* distribute, sublicense, and/or sell copies of the Software, and to */
  16. /* permit persons to whom the Software is furnished to do so, subject to */
  17. /* the following conditions: */
  18. /* */
  19. /* The above copyright notice and this permission notice shall be */
  20. /* included in all copies or substantial portions of the Software. */
  21. /* */
  22. /* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
  23. /* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
  24. /* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
  25. /* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
  26. /* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
  27. /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
  28. /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
  29. /*************************************************************************/
  30. #ifndef RENDERING_SERVER_SCENE_RENDER_RD_H
  31. #define RENDERING_SERVER_SCENE_RENDER_RD_H
  32. #include "core/templates/local_vector.h"
  33. #include "core/templates/rid_owner.h"
  34. #include "servers/rendering/renderer_compositor.h"
  35. #include "servers/rendering/renderer_rd/cluster_builder_rd.h"
  36. #include "servers/rendering/renderer_rd/renderer_storage_rd.h"
  37. #include "servers/rendering/renderer_rd/shaders/gi.glsl.gen.h"
  38. #include "servers/rendering/renderer_rd/shaders/giprobe.glsl.gen.h"
  39. #include "servers/rendering/renderer_rd/shaders/giprobe_debug.glsl.gen.h"
  40. #include "servers/rendering/renderer_rd/shaders/sdfgi_debug.glsl.gen.h"
  41. #include "servers/rendering/renderer_rd/shaders/sdfgi_debug_probes.glsl.gen.h"
  42. #include "servers/rendering/renderer_rd/shaders/sdfgi_direct_light.glsl.gen.h"
  43. #include "servers/rendering/renderer_rd/shaders/sdfgi_integrate.glsl.gen.h"
  44. #include "servers/rendering/renderer_rd/shaders/sdfgi_preprocess.glsl.gen.h"
  45. #include "servers/rendering/renderer_rd/shaders/sky.glsl.gen.h"
  46. #include "servers/rendering/renderer_rd/shaders/volumetric_fog.glsl.gen.h"
  47. #include "servers/rendering/renderer_scene_render.h"
  48. #include "servers/rendering/rendering_device.h"
  49. class RendererSceneRenderRD : public RendererSceneRender {
  50. protected:
  51. double time;
  52. // Skys need less info from Directional Lights than the normal shaders
  53. struct SkyDirectionalLightData {
  54. float direction[3];
  55. float energy;
  56. float color[3];
  57. float size;
  58. uint32_t enabled;
  59. uint32_t pad[3];
  60. };
  61. struct SkySceneState {
  62. struct UBO {
  63. uint32_t volumetric_fog_enabled;
  64. float volumetric_fog_inv_length;
  65. float volumetric_fog_detail_spread;
  66. float fog_aerial_perspective;
  67. float fog_light_color[3];
  68. float fog_sun_scatter;
  69. uint32_t fog_enabled;
  70. float fog_density;
  71. float z_far;
  72. uint32_t directional_light_count;
  73. };
  74. UBO ubo;
  75. SkyDirectionalLightData *directional_lights;
  76. SkyDirectionalLightData *last_frame_directional_lights;
  77. uint32_t max_directional_lights;
  78. uint32_t last_frame_directional_light_count;
  79. RID directional_light_buffer;
  80. RID uniform_set;
  81. RID uniform_buffer;
  82. RID fog_uniform_set;
  83. RID default_fog_uniform_set;
  84. RID fog_shader;
  85. RID fog_material;
  86. RID fog_only_texture_uniform_set;
  87. } sky_scene_state;
  88. struct RenderBufferData {
  89. virtual void configure(RID p_color_buffer, RID p_depth_buffer, int p_width, int p_height, RS::ViewportMSAA p_msaa) = 0;
  90. virtual ~RenderBufferData() {}
  91. };
  92. virtual RenderBufferData *_create_render_buffer_data() = 0;
  93. void _setup_lights(const PagedArray<RID> &p_lights, const Transform &p_camera_transform, RID p_shadow_atlas, bool p_using_shadows, uint32_t &r_directional_light_count, uint32_t &r_positional_light_count);
  94. void _setup_decals(const PagedArray<RID> &p_decals, const Transform &p_camera_inverse_xform);
  95. void _setup_reflections(const PagedArray<RID> &p_reflections, const Transform &p_camera_inverse_transform, RID p_environment);
  96. void _setup_giprobes(RID p_render_buffers, const Transform &p_transform, const PagedArray<RID> &p_gi_probes, uint32_t &r_gi_probes_used);
  97. virtual void _render_scene(RID p_render_buffer, const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, const PagedArray<GeometryInstance *> &p_instances, const PagedArray<RID> &p_gi_probes, const PagedArray<RID> &p_lightmaps, RID p_environment, RID p_cluster_buffer, uint32_t p_cluster_size, uint32_t p_cluster_max_elements, RID p_camera_effects, RID p_shadow_atlas, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, const Color &p_default_color, float p_screen_lod_threshold) = 0;
  98. virtual void _render_shadow_begin() = 0;
  99. virtual void _render_shadow_append(RID p_framebuffer, const PagedArray<GeometryInstance *> &p_instances, const CameraMatrix &p_projection, const Transform &p_transform, float p_zfar, float p_bias, float p_normal_bias, bool p_use_dp, bool p_use_dp_flip, bool p_use_pancake, const Plane &p_camera_plane = Plane(), float p_lod_distance_multiplier = 0.0, float p_screen_lod_threshold = 0.0, const Rect2i &p_rect = Rect2i(), bool p_flip_y = false, bool p_clear_region = true, bool p_begin = true, bool p_end = true) = 0;
  100. virtual void _render_shadow_process() = 0;
  101. virtual void _render_shadow_end(uint32_t p_barrier = RD::BARRIER_MASK_ALL) = 0;
  102. virtual void _render_material(const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) = 0;
  103. virtual void _render_uv2(const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region) = 0;
  104. virtual void _render_sdfgi(RID p_render_buffers, const Vector3i &p_from, const Vector3i &p_size, const AABB &p_bounds, const PagedArray<GeometryInstance *> &p_instances, const RID &p_albedo_texture, const RID &p_emission_texture, const RID &p_emission_aniso_texture, const RID &p_geom_facing_texture) = 0;
  105. virtual void _render_particle_collider_heightfield(RID p_fb, const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, const PagedArray<GeometryInstance *> &p_instances) = 0;
  106. virtual void _debug_giprobe(RID p_gi_probe, RenderingDevice::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform, bool p_lighting, bool p_emission, float p_alpha);
  107. void _debug_sdfgi_probes(RID p_render_buffers, RD::DrawListID p_draw_list, RID p_framebuffer, const CameraMatrix &p_camera_with_transform);
  108. RenderBufferData *render_buffers_get_data(RID p_render_buffers);
  109. virtual void _base_uniforms_changed() = 0;
  110. virtual void _render_buffers_uniform_set_changed(RID p_render_buffers) = 0;
  111. virtual RID _render_buffers_get_normal_texture(RID p_render_buffers) = 0;
  112. void _process_ssao(RID p_render_buffers, RID p_environment, RID p_normal_buffer, const CameraMatrix &p_projection);
  113. void _process_ssr(RID p_render_buffers, RID p_dest_framebuffer, RID p_normal_buffer, RID p_specular_buffer, RID p_metallic, const Color &p_metallic_mask, RID p_environment, const CameraMatrix &p_projection, bool p_use_additive);
  114. void _process_sss(RID p_render_buffers, const CameraMatrix &p_camera);
  115. void _setup_sky(RID p_environment, RID p_render_buffers, const CameraMatrix &p_projection, const Transform &p_transform, const Size2i p_screen_size);
  116. void _update_sky(RID p_environment, const CameraMatrix &p_projection, const Transform &p_transform);
  117. void _draw_sky(bool p_can_continue_color, bool p_can_continue_depth, RID p_fb, RID p_environment, const CameraMatrix &p_projection, const Transform &p_transform);
  118. void _pre_process_gi(RID p_render_buffers, const Transform &p_transform);
  119. void _process_gi(RID p_render_buffers, RID p_normal_roughness_buffer, RID p_gi_probe_buffer, RID p_environment, const CameraMatrix &p_projection, const Transform &p_transform, const PagedArray<RID> &p_gi_probes);
  120. bool _needs_post_prepass_render(bool p_use_gi);
  121. void _post_prepass_render(bool p_use_gi);
  122. void _pre_resolve_render(bool p_use_gi);
  123. void _pre_opaque_render(bool p_use_ssao, bool p_use_gi, RID p_normal_roughness_buffer, RID p_gi_probe_buffer);
  124. uint32_t _get_render_state_directional_light_count() const;
  125. // needed for a single argument calls (material and uv2)
  126. PagedArrayPool<GeometryInstance *> cull_argument_pool;
  127. PagedArray<GeometryInstance *> cull_argument; //need this to exist
  128. private:
  129. RS::ViewportDebugDraw debug_draw = RS::VIEWPORT_DEBUG_DRAW_DISABLED;
  130. double time_step = 0;
  131. static RendererSceneRenderRD *singleton;
  132. int roughness_layers;
  133. RendererStorageRD *storage;
  134. struct ReflectionData {
  135. struct Layer {
  136. struct Mipmap {
  137. RID framebuffers[6];
  138. RID views[6];
  139. Size2i size;
  140. };
  141. Vector<Mipmap> mipmaps; //per-face view
  142. Vector<RID> views; // per-cubemap view
  143. };
  144. struct DownsampleLayer {
  145. struct Mipmap {
  146. RID view;
  147. Size2i size;
  148. };
  149. Vector<Mipmap> mipmaps;
  150. };
  151. RID radiance_base_cubemap; //cubemap for first layer, first cubemap
  152. RID downsampled_radiance_cubemap;
  153. DownsampleLayer downsampled_layer;
  154. RID coefficient_buffer;
  155. bool dirty = true;
  156. Vector<Layer> layers;
  157. };
  158. void _clear_reflection_data(ReflectionData &rd);
  159. void _update_reflection_data(ReflectionData &rd, int p_size, int p_mipmaps, bool p_use_array, RID p_base_cube, int p_base_layer, bool p_low_quality);
  160. void _create_reflection_fast_filter(ReflectionData &rd, bool p_use_arrays);
  161. void _create_reflection_importance_sample(ReflectionData &rd, bool p_use_arrays, int p_cube_side, int p_base_layer);
  162. void _update_reflection_mipmaps(ReflectionData &rd, int p_start, int p_end);
  163. /* Sky shader */
  164. enum SkyVersion {
  165. SKY_VERSION_BACKGROUND,
  166. SKY_VERSION_HALF_RES,
  167. SKY_VERSION_QUARTER_RES,
  168. SKY_VERSION_CUBEMAP,
  169. SKY_VERSION_CUBEMAP_HALF_RES,
  170. SKY_VERSION_CUBEMAP_QUARTER_RES,
  171. SKY_VERSION_MAX
  172. };
  173. struct SkyShader {
  174. SkyShaderRD shader;
  175. ShaderCompilerRD compiler;
  176. RID default_shader;
  177. RID default_material;
  178. RID default_shader_rd;
  179. } sky_shader;
  180. struct SkyShaderData : public RendererStorageRD::ShaderData {
  181. bool valid;
  182. RID version;
  183. PipelineCacheRD pipelines[SKY_VERSION_MAX];
  184. Map<StringName, ShaderLanguage::ShaderNode::Uniform> uniforms;
  185. Vector<ShaderCompilerRD::GeneratedCode::Texture> texture_uniforms;
  186. Vector<uint32_t> ubo_offsets;
  187. uint32_t ubo_size;
  188. String path;
  189. String code;
  190. Map<StringName, RID> default_texture_params;
  191. bool uses_time;
  192. bool uses_position;
  193. bool uses_half_res;
  194. bool uses_quarter_res;
  195. bool uses_light;
  196. virtual void set_code(const String &p_Code);
  197. virtual void set_default_texture_param(const StringName &p_name, RID p_texture);
  198. virtual void get_param_list(List<PropertyInfo> *p_param_list) const;
  199. virtual void get_instance_param_list(List<RendererStorage::InstanceShaderParam> *p_param_list) const;
  200. virtual bool is_param_texture(const StringName &p_param) const;
  201. virtual bool is_animated() const;
  202. virtual bool casts_shadows() const;
  203. virtual Variant get_default_parameter(const StringName &p_parameter) const;
  204. virtual RS::ShaderNativeSourceCode get_native_source_code() const;
  205. SkyShaderData();
  206. virtual ~SkyShaderData();
  207. };
  208. RendererStorageRD::ShaderData *_create_sky_shader_func();
  209. static RendererStorageRD::ShaderData *_create_sky_shader_funcs() {
  210. return static_cast<RendererSceneRenderRD *>(singleton)->_create_sky_shader_func();
  211. };
  212. struct SkyMaterialData : public RendererStorageRD::MaterialData {
  213. uint64_t last_frame;
  214. SkyShaderData *shader_data;
  215. RID uniform_buffer;
  216. RID uniform_set;
  217. Vector<RID> texture_cache;
  218. Vector<uint8_t> ubo_data;
  219. bool uniform_set_updated;
  220. virtual void set_render_priority(int p_priority) {}
  221. virtual void set_next_pass(RID p_pass) {}
  222. virtual void update_parameters(const Map<StringName, Variant> &p_parameters, bool p_uniform_dirty, bool p_textures_dirty);
  223. virtual ~SkyMaterialData();
  224. };
  225. RendererStorageRD::MaterialData *_create_sky_material_func(SkyShaderData *p_shader);
  226. static RendererStorageRD::MaterialData *_create_sky_material_funcs(RendererStorageRD::ShaderData *p_shader) {
  227. return static_cast<RendererSceneRenderRD *>(singleton)->_create_sky_material_func(static_cast<SkyShaderData *>(p_shader));
  228. };
  229. enum SkyTextureSetVersion {
  230. SKY_TEXTURE_SET_BACKGROUND,
  231. SKY_TEXTURE_SET_HALF_RES,
  232. SKY_TEXTURE_SET_QUARTER_RES,
  233. SKY_TEXTURE_SET_CUBEMAP,
  234. SKY_TEXTURE_SET_CUBEMAP_HALF_RES,
  235. SKY_TEXTURE_SET_CUBEMAP_QUARTER_RES,
  236. SKY_TEXTURE_SET_MAX
  237. };
  238. enum SkySet {
  239. SKY_SET_UNIFORMS,
  240. SKY_SET_MATERIAL,
  241. SKY_SET_TEXTURES,
  242. SKY_SET_FOG,
  243. SKY_SET_MAX
  244. };
  245. /* SKY */
  246. struct Sky {
  247. RID radiance;
  248. RID half_res_pass;
  249. RID half_res_framebuffer;
  250. RID quarter_res_pass;
  251. RID quarter_res_framebuffer;
  252. Size2i screen_size;
  253. RID texture_uniform_sets[SKY_TEXTURE_SET_MAX];
  254. RID uniform_set;
  255. RID material;
  256. RID uniform_buffer;
  257. int radiance_size = 256;
  258. RS::SkyMode mode = RS::SKY_MODE_AUTOMATIC;
  259. ReflectionData reflection;
  260. bool dirty = false;
  261. int processing_layer = 0;
  262. Sky *dirty_list = nullptr;
  263. //State to track when radiance cubemap needs updating
  264. SkyMaterialData *prev_material;
  265. Vector3 prev_position;
  266. float prev_time;
  267. RID sdfgi_integrate_sky_uniform_set;
  268. };
  269. Sky *dirty_sky_list = nullptr;
  270. void _sky_invalidate(Sky *p_sky);
  271. void _update_dirty_skys();
  272. RID _get_sky_textures(Sky *p_sky, SkyTextureSetVersion p_version);
  273. uint32_t sky_ggx_samples_quality;
  274. bool sky_use_cubemap_array;
  275. mutable RID_Owner<Sky, true> sky_owner;
  276. /* REFLECTION ATLAS */
  277. struct ReflectionAtlas {
  278. int count = 0;
  279. int size = 0;
  280. RID reflection;
  281. RID depth_buffer;
  282. RID depth_fb;
  283. struct Reflection {
  284. RID owner;
  285. ReflectionData data;
  286. RID fbs[6];
  287. };
  288. Vector<Reflection> reflections;
  289. ClusterBuilderRD *cluster_builder = nullptr;
  290. };
  291. mutable RID_Owner<ReflectionAtlas> reflection_atlas_owner;
  292. /* REFLECTION PROBE INSTANCE */
  293. struct ReflectionProbeInstance {
  294. RID probe;
  295. int atlas_index = -1;
  296. RID atlas;
  297. bool dirty = true;
  298. bool rendering = false;
  299. int processing_layer = 1;
  300. int processing_side = 0;
  301. uint32_t render_step = 0;
  302. uint64_t last_pass = 0;
  303. uint32_t render_index = 0;
  304. Transform transform;
  305. };
  306. mutable RID_Owner<ReflectionProbeInstance> reflection_probe_instance_owner;
  307. /* DECAL INSTANCE */
  308. struct DecalInstance {
  309. RID decal;
  310. Transform transform;
  311. };
  312. mutable RID_Owner<DecalInstance> decal_instance_owner;
  313. /* LIGHTMAP INSTANCE */
  314. struct LightmapInstance {
  315. RID lightmap;
  316. Transform transform;
  317. };
  318. mutable RID_Owner<LightmapInstance> lightmap_instance_owner;
  319. /* GIPROBE INSTANCE */
  320. struct GIProbeLight {
  321. uint32_t type;
  322. float energy;
  323. float radius;
  324. float attenuation;
  325. float color[3];
  326. float cos_spot_angle;
  327. float position[3];
  328. float inv_spot_attenuation;
  329. float direction[3];
  330. uint32_t has_shadow;
  331. };
  332. struct GIProbePushConstant {
  333. int32_t limits[3];
  334. uint32_t stack_size;
  335. float emission_scale;
  336. float propagation;
  337. float dynamic_range;
  338. uint32_t light_count;
  339. uint32_t cell_offset;
  340. uint32_t cell_count;
  341. float aniso_strength;
  342. uint32_t pad;
  343. };
  344. struct GIProbeDynamicPushConstant {
  345. int32_t limits[3];
  346. uint32_t light_count;
  347. int32_t x_dir[3];
  348. float z_base;
  349. int32_t y_dir[3];
  350. float z_sign;
  351. int32_t z_dir[3];
  352. float pos_multiplier;
  353. uint32_t rect_pos[2];
  354. uint32_t rect_size[2];
  355. uint32_t prev_rect_ofs[2];
  356. uint32_t prev_rect_size[2];
  357. uint32_t flip_x;
  358. uint32_t flip_y;
  359. float dynamic_range;
  360. uint32_t on_mipmap;
  361. float propagation;
  362. float pad[3];
  363. };
  364. struct GIProbeInstance {
  365. RID probe;
  366. RID texture;
  367. RID write_buffer;
  368. struct Mipmap {
  369. RID texture;
  370. RID uniform_set;
  371. RID second_bounce_uniform_set;
  372. RID write_uniform_set;
  373. uint32_t level;
  374. uint32_t cell_offset;
  375. uint32_t cell_count;
  376. };
  377. Vector<Mipmap> mipmaps;
  378. struct DynamicMap {
  379. RID texture; //color normally, or emission on first pass
  380. RID fb_depth; //actual depth buffer for the first pass, float depth for later passes
  381. RID depth; //actual depth buffer for the first pass, float depth for later passes
  382. RID normal; //normal buffer for the first pass
  383. RID albedo; //emission buffer for the first pass
  384. RID orm; //orm buffer for the first pass
  385. RID fb; //used for rendering, only valid on first map
  386. RID uniform_set;
  387. uint32_t size;
  388. int mipmap; // mipmap to write to, -1 if no mipmap assigned
  389. };
  390. Vector<DynamicMap> dynamic_maps;
  391. int slot = -1;
  392. uint32_t last_probe_version = 0;
  393. uint32_t last_probe_data_version = 0;
  394. //uint64_t last_pass = 0;
  395. uint32_t render_index = 0;
  396. bool has_dynamic_object_data = false;
  397. Transform transform;
  398. };
  399. GIProbeLight *gi_probe_lights;
  400. uint32_t gi_probe_max_lights;
  401. RID gi_probe_lights_uniform;
  402. enum {
  403. GI_PROBE_SHADER_VERSION_COMPUTE_LIGHT,
  404. GI_PROBE_SHADER_VERSION_COMPUTE_SECOND_BOUNCE,
  405. GI_PROBE_SHADER_VERSION_COMPUTE_MIPMAP,
  406. GI_PROBE_SHADER_VERSION_WRITE_TEXTURE,
  407. GI_PROBE_SHADER_VERSION_DYNAMIC_OBJECT_LIGHTING,
  408. GI_PROBE_SHADER_VERSION_DYNAMIC_SHRINK_WRITE,
  409. GI_PROBE_SHADER_VERSION_DYNAMIC_SHRINK_PLOT,
  410. GI_PROBE_SHADER_VERSION_DYNAMIC_SHRINK_WRITE_PLOT,
  411. GI_PROBE_SHADER_VERSION_MAX
  412. };
  413. GiprobeShaderRD giprobe_shader;
  414. RID giprobe_lighting_shader_version;
  415. RID giprobe_lighting_shader_version_shaders[GI_PROBE_SHADER_VERSION_MAX];
  416. RID giprobe_lighting_shader_version_pipelines[GI_PROBE_SHADER_VERSION_MAX];
  417. mutable RID_Owner<GIProbeInstance> gi_probe_instance_owner;
  418. RS::GIProbeQuality gi_probe_quality = RS::GI_PROBE_QUALITY_HIGH;
  419. enum {
  420. GI_PROBE_DEBUG_COLOR,
  421. GI_PROBE_DEBUG_LIGHT,
  422. GI_PROBE_DEBUG_EMISSION,
  423. GI_PROBE_DEBUG_LIGHT_FULL,
  424. GI_PROBE_DEBUG_MAX
  425. };
  426. struct GIProbeDebugPushConstant {
  427. float projection[16];
  428. uint32_t cell_offset;
  429. float dynamic_range;
  430. float alpha;
  431. uint32_t level;
  432. int32_t bounds[3];
  433. uint32_t pad;
  434. };
  435. GiprobeDebugShaderRD giprobe_debug_shader;
  436. RID giprobe_debug_shader_version;
  437. RID giprobe_debug_shader_version_shaders[GI_PROBE_DEBUG_MAX];
  438. PipelineCacheRD giprobe_debug_shader_version_pipelines[GI_PROBE_DEBUG_MAX];
  439. RID giprobe_debug_uniform_set;
  440. /* SHADOW ATLAS */
  441. struct ShadowShrinkStage {
  442. RID texture;
  443. RID filter_texture;
  444. uint32_t size;
  445. };
  446. struct ShadowAtlas {
  447. enum {
  448. QUADRANT_SHIFT = 27,
  449. SHADOW_INDEX_MASK = (1 << QUADRANT_SHIFT) - 1,
  450. SHADOW_INVALID = 0xFFFFFFFF
  451. };
  452. struct Quadrant {
  453. uint32_t subdivision;
  454. struct Shadow {
  455. RID owner;
  456. uint64_t version;
  457. uint64_t fog_version; // used for fog
  458. uint64_t alloc_tick;
  459. Shadow() {
  460. version = 0;
  461. fog_version = 0;
  462. alloc_tick = 0;
  463. }
  464. };
  465. Vector<Shadow> shadows;
  466. Quadrant() {
  467. subdivision = 0; //not in use
  468. }
  469. } quadrants[4];
  470. int size_order[4] = { 0, 1, 2, 3 };
  471. uint32_t smallest_subdiv = 0;
  472. int size = 0;
  473. bool use_16_bits = false;
  474. RID depth;
  475. RID fb; //for copying
  476. Map<RID, uint32_t> shadow_owners;
  477. };
  478. RID_Owner<ShadowAtlas> shadow_atlas_owner;
  479. void _update_shadow_atlas(ShadowAtlas *shadow_atlas);
  480. bool _shadow_atlas_find_shadow(ShadowAtlas *shadow_atlas, int *p_in_quadrants, int p_quadrant_count, int p_current_subdiv, uint64_t p_tick, int &r_quadrant, int &r_shadow);
  481. RS::ShadowQuality shadows_quality = RS::SHADOW_QUALITY_MAX; //So it always updates when first set
  482. RS::ShadowQuality directional_shadow_quality = RS::SHADOW_QUALITY_MAX;
  483. float shadows_quality_radius = 1.0;
  484. float directional_shadow_quality_radius = 1.0;
  485. float *directional_penumbra_shadow_kernel;
  486. float *directional_soft_shadow_kernel;
  487. float *penumbra_shadow_kernel;
  488. float *soft_shadow_kernel;
  489. int directional_penumbra_shadow_samples = 0;
  490. int directional_soft_shadow_samples = 0;
  491. int penumbra_shadow_samples = 0;
  492. int soft_shadow_samples = 0;
  493. /* DIRECTIONAL SHADOW */
  494. struct DirectionalShadow {
  495. RID depth;
  496. RID fb; //when renderign direct
  497. int light_count = 0;
  498. int size = 0;
  499. bool use_16_bits = false;
  500. int current_light = 0;
  501. } directional_shadow;
  502. void _update_directional_shadow_atlas();
  503. /* SHADOW CUBEMAPS */
  504. struct ShadowCubemap {
  505. RID cubemap;
  506. RID side_fb[6];
  507. };
  508. Map<int, ShadowCubemap> shadow_cubemaps;
  509. ShadowCubemap *_get_shadow_cubemap(int p_size);
  510. void _create_shadow_cubemaps();
  511. /* LIGHT INSTANCE */
  512. struct LightInstance {
  513. struct ShadowTransform {
  514. CameraMatrix camera;
  515. Transform transform;
  516. float farplane;
  517. float split;
  518. float bias_scale;
  519. float shadow_texel_size;
  520. float range_begin;
  521. Rect2 atlas_rect;
  522. Vector2 uv_scale;
  523. };
  524. RS::LightType light_type = RS::LIGHT_DIRECTIONAL;
  525. ShadowTransform shadow_transform[6];
  526. AABB aabb;
  527. RID self;
  528. RID light;
  529. Transform transform;
  530. Vector3 light_vector;
  531. Vector3 spot_vector;
  532. float linear_att = 0.0;
  533. uint64_t shadow_pass = 0;
  534. uint64_t last_scene_pass = 0;
  535. uint64_t last_scene_shadow_pass = 0;
  536. uint64_t last_pass = 0;
  537. uint32_t light_index = 0;
  538. uint32_t light_directional_index = 0;
  539. uint32_t current_shadow_atlas_key = 0;
  540. Vector2 dp;
  541. Rect2 directional_rect;
  542. Set<RID> shadow_atlases; //shadow atlases where this light is registered
  543. LightInstance() {}
  544. };
  545. mutable RID_Owner<LightInstance> light_instance_owner;
  546. /* ENVIRONMENT */
  547. struct Environment {
  548. // BG
  549. RS::EnvironmentBG background = RS::ENV_BG_CLEAR_COLOR;
  550. RID sky;
  551. float sky_custom_fov = 0.0;
  552. Basis sky_orientation;
  553. Color bg_color;
  554. float bg_energy = 1.0;
  555. int canvas_max_layer = 0;
  556. RS::EnvironmentAmbientSource ambient_source = RS::ENV_AMBIENT_SOURCE_BG;
  557. Color ambient_light;
  558. float ambient_light_energy = 1.0;
  559. float ambient_sky_contribution = 1.0;
  560. RS::EnvironmentReflectionSource reflection_source = RS::ENV_REFLECTION_SOURCE_BG;
  561. Color ao_color;
  562. /// Tonemap
  563. RS::EnvironmentToneMapper tone_mapper;
  564. float exposure = 1.0;
  565. float white = 1.0;
  566. bool auto_exposure = false;
  567. float min_luminance = 0.2;
  568. float max_luminance = 8.0;
  569. float auto_exp_speed = 0.2;
  570. float auto_exp_scale = 0.5;
  571. uint64_t auto_exposure_version = 0;
  572. // Fog
  573. bool fog_enabled = false;
  574. Color fog_light_color = Color(0.5, 0.6, 0.7);
  575. float fog_light_energy = 1.0;
  576. float fog_sun_scatter = 0.0;
  577. float fog_density = 0.001;
  578. float fog_height = 0.0;
  579. float fog_height_density = 0.0; //can be negative to invert effect
  580. float fog_aerial_perspective = 0.0;
  581. /// Volumetric Fog
  582. ///
  583. bool volumetric_fog_enabled = false;
  584. float volumetric_fog_density = 0.01;
  585. Color volumetric_fog_light = Color(0, 0, 0);
  586. float volumetric_fog_light_energy = 0.0;
  587. float volumetric_fog_length = 64.0;
  588. float volumetric_fog_detail_spread = 2.0;
  589. float volumetric_fog_gi_inject = 0.0;
  590. bool volumetric_fog_temporal_reprojection = true;
  591. float volumetric_fog_temporal_reprojection_amount = 0.9;
  592. /// Glow
  593. bool glow_enabled = false;
  594. Vector<float> glow_levels;
  595. float glow_intensity = 0.8;
  596. float glow_strength = 1.0;
  597. float glow_bloom = 0.0;
  598. float glow_mix = 0.01;
  599. RS::EnvironmentGlowBlendMode glow_blend_mode = RS::ENV_GLOW_BLEND_MODE_SOFTLIGHT;
  600. float glow_hdr_bleed_threshold = 1.0;
  601. float glow_hdr_luminance_cap = 12.0;
  602. float glow_hdr_bleed_scale = 2.0;
  603. /// SSAO
  604. bool ssao_enabled = false;
  605. float ssao_radius = 1.0;
  606. float ssao_intensity = 2.0;
  607. float ssao_power = 1.5;
  608. float ssao_detail = 0.5;
  609. float ssao_horizon = 0.06;
  610. float ssao_sharpness = 0.98;
  611. float ssao_direct_light_affect = 0.0;
  612. float ssao_ao_channel_affect = 0.0;
  613. /// SSR
  614. ///
  615. bool ssr_enabled = false;
  616. int ssr_max_steps = 64;
  617. float ssr_fade_in = 0.15;
  618. float ssr_fade_out = 2.0;
  619. float ssr_depth_tolerance = 0.2;
  620. /// SDFGI
  621. bool sdfgi_enabled = false;
  622. RS::EnvironmentSDFGICascades sdfgi_cascades;
  623. float sdfgi_min_cell_size = 0.2;
  624. bool sdfgi_use_occlusion = false;
  625. float sdfgi_bounce_feedback = 0.0;
  626. bool sdfgi_read_sky_light = false;
  627. float sdfgi_energy = 1.0;
  628. float sdfgi_normal_bias = 1.1;
  629. float sdfgi_probe_bias = 1.1;
  630. RS::EnvironmentSDFGIYScale sdfgi_y_scale = RS::ENV_SDFGI_Y_SCALE_DISABLED;
  631. /// Adjustments
  632. bool adjustments_enabled = false;
  633. float adjustments_brightness = 1.0f;
  634. float adjustments_contrast = 1.0f;
  635. float adjustments_saturation = 1.0f;
  636. bool use_1d_color_correction = false;
  637. RID color_correction = RID();
  638. };
  639. RS::EnvironmentSSAOQuality ssao_quality = RS::ENV_SSAO_QUALITY_MEDIUM;
  640. bool ssao_half_size = false;
  641. bool ssao_using_half_size = false;
  642. float ssao_adaptive_target = 0.5;
  643. int ssao_blur_passes = 2;
  644. float ssao_fadeout_from = 50.0;
  645. float ssao_fadeout_to = 300.0;
  646. bool glow_bicubic_upscale = false;
  647. bool glow_high_quality = false;
  648. RS::EnvironmentSSRRoughnessQuality ssr_roughness_quality = RS::ENV_SSR_ROUGNESS_QUALITY_LOW;
  649. static uint64_t auto_exposure_counter;
  650. mutable RID_Owner<Environment, true> environment_owner;
  651. /* CAMERA EFFECTS */
  652. struct CameraEffects {
  653. bool dof_blur_far_enabled = false;
  654. float dof_blur_far_distance = 10;
  655. float dof_blur_far_transition = 5;
  656. bool dof_blur_near_enabled = false;
  657. float dof_blur_near_distance = 2;
  658. float dof_blur_near_transition = 1;
  659. float dof_blur_amount = 0.1;
  660. bool override_exposure_enabled = false;
  661. float override_exposure = 1;
  662. };
  663. RS::DOFBlurQuality dof_blur_quality = RS::DOF_BLUR_QUALITY_MEDIUM;
  664. RS::DOFBokehShape dof_blur_bokeh_shape = RS::DOF_BOKEH_HEXAGON;
  665. bool dof_blur_use_jitter = false;
  666. RS::SubSurfaceScatteringQuality sss_quality = RS::SUB_SURFACE_SCATTERING_QUALITY_MEDIUM;
  667. float sss_scale = 0.05;
  668. float sss_depth_scale = 0.01;
  669. mutable RID_Owner<CameraEffects, true> camera_effects_owner;
  670. /* RENDER BUFFERS */
  671. ClusterBuilderSharedDataRD cluster_builder_shared;
  672. ClusterBuilderRD *current_cluster_builder = nullptr;
  673. struct SDFGI;
  674. struct VolumetricFog;
  675. struct RenderBuffers {
  676. enum {
  677. MAX_GIPROBES = 8
  678. };
  679. RenderBufferData *data = nullptr;
  680. int width = 0, height = 0;
  681. RS::ViewportMSAA msaa = RS::VIEWPORT_MSAA_DISABLED;
  682. RS::ViewportScreenSpaceAA screen_space_aa = RS::VIEWPORT_SCREEN_SPACE_AA_DISABLED;
  683. bool use_debanding = false;
  684. RID render_target;
  685. uint64_t auto_exposure_version = 1;
  686. RID texture; //main texture for rendering to, must be filled after done rendering
  687. RID depth_texture; //main depth texture
  688. RID gi_uniform_set;
  689. SDFGI *sdfgi = nullptr;
  690. VolumetricFog *volumetric_fog = nullptr;
  691. ClusterBuilderRD *cluster_builder = nullptr;
  692. //built-in textures used for ping pong image processing and blurring
  693. struct Blur {
  694. RID texture;
  695. struct Mipmap {
  696. RID texture;
  697. int width;
  698. int height;
  699. };
  700. Vector<Mipmap> mipmaps;
  701. };
  702. Blur blur[2]; //the second one starts from the first mipmap
  703. struct Luminance {
  704. Vector<RID> reduce;
  705. RID current;
  706. } luminance;
  707. struct SSAO {
  708. RID depth;
  709. Vector<RID> depth_slices;
  710. RID ao_deinterleaved;
  711. Vector<RID> ao_deinterleaved_slices;
  712. RID ao_pong;
  713. Vector<RID> ao_pong_slices;
  714. RID ao_final;
  715. RID importance_map[2];
  716. } ssao;
  717. struct SSR {
  718. RID normal_scaled;
  719. RID depth_scaled;
  720. RID blur_radius[2];
  721. } ssr;
  722. RID giprobe_textures[MAX_GIPROBES];
  723. RID giprobe_buffer;
  724. RID ambient_buffer;
  725. RID reflection_buffer;
  726. bool using_half_size_gi = false;
  727. struct GI {
  728. RID full_buffer;
  729. RID full_dispatch;
  730. RID full_mask;
  731. } gi;
  732. };
  733. RID default_giprobe_buffer;
  734. /* SDFGI */
  735. struct SDFGI {
  736. enum {
  737. MAX_CASCADES = 8,
  738. CASCADE_SIZE = 128,
  739. PROBE_DIVISOR = 16,
  740. ANISOTROPY_SIZE = 6,
  741. MAX_DYNAMIC_LIGHTS = 128,
  742. MAX_STATIC_LIGHTS = 1024,
  743. LIGHTPROBE_OCT_SIZE = 6,
  744. SH_SIZE = 16
  745. };
  746. struct Cascade {
  747. struct UBO {
  748. float offset[3];
  749. float to_cell;
  750. int32_t probe_offset[3];
  751. uint32_t pad;
  752. };
  753. //cascade blocks are full-size for volume (128^3), half size for albedo/emission
  754. RID sdf_tex;
  755. RID light_tex;
  756. RID light_aniso_0_tex;
  757. RID light_aniso_1_tex;
  758. RID light_data;
  759. RID light_aniso_0_data;
  760. RID light_aniso_1_data;
  761. struct SolidCell { // this struct is unused, but remains as reference for size
  762. uint32_t position;
  763. uint32_t albedo;
  764. uint32_t static_light;
  765. uint32_t static_light_aniso;
  766. };
  767. RID solid_cell_dispatch_buffer; //buffer for indirect compute dispatch
  768. RID solid_cell_buffer;
  769. RID lightprobe_history_tex;
  770. RID lightprobe_average_tex;
  771. float cell_size;
  772. Vector3i position;
  773. static const Vector3i DIRTY_ALL;
  774. Vector3i dirty_regions; //(0,0,0 is not dirty, negative is refresh from the end, DIRTY_ALL is refresh all.
  775. RID sdf_store_uniform_set;
  776. RID sdf_direct_light_uniform_set;
  777. RID scroll_uniform_set;
  778. RID scroll_occlusion_uniform_set;
  779. RID integrate_uniform_set;
  780. RID lights_buffer;
  781. bool all_dynamic_lights_dirty = true;
  782. };
  783. //used for rendering (voxelization)
  784. RID render_albedo;
  785. RID render_emission;
  786. RID render_emission_aniso;
  787. RID render_occlusion[8];
  788. RID render_geom_facing;
  789. RID render_sdf[2];
  790. RID render_sdf_half[2];
  791. //used for ping pong processing in cascades
  792. RID sdf_initialize_uniform_set;
  793. RID sdf_initialize_half_uniform_set;
  794. RID jump_flood_uniform_set[2];
  795. RID jump_flood_half_uniform_set[2];
  796. RID sdf_upscale_uniform_set;
  797. int upscale_jfa_uniform_set_index;
  798. RID occlusion_uniform_set;
  799. uint32_t cascade_size = 128;
  800. LocalVector<Cascade> cascades;
  801. RID lightprobe_texture;
  802. RID lightprobe_data;
  803. RID occlusion_texture;
  804. RID occlusion_data;
  805. RID ambient_texture; //integrates with volumetric fog
  806. RID lightprobe_history_scroll; //used for scrolling lightprobes
  807. RID lightprobe_average_scroll; //used for scrolling lightprobes
  808. uint32_t history_size = 0;
  809. float solid_cell_ratio = 0;
  810. uint32_t solid_cell_count = 0;
  811. RS::EnvironmentSDFGICascades cascade_mode;
  812. float min_cell_size = 0;
  813. uint32_t probe_axis_count = 0; //amount of probes per axis, this is an odd number because it encloses endpoints
  814. RID debug_uniform_set;
  815. RID debug_probes_uniform_set;
  816. RID cascades_ubo;
  817. bool uses_occlusion = false;
  818. float bounce_feedback = 0.0;
  819. bool reads_sky = false;
  820. float energy = 1.0;
  821. float normal_bias = 1.1;
  822. float probe_bias = 1.1;
  823. RS::EnvironmentSDFGIYScale y_scale_mode = RS::ENV_SDFGI_Y_SCALE_DISABLED;
  824. float y_mult = 1.0;
  825. uint32_t render_pass = 0;
  826. int32_t cascade_dynamic_light_count[SDFGI::MAX_CASCADES]; //used dynamically
  827. };
  828. void _sdfgi_update_light(RID p_render_buffers, RID p_environment);
  829. void _sdfgi_update_probes(RID p_render_buffers, RID p_environment);
  830. void _sdfgi_store_probes(RID p_render_buffers);
  831. RS::EnvironmentSDFGIRayCount sdfgi_ray_count = RS::ENV_SDFGI_RAY_COUNT_16;
  832. RS::EnvironmentSDFGIFramesToConverge sdfgi_frames_to_converge = RS::ENV_SDFGI_CONVERGE_IN_10_FRAMES;
  833. RS::EnvironmentSDFGIFramesToUpdateLight sdfgi_frames_to_update_light = RS::ENV_SDFGI_UPDATE_LIGHT_IN_4_FRAMES;
  834. float sdfgi_solid_cell_ratio = 0.25;
  835. Vector3 sdfgi_debug_probe_pos;
  836. Vector3 sdfgi_debug_probe_dir;
  837. bool sdfgi_debug_probe_enabled = false;
  838. Vector3i sdfgi_debug_probe_index;
  839. struct SDGIShader {
  840. enum SDFGIPreprocessShaderVersion {
  841. PRE_PROCESS_SCROLL,
  842. PRE_PROCESS_SCROLL_OCCLUSION,
  843. PRE_PROCESS_JUMP_FLOOD_INITIALIZE,
  844. PRE_PROCESS_JUMP_FLOOD_INITIALIZE_HALF,
  845. PRE_PROCESS_JUMP_FLOOD,
  846. PRE_PROCESS_JUMP_FLOOD_OPTIMIZED,
  847. PRE_PROCESS_JUMP_FLOOD_UPSCALE,
  848. PRE_PROCESS_OCCLUSION,
  849. PRE_PROCESS_STORE,
  850. PRE_PROCESS_MAX
  851. };
  852. struct PreprocessPushConstant {
  853. int32_t scroll[3];
  854. int32_t grid_size;
  855. int32_t probe_offset[3];
  856. int32_t step_size;
  857. int32_t half_size;
  858. uint32_t occlusion_index;
  859. int32_t cascade;
  860. uint32_t pad;
  861. };
  862. SdfgiPreprocessShaderRD preprocess;
  863. RID preprocess_shader;
  864. RID preprocess_pipeline[PRE_PROCESS_MAX];
  865. struct DebugPushConstant {
  866. float grid_size[3];
  867. uint32_t max_cascades;
  868. int32_t screen_size[2];
  869. uint32_t use_occlusion;
  870. float y_mult;
  871. float cam_extent[3];
  872. uint32_t probe_axis_size;
  873. float cam_transform[16];
  874. };
  875. SdfgiDebugShaderRD debug;
  876. RID debug_shader;
  877. RID debug_shader_version;
  878. RID debug_pipeline;
  879. enum ProbeDebugMode {
  880. PROBE_DEBUG_PROBES,
  881. PROBE_DEBUG_VISIBILITY,
  882. PROBE_DEBUG_MAX
  883. };
  884. struct DebugProbesPushConstant {
  885. float projection[16];
  886. uint32_t band_power;
  887. uint32_t sections_in_band;
  888. uint32_t band_mask;
  889. float section_arc;
  890. float grid_size[3];
  891. uint32_t cascade;
  892. uint32_t pad;
  893. float y_mult;
  894. int32_t probe_debug_index;
  895. int32_t probe_axis_size;
  896. };
  897. SdfgiDebugProbesShaderRD debug_probes;
  898. RID debug_probes_shader;
  899. RID debug_probes_shader_version;
  900. PipelineCacheRD debug_probes_pipeline[PROBE_DEBUG_MAX];
  901. struct Light {
  902. float color[3];
  903. float energy;
  904. float direction[3];
  905. uint32_t has_shadow;
  906. float position[3];
  907. float attenuation;
  908. uint32_t type;
  909. float cos_spot_angle;
  910. float inv_spot_attenuation;
  911. float radius;
  912. float shadow_color[4];
  913. };
  914. struct DirectLightPushConstant {
  915. float grid_size[3];
  916. uint32_t max_cascades;
  917. uint32_t cascade;
  918. uint32_t light_count;
  919. uint32_t process_offset;
  920. uint32_t process_increment;
  921. int32_t probe_axis_size;
  922. float bounce_feedback;
  923. float y_mult;
  924. uint32_t use_occlusion;
  925. };
  926. enum {
  927. DIRECT_LIGHT_MODE_STATIC,
  928. DIRECT_LIGHT_MODE_DYNAMIC,
  929. DIRECT_LIGHT_MODE_MAX
  930. };
  931. SdfgiDirectLightShaderRD direct_light;
  932. RID direct_light_shader;
  933. RID direct_light_pipeline[DIRECT_LIGHT_MODE_MAX];
  934. enum {
  935. INTEGRATE_MODE_PROCESS,
  936. INTEGRATE_MODE_STORE,
  937. INTEGRATE_MODE_SCROLL,
  938. INTEGRATE_MODE_SCROLL_STORE,
  939. INTEGRATE_MODE_MAX
  940. };
  941. struct IntegratePushConstant {
  942. enum {
  943. SKY_MODE_DISABLED,
  944. SKY_MODE_COLOR,
  945. SKY_MODE_SKY,
  946. };
  947. float grid_size[3];
  948. uint32_t max_cascades;
  949. uint32_t probe_axis_size;
  950. uint32_t cascade;
  951. uint32_t history_index;
  952. uint32_t history_size;
  953. uint32_t ray_count;
  954. float ray_bias;
  955. int32_t image_size[2];
  956. int32_t world_offset[3];
  957. uint32_t sky_mode;
  958. int32_t scroll[3];
  959. float sky_energy;
  960. float sky_color[3];
  961. float y_mult;
  962. uint32_t store_ambient_texture;
  963. uint32_t pad[3];
  964. };
  965. SdfgiIntegrateShaderRD integrate;
  966. RID integrate_shader;
  967. RID integrate_pipeline[INTEGRATE_MODE_MAX];
  968. RID integrate_default_sky_uniform_set;
  969. } sdfgi_shader;
  970. void _sdfgi_erase(RenderBuffers *rb);
  971. int _sdfgi_get_pending_region_data(RID p_render_buffers, int p_region, Vector3i &r_local_offset, Vector3i &r_local_size, AABB &r_bounds) const;
  972. void _sdfgi_update_cascades(RID p_render_buffers);
  973. /* GI */
  974. struct GI {
  975. struct SDFGIData {
  976. float grid_size[3];
  977. uint32_t max_cascades;
  978. uint32_t use_occlusion;
  979. int32_t probe_axis_size;
  980. float probe_to_uvw;
  981. float normal_bias;
  982. float lightprobe_tex_pixel_size[3];
  983. float energy;
  984. float lightprobe_uv_offset[3];
  985. float y_mult;
  986. float occlusion_clamp[3];
  987. uint32_t pad3;
  988. float occlusion_renormalize[3];
  989. uint32_t pad4;
  990. float cascade_probe_size[3];
  991. uint32_t pad5;
  992. struct ProbeCascadeData {
  993. float position[3]; //offset of (0,0,0) in world coordinates
  994. float to_probe; // 1/bounds * grid_size
  995. int32_t probe_world_offset[3];
  996. float to_cell; // 1/bounds * grid_size
  997. };
  998. ProbeCascadeData cascades[SDFGI::MAX_CASCADES];
  999. };
  1000. struct GIProbeData {
  1001. float xform[16];
  1002. float bounds[3];
  1003. float dynamic_range;
  1004. float bias;
  1005. float normal_bias;
  1006. uint32_t blend_ambient;
  1007. uint32_t texture_slot;
  1008. float anisotropy_strength;
  1009. float ao;
  1010. float ao_size;
  1011. uint32_t mipmaps;
  1012. };
  1013. struct PushConstant {
  1014. int32_t screen_size[2];
  1015. float z_near;
  1016. float z_far;
  1017. float proj_info[4];
  1018. float ao_color[3];
  1019. uint32_t max_giprobes;
  1020. uint32_t high_quality_vct;
  1021. uint32_t orthogonal;
  1022. uint32_t pad[2];
  1023. float cam_rotation[12];
  1024. };
  1025. RID sdfgi_ubo;
  1026. enum Mode {
  1027. MODE_GIPROBE,
  1028. MODE_SDFGI,
  1029. MODE_COMBINED,
  1030. MODE_HALF_RES_GIPROBE,
  1031. MODE_HALF_RES_SDFGI,
  1032. MODE_HALF_RES_COMBINED,
  1033. MODE_MAX
  1034. };
  1035. bool half_resolution = false;
  1036. GiShaderRD shader;
  1037. RID shader_version;
  1038. RID pipelines[MODE_MAX];
  1039. } gi;
  1040. bool screen_space_roughness_limiter = false;
  1041. float screen_space_roughness_limiter_amount = 0.25;
  1042. float screen_space_roughness_limiter_limit = 0.18;
  1043. mutable RID_Owner<RenderBuffers> render_buffers_owner;
  1044. void _free_render_buffer_data(RenderBuffers *rb);
  1045. void _allocate_blur_textures(RenderBuffers *rb);
  1046. void _allocate_luminance_textures(RenderBuffers *rb);
  1047. void _render_buffers_debug_draw(RID p_render_buffers, RID p_shadow_atlas);
  1048. void _render_buffers_post_process_and_tonemap(RID p_render_buffers, RID p_environment, RID p_camera_effects, const CameraMatrix &p_projection);
  1049. void _sdfgi_debug_draw(RID p_render_buffers, const CameraMatrix &p_projection, const Transform &p_transform);
  1050. /* Cluster */
  1051. struct Cluster {
  1052. /* Scene State UBO */
  1053. enum {
  1054. REFLECTION_AMBIENT_DISABLED = 0,
  1055. REFLECTION_AMBIENT_ENVIRONMENT = 1,
  1056. REFLECTION_AMBIENT_COLOR = 2,
  1057. };
  1058. struct ReflectionData {
  1059. float box_extents[3];
  1060. float index;
  1061. float box_offset[3];
  1062. uint32_t mask;
  1063. float ambient[3]; // ambient color,
  1064. float intensity;
  1065. bool exterior;
  1066. bool box_project;
  1067. uint32_t ambient_mode;
  1068. uint32_t pad;
  1069. float local_matrix[16]; // up to here for spot and omni, rest is for directional
  1070. };
  1071. struct LightData {
  1072. float position[3];
  1073. float inv_radius;
  1074. float direction[3];
  1075. float size;
  1076. float color[3];
  1077. float attenuation;
  1078. float inv_spot_attenuation;
  1079. float cos_spot_angle;
  1080. float specular_amount;
  1081. uint32_t shadow_enabled;
  1082. float atlas_rect[4]; // in omni, used for atlas uv, in spot, used for projector uv
  1083. float shadow_matrix[16];
  1084. float shadow_bias;
  1085. float shadow_normal_bias;
  1086. float transmittance_bias;
  1087. float soft_shadow_size;
  1088. float soft_shadow_scale;
  1089. uint32_t mask;
  1090. float shadow_volumetric_fog_fade;
  1091. uint32_t pad;
  1092. float projector_rect[4];
  1093. };
  1094. struct DirectionalLightData {
  1095. float direction[3];
  1096. float energy;
  1097. float color[3];
  1098. float size;
  1099. float specular;
  1100. uint32_t mask;
  1101. float softshadow_angle;
  1102. float soft_shadow_scale;
  1103. uint32_t blend_splits;
  1104. uint32_t shadow_enabled;
  1105. float fade_from;
  1106. float fade_to;
  1107. uint32_t pad[3];
  1108. float shadow_volumetric_fog_fade;
  1109. float shadow_bias[4];
  1110. float shadow_normal_bias[4];
  1111. float shadow_transmittance_bias[4];
  1112. float shadow_z_range[4];
  1113. float shadow_range_begin[4];
  1114. float shadow_split_offsets[4];
  1115. float shadow_matrices[4][16];
  1116. float shadow_color1[4];
  1117. float shadow_color2[4];
  1118. float shadow_color3[4];
  1119. float shadow_color4[4];
  1120. float uv_scale1[2];
  1121. float uv_scale2[2];
  1122. float uv_scale3[2];
  1123. float uv_scale4[2];
  1124. };
  1125. struct DecalData {
  1126. float xform[16];
  1127. float inv_extents[3];
  1128. float albedo_mix;
  1129. float albedo_rect[4];
  1130. float normal_rect[4];
  1131. float orm_rect[4];
  1132. float emission_rect[4];
  1133. float modulate[4];
  1134. float emission_energy;
  1135. uint32_t mask;
  1136. float upper_fade;
  1137. float lower_fade;
  1138. float normal_xform[12];
  1139. float normal[3];
  1140. float normal_fade;
  1141. };
  1142. template <class T>
  1143. struct InstanceSort {
  1144. float depth;
  1145. T *instance;
  1146. bool operator<(const InstanceSort &p_sort) const {
  1147. return depth < p_sort.depth;
  1148. }
  1149. };
  1150. ReflectionData *reflections;
  1151. InstanceSort<ReflectionProbeInstance> *reflection_sort;
  1152. uint32_t max_reflections;
  1153. RID reflection_buffer;
  1154. uint32_t max_reflection_probes_per_instance;
  1155. uint32_t reflection_count = 0;
  1156. DecalData *decals;
  1157. InstanceSort<DecalInstance> *decal_sort;
  1158. uint32_t max_decals;
  1159. RID decal_buffer;
  1160. uint32_t decal_count;
  1161. LightData *omni_lights;
  1162. LightData *spot_lights;
  1163. InstanceSort<LightInstance> *omni_light_sort;
  1164. InstanceSort<LightInstance> *spot_light_sort;
  1165. uint32_t max_lights;
  1166. RID omni_light_buffer;
  1167. RID spot_light_buffer;
  1168. uint32_t omni_light_count = 0;
  1169. uint32_t spot_light_count = 0;
  1170. DirectionalLightData *directional_lights;
  1171. uint32_t max_directional_lights;
  1172. RID directional_light_buffer;
  1173. } cluster;
  1174. struct RenderState {
  1175. RID render_buffers;
  1176. Transform cam_transform;
  1177. CameraMatrix cam_projection;
  1178. bool cam_ortogonal = false;
  1179. const PagedArray<GeometryInstance *> *instances = nullptr;
  1180. const PagedArray<RID> *lights = nullptr;
  1181. const PagedArray<RID> *reflection_probes = nullptr;
  1182. const PagedArray<RID> *gi_probes = nullptr;
  1183. const PagedArray<RID> *decals = nullptr;
  1184. const PagedArray<RID> *lightmaps = nullptr;
  1185. RID environment;
  1186. RID camera_effects;
  1187. RID shadow_atlas;
  1188. RID reflection_atlas;
  1189. RID reflection_probe;
  1190. int reflection_probe_pass = 0;
  1191. float screen_lod_threshold = 0.0;
  1192. const RenderShadowData *render_shadows = nullptr;
  1193. int render_shadow_count = 0;
  1194. const RenderSDFGIData *render_sdfgi_regions = nullptr;
  1195. int render_sdfgi_region_count = 0;
  1196. const RenderSDFGIUpdateData *sdfgi_update_data = nullptr;
  1197. uint32_t directional_light_count = 0;
  1198. uint32_t gi_probe_count = 0;
  1199. LocalVector<int> cube_shadows;
  1200. LocalVector<int> shadows;
  1201. LocalVector<int> directional_shadows;
  1202. bool depth_prepass_used;
  1203. } render_state;
  1204. struct VolumetricFog {
  1205. enum {
  1206. MAX_TEMPORAL_FRAMES = 16
  1207. };
  1208. uint32_t width = 0;
  1209. uint32_t height = 0;
  1210. uint32_t depth = 0;
  1211. float length;
  1212. float spread;
  1213. RID light_density_map;
  1214. RID prev_light_density_map;
  1215. RID fog_map;
  1216. RID uniform_set;
  1217. RID uniform_set2;
  1218. RID sdfgi_uniform_set;
  1219. RID sky_uniform_set;
  1220. int last_shadow_filter = -1;
  1221. Transform prev_cam_transform;
  1222. };
  1223. enum {
  1224. VOLUMETRIC_FOG_SHADER_DENSITY,
  1225. VOLUMETRIC_FOG_SHADER_DENSITY_WITH_SDFGI,
  1226. VOLUMETRIC_FOG_SHADER_FILTER,
  1227. VOLUMETRIC_FOG_SHADER_FOG,
  1228. VOLUMETRIC_FOG_SHADER_MAX,
  1229. };
  1230. struct VolumetricFogShader {
  1231. struct ParamsUBO {
  1232. float fog_frustum_size_begin[2];
  1233. float fog_frustum_size_end[2];
  1234. float fog_frustum_end;
  1235. float z_near;
  1236. float z_far;
  1237. uint32_t filter_axis;
  1238. int32_t fog_volume_size[3];
  1239. uint32_t directional_light_count;
  1240. float light_energy[3];
  1241. float base_density;
  1242. float detail_spread;
  1243. float gi_inject;
  1244. uint32_t max_gi_probes;
  1245. uint32_t cluster_type_size;
  1246. float screen_size[2];
  1247. uint32_t cluster_shift;
  1248. uint32_t cluster_width;
  1249. uint32_t max_cluster_element_count_div_32;
  1250. uint32_t use_temporal_reprojection;
  1251. uint32_t temporal_frame;
  1252. float temporal_blend;
  1253. float cam_rotation[12];
  1254. float to_prev_view[16];
  1255. };
  1256. VolumetricFogShaderRD shader;
  1257. RID params_ubo;
  1258. RID shader_version;
  1259. RID pipelines[VOLUMETRIC_FOG_SHADER_MAX];
  1260. } volumetric_fog;
  1261. uint32_t volumetric_fog_depth = 128;
  1262. uint32_t volumetric_fog_size = 128;
  1263. bool volumetric_fog_filter_active = true;
  1264. void _volumetric_fog_erase(RenderBuffers *rb);
  1265. void _update_volumetric_fog(RID p_render_buffers, RID p_environment, const CameraMatrix &p_cam_projection, const Transform &p_cam_transform, RID p_shadow_atlas, int p_directional_light_count, bool p_use_directional_shadows, int p_positional_light_count, int p_gi_probe_count);
  1266. RID shadow_sampler;
  1267. uint64_t scene_pass = 0;
  1268. uint64_t shadow_atlas_realloc_tolerance_msec = 500;
  1269. struct SDFGICosineNeighbour {
  1270. uint32_t neighbour;
  1271. float weight;
  1272. };
  1273. uint32_t max_cluster_elements = 512;
  1274. bool low_end = false;
  1275. void _render_shadow_pass(RID p_light, RID p_shadow_atlas, int p_pass, const PagedArray<GeometryInstance *> &p_instances, const Plane &p_camera_plane = Plane(), float p_lod_distance_multiplier = 0, float p_screen_lod_threshold = 0.0, bool p_open_pass = true, bool p_close_pass = true, bool p_clear_region = true);
  1276. void _render_sdfgi_region(RID p_render_buffers, int p_region, const PagedArray<GeometryInstance *> &p_instances);
  1277. void _render_sdfgi_static_lights(RID p_render_buffers, uint32_t p_cascade_count, const uint32_t *p_cascade_indices, const PagedArray<RID> *p_positional_light_cull_result);
  1278. public:
  1279. virtual Transform geometry_instance_get_transform(GeometryInstance *p_instance) = 0;
  1280. virtual AABB geometry_instance_get_aabb(GeometryInstance *p_instance) = 0;
  1281. /* SHADOW ATLAS API */
  1282. RID shadow_atlas_create();
  1283. void shadow_atlas_set_size(RID p_atlas, int p_size, bool p_16_bits = false);
  1284. void shadow_atlas_set_quadrant_subdivision(RID p_atlas, int p_quadrant, int p_subdivision);
  1285. bool shadow_atlas_update_light(RID p_atlas, RID p_light_intance, float p_coverage, uint64_t p_light_version);
  1286. _FORCE_INLINE_ bool shadow_atlas_owns_light_instance(RID p_atlas, RID p_light_intance) {
  1287. ShadowAtlas *atlas = shadow_atlas_owner.getornull(p_atlas);
  1288. ERR_FAIL_COND_V(!atlas, false);
  1289. return atlas->shadow_owners.has(p_light_intance);
  1290. }
  1291. _FORCE_INLINE_ RID shadow_atlas_get_texture(RID p_atlas) {
  1292. ShadowAtlas *atlas = shadow_atlas_owner.getornull(p_atlas);
  1293. ERR_FAIL_COND_V(!atlas, RID());
  1294. return atlas->depth;
  1295. }
  1296. _FORCE_INLINE_ Size2i shadow_atlas_get_size(RID p_atlas) {
  1297. ShadowAtlas *atlas = shadow_atlas_owner.getornull(p_atlas);
  1298. ERR_FAIL_COND_V(!atlas, Size2i());
  1299. return Size2(atlas->size, atlas->size);
  1300. }
  1301. void directional_shadow_atlas_set_size(int p_size, bool p_16_bits = false);
  1302. int get_directional_light_shadow_size(RID p_light_intance);
  1303. void set_directional_shadow_count(int p_count);
  1304. _FORCE_INLINE_ RID directional_shadow_get_texture() {
  1305. return directional_shadow.depth;
  1306. }
  1307. _FORCE_INLINE_ Size2i directional_shadow_get_size() {
  1308. return Size2i(directional_shadow.size, directional_shadow.size);
  1309. }
  1310. /* SDFGI UPDATE */
  1311. int sdfgi_get_lightprobe_octahedron_size() const { return SDFGI::LIGHTPROBE_OCT_SIZE; }
  1312. virtual void sdfgi_update(RID p_render_buffers, RID p_environment, const Vector3 &p_world_position);
  1313. virtual int sdfgi_get_pending_region_count(RID p_render_buffers) const;
  1314. virtual AABB sdfgi_get_pending_region_bounds(RID p_render_buffers, int p_region) const;
  1315. virtual uint32_t sdfgi_get_pending_region_cascade(RID p_render_buffers, int p_region) const;
  1316. RID sdfgi_get_ubo() const { return gi.sdfgi_ubo; }
  1317. /* SKY API */
  1318. virtual RID sky_allocate();
  1319. virtual void sky_initialize(RID p_rid);
  1320. void sky_set_radiance_size(RID p_sky, int p_radiance_size);
  1321. void sky_set_mode(RID p_sky, RS::SkyMode p_mode);
  1322. void sky_set_material(RID p_sky, RID p_material);
  1323. Ref<Image> sky_bake_panorama(RID p_sky, float p_energy, bool p_bake_irradiance, const Size2i &p_size);
  1324. RID sky_get_radiance_texture_rd(RID p_sky) const;
  1325. RID sky_get_radiance_uniform_set_rd(RID p_sky, RID p_shader, int p_set) const;
  1326. RID sky_get_material(RID p_sky) const;
  1327. /* ENVIRONMENT API */
  1328. virtual RID environment_allocate();
  1329. virtual void environment_initialize(RID p_rid);
  1330. void environment_set_background(RID p_env, RS::EnvironmentBG p_bg);
  1331. void environment_set_sky(RID p_env, RID p_sky);
  1332. void environment_set_sky_custom_fov(RID p_env, float p_scale);
  1333. void environment_set_sky_orientation(RID p_env, const Basis &p_orientation);
  1334. void environment_set_bg_color(RID p_env, const Color &p_color);
  1335. void environment_set_bg_energy(RID p_env, float p_energy);
  1336. void environment_set_canvas_max_layer(RID p_env, int p_max_layer);
  1337. void environment_set_ambient_light(RID p_env, const Color &p_color, RS::EnvironmentAmbientSource p_ambient = RS::ENV_AMBIENT_SOURCE_BG, float p_energy = 1.0, float p_sky_contribution = 0.0, RS::EnvironmentReflectionSource p_reflection_source = RS::ENV_REFLECTION_SOURCE_BG, const Color &p_ao_color = Color());
  1338. RS::EnvironmentBG environment_get_background(RID p_env) const;
  1339. RID environment_get_sky(RID p_env) const;
  1340. float environment_get_sky_custom_fov(RID p_env) const;
  1341. Basis environment_get_sky_orientation(RID p_env) const;
  1342. Color environment_get_bg_color(RID p_env) const;
  1343. float environment_get_bg_energy(RID p_env) const;
  1344. int environment_get_canvas_max_layer(RID p_env) const;
  1345. Color environment_get_ambient_light_color(RID p_env) const;
  1346. RS::EnvironmentAmbientSource environment_get_ambient_source(RID p_env) const;
  1347. float environment_get_ambient_light_energy(RID p_env) const;
  1348. float environment_get_ambient_sky_contribution(RID p_env) const;
  1349. RS::EnvironmentReflectionSource environment_get_reflection_source(RID p_env) const;
  1350. Color environment_get_ao_color(RID p_env) const;
  1351. bool is_environment(RID p_env) const;
  1352. void environment_set_glow(RID p_env, bool p_enable, Vector<float> p_levels, float p_intensity, float p_strength, float p_mix, float p_bloom_threshold, RS::EnvironmentGlowBlendMode p_blend_mode, float p_hdr_bleed_threshold, float p_hdr_bleed_scale, float p_hdr_luminance_cap);
  1353. void environment_glow_set_use_bicubic_upscale(bool p_enable);
  1354. void environment_glow_set_use_high_quality(bool p_enable);
  1355. void environment_set_fog(RID p_env, bool p_enable, const Color &p_light_color, float p_light_energy, float p_sun_scatter, float p_density, float p_height, float p_height_density, float p_aerial_perspective);
  1356. bool environment_is_fog_enabled(RID p_env) const;
  1357. Color environment_get_fog_light_color(RID p_env) const;
  1358. float environment_get_fog_light_energy(RID p_env) const;
  1359. float environment_get_fog_sun_scatter(RID p_env) const;
  1360. float environment_get_fog_density(RID p_env) const;
  1361. float environment_get_fog_height(RID p_env) const;
  1362. float environment_get_fog_height_density(RID p_env) const;
  1363. float environment_get_fog_aerial_perspective(RID p_env) const;
  1364. void environment_set_volumetric_fog(RID p_env, bool p_enable, float p_density, const Color &p_light, float p_light_energy, float p_length, float p_detail_spread, float p_gi_inject, bool p_temporal_reprojection, float p_temporal_reprojection_amount);
  1365. virtual void environment_set_volumetric_fog_volume_size(int p_size, int p_depth);
  1366. virtual void environment_set_volumetric_fog_filter_active(bool p_enable);
  1367. void environment_set_ssr(RID p_env, bool p_enable, int p_max_steps, float p_fade_int, float p_fade_out, float p_depth_tolerance);
  1368. void environment_set_ssao(RID p_env, bool p_enable, float p_radius, float p_intensity, float p_power, float p_detail, float p_horizon, float p_sharpness, float p_light_affect, float p_ao_channel_affect);
  1369. void environment_set_ssao_quality(RS::EnvironmentSSAOQuality p_quality, bool p_half_size, float p_adaptive_target, int p_blur_passes, float p_fadeout_from, float p_fadeout_to);
  1370. bool environment_is_ssao_enabled(RID p_env) const;
  1371. float environment_get_ssao_ao_affect(RID p_env) const;
  1372. float environment_get_ssao_light_affect(RID p_env) const;
  1373. bool environment_is_ssr_enabled(RID p_env) const;
  1374. bool environment_is_sdfgi_enabled(RID p_env) const;
  1375. virtual void environment_set_sdfgi(RID p_env, bool p_enable, RS::EnvironmentSDFGICascades p_cascades, float p_min_cell_size, RS::EnvironmentSDFGIYScale p_y_scale, bool p_use_occlusion, float p_bounce_feedback, bool p_read_sky, float p_energy, float p_normal_bias, float p_probe_bias);
  1376. virtual void environment_set_sdfgi_ray_count(RS::EnvironmentSDFGIRayCount p_ray_count);
  1377. virtual void environment_set_sdfgi_frames_to_converge(RS::EnvironmentSDFGIFramesToConverge p_frames);
  1378. virtual void environment_set_sdfgi_frames_to_update_light(RS::EnvironmentSDFGIFramesToUpdateLight p_update);
  1379. void environment_set_ssr_roughness_quality(RS::EnvironmentSSRRoughnessQuality p_quality);
  1380. RS::EnvironmentSSRRoughnessQuality environment_get_ssr_roughness_quality() const;
  1381. void environment_set_tonemap(RID p_env, RS::EnvironmentToneMapper p_tone_mapper, float p_exposure, float p_white, bool p_auto_exposure, float p_min_luminance, float p_max_luminance, float p_auto_exp_speed, float p_auto_exp_scale);
  1382. void environment_set_adjustment(RID p_env, bool p_enable, float p_brightness, float p_contrast, float p_saturation, bool p_use_1d_color_correction, RID p_color_correction);
  1383. virtual Ref<Image> environment_bake_panorama(RID p_env, bool p_bake_irradiance, const Size2i &p_size);
  1384. virtual RID camera_effects_allocate();
  1385. virtual void camera_effects_initialize(RID p_rid);
  1386. virtual void camera_effects_set_dof_blur_quality(RS::DOFBlurQuality p_quality, bool p_use_jitter);
  1387. virtual void camera_effects_set_dof_blur_bokeh_shape(RS::DOFBokehShape p_shape);
  1388. virtual void camera_effects_set_dof_blur(RID p_camera_effects, bool p_far_enable, float p_far_distance, float p_far_transition, bool p_near_enable, float p_near_distance, float p_near_transition, float p_amount);
  1389. virtual void camera_effects_set_custom_exposure(RID p_camera_effects, bool p_enable, float p_exposure);
  1390. RID light_instance_create(RID p_light);
  1391. void light_instance_set_transform(RID p_light_instance, const Transform &p_transform);
  1392. void light_instance_set_aabb(RID p_light_instance, const AABB &p_aabb);
  1393. void light_instance_set_shadow_transform(RID p_light_instance, const CameraMatrix &p_projection, const Transform &p_transform, float p_far, float p_split, int p_pass, float p_shadow_texel_size, float p_bias_scale = 1.0, float p_range_begin = 0, const Vector2 &p_uv_scale = Vector2());
  1394. void light_instance_mark_visible(RID p_light_instance);
  1395. _FORCE_INLINE_ RID light_instance_get_base_light(RID p_light_instance) {
  1396. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1397. return li->light;
  1398. }
  1399. _FORCE_INLINE_ Transform light_instance_get_base_transform(RID p_light_instance) {
  1400. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1401. return li->transform;
  1402. }
  1403. _FORCE_INLINE_ Rect2 light_instance_get_shadow_atlas_rect(RID p_light_instance, RID p_shadow_atlas) {
  1404. ShadowAtlas *shadow_atlas = shadow_atlas_owner.getornull(p_shadow_atlas);
  1405. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1406. uint32_t key = shadow_atlas->shadow_owners[li->self];
  1407. uint32_t quadrant = (key >> ShadowAtlas::QUADRANT_SHIFT) & 0x3;
  1408. uint32_t shadow = key & ShadowAtlas::SHADOW_INDEX_MASK;
  1409. ERR_FAIL_COND_V(shadow >= (uint32_t)shadow_atlas->quadrants[quadrant].shadows.size(), Rect2());
  1410. uint32_t atlas_size = shadow_atlas->size;
  1411. uint32_t quadrant_size = atlas_size >> 1;
  1412. uint32_t x = (quadrant & 1) * quadrant_size;
  1413. uint32_t y = (quadrant >> 1) * quadrant_size;
  1414. uint32_t shadow_size = (quadrant_size / shadow_atlas->quadrants[quadrant].subdivision);
  1415. x += (shadow % shadow_atlas->quadrants[quadrant].subdivision) * shadow_size;
  1416. y += (shadow / shadow_atlas->quadrants[quadrant].subdivision) * shadow_size;
  1417. uint32_t width = shadow_size;
  1418. uint32_t height = shadow_size;
  1419. return Rect2(x / float(shadow_atlas->size), y / float(shadow_atlas->size), width / float(shadow_atlas->size), height / float(shadow_atlas->size));
  1420. }
  1421. _FORCE_INLINE_ CameraMatrix light_instance_get_shadow_camera(RID p_light_instance, int p_index) {
  1422. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1423. return li->shadow_transform[p_index].camera;
  1424. }
  1425. _FORCE_INLINE_ float light_instance_get_shadow_texel_size(RID p_light_instance, RID p_shadow_atlas) {
  1426. #ifdef DEBUG_ENABLED
  1427. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1428. ERR_FAIL_COND_V(!li->shadow_atlases.has(p_shadow_atlas), 0);
  1429. #endif
  1430. ShadowAtlas *shadow_atlas = shadow_atlas_owner.getornull(p_shadow_atlas);
  1431. ERR_FAIL_COND_V(!shadow_atlas, 0);
  1432. #ifdef DEBUG_ENABLED
  1433. ERR_FAIL_COND_V(!shadow_atlas->shadow_owners.has(p_light_instance), 0);
  1434. #endif
  1435. uint32_t key = shadow_atlas->shadow_owners[p_light_instance];
  1436. uint32_t quadrant = (key >> ShadowAtlas::QUADRANT_SHIFT) & 0x3;
  1437. uint32_t quadrant_size = shadow_atlas->size >> 1;
  1438. uint32_t shadow_size = (quadrant_size / shadow_atlas->quadrants[quadrant].subdivision);
  1439. return float(1.0) / shadow_size;
  1440. }
  1441. _FORCE_INLINE_ Transform
  1442. light_instance_get_shadow_transform(RID p_light_instance, int p_index) {
  1443. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1444. return li->shadow_transform[p_index].transform;
  1445. }
  1446. _FORCE_INLINE_ float light_instance_get_shadow_bias_scale(RID p_light_instance, int p_index) {
  1447. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1448. return li->shadow_transform[p_index].bias_scale;
  1449. }
  1450. _FORCE_INLINE_ float light_instance_get_shadow_range(RID p_light_instance, int p_index) {
  1451. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1452. return li->shadow_transform[p_index].farplane;
  1453. }
  1454. _FORCE_INLINE_ float light_instance_get_shadow_range_begin(RID p_light_instance, int p_index) {
  1455. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1456. return li->shadow_transform[p_index].range_begin;
  1457. }
  1458. _FORCE_INLINE_ Vector2 light_instance_get_shadow_uv_scale(RID p_light_instance, int p_index) {
  1459. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1460. return li->shadow_transform[p_index].uv_scale;
  1461. }
  1462. _FORCE_INLINE_ Rect2 light_instance_get_directional_shadow_atlas_rect(RID p_light_instance, int p_index) {
  1463. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1464. return li->shadow_transform[p_index].atlas_rect;
  1465. }
  1466. _FORCE_INLINE_ float light_instance_get_directional_shadow_split(RID p_light_instance, int p_index) {
  1467. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1468. return li->shadow_transform[p_index].split;
  1469. }
  1470. _FORCE_INLINE_ float light_instance_get_directional_shadow_texel_size(RID p_light_instance, int p_index) {
  1471. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1472. return li->shadow_transform[p_index].shadow_texel_size;
  1473. }
  1474. _FORCE_INLINE_ void light_instance_set_render_pass(RID p_light_instance, uint64_t p_pass) {
  1475. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1476. li->last_pass = p_pass;
  1477. }
  1478. _FORCE_INLINE_ uint64_t light_instance_get_render_pass(RID p_light_instance) {
  1479. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1480. return li->last_pass;
  1481. }
  1482. _FORCE_INLINE_ void light_instance_set_index(RID p_light_instance, uint32_t p_index) {
  1483. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1484. li->light_index = p_index;
  1485. }
  1486. _FORCE_INLINE_ uint32_t light_instance_get_index(RID p_light_instance) {
  1487. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1488. return li->light_index;
  1489. }
  1490. _FORCE_INLINE_ RS::LightType light_instance_get_type(RID p_light_instance) {
  1491. LightInstance *li = light_instance_owner.getornull(p_light_instance);
  1492. return li->light_type;
  1493. }
  1494. virtual RID reflection_atlas_create();
  1495. virtual void reflection_atlas_set_size(RID p_ref_atlas, int p_reflection_size, int p_reflection_count);
  1496. virtual int reflection_atlas_get_size(RID p_ref_atlas) const;
  1497. _FORCE_INLINE_ RID reflection_atlas_get_texture(RID p_ref_atlas) {
  1498. ReflectionAtlas *atlas = reflection_atlas_owner.getornull(p_ref_atlas);
  1499. ERR_FAIL_COND_V(!atlas, RID());
  1500. return atlas->reflection;
  1501. }
  1502. virtual RID reflection_probe_instance_create(RID p_probe);
  1503. virtual void reflection_probe_instance_set_transform(RID p_instance, const Transform &p_transform);
  1504. virtual void reflection_probe_release_atlas_index(RID p_instance);
  1505. virtual bool reflection_probe_instance_needs_redraw(RID p_instance);
  1506. virtual bool reflection_probe_instance_has_reflection(RID p_instance);
  1507. virtual bool reflection_probe_instance_begin_render(RID p_instance, RID p_reflection_atlas);
  1508. virtual bool reflection_probe_instance_postprocess_step(RID p_instance);
  1509. uint32_t reflection_probe_instance_get_resolution(RID p_instance);
  1510. RID reflection_probe_instance_get_framebuffer(RID p_instance, int p_index);
  1511. RID reflection_probe_instance_get_depth_framebuffer(RID p_instance, int p_index);
  1512. _FORCE_INLINE_ RID reflection_probe_instance_get_probe(RID p_instance) {
  1513. ReflectionProbeInstance *rpi = reflection_probe_instance_owner.getornull(p_instance);
  1514. ERR_FAIL_COND_V(!rpi, RID());
  1515. return rpi->probe;
  1516. }
  1517. _FORCE_INLINE_ void reflection_probe_instance_set_render_index(RID p_instance, uint32_t p_render_index) {
  1518. ReflectionProbeInstance *rpi = reflection_probe_instance_owner.getornull(p_instance);
  1519. ERR_FAIL_COND(!rpi);
  1520. rpi->render_index = p_render_index;
  1521. }
  1522. _FORCE_INLINE_ uint32_t reflection_probe_instance_get_render_index(RID p_instance) {
  1523. ReflectionProbeInstance *rpi = reflection_probe_instance_owner.getornull(p_instance);
  1524. ERR_FAIL_COND_V(!rpi, 0);
  1525. return rpi->render_index;
  1526. }
  1527. _FORCE_INLINE_ void reflection_probe_instance_set_render_pass(RID p_instance, uint32_t p_render_pass) {
  1528. ReflectionProbeInstance *rpi = reflection_probe_instance_owner.getornull(p_instance);
  1529. ERR_FAIL_COND(!rpi);
  1530. rpi->last_pass = p_render_pass;
  1531. }
  1532. _FORCE_INLINE_ uint32_t reflection_probe_instance_get_render_pass(RID p_instance) {
  1533. ReflectionProbeInstance *rpi = reflection_probe_instance_owner.getornull(p_instance);
  1534. ERR_FAIL_COND_V(!rpi, 0);
  1535. return rpi->last_pass;
  1536. }
  1537. _FORCE_INLINE_ Transform reflection_probe_instance_get_transform(RID p_instance) {
  1538. ReflectionProbeInstance *rpi = reflection_probe_instance_owner.getornull(p_instance);
  1539. ERR_FAIL_COND_V(!rpi, Transform());
  1540. return rpi->transform;
  1541. }
  1542. _FORCE_INLINE_ int reflection_probe_instance_get_atlas_index(RID p_instance) {
  1543. ReflectionProbeInstance *rpi = reflection_probe_instance_owner.getornull(p_instance);
  1544. ERR_FAIL_COND_V(!rpi, -1);
  1545. return rpi->atlas_index;
  1546. }
  1547. virtual RID decal_instance_create(RID p_decal);
  1548. virtual void decal_instance_set_transform(RID p_decal, const Transform &p_transform);
  1549. _FORCE_INLINE_ RID decal_instance_get_base(RID p_decal) const {
  1550. DecalInstance *decal = decal_instance_owner.getornull(p_decal);
  1551. return decal->decal;
  1552. }
  1553. _FORCE_INLINE_ Transform decal_instance_get_transform(RID p_decal) const {
  1554. DecalInstance *decal = decal_instance_owner.getornull(p_decal);
  1555. return decal->transform;
  1556. }
  1557. virtual RID lightmap_instance_create(RID p_lightmap);
  1558. virtual void lightmap_instance_set_transform(RID p_lightmap, const Transform &p_transform);
  1559. _FORCE_INLINE_ bool lightmap_instance_is_valid(RID p_lightmap_instance) {
  1560. return lightmap_instance_owner.getornull(p_lightmap_instance) != nullptr;
  1561. }
  1562. _FORCE_INLINE_ RID lightmap_instance_get_lightmap(RID p_lightmap_instance) {
  1563. LightmapInstance *li = lightmap_instance_owner.getornull(p_lightmap_instance);
  1564. return li->lightmap;
  1565. }
  1566. _FORCE_INLINE_ Transform lightmap_instance_get_transform(RID p_lightmap_instance) {
  1567. LightmapInstance *li = lightmap_instance_owner.getornull(p_lightmap_instance);
  1568. return li->transform;
  1569. }
  1570. RID gi_probe_instance_create(RID p_base);
  1571. void gi_probe_instance_set_transform_to_data(RID p_probe, const Transform &p_xform);
  1572. bool gi_probe_needs_update(RID p_probe) const;
  1573. void gi_probe_update(RID p_probe, bool p_update_light_instances, const Vector<RID> &p_light_instances, const PagedArray<RendererSceneRender::GeometryInstance *> &p_dynamic_objects);
  1574. void gi_probe_set_quality(RS::GIProbeQuality p_quality) { gi_probe_quality = p_quality; }
  1575. _FORCE_INLINE_ uint32_t gi_probe_instance_get_slot(RID p_probe) {
  1576. GIProbeInstance *gi_probe = gi_probe_instance_owner.getornull(p_probe);
  1577. return gi_probe->slot;
  1578. }
  1579. _FORCE_INLINE_ RID gi_probe_instance_get_base_probe(RID p_probe) {
  1580. GIProbeInstance *gi_probe = gi_probe_instance_owner.getornull(p_probe);
  1581. return gi_probe->probe;
  1582. }
  1583. _FORCE_INLINE_ Transform gi_probe_instance_get_transform_to_cell(RID p_probe) {
  1584. GIProbeInstance *gi_probe = gi_probe_instance_owner.getornull(p_probe);
  1585. return storage->gi_probe_get_to_cell_xform(gi_probe->probe) * gi_probe->transform.affine_inverse();
  1586. }
  1587. _FORCE_INLINE_ RID gi_probe_instance_get_texture(RID p_probe) {
  1588. GIProbeInstance *gi_probe = gi_probe_instance_owner.getornull(p_probe);
  1589. return gi_probe->texture;
  1590. }
  1591. _FORCE_INLINE_ void gi_probe_instance_set_render_index(RID p_instance, uint32_t p_render_index) {
  1592. GIProbeInstance *gi_probe = gi_probe_instance_owner.getornull(p_instance);
  1593. ERR_FAIL_COND(!gi_probe);
  1594. gi_probe->render_index = p_render_index;
  1595. }
  1596. _FORCE_INLINE_ uint32_t gi_probe_instance_get_render_index(RID p_instance) {
  1597. GIProbeInstance *gi_probe = gi_probe_instance_owner.getornull(p_instance);
  1598. ERR_FAIL_COND_V(!gi_probe, 0);
  1599. return gi_probe->render_index;
  1600. }
  1601. /*
  1602. _FORCE_INLINE_ void gi_probe_instance_set_render_pass(RID p_instance, uint32_t p_render_pass) {
  1603. GIProbeInstance *g_probe = gi_probe_instance_owner.getornull(p_instance);
  1604. ERR_FAIL_COND(!g_probe);
  1605. g_probe->last_pass = p_render_pass;
  1606. }
  1607. _FORCE_INLINE_ uint32_t gi_probe_instance_get_render_pass(RID p_instance) {
  1608. GIProbeInstance *g_probe = gi_probe_instance_owner.getornull(p_instance);
  1609. ERR_FAIL_COND_V(!g_probe, 0);
  1610. return g_probe->last_pass;
  1611. }
  1612. */
  1613. RID render_buffers_create();
  1614. void render_buffers_configure(RID p_render_buffers, RID p_render_target, int p_width, int p_height, RS::ViewportMSAA p_msaa, RS::ViewportScreenSpaceAA p_screen_space_aa, bool p_use_debanding);
  1615. void gi_set_use_half_resolution(bool p_enable);
  1616. RID render_buffers_get_ao_texture(RID p_render_buffers);
  1617. RID render_buffers_get_back_buffer_texture(RID p_render_buffers);
  1618. RID render_buffers_get_gi_probe_buffer(RID p_render_buffers);
  1619. RID render_buffers_get_default_gi_probe_buffer();
  1620. RID render_buffers_get_gi_ambient_texture(RID p_render_buffers);
  1621. RID render_buffers_get_gi_reflection_texture(RID p_render_buffers);
  1622. uint32_t render_buffers_get_sdfgi_cascade_count(RID p_render_buffers) const;
  1623. bool render_buffers_is_sdfgi_enabled(RID p_render_buffers) const;
  1624. RID render_buffers_get_sdfgi_irradiance_probes(RID p_render_buffers) const;
  1625. Vector3 render_buffers_get_sdfgi_cascade_offset(RID p_render_buffers, uint32_t p_cascade) const;
  1626. Vector3i render_buffers_get_sdfgi_cascade_probe_offset(RID p_render_buffers, uint32_t p_cascade) const;
  1627. float render_buffers_get_sdfgi_cascade_probe_size(RID p_render_buffers, uint32_t p_cascade) const;
  1628. float render_buffers_get_sdfgi_normal_bias(RID p_render_buffers) const;
  1629. uint32_t render_buffers_get_sdfgi_cascade_probe_count(RID p_render_buffers) const;
  1630. uint32_t render_buffers_get_sdfgi_cascade_size(RID p_render_buffers) const;
  1631. bool render_buffers_is_sdfgi_using_occlusion(RID p_render_buffers) const;
  1632. float render_buffers_get_sdfgi_energy(RID p_render_buffers) const;
  1633. RID render_buffers_get_sdfgi_occlusion_texture(RID p_render_buffers) const;
  1634. bool render_buffers_has_volumetric_fog(RID p_render_buffers) const;
  1635. RID render_buffers_get_volumetric_fog_texture(RID p_render_buffers);
  1636. RID render_buffers_get_volumetric_fog_sky_uniform_set(RID p_render_buffers);
  1637. float render_buffers_get_volumetric_fog_end(RID p_render_buffers);
  1638. float render_buffers_get_volumetric_fog_detail_spread(RID p_render_buffers);
  1639. void render_scene(RID p_render_buffers, const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, const PagedArray<GeometryInstance *> &p_instances, const PagedArray<RID> &p_lights, const PagedArray<RID> &p_reflection_probes, const PagedArray<RID> &p_gi_probes, const PagedArray<RID> &p_decals, const PagedArray<RID> &p_lightmaps, RID p_environment, RID p_camera_effects, RID p_shadow_atlas, RID p_reflection_atlas, RID p_reflection_probe, int p_reflection_probe_pass, float p_screen_lod_threshold, const RenderShadowData *p_render_shadows, int p_render_shadow_count, const RenderSDFGIData *p_render_sdfgi_regions, int p_render_sdfgi_region_count, const RenderSDFGIUpdateData *p_sdfgi_update_data = nullptr);
  1640. void render_material(const Transform &p_cam_transform, const CameraMatrix &p_cam_projection, bool p_cam_ortogonal, const PagedArray<GeometryInstance *> &p_instances, RID p_framebuffer, const Rect2i &p_region);
  1641. void render_particle_collider_heightfield(RID p_collider, const Transform &p_transform, const PagedArray<GeometryInstance *> &p_instances);
  1642. virtual void set_scene_pass(uint64_t p_pass) {
  1643. scene_pass = p_pass;
  1644. }
  1645. _FORCE_INLINE_ uint64_t get_scene_pass() {
  1646. return scene_pass;
  1647. }
  1648. virtual void screen_space_roughness_limiter_set_active(bool p_enable, float p_amount, float p_limit);
  1649. virtual bool screen_space_roughness_limiter_is_active() const;
  1650. virtual float screen_space_roughness_limiter_get_amount() const;
  1651. virtual float screen_space_roughness_limiter_get_limit() const;
  1652. virtual void sub_surface_scattering_set_quality(RS::SubSurfaceScatteringQuality p_quality);
  1653. RS::SubSurfaceScatteringQuality sub_surface_scattering_get_quality() const;
  1654. virtual void sub_surface_scattering_set_scale(float p_scale, float p_depth_scale);
  1655. virtual void shadows_quality_set(RS::ShadowQuality p_quality);
  1656. virtual void directional_shadow_quality_set(RS::ShadowQuality p_quality);
  1657. _FORCE_INLINE_ RS::ShadowQuality shadows_quality_get() const { return shadows_quality; }
  1658. _FORCE_INLINE_ RS::ShadowQuality directional_shadow_quality_get() const { return directional_shadow_quality; }
  1659. _FORCE_INLINE_ float shadows_quality_radius_get() const { return shadows_quality_radius; }
  1660. _FORCE_INLINE_ float directional_shadow_quality_radius_get() const { return directional_shadow_quality_radius; }
  1661. _FORCE_INLINE_ float *directional_penumbra_shadow_kernel_get() { return directional_penumbra_shadow_kernel; }
  1662. _FORCE_INLINE_ float *directional_soft_shadow_kernel_get() { return directional_soft_shadow_kernel; }
  1663. _FORCE_INLINE_ float *penumbra_shadow_kernel_get() { return penumbra_shadow_kernel; }
  1664. _FORCE_INLINE_ float *soft_shadow_kernel_get() { return soft_shadow_kernel; }
  1665. _FORCE_INLINE_ int directional_penumbra_shadow_samples_get() const { return directional_penumbra_shadow_samples; }
  1666. _FORCE_INLINE_ int directional_soft_shadow_samples_get() const { return directional_soft_shadow_samples; }
  1667. _FORCE_INLINE_ int penumbra_shadow_samples_get() const { return penumbra_shadow_samples; }
  1668. _FORCE_INLINE_ int soft_shadow_samples_get() const { return soft_shadow_samples; }
  1669. int get_roughness_layers() const;
  1670. bool is_using_radiance_cubemap_array() const;
  1671. virtual TypedArray<Image> bake_render_uv2(RID p_base, const Vector<RID> &p_material_overrides, const Size2i &p_image_size);
  1672. virtual bool free(RID p_rid);
  1673. virtual void update();
  1674. virtual void set_debug_draw_mode(RS::ViewportDebugDraw p_debug_draw);
  1675. _FORCE_INLINE_ RS::ViewportDebugDraw get_debug_draw_mode() const {
  1676. return debug_draw;
  1677. }
  1678. virtual void set_time(double p_time, double p_step);
  1679. RID get_reflection_probe_buffer();
  1680. RID get_omni_light_buffer();
  1681. RID get_spot_light_buffer();
  1682. RID get_directional_light_buffer();
  1683. RID get_decal_buffer();
  1684. int get_max_directional_lights() const;
  1685. void sdfgi_set_debug_probe_select(const Vector3 &p_position, const Vector3 &p_dir);
  1686. bool is_low_end() const;
  1687. RendererSceneRenderRD(RendererStorageRD *p_storage);
  1688. ~RendererSceneRenderRD();
  1689. };
  1690. #endif // RASTERIZER_SCENE_RD_H