bmrt is an implementation of the RenderMan specification. BMRT added a trace function that was not in the RenderMan specs so that you can write ray trace routines. You can write some pretty cool shaders in RenderMan. Pixar uses Pixar Renderman on their movies.
Basically, with BMRT you can write many custom shaders and even do ray tracing, so you can give a surface almost any texture you want such as clay, stucco, glass, mirror, etc. With only raytracing, everything looks shiny.
Here is some sample code from the BMRT distribution.
This does clay
#include "material.h"
surface
clay ( float Ka = 1, Kd = 0.7, roughness = 0.1😉
{
normal Nf = faceforward (normalize(N), I);
Ci = MaterialClay (Nf, Cs, Ka, Kd, roughness);
Oi = Os; Ci *= Oi;
}
This does glass which depends on the TRACE function
#include "rayserver.h"
#include "material.h"
surface
glass ( float Ka = 0.2, Kd = 0, Ks = 0.5, roughness = 0.05;
color specularcolor = 1;
float Kr = 1, reflblur = 0;
DECLARE_DEFAULTED_ENVPARAMS;
float Kt = 1, refrblur = 0, eta = 1.5;
color transmitcolor = 1;
float refrrayjitter = 0, refrraysamples = 1; )
{
normal Nf = faceforward (normalize(N), I);
Ci = MaterialGlass (Nf, Cs, Ka, Kd, Ks, roughness, Kr, reflblur,
Kt, refrblur, eta, transmitcolor,
refrrayjitter, refrraysamples, ENVPARAMS);
}