Introduction In this chapter we'll talk about different types of BRDFs which V-Ray supports. We'll cover BRDFBlinn, BRDFWard, BRDFGGX, BRDFCookTorrance, BRDFGlass and BRDFMirror. As we've talked in Chapter 1 BRDF stands for Bidirectional reflectance distribution function. Generally these plugins are attached to MtlSingleBRDF (or one of the more advanced Mtl*BRDF plugins). They implement different types of shading and take different colors and textures as parameters. When shading a point from the object, we sample a point on the light in interest and trace the ray through them. After calculating the amount of light coming from this light in the point, the BRDF comes in place and tells us how this light is ditributed (reflected) in various directions.
BRDFBlinn This shader implements the Blinn shading algorithm .
Parameters color - Basic color of the surface transparency - Transparency value trace_depth - The maximum reflection depth (-1 is controlled by the global options) affect_alpha - Specifies how render channels are propagated through the BRDF (0 - only the color channel; 1 - color and alpha; 2 - all channels reflect_exit_color - The color to use when the maximum depth is reached reflect_dim_distance_on - True to enable dim distance reflect_dim_distance - How much to dim reflection as length of rays increases reflect_dim_distance_falloff - Fall off for the dim distance glossyAsGI - Determines if the glossy rays are treated by V-Ray as GI rays: 0 - never; 1 - only for rays that are already marked as GI rays; 2 - always soften_edge - Soften edge of the BRDF at light/shadow transition anisotropy - Reflection anisotropy in the range (-1, 1) anisotropy_rotation - Anisotropy rotation in the range [0, 1] fix_dark_edges - true to fix dark edges with glossy reflections; only set this to false for compatibility with older versions Example Python <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line"># Create a new BRDFBlinn</span><span data-v-c2b1f83f="" class="line">diffuseBRDF = renderer.classes.BRDFBlinn()</span><span data-v-c2b1f83f="" class="line"># Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = vray.Color(1.0, 1.0, 0.0)</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">newMaterial = renderer.classes.MtlSingleBRDF()</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF</span></code>
C++ <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFBlinn</span><span data-v-c2b1f83f="" class="line">BRDFBlinn newBRDF = renderer.newPlugin<BRDFBlinn>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.set_color(Color(1.0f, 1.0f, 0.0f));</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.newPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.set_brdf(newBRDF);</span></code>
C#.NET <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFBlinn</span><span data-v-c2b1f83f="" class="line">BRDFBlinn newBRDF = renderer.NewPlugin<BRDFBlinn>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.Color = new Color(1.0f, 1.0f, 0.0f);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.NewPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.Brdf = newBRDF;</span></code>
Node.js <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFBlinn</span><span data-v-c2b1f83f="" class="line">var diffuseBRDF = new renderer.classes.BRDFBlinn();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = new vray.Color(1.0, 1.0, 0.0);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">var newMaterial = new renderer.classes.MtlSingleBRDF();</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF;</span></code>
BRDFWard This shader implements the Ward shading algorithm .
Parameters Main parameters are the same as the ones from BRDFBlinn.
Example Python <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line"># Create a new BRDFWard</span><span data-v-c2b1f83f="" class="line">diffuseBRDF = renderer.classes.BRDFWard()</span><span data-v-c2b1f83f="" class="line"># Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = vray.Color(1.0, 1.0, 0.0)</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">newMaterial = renderer.classes.MtlSingleBRDF()</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF</span></code>
C++ <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFWard</span><span data-v-c2b1f83f="" class="line">BRDFWard newBRDF = renderer.newPlugin<BRDFWard>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.set_color(Color(1.0f, 1.0f, 0.0f));</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.newPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.set_brdf(newBRDF);</span></code>
C#.NET <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFWard</span><span data-v-c2b1f83f="" class="line">BRDFWard newBRDF = renderer.NewPlugin<BRDFWard>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.Color = new Color(1.0f, 1.0f, 0.0f);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.NewPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.Brdf = newBRDF;</span></code>
Node.js <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFWard</span><span data-v-c2b1f83f="" class="line">var diffuseBRDF = new renderer.classes.BRDFWard();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = new vray.Color(1.0, 1.0, 0.0);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">var newMaterial = new renderer.classes.MtlSingleBRDF();</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF;</span></code>
BRDFGGX This shader implements the Microfacet GGR shading algorithm (see TR75 - TROWBRIDGET. S., REITZK. P.: "Average irregularity representation of a rough surface for ray reflection.", J. Opt. Soc. Am. 65, 5 (May 1975), 531–536. and "Microfacet Models for Refraction through Rough Surfaces" by Bruce Walter et al.). It's useful for modelling light reflections from surfaces.
Parameters Main parameters are the same as the ones from BRDFBlinn, in addition with these two:
gtr_gamma - How much to increase/decrease the tail of the glossy highlight when using GGX reflection model gtr_oldGamma - true to use the old (and incorrect) method for computing shadow masking when GTR gamma is different from 2.0 Example Python <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line"># Create a new BRDFGGX</span><span data-v-c2b1f83f="" class="line">diffuseBRDF = renderer.classes.BRDFGGX()</span><span data-v-c2b1f83f="" class="line"># Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = vray.Color(1.0, 1.0, 0.0)</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">newMaterial = renderer.classes.MtlSingleBRDF()</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF</span></code>
C++ <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFGGX</span><span data-v-c2b1f83f="" class="line">BRDFGGX newBRDF = renderer.newPlugin<BRDFGGX>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.set_color(Color(1.0f, 1.0f, 0.0f));</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.newPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.set_brdf(newBRDF);</span></code>
C#.NET <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFGGX</span><span data-v-c2b1f83f="" class="line">BRDFGGX newBRDF = renderer.NewPlugin<BRDFGGX>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.Color = new Color(1.0f, 1.0f, 0.0f);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.NewPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.Brdf = newBRDF;</span></code>
Node.js <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFGGX</span><span data-v-c2b1f83f="" class="line">var diffuseBRDF = new renderer.classes.BRDFGGX();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = new vray.Color(1.0, 1.0, 0.0);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">var newMaterial = new renderer.classes.MtlSingleBRDF();</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF;</span></code>
BRDFCookTorrance This shader implements the Microfacet Cook-Torrance shading algorithm .
Parameters Main parameters are the same as the ones from BRDFBlinn
Example Python <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line"># Create a new BRDFCookTorrance</span><span data-v-c2b1f83f="" class="line">diffuseBRDF = renderer.classes.BRDFCookTorrance()</span><span data-v-c2b1f83f="" class="line"># Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = vray.Color(1.0, 1.0, 0.0)</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">newMaterial = renderer.classes.MtlSingleBRDF()</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF</span></code>
C++ <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFCookTorrance</span><span data-v-c2b1f83f="" class="line">BRDFCookTorrance newBRDF = renderer.newPlugin<BRDFCookTorrance>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.set_color(Color(1.0f, 1.0f, 0.0f));</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.newPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.set_brdf(newBRDF);</span></code>
C#.NET <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFCookTorrance</span><span data-v-c2b1f83f="" class="line">BRDFCookTorrance newBRDF = renderer.NewPlugin<BRDFCookTorrance>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.Color = new Color(1.0f, 1.0f, 0.0f);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.NewPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.Brdf = newBRDF;</span></code>
Node.js <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFCookTorrance</span><span data-v-c2b1f83f="" class="line">var diffuseBRDF = new renderer.classes.BRDFCookTorrance();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = new vray.Color(1.0, 1.0, 0.0);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">var newMaterial = new renderer.classes.MtlSingleBRDF();</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF;</span></code>
BRDFGlass This BRDF implements glass material.
Parameters color - basic color of the material ior - IOR for the glass; this is ignored if the surface has a volume shader (the volume IOR is used). affect_alpha - Specifies how render channels are propagated through the glass (0 - only the color channel; 1 - color and alpha; 2 - all channels trace_depth - The maximum refraction bounces (-1 is controlled by the global options) reflect_exit_color - The color to use when the maximum depth is reached refract_exit_color - The color to use when maximum depth is reached when exit_color_on is true Example Python <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line"># Create a new BRDFGlass</span><span data-v-c2b1f83f="" class="line">diffuseBRDF = renderer.classes.BRDFGlass()</span><span data-v-c2b1f83f="" class="line"># Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = vray.Color(1.0, 1.0, 0.0)</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">newMaterial = renderer.classes.MtlSingleBRDF()</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF</span></code>
C++ <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFGlass</span><span data-v-c2b1f83f="" class="line">BRDFGlass newBRDF = renderer.newPlugin<BRDFGlass>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.set_color(Color(1.0f, 1.0f, 0.0f));</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.newPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.set_brdf(newBRDF);</span></code>
C#.NET <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFGlass</span><span data-v-c2b1f83f="" class="line">BRDFGlass newBRDF = renderer.NewPlugin<BRDFGlass>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.Color = new Color(1.0f, 1.0f, 0.0f);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.NewPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.Brdf = newBRDF;</span></code>
Node.js <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFGlass</span><span data-v-c2b1f83f="" class="line">var diffuseBRDF = new renderer.classes.BRDFGlass();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = new vray.Color(1.0, 1.0, 0.0);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">var newMaterial = new renderer.classes.MtlSingleBRDF();</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF;</span></code>
BRDFMirror This BRDF implements a perfect mirror.
Parameters trace_depth - The maximum reflection depth (-1 is controlled by the global options) affect_alpha - Specifies how render channels are propagated through the BRDF (0 - only the color channel; 1 - color and alpha; 2 - all channels reflect_exit_color - The color to use when the maximum depth is reached reflect_dim_distance_on - True to enable dim distance reflect_dim_distance - How much to dim reflection as length of rays increases reflect_dim_distance_falloff - Fall off for the dim distance Example Python <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line"># Create a new BRDFMirror</span><span data-v-c2b1f83f="" class="line">diffuseBRDF = renderer.classes.BRDFMirror()</span><span data-v-c2b1f83f="" class="line"># Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = vray.Color(1.0, 1.0, 0.0)</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">newMaterial = renderer.classes.MtlSingleBRDF()</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF</span></code>
C++ <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFMirror</span><span data-v-c2b1f83f="" class="line">BRDFMirror newBRDF = renderer.newPlugin<BRDFMirror>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.set_color(Color(1.0f, 1.0f, 0.0f));</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.newPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.set_brdf(newBRDF);</span></code>
C#.NET <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFMirror</span><span data-v-c2b1f83f="" class="line">BRDFMirror newBRDF = renderer.NewPlugin<BRDFMirror>();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">newBRDF.Color = new Color(1.0f, 1.0f, 0.0f);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">MtlSingleBRDF newMaterial = renderer.NewPlugin<MtlSingleBRDF>();</span><span data-v-c2b1f83f="" class="line">newMaterial.Brdf = newBRDF;</span></code>
Node.js <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">// Create a new BRDFMirror</span><span data-v-c2b1f83f="" class="line">var diffuseBRDF = new renderer.classes.BRDFMirror();</span><span data-v-c2b1f83f="" class="line">// Specify a golden color</span><span data-v-c2b1f83f="" class="line">diffuseBRDF.color = new vray.Color(1.0, 1.0, 0.0);</span><span data-v-c2b1f83f="" class="line"> </span><span data-v-c2b1f83f="" class="line">var newMaterial = new renderer.classes.MtlSingleBRDF();</span><span data-v-c2b1f83f="" class="line">newMaterial.brdf = diffuseBRDF;</span></code>