[Bf-blender-cvs] [83adc54438] blender2.8: Clay-Engine (merge clay-engine)
Clément Foucault
noreply at git.blender.org
Tue Feb 7 11:36:47 CET 2017
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. @@
More information about the Bf-blender-cvs
mailing list