<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" >

<channel><title><![CDATA[Kristen Eggleston - Explorations in Renderman]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman]]></link><description><![CDATA[Explorations in Renderman]]></description><pubDate>Wed, 18 Mar 2026 08:16:45 -0700</pubDate><generator>Weebly</generator><item><title><![CDATA[C++ Plugins]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/c-plugins]]></link><comments><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/c-plugins#comments]]></comments><pubDate>Wed, 06 Mar 2013 18:31:15 GMT</pubDate><category><![CDATA[cool tricks]]></category><category><![CDATA[shaders]]></category><guid isPermaLink="false">https://www.kristeneggleston42.com/explorations-in-renderman/c-plugins</guid><description><![CDATA[       While it can do many things, RSL is limited by the language. To enhance its functionality, one can implement a plugin using Pixar's RSLPlugin C++ API. For a sub-set of micropolygons my plugin writes RiCurves into an archive rib file that is referenced by a later beauty pass render. There are, therefore, two passes. The first creates moss-like geometry via my C++ plugin and must only be done once, the second generates the final image. For information on how to implement an archive rib, loo [...] ]]></description><content:encoded><![CDATA[<div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/3035989_orig.jpg" alt="Picture" style="width:100%;max-width:640px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <div class="paragraph" style="text-align:left;">While it can do many things, RSL is limited by the language. To enhance its functionality, one can implement a plugin using Pixar's RSLPlugin C++ API. For a sub-set of micropolygons my plugin writes RiCurves into an archive rib file that is referenced by a later beauty pass render. There are, therefore, two passes. The first creates moss-like geometry via my C++ plugin and must only be done once, the second generates the final image. For information on how to implement an archive rib, look <a href="http://www.kristeneggleston42.com/1/post/2013/02/reading-in-a-rib-file.html">here</a>.<br /><br /><span></span><br /></div>  <span class='imgPusher' style='float:left;height:0px'></span><span style='z-index:10;position:relative;float:left;;clear:left;margin-top:0px;*margin-top:0px'><a><img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/6538166.jpg?395" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px;" alt="Picture" class="galleryImageBorder" /></a><div style="display: block; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;"></div></span> <div class="paragraph" style="text-align:left;display:block;">I tried to bake in the lighting into the rib file. Unfortunately this gave extraordinary values like color(126, 100, 50).<br /></div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <span class='imgPusher' style='float:left;height:0px'></span><span style='z-index:10;position:relative;float:left;;clear:left;margin-top:0px;*margin-top:0px'><a><img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/8380134.jpg?400" style="margin-top: 5px; margin-bottom: 10px; margin-left: 0px; margin-right: 10px; border-width:1px;padding:3px;" alt="Picture" class="galleryImageBorder" /></a><div style="display: block; font-size: 90%; margin-top: -10px; margin-bottom: 10px; text-align: center;"></div></span> <div class="paragraph" style="text-align:left;display:block;">Applying a shader to the curves fixed the problem of trying to pre bake the colors into the moss. This way the plugin generated random variations of the user inputed color and then the shader on the geo container that is reading in the rib archive (how to do that <a title="" href="http://www.kristeneggleston42.com/1/post/2013/02/reading-in-a-rib-file.html">here</a>) takes care of the lighting.<br /></div> <hr style="width:100%;clear:both;visibility:hidden;"></hr>  <div><div style="margin: 10px 0 0 -10px"> <a href="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/mossgen.sl"><img src="http://www.weebly.com/weebly/images/file_icons/file.png" width="36" height="36" style="float: left; position: relative; left: 0px; top: 0px; margin: 0 15px 15px 0; border: 0;" /></a><div style="float: left; text-align: left; position: relative;"><table style="font-size: 12px; font-family: tahoma; line-height: .9;"><tr><td colspan="2"><b> mossgen.sl</b></td></tr><tr style="display: none;"><td>File Size:  </td><td>1 kb</td></tr><tr style="display: none;"><td>File Type:  </td><td> sl</td></tr></table><a href="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/mossgen.sl" style="font-weight: bold;">Download File</a></div> </div>  <hr style="clear: both; width: 100%; visibility: hidden"></hr></div>  <div><div style="margin: 10px 0 0 -10px"> <a href="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/mossgenplug.cpp"><img src="http://www.weebly.com/weebly/images/file_icons/cpp.png" width="36" height="36" style="float: left; position: relative; left: 0px; top: 0px; margin: 0 15px 15px 0; border: 0;" /></a><div style="float: left; text-align: left; position: relative;"><table style="font-size: 12px; font-family: tahoma; line-height: .9;"><tr><td colspan="2"><b> mossgenplug.cpp</b></td></tr><tr style="display: none;"><td>File Size:  </td><td>6 kb</td></tr><tr style="display: none;"><td>File Type:  </td><td> cpp</td></tr></table><a href="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/mossgenplug.cpp" style="font-weight: bold;">Download File</a></div> </div>  <hr style="clear: both; width: 100%; visibility: hidden"></hr></div>  <div><div style="margin: 10px 0 0 -10px"> <a href="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/perlin.h"><img src="http://www.weebly.com/weebly/images/file_icons/h.png" width="36" height="36" style="float: left; position: relative; left: 0px; top: 0px; margin: 0 15px 15px 0; border: 0;" /></a><div style="float: left; text-align: left; position: relative;"><table style="font-size: 12px; font-family: tahoma; line-height: .9;"><tr><td colspan="2"><b> perlin.h</b></td></tr><tr style="display: none;"><td>File Size:  </td><td>3 kb</td></tr><tr style="display: none;"><td>File Type:  </td><td> h</td></tr></table><a href="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/perlin.h" style="font-weight: bold;">Download File</a></div> </div>  <hr style="clear: both; width: 100%; visibility: hidden"></hr></div>]]></content:encoded></item><item><title><![CDATA[Reading in a RIB File]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/reading-in-a-rib-file]]></link><comments><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/reading-in-a-rib-file#comments]]></comments><pubDate>Wed, 27 Feb 2013 20:53:22 GMT</pubDate><category><![CDATA[houdini]]></category><guid isPermaLink="false">https://www.kristeneggleston42.com/explorations-in-renderman/reading-in-a-rib-file</guid><description><![CDATA[Make a new geo containerClick on the gear to go into edit rendering parameter interfaceFilter the options by "rib"Add RIB Archive under Pixar's RendermanOn your geo node, enter the file name into the newly added RIB Archive field        [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;"><ol><li>Make a new geo container</li><li><span>Click on the gear to go into edit rendering parameter interface</span></li><li><span>Filter the options by "rib"</span></li><li><span>Add RIB Archive under Pixar's Renderman</span></li><li><span>On your geo node, enter the file name into the newly added RIB Archive field</span></li></ol></div>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a href='https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/1736017_orig.png' rel='lightbox' onclick='if (!lightboxLoaded) return false'> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/1736017.png?1361998256" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>]]></content:encoded></item><item><title><![CDATA[One Shader, Many Looks]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/one-shader-many-looks]]></link><comments><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/one-shader-many-looks#comments]]></comments><pubDate>Wed, 20 Feb 2013 17:35:34 GMT</pubDate><category><![CDATA[cool tricks]]></category><category><![CDATA[houdini]]></category><guid isPermaLink="false">https://www.kristeneggleston42.com/explorations-in-renderman/one-shader-many-looks</guid><description><![CDATA[       With Renderman in Maya, one is able to change a texture map or an attribute based on the name of the object it is applied to. In Houdini, this is done on the material node by adding local overrides. The user can alter any attribute on the chosen shader based on a group or on a stamped copy number. Be careful when changing texture maps. These are passed in a strings rather than floats or integers so proper formatting is key:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `"/path/to/ [...] ]]></description><content:encoded><![CDATA[<div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/8159597_orig.jpg" alt="Picture" style="width:100%;max-width:500px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <div class="paragraph" style="text-align:left;">With Renderman in Maya, one is able to change a texture map or an attribute based on the name of the object it is applied to. In Houdini, this is done on the material node by adding local overrides. The user can alter any attribute on the chosen shader based on a group or on a stamped copy number. <br /><br /><span>Be careful when changing texture maps. These are passed in a strings rather than floats or integers so proper formatting is key:</span><br /><br /><span></span><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; `"/path/to/file/filename" + number + ".tex"` </span><br /><span></span><br /><span>Now the user can alter the number so that filename1.tex, filename2.tex, and filename3.tex are all accessible by the same shader and material node leading to quicker render times!</span><br /></div>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/7272632_orig.png" alt="Picture" style="width:100%;max-width:902px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>]]></content:encoded></item><item><title><![CDATA[Translucency Shader (RSL2)]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/translucency-shader]]></link><comments><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/translucency-shader#comments]]></comments><pubDate>Fri, 15 Feb 2013 19:25:36 GMT</pubDate><category><![CDATA[shaders]]></category><guid isPermaLink="false">https://www.kristeneggleston42.com/explorations-in-renderman/translucency-shader</guid><description><![CDATA[               Bluebonnets with translucency            Bluebonnets without translucency               Reference photos  This is really a fake translucency shader meant to be applied to a single sided surface.The  real challenge is forcing the directlighting() function to use the  reversed normals. In the old style of coding, one could just say:          Ci = Os * Cs * (diffuse(nf) + diffuse(-nf) * surfcolor);        Meaning  that the final color (Ci) is the apparent opacity, apparent  color,&nb [...] ]]></description><content:encoded><![CDATA[<div class="wsite-video"><iframe allowtransparency="true" frameborder="0" scrolling="no" style="margin: 10px 0 10px 0; width: 100%; height: 282px;" src="http://www.weebly.com/weebly/apps/generateVideo.php?source=weebly&elementid=534292415476143251&ineditor=0&align=center&height=282&video=1/7/5/4/17546521/translucency_v001_939.mp4&image=1/7/5/4/17546521/translucency_v001_939.jpg"></iframe></div>  <div><div class="wsite-multicol"><div class='wsite-multicol-table-wrap' style='margin:0 -15px'> <table class='wsite-multicol-table'> <tbody class='wsite-multicol-tbody'> <tr class='wsite-multicol-tr'> <td class='wsite-multicol-col' style='width:50%;padding:0 15px'>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a href='https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/15354_orig.jpg' rel='lightbox' onclick='if (!lightboxLoaded) return false'> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/15354_orig.jpg" alt="Picture" style="width:100%;max-width:640px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <div class="paragraph" style="text-align:center;">Bluebonnets with translucency<br /></div>  </td> <td class='wsite-multicol-col' style='width:50%;padding:0 15px'>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a href='https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/5725484_orig.jpg' rel='lightbox' onclick='if (!lightboxLoaded) return false'> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/5725484_orig.jpg" alt="Picture" style="width:100%;max-width:640px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <div class="paragraph" style="text-align:center;">Bluebonnets without translucency<br /></div>  </td> </tr> </tbody> </table> </div></div></div>  <div><div style="height: 20px; overflow: hidden;"></div> <div id='134229041301837341-gallery' class='imageGallery' style='line-height: 0px; padding: 0; margin: 0'> <div id='134229041301837341-imageContainer0' style='float:left;width:49.95%;margin:0;'><div id='134229041301837341-insideImageContainer0' style='position:relative;margin:5px;padding:0 8px 8px 0'><div style='position:relative;width:100%;padding:0 0 75.08%;'><a href='https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/1974499_orig.jpg' rel='lightbox[gallery134229041301837341]' onclick='if (!window.lightboxLoaded) return false'><img src='https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/1974499.jpg' class='galleryImage galleryImageBorder' _width='329' _height='250' style='position:absolute;border-width:1px;padding:3px;width:98.8%;top:0%;left:0.6%' /></a></div></div></div><div id='134229041301837341-imageContainer1' style='float:left;width:49.95%;margin:0;'><div id='134229041301837341-insideImageContainer1' style='position:relative;margin:5px;padding:0 8px 8px 0'><div style='position:relative;width:100%;padding:0 0 75.08%;'><a href='https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/1097559_orig.jpeg' rel='lightbox[gallery134229041301837341]' onclick='if (!window.lightboxLoaded) return false'><img src='https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/1097559.jpeg' class='galleryImage galleryImageBorder' _width='229' _height='220' style='position:absolute;border-width:1px;padding:3px;width:78.15%;top:0%;left:10.93%' /></a></div></div></div><span style='display: block; clear: both; height: 0px; overflow: hidden;'></span> </div>  <div style="height: 20px; overflow: hidden;"></div></div>  <div class="paragraph" style="text-align:center;">Reference photos<br /></div>  <div class="paragraph" style="text-align:left;">This is really a fake translucency shader meant to be applied to a single sided surface.<br /><span style=""></span><br /><span style=""></span>The  real challenge is forcing the directlighting() function to use the  reversed normals. In the old style of coding, one could just say:<br /><span></span><br /><span style=""></span></div>  <div><div id="548961383494934618" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"> <pre>       Ci = Os * Cs * (diffuse(nf) + diffuse(-nf) * surfcolor); </pre> </div>    </div>  <div class="paragraph" style="text-align:left;">Meaning  that the final color (Ci) is the apparent opacity, apparent  color,&nbsp; and  the diffuse of the front face added to the diffuse of the  back  face multiplied by the surface color.<br /><br />At first I  was switching the normals within the directlighting() function and  something just wasn't working with the diffuselighting() call to get Ci.  After playing, the reverse of the normal was put in the displacement()  function, the normal place to initialize normals to the shader, with the  following lines of code. The normals were changed as well as the  shading context, that holds the information for the material and object,  were also inverted.</div>  <div><div id="728624280969062840" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><pre>         N *=  -1;         m_shadingCtx -> m_Ns *= -1; </pre></div>    </div>  <div class="paragraph" style="text-align:left;">Then came the brute force way of getting the lighting information.  After gathering a list of lights, the light color and direction was  returned from a modified plausible light shader. The modifications to  the basic plausible light shader were to force it to return the color  and direction of the light. This worked, but did not show shadows. <br /><br />Eventually  I went back to trying the default method of lighting (directlighting())  to try and figure out the path between the material and the light to  generate samples for shadows. I did not figure out the path because  calling directlighting() returned shadows and translucent light  information!<br /></div>  <div><div id="327230155982879197" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml">&nbsp;&nbsp;&nbsp;&nbsp;float doReverse = 0;<br><br>  &nbsp;&nbsp;&nbsp;&nbsp;displacement(point P, point N)<br> &nbsp;&nbsp;&nbsp;&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (doReverse) {<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;reverse normals;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;normal normal initialization;<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br>     &nbsp;&nbsp;&nbsp;&nbsp;surface ( color Ci, Oi )<br> &nbsp;&nbsp;&nbsp;&nbsp;{<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;frontColor = directlighting();<br><br>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;doReverse = 1;<br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this -> displacement;<br><br>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;backColor = directlighting();<br><br>  &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ci = backColor + frontColor;<br> &nbsp;&nbsp;&nbsp;&nbsp;}<br> </div>    </div>  <div><div style="margin: 10px 0 0 -10px"> <a href="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/translucency.sl"><img src="http://www.weebly.com/weebly/images/file_icons/file.png" width="36" height="36" style="float: left; position: relative; left: 0px; top: 0px; margin: 0 15px 15px 0; border: 0;" /></a><div style="float: left; text-align: left; position: relative;"><table style="font-size: 12px; font-family: tahoma; line-height: .9;"><tr><td colspan="2"><b> Translucency Shader</b></td></tr><tr style="display: none;"><td>File Size:  </td><td>2 kb</td></tr><tr style="display: none;"><td>File Type:  </td><td> sl</td></tr></table><a href="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/translucency.sl" style="font-weight: bold;">Download File</a></div> </div>  <hr style="clear: both; width: 100%; visibility: hidden"></hr></div>]]></content:encoded></item><item><title><![CDATA[Frosted Glass Shader]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/frosted-glass-shader]]></link><comments><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/frosted-glass-shader#comments]]></comments><pubDate>Fri, 15 Feb 2013 18:48:11 GMT</pubDate><category><![CDATA[shaders]]></category><guid isPermaLink="false">https://www.kristeneggleston42.com/explorations-in-renderman/frosted-glass-shader</guid><description><![CDATA[The frosted glass shader was my first attempt at writing a shader that other artists could use. It was written using the RSL2 extensions  to the RenderMan Shading Language. Implementing a class based shader  makes it surprisingly easy for the shaders (internal) instance variables  to be shared by the methods that are called within the shading  pipeline.           Frosted glass reference  User Controls: color, frost color, spec color, spec and reflective gain and roughness, internal reflections,  [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">The frosted glass shader was my first attempt at writing a shader that other artists could use. It was written using the RSL2 extensions  to the RenderMan Shading Language. Implementing a class based shader  makes it surprisingly easy for the shaders (internal) instance variables  to be shared by the methods that are called within the shading  pipeline.</div>  <div class="wsite-video"><iframe allowtransparency="true" frameborder="0" scrolling="no" style="margin: 10px 0 10px 0; width: 100%; height: 282px;" src="http://www.weebly.com/weebly/apps/generateVideo.php?source=weebly&elementid=144560029153404938&ineditor=0&align=center&height=282&video=1/7/5/4/17546521/frosted_v002_758.mp4&image=1/7/5/4/17546521/frosted_v002_758.jpg"></iframe></div>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/8236102_orig.jpg" alt="Picture" style="width:100%;max-width:490px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <div class="paragraph" style="text-align:center;">Frosted glass reference<br /></div>  <div class="paragraph" style="text-align:left;">User Controls: color, frost color, spec color, spec and reflective gain and roughness, internal reflections, index of reflection, displacement amount, and specific frost controls.&nbsp; The frost is based off of a noise pattern, with user controls, the amount of frost and at what space the frost is coming from. <br /><span style=""></span><br /><span style=""></span> By entering  the name of a null (Houdini) node into the shader, the user can move the  frost around. The animation above shows frost &ldquo;growing&rdquo; on the teapot.  This was done by animating the radius of influence of the null node which is explained more <a href="http://kristeneggleston.weebly.com/1/post/2013/02/changing-coordinate-space-based-on-a-null-object.html">here</a>.<br /><span style=""></span><br /><span style=""></span> The ramp that is the change from glass to frost is also controllable  &nbsp;and the influence does not have to be smooth, it can change from a  straight edge to a noisy one.<br /><span style=""></span><br /><span style=""></span> For additional functionality I plan on allowing the user to input an  image of their own frost. The frost is currently based on wavelet noise,  controlled by user input, but it is still not completely under the  user&rsquo;s control.<br /><span style=""></span><br /><span style=""></span> There is also a test to see if the color was greater than 1, at  which point the surface color was defaulted to white. It would probably  be a better idea to have three separate if statements checking each rgb  value and setting them individually because that would be somewhat  awkward to have a white pixel where it should be red since the green and  blue values were also changed.<br /><span style=""></span><br /><span style=""></span></div>  <div><div style="margin: 10px 0 0 -10px"> <a href="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/frostedglass.sl"><img src="http://www.weebly.com/weebly/images/file_icons/file.png" width="36" height="36" style="float: left; position: relative; left: 0px; top: 0px; margin: 0 15px 15px 0; border: 0;" /></a><div style="float: left; text-align: left; position: relative;"><table style="font-size: 12px; font-family: tahoma; line-height: .9;"><tr><td colspan="2"><b> Frosted Glass Shader</b></td></tr><tr style="display: none;"><td>File Size:  </td><td>18 kb</td></tr><tr style="display: none;"><td>File Type:  </td><td> sl</td></tr></table><a href="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/frostedglass.sl" style="font-weight: bold;">Download File</a></div> </div>  <hr style="clear: both; width: 100%; visibility: hidden"></hr></div>]]></content:encoded></item><item><title><![CDATA[Introduction to Class Based Shaders]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/introduction-to-class-based-shaders]]></link><comments><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/introduction-to-class-based-shaders#comments]]></comments><pubDate>Fri, 15 Feb 2013 18:24:19 GMT</pubDate><category><![CDATA[shaders]]></category><guid isPermaLink="false">https://www.kristeneggleston42.com/explorations-in-renderman/introduction-to-class-based-shaders</guid><description><![CDATA[Renderman has a way of programing shaders in RSL, by using  classes. This allows a displacement shader to be in the same file as the  surfacing function and for physically based shaders.I've been  exploring these new shaders within Houdini, because Houdini is more fun  than Maya. I found that I had trouble writing my shaders correctly  because I did not understand how the renderer, the material and the  light were working together to make the surface color. &nbsp;Plausible Constant         The c [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">Renderman has a way of programing shaders in RSL, by using  classes. This allows a displacement shader to be in the same file as the  surfacing function and for physically based shaders.<br /><span style=""></span><br /><span style=""></span>I've been  exploring these new shaders within Houdini, because Houdini is more fun  than Maya. I found that I had trouble writing my shaders correctly  because I did not understand how the renderer, the material and the  light were working together to make the surface color. <br /><span style=""></span><br /><span style=""></span>&nbsp;<br /><span style=""></span><br /><span style=""></span><em style="">Plausible Constant</em></div>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/6185104_orig.jpg" alt="Picture" style="width:100%;max-width:300px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <div class="paragraph" style="text-align:left;">The constant shader is just one constant color across the surface. It  never has to access the light and therefore has just one constant  color.  <br /><br /><br /><span></span><br /><span></span><em style="">Plausible Diffuse</em></div>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/291038_orig.jpg" alt="Picture" style="width:100%;max-width:300px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <div class="paragraph" style="text-align:left;">The plausible diffuse shader adds shading to the surface. It is like a  lambert shader in that there is no specular or reflective quality.<br /><span style=""></span><br /><span style=""></span> The material&rsquo;s surface() function can be substituted with the diffuselighting() function without too much of a difference. The difference in the rendering can be seen <a href="http://kristeneggleston.weebly.com/1/post/2013/02/difference-between-surface-and-diffuselighting.html">here</a>.<br /><span style=""></span><br /><span style=""></span> The material&rsquo;s diffuselighting() function asks the light to generate  samples for the diffuse color and the shadow and those are saved as the  Ci and outputed by the material.<br /><span style=""></span><br /><br /><span></span><br /><span></span><br /><span style=""></span> <em style="">Plausible Specularity <br /></em></div>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/6758521_orig.jpg" alt="Picture" style="width:100%;max-width:300px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <div class="paragraph" style="text-align:left;">The plausible reflective shader is essentially like a blinn in that  you may control the specular highlights and reflectivity of the object.  The reflectivity is referred to as &ldquo;indirect specular&rdquo;.<br /><span style=""></span><br /><span style=""></span> The diffuselighting() and specularlighting() functions work by  layering their Ci returns on top of each other: diffuse, reflection then  specular.<br /><span style=""></span><br /><span style=""></span> The material actually gathers the sampling information in that order,  diffuse, indirect specular and direct specular. This was essential to  know in order to separate out the controls for a softer reflection  versus specular.<br /><span style=""></span><br /><span style=""></span></div>]]></content:encoded></item><item><title><![CDATA[How to Render a Rib File from Houdini]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/how-to-render-a-rib-file-from-houdini]]></link><comments><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/how-to-render-a-rib-file-from-houdini#comments]]></comments><pubDate>Fri, 15 Feb 2013 18:09:18 GMT</pubDate><category><![CDATA[houdini]]></category><guid isPermaLink="false">https://www.kristeneggleston42.com/explorations-in-renderman/how-to-render-a-rib-file-from-houdini</guid><description><![CDATA[Click the checkbox that says "disk file" on your ROP.        [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">Click the checkbox that says "disk file" on your ROP.</div>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/3127239_orig.png" alt="Picture" style="width:100%;max-width:300px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>]]></content:encoded></item><item><title><![CDATA[Setting Up Houdini to Render with Renderman!]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/setting-up-houdini-to-render-with-renderman]]></link><comments><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/setting-up-houdini-to-render-with-renderman#comments]]></comments><pubDate>Fri, 15 Feb 2013 18:07:13 GMT</pubDate><category><![CDATA[houdini]]></category><guid isPermaLink="false">https://www.kristeneggleston42.com/explorations-in-renderman/setting-up-houdini-to-render-with-renderman</guid><description><![CDATA[As with most things in Houdini, this is a simple check box.Go to Edit -&gt; Preferences -&gt; Rendering &nbsp;and check the "Pixar's Renderman" check box.         This  opens up all the shaders and settings for Renderman. If you are  newer  to Houdini and/or Renderman, I suggest unchecking "Mantra" so  that you  don't get confused.To convert .slo shader files to something Houdini can read, use either Cutter (downloadable at www.fundza.com) and set up your paths and preferences or use the termina [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">As with most things in Houdini, this is a simple check box.<br /><span style=""></span><br /><span style=""></span>Go to Edit -&gt; Preferences -&gt; Rendering &nbsp;and check the "Pixar's Renderman" check box.<br /><span style=""></span></div>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:10px;margin-right:10px;text-align:center"> <a href='https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/3607148_orig.png?436' rel='lightbox' onclick='if (!lightboxLoaded) return false'> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/3607148.png?436" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>  <div class="paragraph" style="text-align:left;">This  opens up all the shaders and settings for Renderman. If you are  newer  to Houdini and/or Renderman, I suggest unchecking "Mantra" so  that you  don't get confused.<br /><br />To convert .slo shader files to something Houdini can read, use either Cutter (downloadable at <a style="" title="" href="http://www.fundza.com/">www.fundza.com</a>) and set up your paths and preferences or use the terminal and convert the .slo file using the prepackaged script.<br /><br />Type into the terminal window after navigating to where your shader is:<br /><br />       <br /></div>  <div><div id="129359219883174229" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml">slo2otl.py -l myshader.otl myshader.slo </div>    </div>  <div class="paragraph" style="text-align:left;"><br />Then   you will install  the digital asset library into your hip file by going   to File -&gt;  Install Digital Asset Library and all of your shaders  will   be&nbsp;accessible&nbsp;through the shop.</div>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a href='https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/6383417_orig.png' rel='lightbox' onclick='if (!lightboxLoaded) return false'> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/6383417_orig.png" alt="Picture" style="width:100%;max-width:385px" /> </a> <div style="display:block;font-size:90%"></div> </div></div>]]></content:encoded></item><item><title><![CDATA[One Way to set up Lights in Houdini]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/february-15th-2013]]></link><comments><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/february-15th-2013#comments]]></comments><pubDate>Fri, 15 Feb 2013 18:02:19 GMT</pubDate><category><![CDATA[Houdini]]></category><guid isPermaLink="false">https://www.kristeneggleston42.com/explorations-in-renderman/february-15th-2013</guid><description><![CDATA[Create a normal light in the network view by hitting the tab key and typing "light".Make sure you have created your light shader in the Shop network, mine is called "plausibleSunlight1".Add your shader to the light material and control all light attributes except for position within the shader.        [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">Create a normal light in the network view by hitting the tab key and typing "light".<br /><span style=""></span><br /><span style=""></span>Make sure you have created your light shader in the Shop network, mine is called "plausibleSunlight1".<br /><span style=""></span><br /><span style=""></span>Add your shader to the light material and control all light attributes except for position within the shader.<br /><span style=""></span><br /><span style=""></span></div>  <div><div class="wsite-image wsite-image-border-thin " style="padding-top:10px;padding-bottom:10px;margin-left:0;margin-right:0;text-align:center"> <a> <img src="https://www.kristeneggleston42.com/uploads/1/7/5/4/17546521/7955434.png?519" alt="Picture" style="width:auto;max-width:100%" /> </a> <div style="display:block;font-size:90%"></div> </div></div>]]></content:encoded></item><item><title><![CDATA[Changing Coordinate Space Based on a Null Object]]></title><link><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/changing-coordinate-space-based-on-a-null-object]]></link><comments><![CDATA[https://www.kristeneggleston42.com/explorations-in-renderman/changing-coordinate-space-based-on-a-null-object#comments]]></comments><pubDate>Fri, 15 Feb 2013 17:59:59 GMT</pubDate><category><![CDATA[cool tricks]]></category><guid isPermaLink="false">https://www.kristeneggleston42.com/explorations-in-renderman/changing-coordinate-space-based-on-a-null-object</guid><description><![CDATA[This is for Houdini. It turns out that you can very easily map a  shader attribute to a null object's position in reference to a point on  the object. You could use this for making frost grow on an object.Pass in the object's name as a string, "/obj/null1".Measure the distance from the point to the origin of the null.           // Makes a point in object space, not         // passed in as (0,0,0) because it is         // automatically converted to object space          point fs = point "object"  [...] ]]></description><content:encoded><![CDATA[<div class="paragraph" style="text-align:left;">This is for Houdini. It turns out that you can very easily map a  shader attribute to a null object's position in reference to a point on  the object. You could use this for making frost grow on an object.<br /><span style=""></span><br /><span style=""></span>Pass in the object's name as a string, "/obj/null1".<br /><span style=""></span><br /><span style=""></span>Measure the distance from the point to the origin of the null.<br /><br /><span style=""></span><br /><span style=""></span></div>  <div><div id="132067906671526817" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><pre>         // Makes a point in object space, not<br>         // passed in as (0,0,0) because it is<br>         // automatically converted to object space <br>         point fs = point "object" (0,0,0); <br><br>         // Transforms the point to null space<br>         fs = transform("/obj/null1", fs);<br><br>         // Calculates the distance from point to point<br>         float d = distance(fs,transform("shader", P));<br></pre> </div>    </div>  <div class="paragraph" style="text-align:left;">Make a ramp based on that distance to change whatever attribute.</div>  <div><div id="920745607576646643" align="left" style="width: 100%; overflow-y: hidden;" class="wcustomhtml"><pre>        influence = smoothstep(0 + rampSize, radOfInfluence, d);</pre></div>    </div>  <div class="paragraph" style="text-align:left;">If  you are having difficulties getting the null or whatever object you  are  using to be recognized by the shader, check the name you are  passing  in. The easiest way to do this with a null is to check the only  default  checkbox in the render tab which allows the null to be written  to a rib  file. Then force the ROP to create a disk file and search the  disk file  for that string name.<br /><br />Also  note that when entering the name into  the field in the shader, double  quotes are unnecessary and will break  your render. Just enter the name  of the object: /obj/null1</div>]]></content:encoded></item></channel></rss>