Commit: 83adc544382689217e19564fd5f2dd62160956cb Author: Clément Foucault Date: Tue Feb 7 11:20:15 2017 +0100 Branches: blender2.8 https://developer.blender.org/rB83adc544382689217e19564fd5f2dd62160956cb
Clay-Engine (merge clay-engine) Initial work by Clément Foucault with contributions from Dalai Felinto (mainly per-collection engine settings logic, and depsgraph iterator placeholder). This makes Blender require OpenGL 3.3. Which means Intel graphic card and OSX will break. Disable CLAY_ENGINE in CMake in those cases. This is a prototype render engine intended to help the design of real render engines. This is mainly an engine with enphasis in matcap and ambient occlusion. Implemented Features -------------------- * Clay Render Engine, following the new API, to be used as reference for future engines * A more complete Matcap customization with more options * Per-Collection render engine settings * New Ground Truth AO - not enabled Missing Features ---------------- * Finish object edit mode - Fix shaders to use new matrix - Fix artifacts when edge does off screen - Fix depth issue - Selection sillhouette - Mesh wires - Use mesh normals (for higher quality matcap) - Non-Mesh objects drawing - Widget drawing - Performance issues * Finish mesh edit mode - Derived-Mesh-less edit mode API (mesh_rende.c) * General edit mode - Per-collection edit mode settings * General engines - Per-collection engine settings (they are their, but they still need to be flushed by depsgraph, and used by the drawing code) =================================================================== M CMakeLists.txt M build_files/cmake/macros.cmake M release/scripts/startup/bl_ui/properties_collection.py M release/scripts/startup/bl_ui/properties_render.py M release/scripts/startup/bl_ui/properties_render_layer.py M source/blender/CMakeLists.txt M source/blender/blenkernel/BKE_layer.h M source/blender/blenkernel/intern/layer.c M source/blender/blenkernel/intern/material.c M source/blender/blenkernel/intern/mesh_render.c M source/blender/blenkernel/intern/scene.c M source/blender/blenloader/intern/readfile.c M source/blender/blenloader/intern/versioning_280.c M source/blender/blenloader/intern/writefile.c M source/blender/draw/CMakeLists.txt A source/blender/draw/DRW_engine.h D source/blender/draw/DRW_engines.h A source/blender/draw/engines/clay/clay.c R071 source/blender/draw/DRW_defines.h source/blender/draw/engines/clay/clay.h A source/blender/draw/engines/clay/shaders/clay_frag.glsl A source/blender/draw/engines/clay/shaders/clay_vert.glsl A source/blender/draw/engines/clay/shaders/ssao_alchemy.glsl A source/blender/draw/engines/clay/shaders/ssao_groundtruth.glsl A source/blender/draw/intern/DRW_render.h A source/blender/draw/intern/draw_cache.c A source/blender/draw/intern/draw_cache.h A source/blender/draw/intern/draw_manager.c A source/blender/draw/intern/draw_mode_pass.c A source/blender/draw/intern/draw_mode_pass.h M source/blender/editors/space_view3d/space_view3d.c M source/blender/editors/space_view3d/view3d_draw.c M source/blender/editors/space_view3d/view3d_intern.h M source/blender/gpu/CMakeLists.txt M source/blender/gpu/GPU_extensions.h M source/blender/gpu/GPU_framebuffer.h M source/blender/gpu/GPU_shader.h A source/blender/gpu/GPU_uniformbuffer.h M source/blender/gpu/GPU_viewport.h M source/blender/gpu/gawain/batch.c M source/blender/gpu/gawain/batch.h M source/blender/gpu/intern/gpu_extensions.c M source/blender/gpu/intern/gpu_framebuffer.c M source/blender/gpu/intern/gpu_shader.c M source/blender/gpu/intern/gpu_texture.c A source/blender/gpu/intern/gpu_uniformbuffer.c M source/blender/gpu/intern/gpu_viewport.c A source/blender/gpu/shaders/gpu_shader_3D_groundline_geom.glsl A source/blender/gpu/shaders/gpu_shader_3D_groundline_vert.glsl A source/blender/gpu/shaders/gpu_shader_3D_groundpoint_vert.glsl A source/blender/gpu/shaders/gpu_shader_3D_instance_vert.glsl A source/blender/gpu/shaders/gpu_shader_3D_lamp_vert.glsl M source/blender/makesdna/DNA_layer_types.h M source/blender/makesdna/DNA_material_types.h M source/blender/makesdna/DNA_object_types.h M source/blender/makesdna/DNA_scene_types.h M source/blender/makesrna/RNA_access.h M source/blender/makesrna/intern/CMakeLists.txt M source/blender/makesrna/intern/rna_material.c M source/blender/makesrna/intern/rna_render.c M source/blender/makesrna/intern/rna_scene.c M source/blender/render/CMakeLists.txt M source/blender/render/extern/include/RE_engine.h M source/blender/render/intern/source/external_engine.c M source/blenderplayer/bad_level_call_stubs/stubs.c =================================================================== diff --git a/CMakeLists.txt b/CMakeLists.txt index d52f0c8351..a107dd78fb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -242,6 +242,8 @@ endif() option(WITH_PLAYER "Build Player" OFF) option(WITH_OPENCOLORIO "Enable OpenColorIO color management" ${_init_OPENCOLORIO}) +option(WITH_CLAY_ENGINE "Enable New Clay engine (Breaks Mac and Intel compatibility)" ON) + # Compositor option(WITH_COMPOSITOR "Enable the tile based nodal compositor" ON) diff --git a/build_files/cmake/macros.cmake b/build_files/cmake/macros.cmake index 83ae56636b..fa9c2a28cb 100644 --- a/build_files/cmake/macros.cmake +++ b/build_files/cmake/macros.cmake @@ -598,6 +598,7 @@ function(SETUP_BLENDER_SORTED_LIBS) bf_modifiers bf_bmesh bf_gpu + bf_draw bf_blenloader bf_blenkernel bf_physics diff --git a/release/scripts/startup/bl_ui/properties_collection.py b/release/scripts/startup/bl_ui/properties_collection.py index d67d694aec..88d78f98ef 100644 --- a/release/scripts/startup/bl_ui/properties_collection.py +++ b/release/scripts/startup/bl_ui/properties_collection.py @@ -75,5 +75,54 @@ class COLLECTION_PT_objects(CollectionButtonsPanel, Panel): row.operator("collections.objects_deselect", text="Deselect") +def template_engine_settings(col, settings, name, use_icon_view=False): + icons = { + False: 'ZOOMIN', + True: 'X', + } + + use_name = "{0}_use".format(name) + use = getattr(settings, use_name) + + row = col.row() + col = row.column() + col.active = use + + if use_icon_view: + col.template_icon_view(settings, name) + else: + col.prop(settings, name) + + row.prop(settings, "{}_use".format(name), text="", icon=icons[use], emboss=False) + + +class COLLECTION_PT_clay_settings(CollectionButtonsPanel, Panel): + bl_label = "Render Settings" + COMPAT_ENGINES = {'BLENDER_CLAY'} + + @classmethod + def poll(cls, context): + scene = context.scene + return scene and (scene.render.engine in cls.COMPAT_ENGINES) + + def draw(self, context): + layout = self.layout + + collection = context.layer_collection + settings = collection.get_engine_settings() + + col = layout.column() + template_engine_settings(col, settings, "type") + template_engine_settings(col, settings, "matcap_icon", use_icon_view=True) + template_engine_settings(col, settings, "matcap_rotation") + template_engine_settings(col, settings, "matcap_hue") + template_engine_settings(col, settings, "matcap_saturation") + template_engine_settings(col, settings, "matcap_value") + template_engine_settings(col, settings, "ssao_factor_cavity") + template_engine_settings(col, settings, "ssao_factor_edge") + template_engine_settings(col, settings, "ssao_distance") + template_engine_settings(col, settings, "ssao_attenuation") + + if __name__ == "__main__": # only for live edit. bpy.utils.register_module(__name__) diff --git a/release/scripts/startup/bl_ui/properties_render.py b/release/scripts/startup/bl_ui/properties_render.py index 6d23c07152..90d46a6ee4 100644 --- a/release/scripts/startup/bl_ui/properties_render.py +++ b/release/scripts/startup/bl_ui/properties_render.py @@ -584,5 +584,24 @@ class RENDER_PT_bake(RenderButtonsPanel, Panel): sub.prop(rd, "bake_user_scale", text="User Scale") +class RENDER_PT_clay(RenderButtonsPanel, Panel): + bl_label = "Default Clay" + COMPAT_ENGINES = {'BLENDER_CLAY'} + + def draw(self, context): + layout = self.layout; + settings = context.scene.active_engine_settings + layout.template_icon_view(settings, "matcap_icon") + layout.prop(settings, "matcap_rotation") + layout.prop(settings, "matcap_hue") + layout.prop(settings, "matcap_saturation") + layout.prop(settings, "matcap_value") + layout.prop(settings, "ssao_factor_cavity") + layout.prop(settings, "ssao_factor_edge") + layout.prop(settings, "ssao_distance") + layout.prop(settings, "ssao_attenuation") + layout.prop(settings, "ssao_samples") + + if __name__ == "__main__": # only for live edit. bpy.utils.register_module(__name__) diff --git a/release/scripts/startup/bl_ui/properties_render_layer.py b/release/scripts/startup/bl_ui/properties_render_layer.py index 45c93dd933..2545eadc79 100644 --- a/release/scripts/startup/bl_ui/properties_render_layer.py +++ b/release/scripts/startup/bl_ui/properties_render_layer.py @@ -48,7 +48,7 @@ class RENDERLAYER_UL_renderlayers(UIList): class RENDERLAYER_PT_layers(RenderLayerButtonsPanel, Panel): bl_label = "Layer List" bl_options = {'HIDE_HEADER'} - COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'} + COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'} def draw(self, context): layout = self.layout diff --git a/source/blender/CMakeLists.txt b/source/blender/CMakeLists.txt index 6f2b78e084..47ebed8f79 100644 --- a/source/blender/CMakeLists.txt +++ b/source/blender/CMakeLists.txt @@ -100,6 +100,7 @@ add_subdirectory(windowmanager) add_subdirectory(blenkernel) add_subdirectory(blenlib) add_subdirectory(bmesh) +add_subdirectory(draw) add_subdirectory(render) add_subdirectory(blenfont) add_subdirectory(blentranslation) diff --git a/source/blender/blenkernel/BKE_layer.h b/source/blender/blenkernel/BKE_layer.h index 850c63f535..de8a577d27 100644 --- a/source/blender/blenkernel/BKE_layer.h +++ b/source/blender/blenkernel/BKE_layer.h @@ -39,13 +39,17 @@ extern "C" { #define TODO_LAYER_CONTEXT /* get/set current (context) SceneLayer */ #define TODO_LAYER_BASE /* BaseLegacy to Base related TODO */ #define TODO_LAYER_OPERATORS /* collection mamanger and property panel operators */ +#define TODO_LAYER_DEPSGRAPH /* placeholder for real Depsgraph fix */ #define TODO_LAYER /* generic todo */ -struct Base; -struct ID; +struct CollectionEngineSettings; struct LayerCollection; +struct ID; +struct ListBase; struct Main; struct Object; +struct Base; +struct RenderEngine; struct Scene; struct SceneCollection; struct SceneLayer; @@ -66,6 +70,9 @@ void BKE_scene_layer_base_deselect_all(struct SceneLayer *sl); void BKE_scene_layer_base_select(struct SceneLayer *sl, struct Base *selbase); void BKE_scene_layer_base_flag_recalculate(struct SceneLayer *sl); +void BKE_scene_layer_engine_settings_recalculate(struct SceneLayer *sl); +void BKE_scene_layer_engine_settings_update(struct SceneLayer *sl); + void BKE_layer_collection_free(struct SceneLayer *sl, struct LayerCollection *lc); struct LayerCollection *BKE_layer_collection_active(struct SceneLayer *sl); @@ -91,6 +98,24 @@ void BKE_layer_sync_object_unlink(struct Scene *scene, struct SceneCollection *s void BKE_collection_override_datablock_add(struct LayerCollection *lc, const char *data_path, struct ID *id); +/* engine settings */ +typedef void (*CollectionEngineSettingsCB)(struct RenderEngine *engine, struct CollectionEngineSettings *ces); +struct CollectionEngineSettings *BKE_layer_collection_engine_get(struct LayerCollection *lc, const char *engine_name); +void BKE_layer_collection_engine_settings_callback_register(struct Main *bmain, const char *engine_name, CollectionEngineSettingsCB func); +void BKE_layer_collection_engine_settings_callback_free(void); +void BKE_layer_collection_engine_settings_create(struct ListBase *lb, const char *engine_name); +void BKE_layer_collection_engine_settings_free(struct ListBase *lb); + +void BKE_collection_engine_property_add_float(struct CollectionEngineSettings *ces, const char *name, float value); +void BKE_collection_engine_property_add_int(struct CollectionEngineSettings *ces, const char *name, int value); +struct CollectionEngineProperty *BKE_collection_engine_property_get(struct CollectionEngineSettings *ces, const char *name); +int BKE_collection_engine_property_value_get_int(struct CollectionEngineSettings *ces, const char *name); +float BKE_collection_engine_property_value_get_float(struct CollectionEngineSettings *ces, const char *name); +void BKE_collection_engine_property_value_set_int(struct CollectionEngineSettings *ces, const char *name, int value); +void BKE_collection_engine_property_value_set_float(struct CollectionEngineSettings *ces, const char *name, float value); +bool BKE_collection_engine_property_use_get(struct CollectionEngineSettings *ces, const char *name); +void BKE_collection_engine_property_use_set(struct CollectionEngineSettings *ces, const char *name, bool value); + /* iterators */ void BKE_selected_objects_Iterator_begin(Iterator *iter, void *data_in); @@ -172,6 +197,9 @@ void BKE_visible_bases_Iterator_end(Iterator *iter); /* temporary hacky solution waiting for final depsgraph evaluation */ #define DEG_OBJECT_ITER(sl_, ob_) \ { \ + /* temporary solution, waiting for depsgraph update */ \ + BKE_scene_layer_engine_settings_update(sl); \ + \ /* flush all the data to objects*/ \ Base *base_; \ for (base_ = sl->object_bases.first; base_; base_ = base_->next) { \ diff --git a/source/blender/blenkernel/intern/layer.c b/source/blender/blenkernel/intern/layer.c index cec1d70463..28c5e9aff5 100644 --- a/source/blender/blenkernel/intern/layer.c +++ b/source/blender/blenkernel/intern/layer.c @@ -45,9 +45,12 @@ #include "MEM_guardedalloc.h" /* prototype */ +struct CollectionEngineSettingsCB_Type; static void layer_collection_free(SceneLayer *sl, LayerCollection *lc); static LayerCollection *layer_collection_add(SceneLayer *sl, ListBase *lb, SceneCollection *sc); static LayerCollection *find_layer_collection_by_scene_collection(LayerCollection *lc, const SceneCollection *sc); +static void collection_engine_settings_create(ListBase *lb, struct CollectionEngineSettingsCB_Type *ces_type); +static void layer_col @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs