Difference between revisions of "Documentation Talk:Tutorial Section 3.7"
Jholsenback (talk | contribs) m (continued wip ... more later) |
Jholsenback (talk | contribs) m (done with this subsection) |
||
(11 intermediate revisions by the same user not shown) | |||
Line 56: | Line 56: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA01.png|center|220px<!-- | + | [[Image:TutImgRadA01.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA03.png|center|220px<!-- | + | [[Image:TutImgRadA03.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0103.png|center|220px<!-- | + | [[Image:TutImgRadA0103.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 84: | Line 84: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA02.png|center|220px<!-- | + | [[Image:TutImgRadA02.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA99.png|center|220px<!-- | + | [[Image:TutImgRadA99.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA03.png|center|220px<!-- | + | [[Image:TutImgRadA03.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 106: | Line 106: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0299.png|center|220px<!-- | + | [[Image:TutImgRadA0299.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0399.png|center|220px<!-- | + | [[Image:TutImgRadA0399.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | <p class="caption">default settings | + | <p class="caption">default settings difference</p> |
</td> | </td> | ||
<td> | <td> | ||
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">tutorial reference settings | + | <p class="caption">tutorial reference settings difference</p> |
</td> | </td> | ||
</tr> | </tr> | ||
Line 131: | Line 131: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA04.png|center|220px<!-- | + | [[Image:TutImgRadA04.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA03.png|center|220px<!-- | + | [[Image:TutImgRadA03.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA05.png|center|220px<!-- | + | [[Image:TutImgRadA05.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 158: | Line 158: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA06.png|center|220px<!-- | + | [[Image:TutImgRadA06.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA07.png|center|220px<!-- | + | [[Image:TutImgRadA07.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA08.png|center|220px<!-- | + | [[Image:TutImgRadA08.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 183: | Line 183: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0306.png|center|220px<!-- | + | [[Image:TutImgRadA0306.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0307.png|center|220px<!-- | + | [[Image:TutImgRadA0307.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0308.png|center|220px<!-- | + | [[Image:TutImgRadA0308.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | <p class="caption">recursion_limit 1 | + | <p class="caption">recursion_limit 1 difference</p> |
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">recursion_limit 2 | + | <p class="caption">recursion_limit 2 difference</p> |
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">recursion_limit 5 | + | <p class="caption">recursion_limit 5 difference</p> |
</td> | </td> | ||
</tr> | </tr> | ||
Line 210: | Line 210: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA09.png|center|220px<!-- | + | [[Image:TutImgRadA09.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA10.png|center|220px<!-- | + | [[Image:TutImgRadA10.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA11.png|center|220px<!-- | + | [[Image:TutImgRadA11.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 230: | Line 230: | ||
</td> | </td> | ||
</tr> | </tr> | ||
− | |||
− | |||
− | |||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0309.png|center|220px<!-- | + | [[Image:TutImgRadA0309.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0310.png|center|220px<!-- | + | [[Image:TutImgRadA0310.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0311.png|center|220px<!-- | + | [[Image:TutImgRadA0311.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | <p class="caption">error_bound 0.01 | + | <p class="caption">error_bound 0.01 difference</p> |
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">error_bound 1.0 | + | <p class="caption">error_bound 1.0 difference</p> |
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">error_bound 1.8 | + | <p class="caption">error_bound 1.8 difference</p> |
</td> | </td> | ||
</tr> | </tr> | ||
Line 262: | Line 259: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA12.png|center|220px<!-- | + | [[Image:TutImgRadA12.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA03.png|center|220px<!-- | + | [[Image:TutImgRadA03.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA13.png|center|220px<!-- | + | [[Image:TutImgRadA13.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 284: | Line 281: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0312.png|center|220px<!-- | + | [[Image:TutImgRadA0312.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA0313.png|center|220px<!-- | + | [[Image:TutImgRadA0313.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | <p class="caption">low_error_factor 0.01 | + | <p class="caption">low_error_factor 0.01 difference</p> |
</td> | </td> | ||
<td> | <td> | ||
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">low_error_factor 1.0 | + | <p class="caption">low_error_factor 1.0 difference</p> |
</td> | </td> | ||
</tr> | </tr> | ||
Line 307: | Line 304: | ||
<p class="Note"><strong>Note:</strong> Until otherwise noted the following settings are being used to emphasize the effects of the next parameters we'll be examining.</p> | <p class="Note"><strong>Note:</strong> Until otherwise noted the following settings are being used to emphasize the effects of the next parameters we'll be examining.</p> | ||
− | |||
<ul> | <ul> | ||
<li><code>recursion_limit 1</code></li> | <li><code>recursion_limit 1</code></li> | ||
Line 313: | Line 309: | ||
<li><code>low_error_factor 1.0</code></li> | <li><code>low_error_factor 1.0</code></li> | ||
</ul> | </ul> | ||
− | + | <p></p> | |
<table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA15.png|center|220px<!-- | + | [[Image:TutImgRadA15.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA16.png|center|220px<!-- | + | [[Image:TutImgRadA16.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA17.png|center|220px<!-- | + | [[Image:TutImgRadA17.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 339: | Line 335: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA1415.png|center|220px<!-- | + | [[Image:TutImgRadA1415.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA1416.png|center|220px<!-- | + | [[Image:TutImgRadA1416.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA1417.png|center|220px<!-- | + | [[Image:TutImgRadA1417.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | <p class="caption">count 2 | + | <p class="caption">count 2 difference</p> |
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">count 35 | + | <p class="caption">count 35 difference</p> |
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">count 1000 | + | <p class="caption">count 1000 difference</p> |
</td> | </td> | ||
</tr> | </tr> | ||
Line 366: | Line 362: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA18.png|center|220px<!-- | + | [[Image:TutImgRadA18.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA19.png|center|220px<!-- | + | [[Image:TutImgRadA19.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA20.png|center|220px<!-- | + | [[Image:TutImgRadA20.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 388: | Line 384: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA1418.png|center|220px<!-- | + | [[Image:TutImgRadA1418.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA1419.png|center|220px<!-- | + | [[Image:TutImgRadA1419.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA1420.png|center|220px<!-- | + | [[Image:TutImgRadA1420.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | <p class="caption">nearest_count 1 | + | <p class="caption">nearest_count 1 difference</p> |
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">nearest_count 5 | + | <p class="caption">nearest_count 5 difference</p> |
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">nearest_count 20 | + | <p class="caption">nearest_count 20 difference</p> |
</td> | </td> | ||
</tr> | </tr> | ||
Line 412: | Line 408: | ||
<p><code>minimum_reuse</code> influences at which minimum distance previous radiosity samples are always reused during calculation, affecting quality and smoothness in nooks and corners. Higher values generally give a smoother appearance, at the cost of corner detail, while lower values may cause corners to look splotchy unless the other parameters (most notably <code>count</code> and <code>nearest_count</code>) are set for higher quality as well.</p> | <p><code>minimum_reuse</code> influences at which minimum distance previous radiosity samples are always reused during calculation, affecting quality and smoothness in nooks and corners. Higher values generally give a smoother appearance, at the cost of corner detail, while lower values may cause corners to look splotchy unless the other parameters (most notably <code>count</code> and <code>nearest_count</code>) are set for higher quality as well.</p> | ||
− | <p>As <code>minimum_reuse</code> must be lower than <code>maximum_reuse</code>, to avoid a parse error with the highest setting we're using <code>minimum_reuse | + | <p>As <code>minimum_reuse</code> must be lower than <code>maximum_reuse</code>, to avoid a parse error with the highest setting we're using <code>maximum_reuse 0.4</code> and the <code>minimum_reuse 0.005</code> case, was used for the comparison with these next three images.</p> |
<table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA22.png|center|220px<!-- | + | [[Image:TutImgRadA22.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image: | + | [[Image:TutImgRadA21.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image: | + | [[Image:TutImgRadA23.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 431: | Line 427: | ||
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">minimum_reuse 0. | + | <p class="caption">minimum_reuse 0.005</p> |
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">minimum_reuse 0. | + | <p class="caption">minimum_reuse 0.015</p> |
</td> | </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA2122.png|center|220px<!-- | + | [[Image:TutImgRadA2122.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | |||
</td> | </td> | ||
<td> | <td> | ||
+ | [[Image:TutImgRadA2123.png|center|220px<!--rightpanel--->]] | ||
</td> | </td> | ||
</tr> | </tr> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | <p class="caption">minimum_reuse 0.2 | + | <p class="caption">minimum_reuse 0.2 difference</p> |
</td> | </td> | ||
<td> | <td> | ||
− | |||
</td> | </td> | ||
<td> | <td> | ||
+ | <p class="caption">minimum_reuse 0.015 difference</p> | ||
</td> | </td> | ||
</tr> | </tr> | ||
</table> | </table> | ||
− | <p>Another important | + | <p>Another important setting is <code>pretrace_end</code>. It specifies how many pretrace steps are calculated and thereby strongly influences the speed. Usually lower values lead to better quality, but it is important to keep this in good relation to <code>error_bound</code>.</p> |
<table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA24.png|center|220px<!-- | + | [[Image:TutImgRadA24.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA14.png|center|220px<!-- | + | [[Image:TutImgRadA14.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA25.png|center|220px<!-- | + | [[Image:TutImgRadA25.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 486: | Line 482: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA1424.png|center|220px<!-- | + | [[Image:TutImgRadA1424.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA1425.png|center|220px<!-- | + | [[Image:TutImgRadA1425.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 506: | Line 502: | ||
</table> | </table> | ||
− | <p>Normally in the final trace no additional radiosity samples are taken unless absolutely needed. You can change this by adding <code>always_sample on</code> | + | <p>Normally in the final trace no additional radiosity samples are taken unless absolutely needed. You can change this by adding <code>always_sample on</code> allowing you to increase <code>pretrace_end</code> to speed up rendering. Note however that this is very prone to artifacts such as visible render block boundaries and horizontal "smearing", so it is usually only useful for test renders. You should also use a low setting for <code>nearest_count</code>, or you may actually <em>increase</em> the rendering time, <em>and</em> the probability of getting the mentioned artifacts!.</p> |
<table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA14.png|center|220px<!-- | + | [[Image:TutImgRadA14.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image: | + | [[Image:TutImgRadA1426.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image: | + | [[Image:TutImgRadA26.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 523: | Line 519: | ||
<td> | <td> | ||
<p class="caption">always_sample off</p> | <p class="caption">always_sample off</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">always_sample on difference</p> | ||
</td> | </td> | ||
<td> | <td> | ||
<p class="caption">always_sample on</p> | <p class="caption">always_sample on</p> | ||
− | |||
− | |||
− | |||
</td> | </td> | ||
</tr> | </tr> | ||
Line 538: | Line 534: | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA27.png|center|220px<!-- | + | [[Image:TutImgRadA27.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA28.png|center|220px<!-- | + | [[Image:TutImgRadA28.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA14.png|center|220px<!-- | + | [[Image:TutImgRadA14.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 560: | Line 556: | ||
</table> | </table> | ||
− | <p>You can strongly affect things with | + | <p>You can strongly affect things with an object's <!--<linkto "Finish">finishes</linkto>--->[[Documentation:Reference Section 5.1#Finish|finish]] attributes. In fact that is the most important thing about radiosity. Normal objects should have an <code>emission 0</code> (the default) finish. Objects with an emission setting greater than zero actually act as light sources in radiosity scenes. Remember that the default finish values used until now were <code>diffuse 0.65</code> and <code>emission 0</code>.</p> |
− | |||
− | |||
<table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA29.png|center|220px<!-- | + | [[Image:TutImgRadA29.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA30.png|center|220px<!-- | + | [[Image:TutImgRadA30.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA31.png|center|220px<!-- | + | [[Image:TutImgRadA31.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 590: | Line 584: | ||
<p>Finally you can vary the sky in outdoor radiosity scenes. In all these examples it is implemented with a sphere object. | <p>Finally you can vary the sky in outdoor radiosity scenes. In all these examples it is implemented with a sphere object. | ||
− | <code>finish { emission 1 diffuse 0 }</code> and the pigment of the original sample scene were used until now. The following images show some variations | + | <code>finish { emission 1 diffuse 0 }</code> and the pigment of the original sample scene were used until now. The following images show some variations.</p> |
<table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
<tr> | <tr> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA32.png|center|220px<!-- | + | [[Image:TutImgRadA32.png|center|220px<!--leftpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA33.png|center|220px<!-- | + | [[Image:TutImgRadA33.png|center|220px<!--centerpanel--->]] |
</td> | </td> | ||
<td> | <td> | ||
− | [[Image:TutImgRadA34.png|center|220px<!-- | + | [[Image:TutImgRadA34.png|center|220px<!--rightpanel--->]] |
</td> | </td> | ||
</tr> | </tr> | ||
Line 612: | Line 606: | ||
</td> | </td> | ||
<td> | <td> | ||
− | <p class="caption">rgb | + | <p class="caption">rgb <1,0.8,0> to blue 1 gradient</p> |
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | ====Radiosity without conventional lighting==== | ||
+ | <!--<indexentry primary "Radiosity, without conventional lighting">---> | ||
+ | <p>Radiosity also allows us to have scenes <em>without</em> conventional light sources. What's left is a situation that's similar to what you'd expect on a cloudy day where the light comes from no specific direction but from the whole sky.</p> | ||
+ | <p>Reminder: The following settings are <em>still</em> in effect.</p> | ||
+ | <ul> | ||
+ | <li> <code>recursion_limit 1</code></li> | ||
+ | <li> <code>error_bound 0.2</code></li> | ||
+ | <li> <code>low_error_factor 1.0</code></li> | ||
+ | </ul> | ||
+ | <p>You can see that when the light source is removed the whole image takes on a noticeable blue tint. That's because the scene is now illuminated by our sky object, which in this case happens to be blue. Later on you'll see how varying the color of the sky influences the appearance of the scene.</p> | ||
+ | |||
+ | <table class="matte" width="470px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadA14.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB_35.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">with light source</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">without light source</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <p class="Note"><strong>Note:</strong> We'll be using the sample scene <code>~/scenes/radiosity/radiosity3.pov</code> for the rest of this tutorial.</p> | ||
+ | |||
+ | <p>This next series of images show our new test object with the default settings, then our reference settings, and lastly those maddeningly high-quality settings we used earlier. Notice that with the default settings, the image looks much worse than in the first part of this tutorial. The reason being, those settings were mainly selected for use with a conventionally lit scene. Keep in mind, radiosity-only scenes are less forgiving of low-quality settings.</p> | ||
+ | |||
+ | <p class="Note"><strong>Note:</strong> As a reminder you might want to refer back to the reference [[Documentation:Tutorial Section 3.7#Radiosity with conventional lighting|settings]] used at the beginning of this tutorial.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB01.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB_22.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB99.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">default settings</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">tutorial reference settings</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">maddeningly high-quality settings</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <p>The following images demonstrate the effect of different settings for <code>recursion_limit</code>.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB03.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB_22.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB04.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">recursion_limit 1</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">recursion_limit 3</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">recursion_limit 2</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB0203.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB0204.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">recursion_limit 1 difference</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">recursion_limit 2 difference</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <p>The next three images show the effect of <code>error_bound</code>. In scenes without light sources, this is even more important than than scenes that do. Good values mostly depend on the scenery and the other settings, lower values do not necessarily lead to better results. Note that we're using our <code>error_bound 0.5</code> image as reference.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB05.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB06.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB07.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">error_bound 0.01</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">error_bound 1.0</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">error_bound 1.8</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB0205.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB0206.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB0207.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">error_bound 0.01 difference</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">error_bound 1.0 difference</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">error_bound 1.8 difference</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <p>If there are artifacts it often helps to increase <code>count</code>, it does affect quality in general and often helps removing them, the following three images use <code>error_bound 0.2</code>.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB09.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB08.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB10.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">count 2</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">count 50</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">count 200</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB0809.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB0810.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">count 35 difference</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">count 150 difference</p> | ||
</td> | </td> | ||
</tr> | </tr> | ||
</table> | </table> | ||
+ | |||
+ | <p>As can be seen upon closer inspection however, this is no magic cure-all, some bright speckles remain even with extremely high <code>count</code> values.</p> | ||
+ | |||
+ | <p>In this case, the reason is that the pretrace is simply too short to provide the number of samples we aim for. This is a job for <code>pretrace_end</code>: Together with <code>pretrace_start</code> it specifies how many pretrace steps are done, and how high their resolution is. Lower values of <code>pretrace_end</code> lead to more pretrace steps and more accurate results but also to significantly slower rendering.</p> | ||
+ | |||
+ | <p>We're still using <code>error_bound 0.1</code> for these images.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB11.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB08.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB12.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">pretrace_end 0.4</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">pretrace_end 0.01</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">pretrace_end 0.001</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB0811.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB0812.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">pretrace_end 0.4 difference</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">pretrace_end 0.001 difference</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <p>This next sequence shows the effect of <code>nearest_count</code>, the difference is not very strong, but larger values always lead to better results, the maximum is 20. We'll be using <code>error_bound 0.5</code> again, but also the following modifications to emphasize the effect.</p> | ||
+ | |||
+ | <ul> | ||
+ | <li> <code>recursion_limit 1</code></li> | ||
+ | <li> <code>low_error_factor 1.0</code></li> | ||
+ | <li> <code>pretrace_end 0.001</code></li> | ||
+ | </ul> | ||
+ | <p class="Note"><strong>Note:</strong> From now on we'll stick to these values.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB14.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB15.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB16.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">nearest_count 2</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">nearest_count 5 (default)</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">nearest_count 20</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB1314.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB1315.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB1316.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">nearest_count 2 difference</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">nearest_count 5 difference</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">nearest_count 20 difference</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <p>The <code>minimum_reuse</code> is a geometric value related to the size of the render in pixels and affects whether previous radiosity calculations are reused at a new point. Lower values lead to more often and therefore more accurate calculations, but care must be taken to balance this setting with the others. The <code>minimum_reuse 0.05</code> was used for the comparison.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB17.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB13.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB18.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">minimum_reuse 0.1</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">minimum_reuse 0.05 (default)</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">minimum_reuse 0.015</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB1317.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB1318.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">minimum_reuse 0.1 difference</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">minimum_reuse 0.015 difference</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <p>In most cases it is not necessary to change the <code>low_error_factor</code>. This setting reduces the <code>error_bound</code> value during the final pretrace step. Changing this value can sometimes help to remove persistent artifacts.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB19.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB13.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB20.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">low_error_factor 0.01</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">low_error_factor 0.5 (default)</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">low_error_factor 1.0</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB1319.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB1320.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">low_error_factor 0.01 difference</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">low_error_factor 1.0 difference</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <p>The <code>gray_threshold</code> setting reduces the color in the radiosity calculations. As mentioned above the blue sky affects the color of the whole scene when radiosity is calculated. To reduce this coloring effect without affecting radiosity in general you can increase <code>gray_threshold</code>. A value of 1.0 means no color in radiosity at all.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB13.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB21.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB22.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">gray_threshold 0.0 (default)</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">gray_threshold 0.5</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">gray_threshold 1.0</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <p>It is worth experimenting with the things affecting radiosity to get some feeling for how things work. The next 3 images show some more experiments. We're back with the original reference settings from now on.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB23.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB24.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB25.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">emission 3 for two objects</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">all objects emission 0.3 sky gets 0</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">emission -3 for one object</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <p>Finally you can strongly change the appearance of the whole scene with the sky's texture. The following images give some examples.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB26.png|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB27.png|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB28.png|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">rgb <1,0.8,0> to blue gradient</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">light-dark gradient from left-right</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">light-dark gradient from bottom-top</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | <p></p> | ||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="tabletext">Really good results mostly depend on the single situation and how the scene is meant to look. We used these settings listed below, to get this example of a <em>higher quality</em> render of our test object. It's important to remember that requirements can be much different from scene to scene.</p> | ||
+ | <td> | ||
+ | [[Image:TutImgRadB29.png|center|320px<!--right--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">higher quality radiosity scene</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | <pre> | ||
+ | global_settings { | ||
+ | radiosity { | ||
+ | pretrace_start 0.128 | ||
+ | pretrace_end 0.002 | ||
+ | count 500 | ||
+ | nearest_count 20 | ||
+ | error_bound 0.5 | ||
+ | recursion_limit 2 | ||
+ | low_error_factor 1.0 | ||
+ | gray_threshold 0.0 | ||
+ | minimum_reuse 0.005 | ||
+ | maximum_reuse 0.1 | ||
+ | brightness 1 | ||
+ | adc_bailout 0.005 | ||
+ | } | ||
+ | } | ||
+ | </pre> | ||
+ | ====Normals and Radiosity==== | ||
+ | <!--<indexentry "Normals and Radiosity">---> | ||
+ | |||
+ | <p>When using a <!--<linkto "Normal">normal statement</linkto>--->[[Documentation:Reference Section 3.2#Normal and Radiosity|normal]] statement in combination with radiosity lighting, you will see that the shadowed parts of the objects are totally smooth, no matter how strong the normals are made. The reason is that POV-Ray by default does not take the normal into account when calculating radiosity. You can easily change this by adding <code>normal on</code> to the radiosity block. Be aware that this can slow things down quite a bit and will require more memory, however it usually leads to more realistic results.</p> | ||
+ | |||
+ | <p>When using normals you should also remember that they are only faked irregularities and do not generate real geometric disturbances of the surface. A more realistic approach is using an <!--<linkto "Isosurface Object">isosurface</linkto>--->[[Documentation:Reference Section 4.2#Isosurface Object|isosurface]] with a pigment function, but this can quickly lead to increased render times.</p> | ||
+ | <p>As you can see with this next series of images, the isosurface version does not have the same smooth-like appearance to it's circumference, as compared to the first two images. Notice that it also has a more realistic shadow-line.</p> | ||
+ | |||
+ | <table class="matte" width="700px" cellpadding="0" cellspacing="10px"> | ||
+ | <tr> | ||
+ | <td> | ||
+ | [[Image:TutImgRadC_01.jpg|center|220px<!--leftpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadC_02.jpg|center|220px<!--centerpanel--->]] | ||
+ | </td> | ||
+ | <td> | ||
+ | [[Image:TutImgRadC_03.jpg|center|220px<!--rightpanel--->]] | ||
+ | </td> | ||
+ | </tr> | ||
+ | <tr> | ||
+ | <td> | ||
+ | <p class="caption">normal off (default)</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">normal on</p> | ||
+ | </td> | ||
+ | <td> | ||
+ | <p class="caption">isosurface</p> | ||
+ | </td> | ||
+ | </tr> | ||
+ | </table> | ||
+ | |||
+ | ====Performance Considerations==== | ||
+ | <!--<indexentry "Radiosity performance considerations">---> | ||
+ | |||
+ | <p>High quality radiosity can be very slow. To some extent this is the price to pay for realistic lighting, but there are a lot of things that can be done to improve speed.</p> | ||
+ | |||
+ | <p>If average to good quality radiosity will work for your scene, then it's probably a good idea to spend the time to find the <em>sweet spot</em> that strikes the best balance between quality and speed. Especially <code>recursion_limit</code> should be kept as low as possible. Sometimes <code>1</code> is sufficient, if not <code>2</code> or <code>3</code> should often be enough.</p> | ||
+ | |||
+ | <p>With high quality settings, radiosity data can take quite a lot of memory. Apart from that the other scene data is also used much more intensively than in a conventional scene. Therefore insufficient memory and swapping can slow down things even more. Here's a few [[Documentation:Reference Section 1.3#Radiosity Options|radiosity options]] that might help.</p> | ||
+ | |||
+ | <p>Finally the scene geometry and textures are important too. Objects not visible in the camera usually only increase parsing time and memory use, but in a radiosity scene, also objects behind the camera can slow down the rendering process. See the section [[Documentation:Reference Section 3.2#Configuring Radiosity|Configuring Radiosity]] for some helpful hints.</p> |
Latest revision as of 00:50, 25 January 2011
Radiosity with conventional lighting
This section will introduce you to the technique of combining conventional and radiosity lighting. In this part of the tutorial, we'll be using basically the same sample scene that's located at ~/scenes/radiosity/radiosity2.pov
, however by changing various radiosity parameters, we'll be able to explore the effects that those changes can have on the scenes appearance and in some cases the render time. Later on, in this tutorial, you can find examples of pure radiosity illumination.
Note: Unless otherwise stated all the images in this section were rendered with the following radiosity settings:
global_settings { radiosity { pretrace_start 0.08 pretrace_end 0.01 count 150 nearest_count 10 error_bound 0.5 recursion_limit 3 low_error_factor 0.5 gray_threshold 0.0 minimum_reuse 0.005 maximum_reuse 0.2 brightness 1 adc_bailout 0.005 } }
Finally, a few more things about the scene setup. All objects except the sky have diffuse 0.65
and emission 0
in their finish block. The sky sphere has a bright blue pigment (what a surprise) with diffuse 0
and emission 1.0
as finish attributes.
Note: If using the sky_sphere
object, which does not support the finish
keyword, instead of a sphere
object that does, you will need define a #default
finish in order to affect it's finish properties.
For example:
#default {finish { diffuse 0 emission 1 }}
Hint: You can easily turn radiosity on/off with the use of a conditional statement.
#declare UseRad = yes; global_settings { #if (UseRad) radiosity { rad settings ... } #end }
OK, let's get started! In this set of images we first have the scene as it should appear without radiosity, in other words the radiosity
block has been removed, next with the settings noted above, and finally an image showing the difference between the two. Looking at the difference image, you can see that radiosity greatly affects the shadowed areas when applied in combination with conventional lighting.
Note: The use of emission 1
in the finish block of the blue sky is what gives the bluish touch of the whole scene in the radiosity version, as it functions as kind of a diffuse light source.
Radiosity is a highly tunable process, and it comes equipped with a variety of tunable parameters that make it easy to strike a balance between quality and rendering speed. However, as with most things, higher quality means more render time. Patience is a virtue.
For instance, let's examine our test object with default settings, with our reference settings, and finally with some maddeningly high-quality settings. For comparison, below each image you can see the difference to the high-quality version.
Changing the brightness
changes the intensity of radiosity effects. Theoretically specifying brightness 0
would be the same as without radiosity, however in practice POV-Ray doesn't accept a zero value. As a rule brightness 1
should work correctly in most cases. If the effects are too strong you can reduce this, though this is not recommended, as it's usually an indication that your textures are too bright and your illumination too dim. Larger values can lead to quite strange results in most cases.
The recursion_limit
setting primarily affects the brightness of shadows, nooks and corners. The following group of images show the results of setting this parameter to 1, 2 and 5 respectively ...
... while this next grouping shows the difference when compared to our reference setting of recursion_limit 3
. As you can see, values higher than 3 do not lead to any better results in such a quite simple scene. In most cases values of 1 or 2 are sufficient, especially for outdoor scenes.
The error_bound
setting mainly affects the structures of the shadows. Values larger than the default of 1.8 do not have much effect, they make the shadows even flatter. Extremely low values can lead to very good results, but the rendering time can become very long, and you may need to modify other parameters to avoid a grainy appearance.
Somewhat related to error_bound is low_error_factor
. It reduces error_bound setting during the pretrace phase, changing this can be useful to eliminate artifacts. The difference images used the low_error_factor 0.5
case for comparison.
This next sequence of images illustrate the effect of count
. It is a general quality and accuracy parameter leading to higher quality and slower rendering at higher values. Keep in mind that higher count
isn't necessarily a cure-for-all when it comes to quality. The difference images were compared to a count 150
case.
Note: Until otherwise noted the following settings are being used to emphasize the effects of the next parameters we'll be examining.
recursion_limit 1
error_bound 0.2
low_error_factor 1.0
Another parameter that affects quality is nearest_count
. You can use values ranging from 1 to 20 the default is 5. Just like count
, higher values can lead to less artifacts and smoother appearance but slower rendering. The nearest_count
setting also accepts a second parameter, which activates adaptive pretrace, providing a good means of speeding up pretrace without significant loss of quality (not shown here) the value must be smaller than the first parameter (e.g. nearest_count 20,10
). When set, POV-Ray will stop pretracing individual areas of the image where the average sample density already satisfies this second value, thereby avoiding tracing low-detail areas over and over again for little gain, while still being able to drill down deep into high-detail areas. A setting of nearest_count 10
was used for the comparison.
minimum_reuse
influences at which minimum distance previous radiosity samples are always reused during calculation, affecting quality and smoothness in nooks and corners. Higher values generally give a smoother appearance, at the cost of corner detail, while lower values may cause corners to look splotchy unless the other parameters (most notably count
and nearest_count
) are set for higher quality as well.
As minimum_reuse
must be lower than maximum_reuse
, to avoid a parse error with the highest setting we're using maximum_reuse 0.4
and the minimum_reuse 0.005
case, was used for the comparison with these next three images.
Another important setting is pretrace_end
. It specifies how many pretrace steps are calculated and thereby strongly influences the speed. Usually lower values lead to better quality, but it is important to keep this in good relation to error_bound
.
Normally in the final trace no additional radiosity samples are taken unless absolutely needed. You can change this by adding always_sample on
allowing you to increase pretrace_end
to speed up rendering. Note however that this is very prone to artifacts such as visible render block boundaries and horizontal "smearing", so it is usually only useful for test renders. You should also use a low setting for nearest_count
, or you may actually increase the rendering time, and the probability of getting the mentioned artifacts!.
The effect of max_sample
is similar to brightness
. It does not reduce the radiosity effect in general but weakens samples with brightness above the specified value.
You can strongly affect things with an object's finish attributes. In fact that is the most important thing about radiosity. Normal objects should have an emission 0
(the default) finish. Objects with an emission setting greater than zero actually act as light sources in radiosity scenes. Remember that the default finish values used until now were diffuse 0.65
and emission 0
.
Finally you can vary the sky in outdoor radiosity scenes. In all these examples it is implemented with a sphere object.
finish { emission 1 diffuse 0 }
and the pigment of the original sample scene were used until now. The following images show some variations.
Radiosity without conventional lighting
Radiosity also allows us to have scenes without conventional light sources. What's left is a situation that's similar to what you'd expect on a cloudy day where the light comes from no specific direction but from the whole sky.
Reminder: The following settings are still in effect.
-
recursion_limit 1
-
error_bound 0.2
-
low_error_factor 1.0
You can see that when the light source is removed the whole image takes on a noticeable blue tint. That's because the scene is now illuminated by our sky object, which in this case happens to be blue. Later on you'll see how varying the color of the sky influences the appearance of the scene.
Note: We'll be using the sample scene ~/scenes/radiosity/radiosity3.pov
for the rest of this tutorial.
This next series of images show our new test object with the default settings, then our reference settings, and lastly those maddeningly high-quality settings we used earlier. Notice that with the default settings, the image looks much worse than in the first part of this tutorial. The reason being, those settings were mainly selected for use with a conventionally lit scene. Keep in mind, radiosity-only scenes are less forgiving of low-quality settings.
Note: As a reminder you might want to refer back to the reference settings used at the beginning of this tutorial.
The following images demonstrate the effect of different settings for recursion_limit
.
The next three images show the effect of error_bound
. In scenes without light sources, this is even more important than than scenes that do. Good values mostly depend on the scenery and the other settings, lower values do not necessarily lead to better results. Note that we're using our error_bound 0.5
image as reference.
If there are artifacts it often helps to increase count
, it does affect quality in general and often helps removing them, the following three images use error_bound 0.2
.
As can be seen upon closer inspection however, this is no magic cure-all, some bright speckles remain even with extremely high count
values.
In this case, the reason is that the pretrace is simply too short to provide the number of samples we aim for. This is a job for pretrace_end
: Together with pretrace_start
it specifies how many pretrace steps are done, and how high their resolution is. Lower values of pretrace_end
lead to more pretrace steps and more accurate results but also to significantly slower rendering.
We're still using error_bound 0.1
for these images.
This next sequence shows the effect of nearest_count
, the difference is not very strong, but larger values always lead to better results, the maximum is 20. We'll be using error_bound 0.5
again, but also the following modifications to emphasize the effect.
-
recursion_limit 1
-
low_error_factor 1.0
-
pretrace_end 0.001
Note: From now on we'll stick to these values.
The minimum_reuse
is a geometric value related to the size of the render in pixels and affects whether previous radiosity calculations are reused at a new point. Lower values lead to more often and therefore more accurate calculations, but care must be taken to balance this setting with the others. The minimum_reuse 0.05
was used for the comparison.
In most cases it is not necessary to change the low_error_factor
. This setting reduces the error_bound
value during the final pretrace step. Changing this value can sometimes help to remove persistent artifacts.
The gray_threshold
setting reduces the color in the radiosity calculations. As mentioned above the blue sky affects the color of the whole scene when radiosity is calculated. To reduce this coloring effect without affecting radiosity in general you can increase gray_threshold
. A value of 1.0 means no color in radiosity at all.
It is worth experimenting with the things affecting radiosity to get some feeling for how things work. The next 3 images show some more experiments. We're back with the original reference settings from now on.
Finally you can strongly change the appearance of the whole scene with the sky's texture. The following images give some examples.
Really good results mostly depend on the single situation and how the scene is meant to look. We used these settings listed below, to get this example of a higher quality render of our test object. It's important to remember that requirements can be much different from scene to scene. | |
global_settings { radiosity { pretrace_start 0.128 pretrace_end 0.002 count 500 nearest_count 20 error_bound 0.5 recursion_limit 2 low_error_factor 1.0 gray_threshold 0.0 minimum_reuse 0.005 maximum_reuse 0.1 brightness 1 adc_bailout 0.005 } }
Normals and Radiosity
When using a normal statement in combination with radiosity lighting, you will see that the shadowed parts of the objects are totally smooth, no matter how strong the normals are made. The reason is that POV-Ray by default does not take the normal into account when calculating radiosity. You can easily change this by adding normal on
to the radiosity block. Be aware that this can slow things down quite a bit and will require more memory, however it usually leads to more realistic results.
When using normals you should also remember that they are only faked irregularities and do not generate real geometric disturbances of the surface. A more realistic approach is using an isosurface with a pigment function, but this can quickly lead to increased render times.
As you can see with this next series of images, the isosurface version does not have the same smooth-like appearance to it's circumference, as compared to the first two images. Notice that it also has a more realistic shadow-line.
Performance Considerations
High quality radiosity can be very slow. To some extent this is the price to pay for realistic lighting, but there are a lot of things that can be done to improve speed.
If average to good quality radiosity will work for your scene, then it's probably a good idea to spend the time to find the sweet spot that strikes the best balance between quality and speed. Especially recursion_limit
should be kept as low as possible. Sometimes 1
is sufficient, if not 2
or 3
should often be enough.
With high quality settings, radiosity data can take quite a lot of memory. Apart from that the other scene data is also used much more intensively than in a conventional scene. Therefore insufficient memory and swapping can slow down things even more. Here's a few radiosity options that might help.
Finally the scene geometry and textures are important too. Objects not visible in the camera usually only increase parsing time and memory use, but in a radiosity scene, also objects behind the camera can slow down the rendering process. See the section Configuring Radiosity for some helpful hints.