[Bf-blender-cvs] [624f3c2] clay-engine: (Clay) Added Render settings: - Default clay settings inside Scene RNA - Material clay settings RNA is here and will be used once we can render multiple meshes
Clément Foucault
noreply at git.blender.org
Thu Jan 5 11:30:24 CET 2017
Commit: 624f3c254f2b70fd78bbf7b562a7c6b156db78b8
Author: Clément Foucault
Date: Thu Jan 5 10:48:22 2017 +0100
Branches: clay-engine
https://developer.blender.org/rB624f3c254f2b70fd78bbf7b562a7c6b156db78b8
(Clay) Added Render settings:
- Default clay settings inside Scene RNA
- Material clay settings RNA is here and will be used once we can render multiple meshes
===================================================================
M release/scripts/startup/bl_ui/properties_material.py
M release/scripts/startup/bl_ui/properties_render.py
M source/blender/draw/engines/clay/clay.c
M source/blender/draw/engines/clay/shaders/clay_frag.glsl
M source/blender/draw/intern/DRW_render.h
M source/blender/draw/intern/draw_manager.c
M source/blender/makesdna/DNA_material_types.h
M source/blender/makesdna/DNA_scene_types.h
M source/blender/makesrna/intern/rna_material.c
M source/blender/makesrna/intern/rna_scene.c
===================================================================
diff --git a/release/scripts/startup/bl_ui/properties_material.py b/release/scripts/startup/bl_ui/properties_material.py
index d916007..408db68 100644
--- a/release/scripts/startup/bl_ui/properties_material.py
+++ b/release/scripts/startup/bl_ui/properties_material.py
@@ -106,7 +106,7 @@ class MaterialButtonsPanel:
class MATERIAL_PT_context_material(MaterialButtonsPanel, Panel):
bl_label = ""
bl_options = {'HIDE_HEADER'}
- COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME'}
+ COMPAT_ENGINES = {'BLENDER_RENDER', 'BLENDER_GAME', 'BLENDER_CLAY'}
@classmethod
def poll(cls, context):
@@ -1052,5 +1052,14 @@ class MATERIAL_PT_custom_props(MaterialButtonsPanel, PropertyPanel, Panel):
_context_path = "material"
_property_type = bpy.types.Material
+
+class MATERIAL_PT_clay_settings(MaterialButtonsPanel, Panel):
+ bl_label = "Matcap"
+ COMPAT_ENGINES = {'BLENDER_CLAY'}
+
+ def draw(self, context):
+ settings = context.material.clay_settings
+ self.layout.template_icon_view(settings, "matcap_icon")
+
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 850606e..3a9c431 100644
--- a/release/scripts/startup/bl_ui/properties_render.py
+++ b/release/scripts/startup/bl_ui/properties_render.py
@@ -584,5 +584,14 @@ 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):
+ settings = context.scene.clay_settings
+ self.layout.template_icon_view(settings, "matcap_icon")
+
+
if __name__ == "__main__": # only for live edit.
bpy.utils.register_module(__name__)
diff --git a/source/blender/draw/engines/clay/clay.c b/source/blender/draw/engines/clay/clay.c
index d35b887..cfc2916 100644
--- a/source/blender/draw/engines/clay/clay.c
+++ b/source/blender/draw/engines/clay/clay.c
@@ -50,6 +50,7 @@ static struct CLAY_data {
/* Matcap textures */
struct GPUTexture *matcap_array;
+ int matcap_id;
/* Ssao */
float dfdyfac[2];
@@ -91,26 +92,85 @@ static void add_icon_to_rect(PreviewImage *prv, float *final_rect, int layer)
false, prv->w[0], prv->h[0], prv->w[0], prv->w[0]);
}
+static void load_matcaps(PreviewImage *prv[24], int nbr)
+{
+ int w = prv[0]->w[0];
+ int h = prv[0]->h[0];
+ float *final_rect = MEM_callocN(sizeof(float) * 4 * w * h * nbr, "Clay Matcap array rect");
+
+ for (int i = 0; i < nbr; ++i) {
+ add_icon_to_rect(prv[i], final_rect, i);
+ BKE_previewimg_free(&prv[i]);
+ }
+
+ data.matcap_array = DRW_texture_create_2D_array(w, h, nbr, final_rect);
+
+ MEM_freeN(final_rect);
+}
+
+static int matcap_to_index(int matcap)
+{
+ if (matcap == ICON_MATCAP_02) return 1;
+ else if (matcap == ICON_MATCAP_03) return 2;
+ else if (matcap == ICON_MATCAP_04) return 3;
+ else if (matcap == ICON_MATCAP_05) return 4;
+ else if (matcap == ICON_MATCAP_06) return 5;
+ else if (matcap == ICON_MATCAP_07) return 6;
+ else if (matcap == ICON_MATCAP_08) return 7;
+ else if (matcap == ICON_MATCAP_09) return 8;
+ else if (matcap == ICON_MATCAP_10) return 9;
+ else if (matcap == ICON_MATCAP_11) return 10;
+ else if (matcap == ICON_MATCAP_12) return 11;
+ else if (matcap == ICON_MATCAP_13) return 12;
+ else if (matcap == ICON_MATCAP_14) return 13;
+ else if (matcap == ICON_MATCAP_15) return 14;
+ else if (matcap == ICON_MATCAP_16) return 15;
+ else if (matcap == ICON_MATCAP_17) return 16;
+ else if (matcap == ICON_MATCAP_18) return 17;
+ else if (matcap == ICON_MATCAP_19) return 18;
+ else if (matcap == ICON_MATCAP_20) return 19;
+ else if (matcap == ICON_MATCAP_21) return 20;
+ else if (matcap == ICON_MATCAP_22) return 21;
+ else if (matcap == ICON_MATCAP_23) return 22;
+ else if (matcap == ICON_MATCAP_24) return 23;
+ return 0;
+}
+
static void clay_init_engine(void)
{
DRWBatch *batch;
/* Create Texture Array */
{
- PreviewImage *prv[2];
- int layers = 2; /* For now only use the 24 internal matcaps */
-
- prv[0] = UI_icon_to_preview(ICON_MATCAP_02);
- float *final_rect = MEM_callocN(sizeof(float) * 4 * prv[0]->w[0] * prv[0]->h[0] * layers, "Clay Matcap array rect");
- add_icon_to_rect(prv[0], final_rect, 0);
-
- prv[1] = UI_icon_to_preview(ICON_MATCAP_03);
- add_icon_to_rect(prv[1], final_rect, 1);
-
- data.matcap_array = DRW_texture_create_2D_array(prv[1]->w[0], prv[1]->h[0], layers, final_rect);
- MEM_freeN(final_rect);
- BKE_previewimg_free(&prv[0]);
- BKE_previewimg_free(&prv[1]);
+ PreviewImage *prv[24]; /* For now use all of the 24 internal matcaps */
+
+ /* TODO only load used matcaps */
+ prv[0] = UI_icon_to_preview(ICON_MATCAP_01);
+ prv[1] = UI_icon_to_preview(ICON_MATCAP_02);
+ prv[2] = UI_icon_to_preview(ICON_MATCAP_03);
+ prv[3] = UI_icon_to_preview(ICON_MATCAP_04);
+ prv[4] = UI_icon_to_preview(ICON_MATCAP_05);
+ prv[5] = UI_icon_to_preview(ICON_MATCAP_06);
+ prv[6] = UI_icon_to_preview(ICON_MATCAP_07);
+ prv[7] = UI_icon_to_preview(ICON_MATCAP_08);
+ prv[8] = UI_icon_to_preview(ICON_MATCAP_09);
+ prv[9] = UI_icon_to_preview(ICON_MATCAP_10);
+ prv[10] = UI_icon_to_preview(ICON_MATCAP_11);
+ prv[11] = UI_icon_to_preview(ICON_MATCAP_12);
+ prv[12] = UI_icon_to_preview(ICON_MATCAP_13);
+ prv[13] = UI_icon_to_preview(ICON_MATCAP_14);
+ prv[14] = UI_icon_to_preview(ICON_MATCAP_15);
+ prv[15] = UI_icon_to_preview(ICON_MATCAP_16);
+ prv[16] = UI_icon_to_preview(ICON_MATCAP_17);
+ prv[17] = UI_icon_to_preview(ICON_MATCAP_18);
+ prv[18] = UI_icon_to_preview(ICON_MATCAP_19);
+ prv[19] = UI_icon_to_preview(ICON_MATCAP_20);
+ prv[20] = UI_icon_to_preview(ICON_MATCAP_21);
+ prv[21] = UI_icon_to_preview(ICON_MATCAP_22);
+ prv[22] = UI_icon_to_preview(ICON_MATCAP_23);
+ prv[23] = UI_icon_to_preview(ICON_MATCAP_24);
+
+ load_matcaps(prv, 24);
}
/* Depth prepass */
@@ -130,6 +190,7 @@ static void clay_init_engine(void)
/* Shading pass */
{
int bindloc = 0;
+ data.matcap_id = 5;
data.clay_sh = DRW_shader_create(datatoc_clay_vert_glsl, NULL, datatoc_clay_frag_glsl, NULL);
data.clay_itf = DRW_interface_create(data.clay_sh);
@@ -137,6 +198,7 @@ static void clay_init_engine(void)
DRW_interface_uniform_ivec2(data.clay_sh, data.clay_itf, "screenres", DRW_viewport_size_get(), 1);
DRW_interface_uniform_buffer(data.clay_sh, data.clay_itf, "depthtex", SCENE_DEPTH, bindloc++);
DRW_interface_uniform_texture(data.clay_sh, data.clay_itf, "matcaps", data.matcap_array, bindloc++);
+ DRW_interface_uniform_int(data.clay_sh, data.clay_itf, "matcap_index", &data.matcap_id, 1);
/* SSAO */
DRW_interface_uniform_mat4(data.clay_sh, data.clay_itf, "WinMatrix", data.winmat);
@@ -241,6 +303,17 @@ static void clay_view_draw(RenderEngine *UNUSED(engine), const struct bContext *
if (!data.clay_sh)
clay_init_engine();
+ /* Settings */
+ EngineDataClay *engine_data = &CTX_data_scene(context)->claydata;
+
+ if (engine_data->matcap_icon < ICON_MATCAP_01 ||
+ engine_data->matcap_icon > ICON_MATCAP_24)
+ {
+ engine_data->matcap_icon = ICON_MATCAP_01;
+ }
+
+ data.matcap_id = matcap_to_index(engine_data->matcap_icon);
+
/* TODO : tag to refresh by the deps graph */
/* ideally only refresh when objects are added/removed */
/* or render properties / materials change */
diff --git a/source/blender/draw/engines/clay/shaders/clay_frag.glsl b/source/blender/draw/engines/clay/shaders/clay_frag.glsl
index 7e684e6..ad65db52 100644
--- a/source/blender/draw/engines/clay/shaders/clay_frag.glsl
+++ b/source/blender/draw/engines/clay/shaders/clay_frag.glsl
@@ -3,6 +3,7 @@ uniform ivec2 screenres;
uniform sampler2D depthtex;
uniform sampler2DArray matcaps;
uniform mat4 WinMatrix;
+uniform int matcap_index;
/* store the view space vectors for the corners of the view frustum here.
* It helps to quickly reconstruct view space vectors by using uv coordinates,
@@ -51,6 +52,6 @@ void main() {
vec3 position = get_view_space_from_depth(uvs, viewvecs[0].xyz, viewvecs[1].xyz, depth);
vec3 normal = calculate_view_space_normal(position);
// vec4 col = texture(matcaps, vec3(uvs, step(0.5, uvs.x)));
- vec4 col = texture(matcaps, vec3(abs(normal.xy * .5 + 0.5), step(0.5, uvs.x)));
+ vec4 col = texture(matcaps, vec3(abs(normal.xy * .5 + 0.5), float(matcap_index)));
fragColor = col;
}
\ No newline at end of file
diff --git a/source/blender/draw/intern/DRW_render.h b/source/blender/draw/intern/DRW_render.h
index 407ba44..49a65cc 100644
--- a/source/blender/draw/intern/DRW_render.h
+++ b/source/blender/draw/intern/DRW_render.h
@@ -38,6 +38,7 @@
#include "BLT_translation.h"
+#include "DNA_material_types.h"
#include "DNA_scene_types.h"
#include "MEM_guardedalloc.h"
diff --git a/source/blender/draw/intern/draw_manager.c b/source/blender/draw/intern/draw_manager.c
index 4fdf61b..78c0497 100644
--- a/source/blender/draw/intern/draw_manager.c
+++ b/source/blender/draw/intern/draw_manager.c
@@ -237,7 +237,7 @@ void DRW_interface_uniform_mat4(struct GPUShader *shader, DRWInterface *interfac
void DRW_get_dfdy_factors(float dfdyfac[2])
{
- GPU_get_dfdy_factors(dfdyfac);
+ GPU_get_dfdy_factors(dfdyfac);
}
/* ****************************************** DRAW ******************************************/
diff --git a/source/blender/makesdna/DNA_material_types.h b/source/blender/makesdna/DNA_material_types.h
index 0c500e3..e078eb8 100644
--- a/source/blender/makesdna/DNA_material_types.h
+++ b/source/blender/makesdna/DNA_material_types.h
@@ -90,6 +90,11 @@ typedef struct TexPaintSlot {
int pad;
} TexPaintSlot;
+typedef struct EngineSettingsClay {
+ short matcap_icon; /* Icon ID */
+ short pad;
+} EngineSettingsClay;
+
typedef struct Material {
ID id;
struct AnimData *adt; /* animation data (must be immediately after id for utilities to use it) */
@@ -203,6 +208,10 @@ typedef struct Material {
struct TexPaintSlot *texpaintslot; /* cached slot for painting. Make sure to recalculate before use
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list