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--source/blender/collada/EffectExporter.cpp9
-rw-r--r--source/blender/collada/EffectExporter.h2
-rw-r--r--source/blender/collada/collada_utils.cpp37
-rw-r--r--source/blender/collada/collada_utils.h4
4 files changed, 22 insertions, 30 deletions
diff --git a/source/blender/collada/EffectExporter.cpp b/source/blender/collada/EffectExporter.cpp
index b2bf09665ca..3494cdbada4 100644
--- a/source/blender/collada/EffectExporter.cpp
+++ b/source/blender/collada/EffectExporter.cpp
@@ -114,11 +114,10 @@ void EffectsExporter::set_diffuse_color(COLLADASW::EffectProfile &ep, Material *
ep.setDiffuse(cot, false, "diffuse");
}
-void EffectsExporter::set_specular_color(COLLADASW::EffectProfile &ep, Material *ma)
+void EffectsExporter::set_reflectivity(COLLADASW::EffectProfile &ep, Material *ma)
{
- bool use_fallback = ep.getShaderType() != COLLADASW::EffectProfile::LAMBERT;
- COLLADASW::ColorOrTexture cot = bc_get_specular_color(ma, use_fallback);
- ep.setSpecular(cot, false, "specular");
+ double reflectivity = bc_get_reflectivity(ma);
+ ep.setReflectivity(reflectivity, false, "specular");
}
void EffectsExporter::set_emission(COLLADASW::EffectProfile &ep, Material *ma)
@@ -182,7 +181,7 @@ void EffectsExporter::operator()(Material *ma, Object *ob)
set_transparency(ep, ma);
set_diffuse_color(ep, ma);
- set_specular_color(ep, ma);
+ set_reflectivity(ep, ma);
set_emission(ep, ma);
get_images(ma, material_image_map);
diff --git a/source/blender/collada/EffectExporter.h b/source/blender/collada/EffectExporter.h
index 1928c5cbdb5..3ba642088a1 100644
--- a/source/blender/collada/EffectExporter.h
+++ b/source/blender/collada/EffectExporter.h
@@ -55,7 +55,7 @@ private:
void set_shader_type(COLLADASW::EffectProfile &ep, Material *ma);
void set_transparency(COLLADASW::EffectProfile &ep, Material *ma);
void set_diffuse_color(COLLADASW::EffectProfile &ep, Material *ma);
- void set_specular_color(COLLADASW::EffectProfile &ep, Material *ma);
+ void set_reflectivity(COLLADASW::EffectProfile &ep, Material *ma);
void set_emission(COLLADASW::EffectProfile &ep, Material *ma);
void get_images(Material *ma, KeyImageMap &uid_image_map);
void create_image_samplers(COLLADASW::EffectProfile &ep, KeyImageMap &uid_image_map, std::string &active_uv);
diff --git a/source/blender/collada/collada_utils.cpp b/source/blender/collada/collada_utils.cpp
index 37a4608fe29..faf00cf11d8 100644
--- a/source/blender/collada/collada_utils.cpp
+++ b/source/blender/collada/collada_utils.cpp
@@ -1362,20 +1362,6 @@ COLLADASW::ColorOrTexture bc_get_base_color(Material *ma)
}
}
-COLLADASW::ColorOrTexture bc_get_specular_color(Material *ma, bool use_fallback)
-{
- bNode *master_shader = bc_get_master_shader(ma);
- if (ma->use_nodes && master_shader) {
- return bc_get_specular_color(master_shader);
- }
- else if (use_fallback) {
- return bc_get_cot(ma->specr * ma->spec, ma->specg * ma->spec, ma->specb * ma->spec, 1.0f);
- }
- else {
- return bc_get_cot(0.0, 0.0, 0.0, 1.0); // no specular
- }
-}
-
COLLADASW::ColorOrTexture bc_get_base_color(bNode *shader)
{
bNodeSocket *socket = nodeFindSocket(shader, SOCK_IN, "Base Color");
@@ -1390,18 +1376,25 @@ COLLADASW::ColorOrTexture bc_get_base_color(bNode *shader)
}
}
-COLLADASW::ColorOrTexture bc_get_specular_color(bNode *shader)
+bool bc_get_reflectivity(bNode *shader, double &reflectivity)
{
bNodeSocket *socket = nodeFindSocket(shader, SOCK_IN, "Specular");
- if (socket)
- {
- bNodeSocketValueRGBA *dcol = (bNodeSocketValueRGBA *)socket->default_value;
- float* col = dcol->value;
- return bc_get_cot(col[0], col[1], col[2], col[3]);
+ if (socket) {
+ bNodeSocketValueFloat *ref = (bNodeSocketValueFloat *)socket->default_value;
+ reflectivity = (double)ref->value;
+ return true;
}
- else {
- return bc_get_cot(0.8, 0.8, 0.8, 1.0); //default white
+ return false;
+}
+
+double bc_get_reflectivity(Material *ma)
+{
+ double reflectivity = ma->spec; // fallback if no socket found
+ bNode *master_shader = bc_get_master_shader(ma);
+ if (ma->use_nodes && master_shader) {
+ bc_get_reflectivity(master_shader, reflectivity);
}
+ return reflectivity;
}
bNode *bc_get_master_shader(Material *ma)
diff --git a/source/blender/collada/collada_utils.h b/source/blender/collada/collada_utils.h
index 32c89cf41e6..b68da4e8154 100644
--- a/source/blender/collada/collada_utils.h
+++ b/source/blender/collada/collada_utils.h
@@ -310,8 +310,8 @@ void bc_add_default_shader(bContext *C, Material *ma);
bNode *bc_get_master_shader(Material *ma);
COLLADASW::ColorOrTexture bc_get_cot(float r, float g, float b, float a);
COLLADASW::ColorOrTexture bc_get_base_color(bNode *shader);
+bool bc_get_reflectivity(bNode *shader, double &reflectivity);
+double bc_get_reflectivity(Material *ma);
COLLADASW::ColorOrTexture bc_get_base_color(Material *ma);
-COLLADASW::ColorOrTexture bc_get_specular_color(bNode *shader);
-COLLADASW::ColorOrTexture bc_get_specular_color(Material *ma, bool use_fallback);
#endif