properties_render.py 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724
  1. # ##### BEGIN GPL LICENSE BLOCK #####
  2. #
  3. # This program is free software; you can redistribute it and/or
  4. # modify it under the terms of the GNU General Public License
  5. # as published by the Free Software Foundation; either version 2
  6. # of the License, or (at your option) any later version.
  7. #
  8. # This program is distributed in the hope that it will be useful,
  9. # but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. # GNU General Public License for more details.
  12. #
  13. # You should have received a copy of the GNU General Public License
  14. # along with this program; if not, write to the Free Software Foundation,
  15. # Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
  16. #
  17. # ##### END GPL LICENSE BLOCK #####
  18. # <pep8 compliant>
  19. from bpy.types import Panel
  20. from bl_ui.space_view3d import (
  21. VIEW3D_PT_shading_lighting,
  22. VIEW3D_PT_shading_color,
  23. VIEW3D_PT_shading_options,
  24. )
  25. class RenderButtonsPanel:
  26. bl_space_type = 'PROPERTIES'
  27. bl_region_type = 'WINDOW'
  28. bl_context = "render"
  29. # COMPAT_ENGINES must be defined in each subclass, external engines can add themselves here
  30. @classmethod
  31. def poll(cls, context):
  32. return (context.engine in cls.COMPAT_ENGINES)
  33. class RENDER_PT_context(Panel):
  34. bl_space_type = 'PROPERTIES'
  35. bl_region_type = 'WINDOW'
  36. bl_context = "render"
  37. bl_options = {'HIDE_HEADER'}
  38. bl_label = ""
  39. @classmethod
  40. def poll(cls, context):
  41. return context.scene
  42. def draw(self, context):
  43. layout = self.layout
  44. layout.use_property_split = True
  45. layout.use_property_decorate = False
  46. scene = context.scene
  47. rd = scene.render
  48. if rd.has_multiple_engines:
  49. layout.prop(rd, "engine", text="Render Engine")
  50. class RENDER_PT_color_management(RenderButtonsPanel, Panel):
  51. bl_label = "Color Management"
  52. bl_options = {'DEFAULT_CLOSED'}
  53. bl_order = 100
  54. COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
  55. def draw(self, context):
  56. layout = self.layout
  57. layout.use_property_split = True
  58. layout.use_property_decorate = False # No animation.
  59. scene = context.scene
  60. view = scene.view_settings
  61. flow = layout.grid_flow(row_major=True, columns=0, even_columns=False, even_rows=False, align=True)
  62. col = flow.column()
  63. col.prop(scene.display_settings, "display_device")
  64. col.separator()
  65. col.prop(view, "view_transform")
  66. col.prop(view, "look")
  67. col = flow.column()
  68. col.prop(view, "exposure")
  69. col.prop(view, "gamma")
  70. col.separator()
  71. col.prop(scene.sequencer_colorspace_settings, "name", text="Sequencer")
  72. class RENDER_PT_color_management_curves(RenderButtonsPanel, Panel):
  73. bl_label = "Use Curves"
  74. bl_parent_id = "RENDER_PT_color_management"
  75. bl_options = {'DEFAULT_CLOSED'}
  76. COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
  77. def draw_header(self, context):
  78. scene = context.scene
  79. view = scene.view_settings
  80. self.layout.prop(view, "use_curve_mapping", text="")
  81. def draw(self, context):
  82. layout = self.layout
  83. scene = context.scene
  84. view = scene.view_settings
  85. layout.use_property_split = False
  86. layout.use_property_decorate = False # No animation.
  87. layout.enabled = view.use_curve_mapping
  88. layout.template_curve_mapping(view, "curve_mapping", type='COLOR', levels=True)
  89. class RENDER_PT_eevee_ambient_occlusion(RenderButtonsPanel, Panel):
  90. bl_label = "Ambient Occlusion"
  91. bl_options = {'DEFAULT_CLOSED'}
  92. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  93. @classmethod
  94. def poll(cls, context):
  95. return (context.engine in cls.COMPAT_ENGINES)
  96. def draw_header(self, context):
  97. scene = context.scene
  98. props = scene.eevee
  99. self.layout.prop(props, "use_gtao", text="")
  100. def draw(self, context):
  101. layout = self.layout
  102. layout.use_property_split = True
  103. scene = context.scene
  104. props = scene.eevee
  105. layout.active = props.use_gtao
  106. col = layout.column()
  107. col.prop(props, "gtao_distance")
  108. col.prop(props, "gtao_factor")
  109. col.prop(props, "gtao_quality")
  110. col.prop(props, "use_gtao_bent_normals")
  111. col.prop(props, "use_gtao_bounce")
  112. class RENDER_PT_eevee_motion_blur(RenderButtonsPanel, Panel):
  113. bl_label = "Motion Blur"
  114. bl_options = {'DEFAULT_CLOSED'}
  115. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  116. @classmethod
  117. def poll(cls, context):
  118. return (context.engine in cls.COMPAT_ENGINES)
  119. def draw_header(self, context):
  120. scene = context.scene
  121. props = scene.eevee
  122. self.layout.prop(props, "use_motion_blur", text="")
  123. def draw(self, context):
  124. layout = self.layout
  125. layout.use_property_split = True
  126. scene = context.scene
  127. props = scene.eevee
  128. layout.active = props.use_motion_blur
  129. col = layout.column()
  130. col.prop(props, "motion_blur_samples")
  131. col.prop(props, "motion_blur_shutter")
  132. class RENDER_PT_eevee_depth_of_field(RenderButtonsPanel, Panel):
  133. bl_label = "Depth of Field"
  134. bl_options = {'DEFAULT_CLOSED'}
  135. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  136. @classmethod
  137. def poll(cls, context):
  138. return (context.engine in cls.COMPAT_ENGINES)
  139. def draw(self, context):
  140. layout = self.layout
  141. layout.use_property_split = True
  142. scene = context.scene
  143. props = scene.eevee
  144. col = layout.column()
  145. col.prop(props, "bokeh_max_size")
  146. # Not supported yet
  147. # col.prop(props, "bokeh_threshold")
  148. class RENDER_PT_eevee_bloom(RenderButtonsPanel, Panel):
  149. bl_label = "Bloom"
  150. bl_options = {'DEFAULT_CLOSED'}
  151. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  152. @classmethod
  153. def poll(cls, context):
  154. return (context.engine in cls.COMPAT_ENGINES)
  155. def draw_header(self, context):
  156. scene = context.scene
  157. props = scene.eevee
  158. self.layout.prop(props, "use_bloom", text="")
  159. def draw(self, context):
  160. layout = self.layout
  161. layout.use_property_split = True
  162. scene = context.scene
  163. props = scene.eevee
  164. layout.active = props.use_bloom
  165. col = layout.column()
  166. col.prop(props, "bloom_threshold")
  167. col.prop(props, "bloom_knee")
  168. col.prop(props, "bloom_radius")
  169. col.prop(props, "bloom_color")
  170. col.prop(props, "bloom_intensity")
  171. col.prop(props, "bloom_clamp")
  172. class RENDER_PT_eevee_volumetric(RenderButtonsPanel, Panel):
  173. bl_label = "Volumetrics"
  174. bl_options = {'DEFAULT_CLOSED'}
  175. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  176. @classmethod
  177. def poll(cls, context):
  178. return (context.engine in cls.COMPAT_ENGINES)
  179. def draw(self, context):
  180. layout = self.layout
  181. layout.use_property_split = True
  182. scene = context.scene
  183. props = scene.eevee
  184. col = layout.column(align=True)
  185. col.prop(props, "volumetric_start")
  186. col.prop(props, "volumetric_end")
  187. col = layout.column()
  188. col.prop(props, "volumetric_tile_size")
  189. col.prop(props, "volumetric_samples")
  190. col.prop(props, "volumetric_sample_distribution", text="Distribution")
  191. class RENDER_PT_eevee_volumetric_lighting(RenderButtonsPanel, Panel):
  192. bl_label = "Volumetric Lighting"
  193. bl_parent_id = "RENDER_PT_eevee_volumetric"
  194. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  195. def draw_header(self, context):
  196. scene = context.scene
  197. props = scene.eevee
  198. self.layout.prop(props, "use_volumetric_lights", text="")
  199. def draw(self, context):
  200. layout = self.layout
  201. layout.use_property_split = True
  202. scene = context.scene
  203. props = scene.eevee
  204. layout.active = props.use_volumetric_lights
  205. layout.prop(props, "volumetric_light_clamp", text="Light Clamping")
  206. class RENDER_PT_eevee_volumetric_shadows(RenderButtonsPanel, Panel):
  207. bl_label = "Volumetric Shadows"
  208. bl_parent_id = "RENDER_PT_eevee_volumetric"
  209. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  210. def draw_header(self, context):
  211. scene = context.scene
  212. props = scene.eevee
  213. self.layout.prop(props, "use_volumetric_shadows", text="")
  214. def draw(self, context):
  215. layout = self.layout
  216. layout.use_property_split = True
  217. scene = context.scene
  218. props = scene.eevee
  219. layout.active = props.use_volumetric_shadows
  220. layout.prop(props, "volumetric_shadow_samples", text="Shadow Samples")
  221. class RENDER_PT_eevee_subsurface_scattering(RenderButtonsPanel, Panel):
  222. bl_label = "Subsurface Scattering"
  223. bl_options = {'DEFAULT_CLOSED'}
  224. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  225. @classmethod
  226. def poll(cls, context):
  227. return (context.engine in cls.COMPAT_ENGINES)
  228. def draw(self, context):
  229. layout = self.layout
  230. layout.use_property_split = True
  231. scene = context.scene
  232. props = scene.eevee
  233. col = layout.column()
  234. col.prop(props, "sss_samples")
  235. col.prop(props, "sss_jitter_threshold")
  236. col.prop(props, "use_sss_separate_albedo")
  237. class RENDER_PT_eevee_screen_space_reflections(RenderButtonsPanel, Panel):
  238. bl_label = "Screen Space Reflections"
  239. bl_options = {'DEFAULT_CLOSED'}
  240. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  241. @classmethod
  242. def poll(cls, context):
  243. return (context.engine in cls.COMPAT_ENGINES)
  244. def draw_header(self, context):
  245. scene = context.scene
  246. props = scene.eevee
  247. self.layout.prop(props, "use_ssr", text="")
  248. def draw(self, context):
  249. layout = self.layout
  250. layout.use_property_split = True
  251. scene = context.scene
  252. props = scene.eevee
  253. col = layout.column()
  254. col.active = props.use_ssr
  255. col.prop(props, "use_ssr_refraction", text="Refraction")
  256. col.prop(props, "use_ssr_halfres")
  257. col.prop(props, "ssr_quality")
  258. col.prop(props, "ssr_max_roughness")
  259. col.prop(props, "ssr_thickness")
  260. col.prop(props, "ssr_border_fade")
  261. col.prop(props, "ssr_firefly_fac")
  262. class RENDER_PT_eevee_shadows(RenderButtonsPanel, Panel):
  263. bl_label = "Shadows"
  264. bl_options = {'DEFAULT_CLOSED'}
  265. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  266. @classmethod
  267. def poll(cls, context):
  268. return (context.engine in cls.COMPAT_ENGINES)
  269. def draw(self, context):
  270. layout = self.layout
  271. layout.use_property_split = True
  272. scene = context.scene
  273. props = scene.eevee
  274. col = layout.column()
  275. col.prop(props, "shadow_method")
  276. col.prop(props, "shadow_cube_size", text="Cube Size")
  277. col.prop(props, "shadow_cascade_size", text="Cascade Size")
  278. col.prop(props, "use_shadow_high_bitdepth")
  279. col.prop(props, "use_soft_shadows")
  280. col.prop(props, "light_threshold")
  281. class RENDER_PT_eevee_sampling(RenderButtonsPanel, Panel):
  282. bl_label = "Sampling"
  283. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  284. @classmethod
  285. def poll(cls, context):
  286. return (context.engine in cls.COMPAT_ENGINES)
  287. def draw(self, context):
  288. layout = self.layout
  289. layout.use_property_split = True
  290. layout.use_property_decorate = False # No animation.
  291. scene = context.scene
  292. props = scene.eevee
  293. col = layout.column(align=True)
  294. col.prop(props, "taa_render_samples", text="Render")
  295. col.prop(props, "taa_samples", text="Viewport")
  296. col = layout.column()
  297. col.prop(props, "use_taa_reprojection")
  298. class RENDER_PT_eevee_indirect_lighting(RenderButtonsPanel, Panel):
  299. bl_label = "Indirect Lighting"
  300. bl_options = {'DEFAULT_CLOSED'}
  301. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  302. @classmethod
  303. def poll(cls, context):
  304. return (context.engine in cls.COMPAT_ENGINES)
  305. def draw(self, context):
  306. layout = self.layout
  307. layout.use_property_split = True
  308. layout.use_property_decorate = False # No animation.
  309. scene = context.scene
  310. props = scene.eevee
  311. col = layout.column()
  312. col.operator("scene.light_cache_bake", text="Bake Indirect Lighting", icon='RENDER_STILL')
  313. col.operator("scene.light_cache_bake", text="Bake Cubemap Only", icon='LIGHTPROBE_CUBEMAP').subset = 'CUBEMAPS'
  314. col.operator("scene.light_cache_free", text="Delete Lighting Cache")
  315. cache_info = scene.eevee.gi_cache_info
  316. if cache_info:
  317. col.label(text=cache_info)
  318. col.prop(props, "gi_auto_bake")
  319. col.prop(props, "gi_diffuse_bounces")
  320. col.prop(props, "gi_cubemap_resolution")
  321. col.prop(props, "gi_visibility_resolution", text="Diffuse Occlusion")
  322. col.prop(props, "gi_irradiance_smoothing")
  323. col.prop(props, "gi_glossy_clamp")
  324. col.prop(props, "gi_filter_quality")
  325. class RENDER_PT_eevee_indirect_lighting_display(RenderButtonsPanel, Panel):
  326. bl_label = "Display"
  327. bl_parent_id = "RENDER_PT_eevee_indirect_lighting"
  328. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  329. @classmethod
  330. def poll(cls, context):
  331. return (context.engine in cls.COMPAT_ENGINES)
  332. def draw(self, context):
  333. layout = self.layout
  334. layout.use_property_split = True
  335. layout.use_property_decorate = False # No animation.
  336. scene = context.scene
  337. props = scene.eevee
  338. row = layout.row(align=True)
  339. row.prop(props, "gi_cubemap_display_size", text="Cubemap Size")
  340. row.prop(props, "gi_show_cubemaps", text="", toggle=True)
  341. row = layout.row(align=True)
  342. row.prop(props, "gi_irradiance_display_size", text="Irradiance Size")
  343. row.prop(props, "gi_show_irradiance", text="", toggle=True)
  344. class RENDER_PT_eevee_film(RenderButtonsPanel, Panel):
  345. bl_label = "Film"
  346. bl_options = {'DEFAULT_CLOSED'}
  347. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  348. @classmethod
  349. def poll(cls, context):
  350. return (context.engine in cls.COMPAT_ENGINES)
  351. def draw(self, context):
  352. layout = self.layout
  353. layout.use_property_split = True
  354. scene = context.scene
  355. rd = scene.render
  356. col = layout.column()
  357. col.prop(rd, "filter_size")
  358. col.prop(rd, "film_transparent", text="Transparent")
  359. class RENDER_PT_eevee_film_overscan(RenderButtonsPanel, Panel):
  360. bl_label = "Overscan"
  361. bl_parent_id = "RENDER_PT_eevee_film"
  362. bl_options = {'DEFAULT_CLOSED'}
  363. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  364. def draw_header(self, context):
  365. scene = context.scene
  366. props = scene.eevee
  367. self.layout.prop(props, "use_overscan", text="")
  368. def draw(self, context):
  369. layout = self.layout
  370. layout.use_property_split = True
  371. scene = context.scene
  372. props = scene.eevee
  373. layout.active = props.use_overscan
  374. layout.prop(props, "overscan_size", text="Size")
  375. class RENDER_PT_eevee_hair(RenderButtonsPanel, Panel):
  376. bl_label = "Hair"
  377. bl_options = {'DEFAULT_CLOSED'}
  378. COMPAT_ENGINES = {'BLENDER_EEVEE'}
  379. @classmethod
  380. def poll(cls, context):
  381. return (context.engine in cls.COMPAT_ENGINES)
  382. def draw(self, context):
  383. layout = self.layout
  384. scene = context.scene
  385. rd = scene.render
  386. layout.use_property_split = True
  387. layout.prop(rd, "hair_type", expand=True)
  388. layout.prop(rd, "hair_subdiv")
  389. class RENDER_PT_opengl_sampling(RenderButtonsPanel, Panel):
  390. bl_label = "Sampling"
  391. COMPAT_ENGINES = {'BLENDER_WORKBENCH'}
  392. @classmethod
  393. def poll(cls, context):
  394. return (context.engine in cls.COMPAT_ENGINES)
  395. def draw(self, context):
  396. layout = self.layout
  397. layout.use_property_split = True
  398. layout.use_property_decorate = False # No animation.
  399. scene = context.scene
  400. props = scene.display
  401. col = layout.column()
  402. col.prop(props, "render_aa", text="Render")
  403. col.prop(props, "viewport_aa", text="Viewport Render")
  404. class RENDER_PT_opengl_film(RenderButtonsPanel, Panel):
  405. bl_label = "Film"
  406. bl_options = {'DEFAULT_CLOSED'}
  407. COMPAT_ENGINES = {'BLENDER_WORKBENCH'}
  408. def draw(self, context):
  409. layout = self.layout
  410. layout.use_property_split = True
  411. layout.use_property_decorate = False # No animation.
  412. rd = context.scene.render
  413. layout.prop(rd, "film_transparent", text="Transparent")
  414. class RENDER_PT_opengl_lighting(RenderButtonsPanel, Panel):
  415. bl_label = "Lighting"
  416. COMPAT_ENGINES = {'BLENDER_WORKBENCH'}
  417. @classmethod
  418. def poll(cls, context):
  419. return (context.engine in cls.COMPAT_ENGINES)
  420. def draw(self, context):
  421. VIEW3D_PT_shading_lighting.draw(self, context)
  422. class RENDER_PT_opengl_color(RenderButtonsPanel, Panel):
  423. bl_label = "Color"
  424. COMPAT_ENGINES = {'BLENDER_WORKBENCH'}
  425. @classmethod
  426. def poll(cls, context):
  427. return (context.engine in cls.COMPAT_ENGINES)
  428. def draw(self, context):
  429. VIEW3D_PT_shading_color._draw_color_type(self, context)
  430. class RENDER_PT_opengl_options(RenderButtonsPanel, Panel):
  431. bl_label = "Options"
  432. COMPAT_ENGINES = {'BLENDER_WORKBENCH'}
  433. @classmethod
  434. def poll(cls, context):
  435. return (context.engine in cls.COMPAT_ENGINES)
  436. def draw(self, context):
  437. VIEW3D_PT_shading_options.draw(self, context)
  438. class RENDER_PT_simplify(RenderButtonsPanel, Panel):
  439. bl_label = "Simplify"
  440. bl_options = {'DEFAULT_CLOSED'}
  441. COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
  442. def draw_header(self, context):
  443. rd = context.scene.render
  444. self.layout.prop(rd, "use_simplify", text="")
  445. def draw(self, context):
  446. pass
  447. class RENDER_PT_simplify_viewport(RenderButtonsPanel, Panel):
  448. bl_label = "Viewport"
  449. bl_parent_id = "RENDER_PT_simplify"
  450. COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
  451. def draw(self, context):
  452. layout = self.layout
  453. layout.use_property_split = True
  454. rd = context.scene.render
  455. layout.active = rd.use_simplify
  456. flow = layout.grid_flow(row_major=True, columns=0, even_columns=False, even_rows=False, align=True)
  457. col = flow.column()
  458. col.prop(rd, "simplify_subdivision", text="Max Subdivision")
  459. col = flow.column()
  460. col.prop(rd, "simplify_child_particles", text="Max Child Particles")
  461. col = flow.column()
  462. col.prop(rd, "use_simplify_smoke_highres", text="High-resolution Smoke")
  463. class RENDER_PT_simplify_render(RenderButtonsPanel, Panel):
  464. bl_label = "Render"
  465. bl_parent_id = "RENDER_PT_simplify"
  466. COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_EEVEE', 'BLENDER_WORKBENCH'}
  467. def draw(self, context):
  468. layout = self.layout
  469. layout.use_property_split = True
  470. rd = context.scene.render
  471. layout.active = rd.use_simplify
  472. flow = layout.grid_flow(row_major=True, columns=0, even_columns=False, even_rows=False, align=True)
  473. col = flow.column()
  474. col.prop(rd, "simplify_subdivision_render", text="Max Subdivision")
  475. col = flow.column()
  476. col.prop(rd, "simplify_child_particles_render", text="Max Child Particles")
  477. class RENDER_PT_simplify_greasepencil(RenderButtonsPanel, Panel):
  478. bl_label = "Grease Pencil"
  479. bl_parent_id = "RENDER_PT_simplify"
  480. COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY', 'BLENDER_EEVEE'}
  481. bl_options = {'DEFAULT_CLOSED'}
  482. def draw_header(self, context):
  483. rd = context.scene.render
  484. self.layout.prop(rd, "simplify_gpencil", text="")
  485. def draw(self, context):
  486. layout = self.layout
  487. layout.use_property_split = True
  488. layout.use_property_decorate = False
  489. rd = context.scene.render
  490. layout.active = rd.simplify_gpencil
  491. col = layout.column()
  492. col.prop(rd, "simplify_gpencil_onplay", text="Playback Only")
  493. col.prop(rd, "simplify_gpencil_view_modifier", text="Modifiers")
  494. col.prop(rd, "simplify_gpencil_shader_fx", text="ShaderFX")
  495. col.prop(rd, "simplify_gpencil_blend", text="Layers Blending")
  496. col.prop(rd, "simplify_gpencil_view_fill")
  497. sub = col.column()
  498. sub.active = rd.simplify_gpencil_view_fill
  499. sub.prop(rd, "simplify_gpencil_remove_lines", text="Lines")
  500. classes = (
  501. RENDER_PT_context,
  502. RENDER_PT_eevee_sampling,
  503. RENDER_PT_eevee_ambient_occlusion,
  504. RENDER_PT_eevee_bloom,
  505. RENDER_PT_eevee_depth_of_field,
  506. RENDER_PT_eevee_subsurface_scattering,
  507. RENDER_PT_eevee_screen_space_reflections,
  508. RENDER_PT_eevee_motion_blur,
  509. RENDER_PT_eevee_volumetric,
  510. RENDER_PT_eevee_volumetric_lighting,
  511. RENDER_PT_eevee_volumetric_shadows,
  512. RENDER_PT_eevee_hair,
  513. RENDER_PT_eevee_shadows,
  514. RENDER_PT_eevee_indirect_lighting,
  515. RENDER_PT_eevee_indirect_lighting_display,
  516. RENDER_PT_eevee_film,
  517. RENDER_PT_eevee_film_overscan,
  518. RENDER_PT_opengl_sampling,
  519. RENDER_PT_opengl_lighting,
  520. RENDER_PT_opengl_color,
  521. RENDER_PT_opengl_options,
  522. RENDER_PT_opengl_film,
  523. RENDER_PT_color_management,
  524. RENDER_PT_color_management_curves,
  525. RENDER_PT_simplify,
  526. RENDER_PT_simplify_viewport,
  527. RENDER_PT_simplify_render,
  528. RENDER_PT_simplify_greasepencil,
  529. )
  530. if __name__ == "__main__": # only for live edit.
  531. from bpy.utils import register_class
  532. for cls in classes:
  533. register_class(cls)