diff options
author | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-09-16 17:14:02 +0400 |
---|---|---|
committer | Brecht Van Lommel <brechtvanlommel@pandora.be> | 2011-09-16 17:14:02 +0400 |
commit | 66b1dfae89cc44953bd51c5da962cab437e76972 (patch) | |
tree | e7679b3e554fb4f1bb6f68775c8619bcde0da822 /source/blender/blenloader/intern/readfile.c | |
parent | 0a5fcf3da3e82fd114095c8c2903d927f15ffc31 (diff) |
Cycles: tweaks to properties and nodes
* Passes renamed to samples
* Camera lens radius renamed to aperature size/blades/rotation
* Glass and fresnel nodes input is now index of refraction
* Glossy and velvet fresnel socket removed
* Mix/add closure node renamed to mix/add shader node
* Blend weight node added for shader mixing weights
There is some version patching code for reading existing files, but it's not
perfect, so shaders may work a bit different.
Diffstat (limited to 'source/blender/blenloader/intern/readfile.c')
-rw-r--r-- | source/blender/blenloader/intern/readfile.c | 59 |
1 files changed, 57 insertions, 2 deletions
diff --git a/source/blender/blenloader/intern/readfile.c b/source/blender/blenloader/intern/readfile.c index f11da97a1a0..44dfdbddfa1 100644 --- a/source/blender/blenloader/intern/readfile.c +++ b/source/blender/blenloader/intern/readfile.c @@ -2103,6 +2103,44 @@ static void lib_nodetree_do_versions_group(bNodeTree *ntree) } } +static void ntree_tmp_cycles_version_patch(bNodeTree *ntree) +{ + bNode *node; + bNodeSocket *sock; + + for(node=ntree->nodes.first; node; node=node->next) { + if(node->type == SH_NODE_FRESNEL) { + node->type = SH_NODE_BLEND_WEIGHT; + + for(sock=node->inputs.first; sock; sock=sock->next) + if(strcmp(sock->name, "Fresnel") == 0) + strcpy(sock->name, "Blend"); + + for(sock=node->outputs.first; sock; sock=sock->next) + if(strcmp(sock->name, "Fac") == 0) + strcpy(sock->name, "Fresnel"); + } + else { + for(sock=node->inputs.first; sock; sock=sock->next) { + if(strcmp(sock->name, "Closure1") == 0) + strcpy(sock->name, "Shader1"); + + if(strcmp(sock->name, "Closure2") == 0) + strcpy(sock->name, "Shader2"); + + if(strcmp(sock->name, "Fresnel") == 0) { + strcpy(sock->name, "IOR"); + sock->ns.vec[0] = 1.0f/MAX2(1.0f - sock->ns.vec[0], 1e-5f); + } + } + + for(sock=node->outputs.first; sock; sock=sock->next) + if(strcmp(sock->name, "Closure") == 0) + strcpy(sock->name, "Shader"); + } + } +} + /* verify types for nodes and groups, all data has to be read */ /* open = 0: appending/linking, open = 1: open new file (need to clean out dynamic * typedefs*/ @@ -2123,6 +2161,7 @@ static void lib_verify_nodetree(Main *main, int UNUSED(open)) /* now create the own typeinfo structs an verify nodes */ /* here we still assume no groups in groups */ for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next) { + ntree_tmp_cycles_version_patch(ntree); ntreeVerifyTypes(ntree); /* internal nodes, no groups! */ } @@ -2142,8 +2181,10 @@ static void lib_verify_nodetree(Main *main, int UNUSED(open)) } /* now verify all types in material trees, groups are set OK now */ for(ma= main->mat.first; ma; ma= ma->id.next) { - if(ma->nodetree) + if(ma->nodetree) { + ntree_tmp_cycles_version_patch(ma->nodetree); lib_nodetree_do_versions_group(ma->nodetree); + } } /* and scene trees */ for(sce= main->scene.first; sce; sce= sce->id.next) { @@ -2155,7 +2196,21 @@ static void lib_verify_nodetree(Main *main, int UNUSED(open)) if(tx->nodetree) lib_nodetree_do_versions_group(tx->nodetree); } - + /* and world trees */ + for(wrld= main->world.first; wrld; wrld= wrld->id.next) { + if(wrld->nodetree) { + ntree_tmp_cycles_version_patch(wrld->nodetree); + lib_nodetree_do_versions_group(wrld->nodetree); + } + } + /* and lamp trees */ + for(la= main->lamp.first; la; la= la->id.next) { + if(la->nodetree) { + ntree_tmp_cycles_version_patch(la->nodetree); + lib_nodetree_do_versions_group(la->nodetree); + } + } + for(ntree= main->nodetree.first; ntree; ntree= ntree->id.next) ntree->flag &= ~NTREE_DO_VERSIONS; } |