<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">

    <title type="text">Cineversity Wiki</title>
    <subtitle type="text">Cineversity Wiki</subtitle>
    <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/" />
    <link rel="self" type="application/atom+xml" href="http://www.cineversity.com/wiki/Special:Recentchanges_Atom" />
    <updated>2012-05-15T16:18:05Z</updated>
    <rights>Copyright (c) 2008, info@cineversity.com</rights>
    <generator uri="http://expressionengine.com/" version="1.6.9">ExpressionEngine</generator>
    <id>tag:cineversity.com,2012:05:15:wiki</id>


    <entry>
      <title>Python: DescIDs and Animation</title>
      <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/Python%3A_DescIDs_and_Animation/" />
      <id>tag:cineversity.com,2012:wiki:Python: DescIDs and Animation/68.442</id>
      <published>2012-05-15T16:18:05Z</published>
      <updated>2012-05-15T16:18:05Z</updated>
      <author>
            <name>Rick Barrett</name>
            <email></email>
      </author>
      <content type="html"><![CDATA[
        <p>&nbsp;</p>
<div style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; margin: 8px;">
<p>The trickiest part of dealing with animation tracks in Python is the concept of DescIDs.</p>
<p>DescIDs are actually used throughout CINEMA 4D, but they&#8217;re especially important when working with animation tracks. A DescID is a multi-level ID structure for individual description elements. The DescID can define multiple levels of data, like with UserData, where the first element of the DescID is always ID_USERDATA and the second element is the index for each userdata element. The multiple levels of a DescID are also used for subchannels, like the individual vector elements of a Position, Scale, Rotation or Color element.</p>
<p>Each element of a DescID is a DescLevel. The DescLevel also has three elements - in this case, they are the id itself, the data type and the creator.</p>
<p>Let&#8217;s look at some examples:</p>
<h2>Creating tracks for simple description elements</h2>
<p>If a description element doesn&#8217;t have sub-channels, the DescID is simply the ID of the description element.</p>
<pre class="brush: python;toolbar: false;fontsize: 100; first-line: 1; "># Track for Object Enabled Boolean
enabled = c4d.CTrack(op, c4d.DescID(c4d.ID_BASEOBJECT_GENERATOR_FLAG))
op.InsertTrackSorted(enabled)
# Track for Light Brightness Real
track = c4d.CTrack(op,c4d.DescID(c4d.LIGHT_BRIGHTNESS))
op.InsertTrackSorted(track)
</pre>
<h2>Creating Position X, Y, Z tracks</h2>
<p>Note that each vector element has its own track, just like in C4D&#8217;s timeline. The DescID for each contains two levels. Level 1 in each case is the Position track itself, which has a VECTOR type. This is the parent Position element you see in the timeline. Level 2 is the vector element for this specific track, and has a REAL type.</p>
<p>&nbsp;</p>
<pre class="brush: python;toolbar: false;fontsize: 100; first-line: 1; ">trackX = c4d.CTrack(op,
                    c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_POSITION,c4d.DTYPE_VECTOR,0),
                               c4d.DescLevel(c4d.VECTOR_X,c4d.DTYPE_REAL,0)))
trackY = c4d.CTrack(op,
                    c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_POSITION,c4d.DTYPE_VECTOR,0),
                               c4d.DescLevel(c4d.VECTOR_Y,c4d.DTYPE_REAL,0)))
trackZ = c4d.CTrack(op,
                    c4d.DescID(c4d.DescLevel(c4d.ID_BASEOBJECT_POSITION,c4d.DTYPE_VECTOR,0),
                               c4d.DescLevel(c4d.VECTOR_Z,c4d.DTYPE_REAL,0)))
op.InsertTrackSorted(trackX)
op.InsertTrackSorted(trackY)
op.InsertTrackSorted(trackZ)
</pre>
<h2>Creating tracks for userdata</h2>
<p>When you create userdata or iterate through the userdata container, the ID you get is the DescID. However, for elements with subchannels like vectors or color, you still have to add individual tracks for each subchannel. This code sample elaborates on DescIDs and DescLevels through some print statements and also contains a custom function that creates the appropriate tracks for certain userdata types. Not all possible types are considered - it&#8217;s just a start.</p>
<p>&nbsp;</p>
<pre class="brush: python;toolbar: false;fontsize: 100; first-line: 1; ">import c4d

def CreateUDTrack(op,id):
    tracks = []
    # element0 is always UD group
    # element1 is the UD itself
    ud = id[1]
    dtype = ud.dtype
    if dtype == c4d.DTYPE_VECTOR or dtype == c4d.DTYPE_COLOR:
        # get datatypes with subchannels and add multiple tracks
        for v in xrange(c4d.VECTOR_X, c4d.VECTOR_Z+1):
            descID = c4d.DescID(id[0],id[1],c4d.DescLevel(v,c4d.DTYPE_REAL))
            tracks.append(c4d.CTrack(op,descID))                                        
    else:
        # just add the single track
        tracks.append(c4d.CTrack(op,id))

    return tracks

def main():
    for id, bc in op.GetUserDataContainer():
        # id is the DescID, bc is the container
        print bc[c4d.DESC_NAME], id
        
        # look at each DescLevel
        # this isn't necessary, just instructive
        for level in xrange(id.GetDepth()):
            print "Level ", level, ": ", \
                  id[level].id, ",", \
                  id[level].dtype, ",", \
                  id[level].creator
                  
        # Create tracks using custom function
        tracks = CreateUDTrack(op,id)
        # Loop through returned tracks and insert
        for track in tracks:
            op.InsertTrackSorted(track)


if __name__=='__main__':
    main()
</pre>
<p>&nbsp;</p>
</div>
<h2 style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; margin: 8px;">Finding a Track</h2>
<p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; margin: 8px;">In Release 13 and greater, you can use FindCTrack to find an existing animation track for a particular DescID. It&#8217;s a good idea to do this if you&#8217;re not sure if the track exists. Otherwise, C4D will just create additional tracks for the same parameter.</p>
<p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; margin: 8px;">&nbsp;</p>
<pre class="brush: python;toolbar: false;fontsize: 100; first-line: 1; "># Track for Light Brightness Real
dBrightness = c4d.DescID(c4d.LIGHT_BRIGHTNESS) #assign the DescID to a var for convenience
tBrightness = op.FindCTrack(dBrightness) #find the track
if not tBrightness:                      #if track isn't found, create it
    tBrightness = c4d.CTrack(op,dBrightness)
    op.InsertTrackSorted(tBrightness)</pre>
<p style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; margin: 8px;">&nbsp;</p>
<h2 style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; margin: 8px;">Adding Keys</h2>
<p>Once you have the necessary tracks, adding keys is relatively simple. All the keys are applied to an F-Curve, which is a CCurve object in Python. So first you have to get the CCurve, and then you can use AddKey or InsertKey to add keys to the curve. Note that you can use the CTrack method FillKey to fill a key with the default values for the track, setting the appropriate interpolation. Also, you should use SetValue when setting a float value, and SetGeData when setting any other data type.</p>
<p>&nbsp;</p>
<pre class="brush: python;toolbar: false;fontsize: 100; first-line: 1; ">#Get the curve
curve = track.GetCurve()

#Add keys using AddKey
#Creates the key at the proper time
#Then you modify the key
keyDict = curve.AddKey(c4d.BaseTime(0))
#keyDict is a dict with key=CKey and int=index
myKey = keyDict["key"]
#Use FillKey to fill the key with default values (interpolation)
trk.FillKey(doc,op,myKey)
#Use SetValue or SetGeData to set the key value
myKey.SetValue(curve,1)
#myKey.SetGeData(curve,1)
    
#Add keys using InsertKey
#Define the key first
key = c4d.CKey()
#Use FillKey to fill the key with default values (interpolation)
trk.FillKey(doc,op,key)
key.SetTime(curve,c4d.BaseTime(1))
key.SetValue(curve,.5)
#key.SetGeData(curve,1)
#Then insert it
curve.InsertKey(key)</pre>
<p>&nbsp;</p>
<h2>Setting the Keyframe Selection</h2>
<p>A similar task also involving DescIDs is setting the Keyframe Selection for an Object. You can use this in conjunction with the record button to create tracks, but the direct method specified above is more robust. You might however wish to enable keyframe selection on specific description IDs if you&#8217;re generating a rig or other object in Python which the user will be animating.</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<pre class="brush: python;toolbar: false;fontsize: 100; first-line: 1; "># Put the "Position" desclevel in a variable for convenience
pos = c4d.DescLevel(c4d.ID_BASEOBJECT_REL_POSITION, c4d.DA_VECTOR)
# Set Keyframe selection on each vector X,Y,Z
op.SetKeyframeSelection(c4d.DescID(pos,c4d.DescLevel(c4d.VECTOR_X, c4d.DA_REAL, c4d.DA_VECTOR)), True)
op.SetKeyframeSelection(c4d.DescID(pos,c4d.DescLevel(c4d.VECTOR_Y, c4d.DA_REAL, c4d.DA_VECTOR)), True)
op.SetKeyframeSelection(c4d.DescID(pos,c4d.DescLevel(c4d.VECTOR_Z, c4d.DA_REAL, c4d.DA_VECTOR)), True)
# Update the C4D Interface
c4d.EventAdd()</pre>
<p>&nbsp;</p>
<div style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; margin: 8px;"><p><a href="http://www.cineversity.com/wiki/Category:Scripting/" title="Category:Scripting">Category:Scripting</a>
</p></div>
      ]]></content>
    </entry>

    <entry>
      <title>Axis Orientation</title>
      <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/Axis_Orientation/" />
      <id>tag:cineversity.com,2012:wiki:Axis Orientation/210.441</id>
      <published>2012-04-28T20:08:40Z</published>
      <updated>2012-04-28T20:08:40Z</updated>
      <author>
            <name>jayroth</name>
            <email></email>
      </author>
      <content type="html"><![CDATA[
        <p><strong>Axis Orientation</strong> refers to the direction that an axis of a given object is favoring. As discussed in the topic &#8220;Axis&#8221;, there are several different coordinate spaces that are at play at any given time in a 3D scene or project.&nbsp; Ultimately, they must all play well together, and it helps if you understand what&#8217;s going on.&nbsp; It can be confusing, but just take it in a bit at a time, and soon you will have a good feel for how it all works.</p>
<p>Typically, axis orientation is something to be aware of when you are working with hierarchies of objects, and you want the objects in that tree to work together as a cohesive group.&nbsp; This is especially true when you are building skeletons of joints for character animation.&nbsp; (Note: &#8220;character animation&#8221; can refer to organic creatures as well as mechanical objects that require a skeleton to perform the way you intend, whether or not a similar thing in the real world would have a skeleton.) Joints have a preferred direction, and they point along their Z axis.&nbsp; Should joints get created that do not point along their Z axis, you will need to re-orient them to correct that.&nbsp; In addition, it is possible for joints to point properly along their Z axis, but be misaligned with the other axes, as defined by their parents.&nbsp; For chains of joints to behave properly, <strong><em>all </em></strong>of the joints in the chain need to have the same orientation. In other words, if front is Z, then top is Y, and all of the joints in the joint chain need to honor that axis alignment.</p>
<p>Quite often, you will create scene elements that differ from the world orientation of Y up, Z front.&nbsp; If possible, you will have a much easier and more predictable experience if you orient your objects similarly to the world (unless you have specific reasons not to).</p>
<p>In all, stacking up objects in a hierarchy can really play with your head when it comes to controlling rotation values, due to the complexities of the math involved (see, math is important&#8212;you should have paid more attention in class!).&nbsp; There are many resources online which discuss the topic of rotations and their behavior, but the best discussion comes from Cactus Dan, a favorite among Cinema 4D users.&nbsp; Look up his character tutorials.&nbsp; There&#8217;s real gold there&#8230;</p>
<p>&nbsp;</p>
<p><a href="http://www.cineversity.com/wiki/Category:Glossary/" title="Category:Glossary">Category:Glossary</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Modeling/" title="Category:Modeling">Category:Modeling</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Animation/" title="Category:Animation">Category:Animation</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Axis</title>
      <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/Axis/" />
      <id>tag:cineversity.com,2012:wiki:Axis/113.438</id>
      <published>2012-04-27T22:09:53Z</published>
      <updated>2012-04-27T22:09:53Z</updated>
      <author>
            <name>jayroth</name>
            <email></email>
      </author>
      <content type="html"><![CDATA[
        <p>An <strong>Axis </strong>refers to a direction of travel in world space, or a direction of orientation in rotational space.&nbsp; In order to move along an axis, or a three dimensional direction specified by a three axis combination, coordinates must be provided to enable said motion.</p>
<p>The axis is the representation of the coordinate system in use.&nbsp; When positioning an object, you are typically working in world space, child space, or local space, depending upon the location of the object within a hierarchy.&nbsp; Objects not associated with a hierarchy are said to be in world space.&nbsp; Objects with parents are said to be in child space or local space.&nbsp; This concept is important, as the numerical readouts for each axis will differ, depending upon what they are intended to show.&nbsp; For example, if you have a child of a parent that has not been moved, it will read X:0, Y:0, Z:0 for position.&nbsp; If you choose to move the child, or offset its position, you will then see the relative distance from the parent in the numerical position readout.&nbsp; Now, if you were looking at the same object, located in the same place but <em>not </em>parented, you will see drastically different information for X, Y and Z positions, as you will be seeing the actual world space location information for that object.&nbsp; If all you do is model or make poses, and don&#8217;t animate much, then the impact of the previous will be limited in your case.&nbsp; However, should you choose to animate more than occasionally, it suddenly becomes very important for you to have a good idea as to the previous.&nbsp; This is particularly true if you are writing expressions with Xpresso, using math functions, writing scripts or rigging characters and working with joints.</p>
<p>&nbsp;</p>
<p><a href="http://www.cineversity.com/wiki/Category:Glossary/" title="Category:Glossary">Category:Glossary</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Animation/" title="Category:Animation">Category:Animation</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Modeling/" title="Category:Modeling">Category:Modeling</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Antumbra</title>
      <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/Antumbra/" />
      <id>tag:cineversity.com,2012:wiki:Antumbra/209.437</id>
      <published>2012-04-11T06:47:47Z</published>
      <updated>2012-04-11T06:47:47Z</updated>
      <author>
            <name>jayroth</name>
            <email></email>
      </author>
      <content type="html"><![CDATA[
        <p><strong><span id="Antumbra" class="mw-headline">Antumbra</span></strong></p>
<p>&nbsp;</p>
<p><span class="mw-headline"><a href="http://www.cineversity.com/wiki/Category:Glossary/" title="Category:Glossary">Category:Glossary</a></span></p>
<p><span class="mw-headline"><a href="http://www.cineversity.com/wiki/Category:Lighting/" title="Category:Lighting">Category:Lighting</a></span></p>
<p><span class="mw-headline"><br /></span></p>
      ]]></content>
    </entry>

    <entry>
      <title>Penumbra</title>
      <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/Penumbra/" />
      <id>tag:cineversity.com,2012:wiki:Penumbra/208.436</id>
      <published>2012-04-11T06:46:29Z</published>
      <updated>2012-04-11T06:46:29Z</updated>
      <author>
            <name>jayroth</name>
            <email></email>
      </author>
      <content type="html"><![CDATA[
        <p><strong>Penumbra</strong></p>
<p>&nbsp;</p>
<p><a href="http://www.cineversity.com/wiki/Category:Glossary/" title="Category:Glossary">Category:Glossary</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Lighting/" title="Category:Lighting">Category:Lighting</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Umbra</title>
      <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/Umbra/" />
      <id>tag:cineversity.com,2012:wiki:Umbra/206.434</id>
      <published>2012-04-11T06:44:06Z</published>
      <updated>2012-04-11T06:44:06Z</updated>
      <author>
            <name>jayroth</name>
            <email></email>
      </author>
      <content type="html"><![CDATA[
        <p>Umbra</p>
<p>&nbsp;</p>
<p><a href="http://www.cineversity.com/wiki/Category:Glossary/" title="Category:Glossary">Category:Glossary</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Index of Refraction &#45; IOR</title>
      <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/Index_of_Refraction_-_IOR/" />
      <id>tag:cineversity.com,2012:wiki:Index of Refraction &#45; IOR/205.433</id>
      <published>2012-04-11T03:21:07Z</published>
      <updated>2012-04-11T03:21:07Z</updated>
      <author>
            <name>jayroth</name>
            <email></email>
      </author>
      <content type="html"><![CDATA[
        <p>The <strong>Index of Refraction</strong> (<strong>IOR</strong>) is a value used to specify the way that light is scattered as it passes through a material.&nbsp; You are most familar with the &#8220;bent straw&#8221; effect when viewing a clear glass of water and a straw.&nbsp; That is because the light traveling through the glass of water is behaving differently than when it travels through air.&nbsp; Since we live on Earth, all IOR values assume that 1.0 is the value for traditional linear light behavior.&nbsp; And thus, air has an IOR of 1.0.&nbsp; Water has an IOR of 1.33.&nbsp; In the glass example, do you know how many different IORs would need to be considered, in order to accurately render the scene so that it matches reality?</p>
<p>Three: 1.00 for the air, 1.33 for the water in the glass, and 1.52 for the water glass.&nbsp; That will get you the ballpark result.&nbsp; Why just ballpark?&nbsp; Well, the straw would also have an IOR, as all materials in our universe have an IOR, even those that we may percieve as opaque.&nbsp; Even opaque materials have some penetration of light, which is why you can use Fresnel shaders and SSS shaders on anything.&nbsp; Fortunately, you can decide when to say when, and concentrate only on those materials that really need to react to light with the proper IOR.</p>
<p>&nbsp;</p>
<p><a href="http://www.cineversity.com/wiki/Category:Glossary/" title="Category:Glossary">Category:Glossary</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Materials/" title="Category:Materials">Category:Materials</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Rendering/" title="Category:Rendering">Category:Rendering</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Color Space</title>
      <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/Color_Space/" />
      <id>tag:cineversity.com,2012:wiki:Color Space/103.432</id>
      <published>2012-04-11T03:10:51Z</published>
      <updated>2012-04-11T03:10:51Z</updated>
      <author>
            <name>jayroth</name>
            <email></email>
      </author>
      <content type="html"><![CDATA[
        <p><strong>Color Space</strong> refers to the actual color space that your project is working within, as well as the color spaces from which your contributing assets have been created.&nbsp; Typically, the color space you will see is RGB if your work originates on video or film, or CMYK if your color space is targeted to print.&nbsp; Color space describes the components that are used to specify a color.&nbsp; That is, the R defines the red color, B defines the blue, G defines the green, and so on.&nbsp; Color space does NOT refer to the color capacity, or color depth.&nbsp; </p>
<p>There are many different color spaces in use in DCC apps today.&nbsp; Adobe Photoshop has a fairly complete list of color spaces in that application&#8217;s color system.&nbsp; Not all color spaces are created equal; in fact, the reason that we have so many color spaces is due to the fact that there is no single color space that addresses all of the needs of those using computer imaging.&nbsp; Some color spaces are very similar, if not identical, such as Hue, Saturation and Luminance (HSL) and Hue, Saturation and Value (HSV).&nbsp; Incidentally, if you are working with lighting values, and you wish to animate them (like nightclub lighting), use HSV or HSL, as you can change color by animating the Hue&#8212;otherwise the color luminance and saturation will change, which is not typically something you want.&nbsp; And herein lies a good example of why you would want a color space other than RGB.</p>
<p>Typically, synthetic imaging like 3D rendering applications, tend to favor RGB, HSV/HSL and to a lesser degree, CMYK.&nbsp; Renderers always render in linear space.&nbsp; </p>
<p>Some color spaces favor certain colors or values over others.&nbsp; RGB favors brighter colors, and as a result, darker colors will show banding, requiring you to use dithering options if available.&nbsp; You can see how color systems favor colors in a curve plot.&nbsp; Further, were you to overlay different curve plots for different color systems on top of each other, you would clearly see that some colors in some systems are not even available in others.&nbsp; RGB and CMYK are examples of this, as are color spaces operating within different bit depths.&nbsp; Prior to the transition to digital television, the NTSC color space was shifted from the RGB spectrum. This was clear whenever the color orange was present, as orange is very strong as a color in the NTSC color space, while strong oranges in RGB are harder to achieve.</p>
<p>Fortunately, most of those problems are a thing of the past now.&nbsp; Digital displays are displacing analog tube-displays (CRTs), even though the analog displays can offer truer color rendering than liquid crystal displays (LCD).&nbsp; Fortunately, display manufacturers are adressing these issues.&nbsp; This discussion has long term impact, since theatrical projection is now digital in many markets, and will be in all markets soon.&nbsp; Digital projection systems have different color characteristics than your typical computer monitor (and they are much more expensive), so its wise to have a color check in a facility with the proper equipment if you are doing feature film work.&nbsp; If not, you might end up with some very upset clients on your hands.</p>
<p>&nbsp;</p>
<p><a href="http://www.cineversity.com/wiki/Category:Glossary/" title="Category:Glossary">Category:Glossary</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Compositing/" title="Category:Compositing">Category:Compositing</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Rendering/" title="Category:Rendering">Category:Rendering</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Dithering</title>
      <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/Dithering/" />
      <id>tag:cineversity.com,2012:wiki:Dithering/204.430</id>
      <published>2012-04-11T02:47:32Z</published>
      <updated>2012-04-11T02:47:32Z</updated>
      <author>
            <name>jayroth</name>
            <email></email>
      </author>
      <content type="html"><![CDATA[
        <p><strong>Dithering </strong>is an imaging method used to add additional levels of shading where none actually exist.&nbsp; In the dark ages of computer graphics, where everything was either black or white, dithering was implemented to simulate shading.&nbsp; Several different forms of dithering was developed, and are often still available today.&nbsp; The most popular has been the summation dither, as it tends to offer the most natural results.</p>
<p>Dithering uses various noise patterns to blend between values.&nbsp; As computer graphics moved from black and white to 256 shades of gray, on through 256 shades of color, and even today, with 24 bit color and beyond, dithering is still useful.&nbsp; If you are asking yourself, &#8220;why?&#8221; the answer is because there is no color system on a computer that can mimic the ability of the human eye to see the vast amount of colors that we perceive, and at infinite resolution.&nbsp; In addition, color systems are not linear in response.&nbsp; If you were to view a color system like RGB as a curve, you would see that 24 bit RGB favors brighter colors over darker ones.&nbsp; As a result, even though you may have 24 bit color, you will perceive bands (&#8220;mach bands&#8221;) of color in the shadows.&nbsp; Fortunately, you can use dithering to hide these bands, and the result is very effective.&nbsp; And, because the dithering appears as noise, we accept the result since the look mimics film grain.</p>
<p>&nbsp;</p>
<p><a href="http://www.cineversity.com/wiki/Category:Glossary/" title="Category:Glossary">Category:Glossary</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Materials/" title="Category:Materials">Category:Materials</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Rendering/" title="Category:Rendering">Category:Rendering</a></p>
      ]]></content>
    </entry>

    <entry>
      <title>Gradient</title>
      <link rel="alternate" type="text/html" href="http://www.cineversity.com/wiki/Gradient/" />
      <id>tag:cineversity.com,2012:wiki:Gradient/203.429</id>
      <published>2012-04-11T02:38:46Z</published>
      <updated>2012-04-11T02:38:46Z</updated>
      <author>
            <name>jayroth</name>
            <email></email>
      </author>
      <content type="html"><![CDATA[
        <p>A <strong>Gradient </strong>is a ramp of value or color that interpolates between values.&nbsp; Gradients can be used directly in an image, often as a background, or they can be incorporated within shaders.&nbsp; Gradients are so powerful that every DCC application uses them in one from or another.&nbsp; They are easy to use and easy to control.&nbsp; Quite often, you provide starting and ending colors, with inbetween colors as needed.&nbsp; Then, you choose the interpolation method for the colors or values, and that&#8217;s it!&nbsp; You&#8217;re done, and the gradient is ready to go to work for you.</p>
<p>&nbsp;</p>
<p><a href="http://www.cineversity.com/wiki/Category:Glossary/" title="Category:Glossary">Category:Glossary</a></p>
<p><a href="http://www.cineversity.com/wiki/Category:Materials/" title="Category:Materials">Category:Materials</a></p>
      ]]></content>
    </entry>


</feed>
