Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--intern/cycles/blender/addon/ui.py13
-rw-r--r--intern/cycles/blender/blender_object.cpp12
-rw-r--r--intern/cycles/kernel/kernel_emission.h13
-rw-r--r--intern/cycles/kernel/kernel_light.h8
-rw-r--r--intern/cycles/kernel/osl/emissive.cpp4
-rw-r--r--intern/cycles/kernel/svm/emissive.h4
-rw-r--r--source/blender/blenkernel/BKE_blender.h2
-rw-r--r--source/blender/blenloader/intern/readfile.c49
-rw-r--r--source/blender/editors/space_node/node_edit.c10
-rw-r--r--source/blender/nodes/shader/nodes/node_shader_emission.c2
10 files changed, 82 insertions, 35 deletions
diff --git a/intern/cycles/blender/addon/ui.py b/intern/cycles/blender/addon/ui.py
index 6f31732aa1f..d8f776b0114 100644
--- a/intern/cycles/blender/addon/ui.py
+++ b/intern/cycles/blender/addon/ui.py
@@ -366,8 +366,7 @@ class CyclesLamp_PT_lamp(CyclesButtonsPanel, Panel):
@classmethod
def poll(cls, context):
- return False
- #return context.lamp and CyclesButtonsPanel.poll(context)
+ return context.lamp and CyclesButtonsPanel.poll(context)
def draw(self, context):
layout = self.layout
@@ -505,17 +504,13 @@ class CyclesMaterial_PT_settings(CyclesButtonsPanel, Panel):
mat = context.material
cmat = mat.cycles
- layout.prop(mat, "diffuse_color", text="Viewport Color")
-
- """
split = layout.split()
-
+
col = split.column()
- col.prop(cmat, "sample_as_light")
+ col.prop(mat, "diffuse_color", text="Viewport Color")
col = split.column()
- col.prop(cmat, "homogeneous_volume")
- """
+ col.prop(cmat, "sample_as_light")
class CyclesTexture_PT_context(CyclesButtonsPanel, Panel):
bl_label = ""
diff --git a/intern/cycles/blender/blender_object.cpp b/intern/cycles/blender/blender_object.cpp
index de41484975d..1095a3ee026 100644
--- a/intern/cycles/blender/blender_object.cpp
+++ b/intern/cycles/blender/blender_object.cpp
@@ -91,14 +91,11 @@ void BlenderSync::sync_light(BL::Object b_parent, int b_index, BL::Object b_ob,
BL::Lamp b_lamp(b_ob.data());
/* type */
-#if 0
switch(b_lamp.type()) {
case BL::Lamp::type_POINT: {
BL::PointLamp b_point_lamp(b_lamp);
light->size = b_point_lamp.shadow_soft_size();
-#endif
light->type = LIGHT_POINT;
-#if 0
break;
}
case BL::Lamp::type_SPOT: {
@@ -132,11 +129,10 @@ void BlenderSync::sync_light(BL::Object b_parent, int b_index, BL::Object b_ob,
break;
}
}
-#endif
- /* location */
+ /* location and (inverted!) direction */
light->co = make_float3(tfm.x.w, tfm.y.w, tfm.z.w);
- light->dir = make_float3(tfm.x.z, tfm.y.z, tfm.z.z);
+ light->dir = -make_float3(tfm.x.z, tfm.y.z, tfm.z.z);
/* shader */
vector<uint> used_shaders;
@@ -149,8 +145,8 @@ void BlenderSync::sync_light(BL::Object b_parent, int b_index, BL::Object b_ob,
light->shader = used_shaders[0];
/* shadow */
- //PointerRNA clamp = RNA_pointer_get(&b_lamp.ptr, "cycles");
- //light->cast_shadow = get_boolean(clamp, "cast_shadow");
+ PointerRNA clamp = RNA_pointer_get(&b_lamp.ptr, "cycles");
+ light->cast_shadow = get_boolean(clamp, "cast_shadow");
/* tag */
light->tag_update(scene);
diff --git a/intern/cycles/kernel/kernel_emission.h b/intern/cycles/kernel/kernel_emission.h
index 13c48464088..22970f66669 100644
--- a/intern/cycles/kernel/kernel_emission.h
+++ b/intern/cycles/kernel/kernel_emission.h
@@ -88,14 +88,11 @@ __device bool direct_emission(KernelGlobals *kg, ShaderData *sd, int lindex,
float mis_weight = power_heuristic(pdf, bsdf_pdf);
*eval *= mis_weight;
}
- else if(!(ls.shader & SHADER_AREA_LIGHT)) {
- /* ensure point light works in Watts, this should be handled
- * elsewhere but for now together with the diffuse emission
- * closure it works out to the right value */
- *eval *= 0.25f;
-
- /* XXX verify with other light types */
- }
+ /* todo: clean up these weights */
+ else if(ls.shader & SHADER_AREA_LIGHT)
+ *eval *= 0.25f; /* area lamp */
+ else if(ls.t != FLT_MAX)
+ *eval *= 0.25f*M_1_PI_F; /* point lamp */
if(ls.shader & SHADER_CAST_SHADOW) {
/* setup ray */
diff --git a/intern/cycles/kernel/kernel_light.h b/intern/cycles/kernel/kernel_light.h
index 68d08a2655f..d5d47b28d59 100644
--- a/intern/cycles/kernel/kernel_light.h
+++ b/intern/cycles/kernel/kernel_light.h
@@ -75,8 +75,8 @@ __device void regular_light_sample(KernelGlobals *kg, int point,
D = distant_light_sample(D, size, randu, randv);
ls->P = D;
- ls->Ng = -D;
- ls->D = D;
+ ls->Ng = D;
+ ls->D = -D;
ls->t = FLT_MAX;
}
else {
@@ -120,9 +120,9 @@ __device float regular_light_pdf(KernelGlobals *kg,
if(t == FLT_MAX)
return pdf;
- float cos_pi = fabsf(dot(Ng, I));
+ float cos_pi = dot(Ng, I);
- if(cos_pi == 0.0f)
+ if(cos_pi <= 0.0f)
return 0.0f;
return t*t*pdf/cos_pi;
diff --git a/intern/cycles/kernel/osl/emissive.cpp b/intern/cycles/kernel/osl/emissive.cpp
index 28d3c73e59b..2d2d6e1fdde 100644
--- a/intern/cycles/kernel/osl/emissive.cpp
+++ b/intern/cycles/kernel/osl/emissive.cpp
@@ -64,7 +64,7 @@ public:
Color3 eval (const Vec3 &Ng, const Vec3 &omega_out) const
{
float cosNO = fabsf(Ng.dot(omega_out));
- float res = cosNO > 0 ? 1.0f / float(M_PI) : 0.0f;
+ float res = cosNO > 0 ? 1.0f: 0.0f;
return Color3(res, res, res);
}
@@ -91,7 +91,7 @@ public:
const Vec3 &omega_out) const
{
float cosNO = Ng.dot(omega_out);
- return cosNO > 0 ? 1.0f / float(M_PI) : 0.0f;
+ return cosNO > 0 ? 1.0f: 0.0f;
}
};
diff --git a/intern/cycles/kernel/svm/emissive.h b/intern/cycles/kernel/svm/emissive.h
index 8bd31751fb3..e3f99e9b729 100644
--- a/intern/cycles/kernel/svm/emissive.h
+++ b/intern/cycles/kernel/svm/emissive.h
@@ -37,7 +37,7 @@ CCL_NAMESPACE_BEGIN
__device float3 emissive_eval(const float3 Ng, const float3 I)
{
float cosNO = fabsf(dot(Ng, I));
- float res = (cosNO > 0.0f)? M_1_PI_F: 0.0f;
+ float res = (cosNO > 0.0f)? 1.0f: 0.0f;
return make_float3(res, res, res);
}
@@ -48,7 +48,7 @@ __device float3 emissive_eval(const float3 Ng, const float3 I)
__device float emissive_pdf(const float3 Ng, const float3 I)
{
float cosNO = fabsf(dot(Ng, I));
- return (cosNO > 0.0f)? M_1_PI_F: 0.0f;
+ return (cosNO > 0.0f)? 1.0f: 0.0f;
}
__device float3 svm_emissive_eval(ShaderData *sd, ShaderClosure *sc)
diff --git a/source/blender/blenkernel/BKE_blender.h b/source/blender/blenkernel/BKE_blender.h
index f6910fede8e..34a9321284d 100644
--- a/source/blender/blenkernel/BKE_blender.h
+++ b/source/blender/blenkernel/BKE_blender.h
@@ -44,7 +44,7 @@ extern "C" {
* and keep comment above the defines.
* Use STRINGIFY() rather than defining with quotes */
#define BLENDER_VERSION 259
-#define BLENDER_SUBVERSION 4
+#define BLENDER_SUBVERSION 5
#define BLENDER_MINVERSION 250
#define BLENDER_MINSUBVERSION 0
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c
index 1ed23361581..fb1beec1cbf 100644
--- a/source/blender/blenloader/intern/readfile.c
+++ b/source/blender/blenloader/intern/readfile.c
@@ -2057,6 +2057,30 @@ static void lib_link_nodetree(FileData *fd, Main *main)
}
}
+static void ntree_tmp_cycles_emission_version_patch(FileData *fd, Library *lib, bNodeTree *ntree)
+{
+ bNode *node;
+ bNodeSocket *sock;
+ bNodeSocketValueFloat *valfloat;
+
+ for(node=ntree->nodes.first; node; node=node->next) {
+ if(node->type == SH_NODE_EMISSION) {
+ for(sock=node->inputs.first; sock; sock=sock->next) {
+ if(strcmp(sock->name, "Strength") == 0) {
+ valfloat= sock->default_value;
+ valfloat->value /= M_PI;
+ }
+ }
+ }
+ else if(node->type == NODE_GROUP) {
+ bNodeTree *ntree= newlibadr(fd, lib, node->id);
+
+ if(ntree)
+ ntree_tmp_cycles_emission_version_patch(fd, lib, ntree);
+ }
+ }
+}
+
static void ntree_tmp_cycles_version_patch(bNodeTree *ntree)
{
bNode *node;
@@ -12296,6 +12320,31 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
}
+ if(main->versionfile < 259 || (main->versionfile == 259 && main->subversionfile < 5)) {
+ Scene *sce;
+ Base *base;
+ Material *ma;
+
+ /* compatibility tweak */
+ for(sce = main->scene.first; sce; sce = sce->id.next) {
+ if(strcmp(sce->r.engine, "CYCLES") == 0) {
+ for(base = sce->base.first; base; base=base->next) {
+ Object *ob= newlibadr(fd, lib, base->object);
+
+ if(ob && ob->type == OB_LAMP) {
+ Lamp *la= newlibadr(fd, lib, ob->data);
+ if(la)
+ la->area_size= 0.0f;
+ }
+ }
+ }
+ }
+
+ for(ma = main->mat.first; ma; ma= ma->id.next)
+ if(ma->nodetree)
+ ntree_tmp_cycles_emission_version_patch(fd, lib, ma->nodetree);
+ }
+
/* put compatibility code here until next subversion bump */
{
}
diff --git a/source/blender/editors/space_node/node_edit.c b/source/blender/editors/space_node/node_edit.c
index 2b0ce72376f..82b3da675ba 100644
--- a/source/blender/editors/space_node/node_edit.c
+++ b/source/blender/editors/space_node/node_edit.c
@@ -331,6 +331,16 @@ void ED_node_shader_default(Scene *scene, ID *id)
fromsock= in->outputs.first;
tosock= out->inputs.first;
nodeAddLink(ntree, in, fromsock, out, tosock);
+
+ if(GS(id->name) == ID_LA) {
+ Lamp *la= (Lamp*)id;
+
+ if(la->type == LA_LOCAL || la->type == LA_SPOT || la->type == LA_AREA) {
+ bNodeSocket *sock= in->inputs.last;
+ bNodeSocketValueFloat *default_value= sock->default_value;
+ default_value->value= 100.0f;
+ }
+ }
ntreeUpdateTree(ntree);
}
diff --git a/source/blender/nodes/shader/nodes/node_shader_emission.c b/source/blender/nodes/shader/nodes/node_shader_emission.c
index 32e17d772d7..78644d5317d 100644
--- a/source/blender/nodes/shader/nodes/node_shader_emission.c
+++ b/source/blender/nodes/shader/nodes/node_shader_emission.c
@@ -33,7 +33,7 @@
static bNodeSocketTemplate sh_node_emission_in[]= {
{ SOCK_RGBA, 1, "Color", 0.8f, 0.8f, 0.8f, 1.0f, 0.0f, 1.0f},
- { SOCK_FLOAT, 1, "Strength", 30.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1000000.0f},
+ { SOCK_FLOAT, 1, "Strength", 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1000000.0f},
{ -1, 0, "" }
};