[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [56980] trunk/blender: Cycles / Toon BSDF:

Thomas Dinges blender at dingto.org
Thu May 23 19:45:20 CEST 2013


Revision: 56980
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=56980
Author:   dingto
Date:     2013-05-23 17:45:20 +0000 (Thu, 23 May 2013)
Log Message:
-----------
Cycles / Toon BSDF:
* Added a toon bsdf node to Cycles. This was already available as OSL only closure, but is now available inside the SVM backed as well, for CPU and GPU rendering. 
* There are 2 variations available, diffuse and glossy toon, selectable via a menu inside the node. 

Documentation:
http://wiki.blender.org/index.php/Doc:2.6/Manual/Render/Cycles/Nodes/Shaders#Toon

Example render & blend file:
http://www.pasteall.org/pic/show.php?id=51970
http://www.pasteall.org/blend/21579

Modified Paths:
--------------
    trunk/blender/intern/cycles/blender/blender_shader.cpp
    trunk/blender/intern/cycles/kernel/closure/bsdf.h
    trunk/blender/intern/cycles/kernel/closure/bsdf_toon.h
    trunk/blender/intern/cycles/kernel/osl/CMakeLists.txt
    trunk/blender/intern/cycles/kernel/osl/osl_closures.cpp
    trunk/blender/intern/cycles/kernel/osl/osl_closures.h
    trunk/blender/intern/cycles/kernel/shaders/CMakeLists.txt
    trunk/blender/intern/cycles/kernel/shaders/stdosl.h
    trunk/blender/intern/cycles/kernel/svm/svm_closure.h
    trunk/blender/intern/cycles/kernel/svm/svm_types.h
    trunk/blender/intern/cycles/render/nodes.cpp
    trunk/blender/intern/cycles/render/nodes.h
    trunk/blender/release/scripts/startup/nodeitems_builtins.py
    trunk/blender/source/blender/blenkernel/BKE_node.h
    trunk/blender/source/blender/blenkernel/intern/node.c
    trunk/blender/source/blender/editors/space_node/drawnode.c
    trunk/blender/source/blender/gpu/shaders/gpu_shader_material.glsl
    trunk/blender/source/blender/makesdna/DNA_node_types.h
    trunk/blender/source/blender/makesrna/intern/rna_nodetree.c
    trunk/blender/source/blender/nodes/CMakeLists.txt
    trunk/blender/source/blender/nodes/NOD_shader.h
    trunk/blender/source/blender/nodes/NOD_static_types.h

Added Paths:
-----------
    trunk/blender/intern/cycles/kernel/shaders/node_toon_bsdf.osl
    trunk/blender/source/blender/nodes/shader/nodes/node_shader_bsdf_toon.c

Removed Paths:
-------------
    trunk/blender/intern/cycles/kernel/osl/bsdf_toon.cpp
    trunk/blender/release/scripts/templates_osl/toon_closure.osl

Modified: trunk/blender/intern/cycles/blender/blender_shader.cpp
===================================================================
--- trunk/blender/intern/cycles/blender/blender_shader.cpp	2013-05-23 16:45:12 UTC (rev 56979)
+++ trunk/blender/intern/cycles/blender/blender_shader.cpp	2013-05-23 17:45:20 UTC (rev 56980)
@@ -354,6 +354,19 @@
 		}
 		node = refraction;
 	}
+	else if (b_node.is_a(&RNA_ShaderNodeBsdfToon)) {
+		BL::ShaderNodeBsdfToon b_toon_node(b_node);
+		ToonBsdfNode *toon = new ToonBsdfNode();
+		switch(b_toon_node.component()) {
+			case BL::ShaderNodeBsdfToon::component_DIFFUSE:
+				toon->component = ustring("Diffuse");
+				break;
+			case BL::ShaderNodeBsdfToon::component_GLOSSY:
+				toon->component = ustring("Glossy");
+				break;
+		}
+		node = toon;
+	}
 	else if (b_node.is_a(&RNA_ShaderNodeBsdfTranslucent)) {
 		node = new TranslucentBsdfNode();
 	}

Modified: trunk/blender/intern/cycles/kernel/closure/bsdf.h
===================================================================
--- trunk/blender/intern/cycles/kernel/closure/bsdf.h	2013-05-23 16:45:12 UTC (rev 56979)
+++ trunk/blender/intern/cycles/kernel/closure/bsdf.h	2013-05-23 17:45:20 UTC (rev 56980)
@@ -29,6 +29,7 @@
 #include "../closure/bsdf_ward.h"
 #endif
 #include "../closure/bsdf_westin.h"
+#include "../closure/bsdf_toon.h"
 #include "../closure/bssrdf.h"
 
 CCL_NAMESPACE_BEGIN
@@ -96,6 +97,14 @@
 			label = bsdf_ashikhmin_velvet_sample(sc, sd->Ng, sd->I, sd->dI.dx, sd->dI.dy, randu, randv,
 				eval, omega_in, &domega_in->dx, &domega_in->dy, pdf);
 			break;
+		case CLOSURE_BSDF_DIFFUSE_TOON_ID:
+			label = bsdf_diffuse_toon_sample(sc, sd->Ng, sd->I, sd->dI.dx, sd->dI.dy, randu, randv,
+				eval, omega_in, &domega_in->dx, &domega_in->dy, pdf);
+			break;
+		case CLOSURE_BSDF_GLOSSY_TOON_ID:
+			label = bsdf_glossy_toon_sample(sc, sd->Ng, sd->I, sd->dI.dx, sd->dI.dy, randu, randv,
+				eval, omega_in, &domega_in->dx, &domega_in->dy, pdf);
+			break;
 		case CLOSURE_BSDF_WESTIN_BACKSCATTER_ID:
 			label = bsdf_westin_backscatter_sample(sc, sd->Ng, sd->I, sd->dI.dx, sd->dI.dy, randu, randv,
 				eval, omega_in, &domega_in->dx, &domega_in->dy, pdf);
@@ -165,6 +174,12 @@
 			case CLOSURE_BSDF_ASHIKHMIN_VELVET_ID:
 				eval = bsdf_ashikhmin_velvet_eval_reflect(sc, sd->I, omega_in, pdf);
 				break;
+			case CLOSURE_BSDF_DIFFUSE_TOON_ID:
+				eval = bsdf_diffuse_toon_eval_reflect(sc, sd->I, omega_in, pdf);
+				break;
+			case CLOSURE_BSDF_GLOSSY_TOON_ID:
+				eval = bsdf_glossy_toon_eval_reflect(sc, sd->I, omega_in, pdf);
+				break;
 			case CLOSURE_BSDF_WESTIN_BACKSCATTER_ID:
 				eval = bsdf_westin_backscatter_eval_reflect(sc, sd->I, omega_in, pdf);
 				break;
@@ -214,6 +229,12 @@
 			case CLOSURE_BSDF_ASHIKHMIN_VELVET_ID:
 				eval = bsdf_ashikhmin_velvet_eval_transmit(sc, sd->I, omega_in, pdf);
 				break;
+			case CLOSURE_BSDF_DIFFUSE_TOON_ID:
+				eval = bsdf_diffuse_toon_eval_transmit(sc, sd->I, omega_in, pdf);
+				break;
+			case CLOSURE_BSDF_GLOSSY_TOON_ID:
+				eval = bsdf_glossy_toon_eval_transmit(sc, sd->I, omega_in, pdf);
+				break;
 			case CLOSURE_BSDF_WESTIN_BACKSCATTER_ID:
 				eval = bsdf_westin_backscatter_eval_transmit(sc, sd->I, omega_in, pdf);
 				break;
@@ -281,6 +302,12 @@
 		case CLOSURE_BSDF_ASHIKHMIN_VELVET_ID:
 			bsdf_ashikhmin_velvet_blur(sc, roughness);
 			break;
+		case CLOSURE_BSDF_DIFFUSE_TOON_ID:
+			bsdf_diffuse_toon_blur(sc, roughness);
+			break;
+		case CLOSURE_BSDF_GLOSSY_TOON_ID:
+			bsdf_glossy_toon_blur(sc, roughness);
+			break;
 		case CLOSURE_BSDF_WESTIN_BACKSCATTER_ID:
 			bsdf_westin_backscatter_blur(sc, roughness);
 			break;

Modified: trunk/blender/intern/cycles/kernel/closure/bsdf_toon.h
===================================================================
--- trunk/blender/intern/cycles/kernel/closure/bsdf_toon.h	2013-05-23 16:45:12 UTC (rev 56979)
+++ trunk/blender/intern/cycles/kernel/closure/bsdf_toon.h	2013-05-23 17:45:20 UTC (rev 56980)
@@ -119,22 +119,22 @@
 
 }
 
-/* SPECULAR TOON */
+/* GLOSSY TOON */
 
-__device int bsdf_specular_toon_setup(ShaderClosure *sc)
+__device int bsdf_glossy_toon_setup(ShaderClosure *sc)
 {
-	sc->type = CLOSURE_BSDF_SPECULAR_TOON_ID;
+	sc->type = CLOSURE_BSDF_GLOSSY_TOON_ID;
 	sc->data0 = clamp(sc->data0, 0.0f, 1.0f);
 	sc->data1 = clamp(sc->data1, 0.0f, 1.0f);
 
 	return SD_BSDF|SD_BSDF_HAS_EVAL;
 }
 
-__device void bsdf_specular_toon_blur(ShaderClosure *sc, float roughness)
+__device void bsdf_glossy_toon_blur(ShaderClosure *sc, float roughness)
 {
 }
 
-__device float3 bsdf_specular_toon_eval_reflect(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
+__device float3 bsdf_glossy_toon_eval_reflect(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
 {
 	float max_angle = sc->data0*M_PI_2_F;
 	float smooth = sc->data1*M_PI_2_F;
@@ -158,12 +158,12 @@
 	return make_float3(0.0f, 0.0f, 0.0f);
 }
 
-__device float3 bsdf_specular_toon_eval_transmit(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
+__device float3 bsdf_glossy_toon_eval_transmit(const ShaderClosure *sc, const float3 I, const float3 omega_in, float *pdf)
 {
 	return make_float3(0.0f, 0.0f, 0.0f);
 }
 
-__device int bsdf_specular_toon_sample(const ShaderClosure *sc, float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
+__device int bsdf_glossy_toon_sample(const ShaderClosure *sc, float3 Ng, float3 I, float3 dIdx, float3 dIdy, float randu, float randv, float3 *eval, float3 *omega_in, float3 *domega_in_dx, float3 *domega_in_dy, float *pdf)
 {
 	float max_angle = sc->data0*M_PI_2_F;
 	float smooth = sc->data1*M_PI_2_F;

Modified: trunk/blender/intern/cycles/kernel/osl/CMakeLists.txt
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/CMakeLists.txt	2013-05-23 16:45:12 UTC (rev 56979)
+++ trunk/blender/intern/cycles/kernel/osl/CMakeLists.txt	2013-05-23 17:45:20 UTC (rev 56980)
@@ -16,7 +16,6 @@
 	background.cpp
 	bsdf_diffuse_ramp.cpp
 	bsdf_phong_ramp.cpp
-	bsdf_toon.cpp
 	emissive.cpp
 	osl_bssrdf.cpp
 	osl_closures.cpp

Deleted: trunk/blender/intern/cycles/kernel/osl/bsdf_toon.cpp
===================================================================
--- trunk/blender/intern/cycles/kernel/osl/bsdf_toon.cpp	2013-05-23 16:45:12 UTC (rev 56979)
+++ trunk/blender/intern/cycles/kernel/osl/bsdf_toon.cpp	2013-05-23 17:45:20 UTC (rev 56980)
@@ -1,179 +0,0 @@
-/*
- * Adapted from Open Shading Language with this license:
- *
- * Copyright (c) 2009-2010 Sony Pictures Imageworks Inc., et al.
- * All Rights Reserved.
- *
- * Modifications Copyright 2011, Blender Foundation.
- * 
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- * * Redistributions of source code must retain the above copyright
- *   notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- *   notice, this list of conditions and the following disclaimer in the
- *   documentation and/or other materials provided with the distribution.
- * * Neither the name of Sony Pictures Imageworks nor the names of its
- *   contributors may be used to endorse or promote products derived from
- *   this software without specific prior written permission.
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <OpenImageIO/fmath.h>
-
-#include <OSL/genclosure.h>
-
-#include "osl_closures.h"
-
-#include "kernel_types.h"
-#include "kernel_montecarlo.h"
-#include "closure/bsdf_toon.h"
-
-CCL_NAMESPACE_BEGIN
-
-using namespace OSL;
-
-/* DIFFUSE TOON */
-
-class DiffuseToonClosure : public CBSDFClosure {
-public:
-	DiffuseToonClosure() : CBSDFClosure(LABEL_DIFFUSE) {}
-
-	size_t memsize() const { return sizeof(*this); }
-	const char *name() const { return "diffuse_toon"; }
-
-	void setup()
-	{
-		sc.prim = this;
-		m_shaderdata_flag = bsdf_diffuse_toon_setup(&sc);
-	}
-
-	bool mergeable(const ClosurePrimitive *other) const
-	{
-		return false;
-	}
-
-	void blur(float roughness)
-	{
-		bsdf_diffuse_toon_blur(&sc, roughness);
-	}
-
-	void print_on(std::ostream &out) const
-	{
-		out << name() << " ((" << sc.N[0] << ", " << sc.N[1] << ", " << sc.N[2] << "))";
-	}
-
-	float3 eval_reflect(const float3 &omega_out, const float3 &omega_in, float& pdf) const
-	{
-		return bsdf_diffuse_toon_eval_reflect(&sc, omega_out, omega_in, &pdf);
-	}
-
-	float3 eval_transmit(const float3 &omega_out, const float3 &omega_in, float& pdf) const
-	{
-		return bsdf_diffuse_toon_eval_transmit(&sc, omega_out, omega_in, &pdf);
-	}
-
-	int sample(const float3 &Ng,
-	           const float3 &omega_out, const float3 &domega_out_dx, const float3 &domega_out_dy,
-	           float randu, float randv,
-	           float3 &omega_in, float3 &domega_in_dx, float3 &domega_in_dy,
-	           float &pdf, float3 &eval) const
-	{
-		return bsdf_diffuse_toon_sample(&sc, Ng, omega_out, domega_out_dx, domega_out_dy,
-			randu, randv, &eval, &omega_in, &domega_in_dx, &domega_in_dy, &pdf);
-	}
-};
-
-ClosureParam *closure_bsdf_diffuse_toon_params()
-{
-	static ClosureParam params[] = {
-		CLOSURE_FLOAT3_PARAM(DiffuseToonClosure, sc.N),
-		CLOSURE_FLOAT_PARAM(DiffuseToonClosure, sc.data0),
-		CLOSURE_FLOAT_PARAM(DiffuseToonClosure, sc.data1),
-		CLOSURE_STRING_KEYPARAM("label"),
-	    CLOSURE_FINISH_PARAM(DiffuseToonClosure)
-	};
-	return params;
-}
-
-CLOSURE_PREPARE(closure_bsdf_diffuse_toon_prepare, DiffuseToonClosure)
-
-/* SPECULAR TOON */
-
-class SpecularToonClosure : public CBSDFClosure {
-public:

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list