<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.povray.org/content?action=history&amp;feed=atom&amp;title=Documentation%3ATutorial_Section_4.3</id>
	<title>Documentation:Tutorial Section 4.3 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.povray.org/content?action=history&amp;feed=atom&amp;title=Documentation%3ATutorial_Section_4.3"/>
	<link rel="alternate" type="text/html" href="https://wiki.povray.org/content?title=Documentation:Tutorial_Section_4.3&amp;action=history"/>
	<updated>2026-10-10T01:58:51Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.povray.org/content?title=Documentation:Tutorial_Section_4.3&amp;diff=1556&amp;oldid=prev</id>
		<title>Jholsenback: external link handling change after recent update</title>
		<link rel="alternate" type="text/html" href="https://wiki.povray.org/content?title=Documentation:Tutorial_Section_4.3&amp;diff=1556&amp;oldid=prev"/>
		<updated>2009-06-23T16:01:57Z</updated>

		<summary type="html">&lt;p&gt;external link handling change after recent update&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;col class=&quot;diff-marker&quot; /&gt;
				&lt;col class=&quot;diff-content&quot; /&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;2&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 16:01, 23 June 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l61&quot; &gt;Line 61:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 61:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;You may also contact any of the POV-Ray T.A.G. members with suggestions,&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;You may also contact any of the POV-Ray T.A.G. members with suggestions,&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;comments, or ideas for improvements to POV-Ray. You can learn more about the&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;comments, or ideas for improvements to POV-Ray. You can learn more about the&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;POV-Ray T.A.G. and their contact information on the [http://tag.povray.org&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;/|_new &amp;lt;span title=&amp;quot;Opens A New Window!&amp;quot;&amp;gt;&lt;/del&gt;TAG web page&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt;&lt;/del&gt;].&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;POV-Ray T.A.G. and their contact information on the [http://tag.povray.org TAG web page].&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l149&quot; &gt;Line 149:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 149:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;There is no official GUI done for the Unix version of POV-Ray. Some&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;There is no official GUI done for the Unix version of POV-Ray. Some&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;third-parties have tried to make some GUIs for it (and you might find them&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;third-parties have tried to make some GUIs for it (and you might find them&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;in the [http://povray.org/links/&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;|_new &amp;lt;span title=&amp;quot;Opens A New Window!&amp;quot;&amp;gt;&lt;/del&gt;links collection on our website&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt;&lt;/del&gt;])&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;in the [http://povray.org/links/ links collection on our website])&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;but it seems to be a general phenomenon that Unix people like to use just&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;but it seems to be a general phenomenon that Unix people like to use just&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;the command-line version with a proper and powerful text editor (such as&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;the command-line version with a proper and powerful text editor (such as&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l307&quot; &gt;Line 307:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 307:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;/p&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;This is a real problem that happens even to the best. For example, check&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;p&amp;gt;This is a real problem that happens even to the best. For example, check&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt;−&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #ffe49c; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;this [http://oz.irtc.org/ftp/pub/stills/1998-10-31/running.jpg&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;|_new &amp;lt;span title=&amp;quot;Opens A New Window!&amp;quot;&amp;gt;&lt;/del&gt;IRTC winner image&lt;del class=&quot;diffchange diffchange-inline&quot;&gt;&amp;lt;/span&amp;gt;&lt;/del&gt;]. Notice the straight shadow lines on the rocks (specially&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt;+&lt;/td&gt;&lt;td style=&quot;color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;this [http://oz.irtc.org/ftp/pub/stills/1998-10-31/running.jpg IRTC winner image]. Notice the straight shadow lines on the rocks (specially&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;in the closest rock)?&lt;/div&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;in the closest rock)?&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;td class='diff-marker'&gt; &lt;/td&gt;&lt;td style=&quot;background-color: #f8f9fa; color: #202122; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Jholsenback</name></author>
	</entry>
	<entry>
		<id>https://wiki.povray.org/content?title=Documentation:Tutorial_Section_4.3&amp;diff=1425&amp;oldid=prev</id>
		<title>Jholsenback: Protected &quot;Documentation:Tutorial Section 4.3&quot; [edit=sysop:move=sysop]</title>
		<link rel="alternate" type="text/html" href="https://wiki.povray.org/content?title=Documentation:Tutorial_Section_4.3&amp;diff=1425&amp;oldid=prev"/>
		<updated>2009-03-10T18:19:43Z</updated>

		<summary type="html">&lt;p&gt;Protected &amp;quot;&lt;a href=&quot;/content/Documentation:Tutorial_Section_4.3&quot; title=&quot;Documentation:Tutorial Section 4.3&quot;&gt;Documentation:Tutorial Section 4.3&lt;/a&gt;&amp;quot; [edit=sysop:move=sysop]&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:19, 10 March 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Jholsenback</name></author>
	</entry>
	<entry>
		<id>https://wiki.povray.org/content?title=Documentation:Tutorial_Section_4.3&amp;diff=1401&amp;oldid=prev</id>
		<title>Jholsenback: 1 revision(s)</title>
		<link rel="alternate" type="text/html" href="https://wiki.povray.org/content?title=Documentation:Tutorial_Section_4.3&amp;diff=1401&amp;oldid=prev"/>
		<updated>2009-03-10T18:02:53Z</updated>

		<summary type="html">&lt;p&gt;1 revision(s)&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left diff-editfont-monospace&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr class=&quot;diff-title&quot; lang=&quot;en&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: #fff; color: #202122; text-align: center;&quot;&gt;Revision as of 18:02, 10 March 2009&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-notice&quot; lang=&quot;en&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(No difference)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Jholsenback</name></author>
	</entry>
	<entry>
		<id>https://wiki.povray.org/content?title=Documentation:Tutorial_Section_4.3&amp;diff=1400&amp;oldid=prev</id>
		<title>WikiSysop: /* Can this problem be solved? */</title>
		<link rel="alternate" type="text/html" href="https://wiki.povray.org/content?title=Documentation:Tutorial_Section_4.3&amp;diff=1400&amp;oldid=prev"/>
		<updated>2009-03-06T16:13:12Z</updated>

		<summary type="html">&lt;p&gt;&lt;span dir=&quot;auto&quot;&gt;&lt;span class=&quot;autocomment&quot;&gt;Can this problem be solved?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;!--&amp;lt;wikitalk&amp;gt;---&amp;gt;&lt;br /&gt;
&amp;lt;table width=100% border=1 cellspacing=0 cellpadding=5&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td width=100% bgcolor=#FFEEEE&amp;gt;&lt;br /&gt;
This document is protected, so submissions, corrections and discussions should be held on this documents [[Documentation_Talk:Tutorial Section 4.3|talk]] page.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;/wikitalk&amp;gt;---&amp;gt;&lt;br /&gt;
===Does POV-Ray support 3DNow?===&lt;br /&gt;
&amp;lt;p&amp;gt;No, and most likely never will.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;There are several good reasons for this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;3DNow uses single precision numbers while POV-Ray needs (yes, it needs)&lt;br /&gt;
double precision numbers. Single precision is not enough (this has been&lt;br /&gt;
tested in practice).&amp;lt;br&amp;gt;&lt;br /&gt;
(To better understand the difference between single and double precision&lt;br /&gt;
numbers, imagine that you could represent values between 0 and 1000 with&lt;br /&gt;
single precision numbers. With double precision numbers you do not get&lt;br /&gt;
a scale from 0 to 2000 (as one might think), but from 0 to 1000000. The&lt;br /&gt;
difference is enormous and single precision is not precise enough for&lt;br /&gt;
what POV-Ray does.)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Adding support for 3DNow (or any other CPU-specific feature) to POV-Ray&lt;br /&gt;
would make it platform-dependant and not portable. Of course one could&lt;br /&gt;
make a separate binary for AMD supporting 3DNow, but there are only&lt;br /&gt;
two ways of doing this:&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Compiling POV-Ray with a compiler which automatically can make&lt;br /&gt;
  3DNow code from C. As far as I know, no such compiler exists&lt;br /&gt;
which converts double precision math used in POV-Ray to single&lt;br /&gt;
precision math needed by 3DNow. I do not event know if there is any&lt;br /&gt;
compiler that supports 3DNow at all.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Changing the source code by hand in order to use 3DNow instructions.&lt;br /&gt;
  This is a whole lot of work (specially because you will probably have&lt;br /&gt;
to use inline assembler). The source code of POV-Ray is not very&lt;br /&gt;
small. Would it be worth the efforts?&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Note: There are a few things in POV-Ray that use single&lt;br /&gt;
precision math (such as color handling). This is one field where some&lt;br /&gt;
optimization might be possible without degrading the image quality.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Miscellaneous questions===&lt;br /&gt;
&lt;br /&gt;
===Where do I suggest new features?===&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;amp;quot;I would like to suggest some new features for the program.&lt;br /&gt;
Who should I talk to?&amp;amp;quot;&amp;lt;/em&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This is best discussed on the Pov news groups (news.povray.org) in both&lt;br /&gt;
the general news group and the windows news group. The Pov team does&lt;br /&gt;
skim through the message posted there and occasionaly impliment&lt;br /&gt;
ideas that have been posted by users.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;You may also contact any of the POV-Ray T.A.G. members with suggestions,&lt;br /&gt;
comments, or ideas for improvements to POV-Ray. You can learn more about the&lt;br /&gt;
POV-Ray T.A.G. and their contact information on the [http://tag.povray.org/|_new &amp;lt;span title=&amp;quot;Opens A New Window!&amp;quot;&amp;gt;TAG web page&amp;lt;/span&amp;gt;].&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===I'm getting a &amp;quot;Illegal grid value in dda_traversal()&amp;quot;===&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;amp;quot;When I render a height field I get lots of warning messages saying&lt;br /&gt;
&amp;amp;quot;Illegal grid value in dda_traversal()&amp;amp;quot;. How can I correct&lt;br /&gt;
that?&amp;amp;quot;&amp;lt;/em&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;(Answer by Jerry Anning)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Basically, you have a ray going &amp;amp;quot;between the cracks&amp;amp;quot; of&lt;br /&gt;
the height field due to an arithmetic accuracy problem.  Sometimes it&lt;br /&gt;
does no harm.  Sometime you get black dot or line artifacts.  I know of&lt;br /&gt;
no successful patch so far.  I also know no completely reliable&lt;br /&gt;
workaround.  The best bet is to slightly joggle the camera position&lt;br /&gt;
and/or angle.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===No beep when finished?===&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;amp;quot;How can I get rid of the beep after POV-Ray has calculated the image&amp;amp;quot;&lt;br /&gt;
&amp;lt;/em&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Usually using the &amp;lt;code&amp;gt;-P&amp;lt;/code&amp;gt; command-line option should help&lt;br /&gt;
(POV-Ray will not&lt;br /&gt;
pause after it has calculated the image). If you are using the windows version&lt;br /&gt;
of POV-Ray, you can try Render -&amp;amp;gt; On Completion -&amp;amp;gt; Remove [v] in front&lt;br /&gt;
of &amp;amp;quot;Beep&amp;amp;quot;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===POV-Ray viruses?===&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;amp;quot;Are there any POV-Ray viruses out there? Can one be done?&amp;amp;quot;&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;At the time of writing this documentation, no known viruses or trojans&lt;br /&gt;
made with the POV-Ray Scene Description Language (SDL) are known to&lt;br /&gt;
exist.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Due to the properties of the POV-Ray SDL, writing a working virus&lt;br /&gt;
(that is, a piece of code which spreads, without the user knowing,&lt;br /&gt;
by copying itself to non-infected files) is very difficult, if not&lt;br /&gt;
impossible to do. The main obstacle in making a POV-Ray virus is&lt;br /&gt;
that there is no way for the SDL code to reside in memory, infecting&lt;br /&gt;
files when it sees them; another problem is that there is no way to&lt;br /&gt;
get file listings in the POV-Ray SDL, so the code cannot infect other&lt;br /&gt;
.pov files at parse time.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;However, trojans (i.e. a malicious piece of code which attempts to&lt;br /&gt;
harm the system, but will not infect other files) are much more likely.&lt;br /&gt;
It is possible with the POV-Ray SDL to open a file and write&lt;br /&gt;
practically anything to it. This can be used to cause severe damage&lt;br /&gt;
to an unprotected file system.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Note, however, that in POV-Ray 3.5 the concept of I/O restrictions&lt;br /&gt;
was introduced in order to protect the user from these kinds of&lt;br /&gt;
malicious scripts. Setting the I/O restrictions properly will&lt;br /&gt;
prevent the SDL from being able to open files for writing (and&lt;br /&gt;
optionally even for reading). You should check that your copy of&lt;br /&gt;
POV-Ray 3.5 has these restrictions properly set, especially if you&lt;br /&gt;
render files not made by you. Note, however, that not all versions of&lt;br /&gt;
POV-Ray 3.5 for different platforms may have these restrictions implemented.&lt;br /&gt;
Consult section 1 of the POV-Ray 3.5 documentation for more details about the&lt;br /&gt;
I/O restrictions.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Regardless of this, it is always a good idea to run only scripts which&lt;br /&gt;
you have received from trusted sources. This is particularly true if&lt;br /&gt;
you are using a version of POV-Ray older than 3.5.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The POV-Ray community consists mostly of benevolent people and it is&lt;br /&gt;
generally safe to try POV-Ray scripts made by them. However, it is&lt;br /&gt;
often better to be safe than to be sorry.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===GUI for Unix POV-Ray?===&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;em&amp;gt;&amp;amp;quot;Does POV-Ray for Unix have a GUI like in Windows?&amp;amp;quot;&amp;lt;/em&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;No.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;POV-Ray has always been a command-line utility. Even the core code of&lt;br /&gt;
POV-Ray for Windows is exactly the same as the generic command-line POV-Ray.&lt;br /&gt;
The graphical interfaces of the Windows and Mac versions of POV-Ray are&lt;br /&gt;
exclusive to them (and non-portable). They are much like separate &amp;amp;quot;add-ons&amp;amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;There is no official GUI done for the Unix version of POV-Ray. Some&lt;br /&gt;
third-parties have tried to make some GUIs for it (and you might find them&lt;br /&gt;
in the [http://povray.org/links/|_new &amp;lt;span title=&amp;quot;Opens A New Window!&amp;quot;&amp;gt;links collection on our website&amp;lt;/span&amp;gt;])&lt;br /&gt;
but it seems to be a general phenomenon that Unix people like to use just&lt;br /&gt;
the command-line version with a proper and powerful text editor (such as&lt;br /&gt;
Emacs).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;I am sorry but there is no advice right now here about how to configure&lt;br /&gt;
Emacs in order to smoothly handle POV-Ray file editing, but I might write&lt;br /&gt;
a page about that some day, when I have the time.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===The shadow line artifact===&lt;br /&gt;
&lt;br /&gt;
===What is the problem?===&lt;br /&gt;
&amp;lt;p&amp;gt;People often find an annoying problem when applying normal modifier&lt;br /&gt;
patterns to objects. It is said that one image tells more than a thousand&lt;br /&gt;
words, and this saying also applies here. This image shows two cases where&lt;br /&gt;
the problem appears:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[Image:TutImgPic1.png|Sometimes odd shadow lines appear on certain objects]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object in the left of the image is just a regular POV-Ray sphere with&lt;br /&gt;
a normal modifier made with the bump pattern.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;The object in right of the image is a mesh of smooth triangles.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;As you notice, there are two clear artifacts in the image. The sphere&lt;br /&gt;
has a straight shadow line which seems unnatural and the mesh has a&lt;br /&gt;
non-straight shadow line when it is supposed to have a straight one.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Although the artifacts look quite different in nature, they are, in fact&lt;br /&gt;
caused by the exact same problem.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[Image:TutImgPic2.png|The image one would expect.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
What one could expect would be something like this image (do not mind about&lt;br /&gt;
the bright part under the triangle mesh; this is explained later).&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What causes the problem?===&lt;br /&gt;
&amp;lt;p&amp;gt;Let's start with the sphere with the perturbed normal, since it is easier&lt;br /&gt;
to explain.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Image:TutImgShadowtest.png|Shadow line test with modified normals]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This image shows graphically what happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The problem happens in the &amp;amp;quot;dark side&amp;amp;quot; of the object, that is, the side&lt;br /&gt;
which does not &amp;amp;quot;see&amp;amp;quot; the light source.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Although the surface normal points away from the light source (ie. its angle&lt;br /&gt;
is &amp;amp;gt;90 degrees from the light source), the perturbed normal points towards&lt;br /&gt;
it (ie. its angle is &amp;amp;lt;90 degrees) and thus, according to the normal&lt;br /&gt;
vector, the light source should illuminate the point in question.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;However, when doing the shadow-ray test, POV-Ray sees that the test ray&lt;br /&gt;
intersects with a surface (in this case the surface of the same sphere, but&lt;br /&gt;
at the &amp;amp;quot;other side&amp;amp;quot;). Thus it decides that the surface in question is&lt;br /&gt;
shadowing the current point and thus the light source does not illuminate it.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This is what causes the straight shadow exactly where the (non-perturbed)&lt;br /&gt;
surface normal is exactly at 90 degrees from the light source.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The problem with the mesh of smooth triangles is a bit more difficult,&lt;br /&gt;
although very similar (and caused by the exact same problem).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Image:TutImgShadowtest2.png|Shadow test of a triangle mesh]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This image shows graphically what happens.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Although there is no explicit normal perturbation, the fact that the surface&lt;br /&gt;
is a mesh of smooth triangles means that there is an implicit normal&lt;br /&gt;
perturbation.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;In order to get a smooth appearance, each vertex has a normal vector and&lt;br /&gt;
the normal vector at any point in the surface of the triangle is calculated&lt;br /&gt;
by interpolating the normal vectors of the vertices.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Here the problem happens when the shadow line should pass across a triangle&lt;br /&gt;
and the unperturbed normal vector of that triangle points away from the&lt;br /&gt;
light source. As seen in the figure, a triangle that is closer to the&lt;br /&gt;
light source will shadow the point in the current triangle (it is not&lt;br /&gt;
necessarily the adjacent triangle, but if the mesh is closed, some triangle&lt;br /&gt;
will surely shadow the point in question).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This means that this unfortunate triangle will be completely shadowed,&lt;br /&gt;
thus causing a triangular artifact in the shadow line of the mesh.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;[[Image:TutImgPic3.png|The shadow line corresponds to the non-smooth mesh.]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The image on the left shows more clearly why the shadow line of the smooth&lt;br /&gt;
triangle mesh is like it appeared in the first image of this page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The object at the left is the same triangle mesh, but with flat triangles,&lt;br /&gt;
and the object at the right is the same object as in the image at the&lt;br /&gt;
beginning of this page.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Notice how the shadowed triangles of the flat mesh correspond exactly&lt;br /&gt;
to the artifacts in the shadow line of the smooth mesh. The reason for&lt;br /&gt;
this was explained in the figure above.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Can this problem be solved?===&lt;br /&gt;
&amp;lt;p&amp;gt;And how did I correct the problem in the second image at the beginning of&lt;br /&gt;
this page?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Firstly, do not think that it is a bug in POV-Ray. It is not a bug, but a&lt;br /&gt;
real problem caused be the lighting model used in the renderer engine that&lt;br /&gt;
is quite difficult to surpass. It is not a problem in POV-Ray in particular,&lt;br /&gt;
but a problem in raytracing in general. Every raytracer will have this same&lt;br /&gt;
problem when using perturbed surface normals (unless there is some fix coded&lt;br /&gt;
into it).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Perturbed surface normals are used, in fact, to simulate the perturbation&lt;br /&gt;
of the surface itself. When calculating the lighting of the object, the&lt;br /&gt;
surface normal perturbation will give the impression that the surface itself&lt;br /&gt;
is perturbed (eg. in the images at the beginning of this page the sphere&lt;br /&gt;
looks like it has a bumpy surface).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;In triangle meshes the normal interpolation is used to simulate curvature&lt;br /&gt;
of the surface (a curvature which actually is not there).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;However, since the normal vector perturbation does not affect the surface&lt;br /&gt;
itself in any way, this kind of artifact will be the price to pay (another&lt;br /&gt;
one is that although the surface looks bumpy or smooth, its silhouette will&lt;br /&gt;
still look straight or polygonized, but this usually is not such a big&lt;br /&gt;
problem).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This is a real problem that happens even to the best. For example, check&lt;br /&gt;
this [http://oz.irtc.org/ftp/pub/stills/1998-10-31/running.jpg|_new &amp;lt;span title=&amp;quot;Opens A New Window!&amp;quot;&amp;gt;IRTC winner image&amp;lt;/span&amp;gt;]. Notice the straight shadow lines on the rocks (specially&lt;br /&gt;
in the closest rock)?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;However, there are certain things that can be done to alleviate the&lt;br /&gt;
problem.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Possible solutions?===&lt;br /&gt;
&amp;lt;p&amp;gt;1) So what did I do to get the second image at the beginning of this page?&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;I just made the objects shadowless. This gets rid of the problem of the&lt;br /&gt;
surface shadowing the wrong point.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This, of course, has severe problems. Since the object does not cast&lt;br /&gt;
shadows anymore, it probably cannot be used in any real scene (although&lt;br /&gt;
making the rocks shadowless in the IRTC winning image mentioned above would&lt;br /&gt;
have perhaps helped the image a lot without making it too unrealistic).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;With smooth triangle meshes it also introduces another artifact, which&lt;br /&gt;
can be seen in the second image at the beginning of the page. I do not know&lt;br /&gt;
the exact mechanism of this artifact but it is a direct consequence of the&lt;br /&gt;
mesh being shadowless (it may have something to do with the fact that&lt;br /&gt;
smooth triangles are double-illuminated in POV-Ray).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;2) Perhaps a future version of POV-Ray or one of its patches may introduce&lt;br /&gt;
a way to stop self-shadowing (while still casting shadows on other objects).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This would alleviate the problem of the completely shadowless object since&lt;br /&gt;
this object could be used in real scenes and they will cast shadows on other&lt;br /&gt;
objects and they will not have the shadow line artifact.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;However, this solution applies only to a few range of objects (mainly convex&lt;br /&gt;
objects). Objects where self-shadowing is essential (imagine a coffee cup,&lt;br /&gt;
for example) will still have problems.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;3) I have proposed this sophisticated algorithm to get rid of the problem:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;When doing shadow ray tests, do the following:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Make the regular shadow ray test, which gets all the intersections&lt;br /&gt;
of the ray with all the surfaces that are between the current point and&lt;br /&gt;
the light source.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Look if in the current point the unperturbed normal vector points&lt;br /&gt;
away from the light source and the perturbed normal vector points&lt;br /&gt;
towards the light source.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If so, check if the closest intersection point of the shadow ray belongs&lt;br /&gt;
to the current object.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;If so, remove that intersection point from the list.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;If we want to be more sure, we could also check if we are hitting the&lt;br /&gt;
&amp;amp;quot;inside&amp;amp;quot; of the surface at this closest intersection point and only then&lt;br /&gt;
remove it. This might be necessary for non-closed surfaces.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This algorithm will eliminate the shadowline artifact without eliminating&lt;br /&gt;
shadowing and self-shadowing of the object.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;It has its defects, though:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;For example, if the camera is inside the&lt;br /&gt;
object in question (and all the light sources are outside), we would expect&lt;br /&gt;
to get a completely shadowed view of the surface. However, if the surface&lt;br /&gt;
has perturbed normal, we will see some illuminated parts of the surface.&lt;br /&gt;
However, I think that this problem is quite irrelevant in the vast majority&lt;br /&gt;
of scenes (and it should be possible to turn the fix off anyways).&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;It has several problems which can happen with non-convex objects (thanks&lt;br /&gt;
to Ron Parker to pointing this out). The object can shadow itself with&lt;br /&gt;
more than one surface. If it shadows itself from the outside (eg. a coffee&lt;br /&gt;
cup), there is no problem, but if it &amp;amp;quot;shadows itself&amp;amp;quot; from the inside (eg. a&lt;br /&gt;
coffee cup upside down) this shadow will be seen in an unrealistic way in&lt;br /&gt;
the outermost surface of the object. There might not be any easy way to&lt;br /&gt;
detect, which one is the case.&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Another problem similar to the above is that if there is another object&lt;br /&gt;
inside this object we are calculating, that another object will itself also&lt;br /&gt;
&amp;amp;quot;cast a shadow&amp;amp;quot; on the surface (this might be possible to fix by ignoring&lt;br /&gt;
all the objects inside the current object; this is possible to do in a&lt;br /&gt;
rather simple way; however, it is does not work in all cases).&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;We still get the same artifact in triangle meshes&lt;br /&gt;
as is shown in the second image at the beginning of the page. However, I am&lt;br /&gt;
sure that this problem could be fixed as well (although I may be wrong,&lt;br /&gt;
of course).&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Smooth triangle artifact===&lt;br /&gt;
&lt;br /&gt;
===What is the problem?===&lt;br /&gt;
&amp;lt;p&amp;gt;There is a peculiar problem with smooth triangles which shows as a lighting&lt;br /&gt;
artifact in certain cases. This can happen in individual smooth triangles,&lt;br /&gt;
meshes with smooth triangles and smooth heightfields. The problem also&lt;br /&gt;
manifests itself when using the slope pattern in the same situation.&lt;br /&gt;
This image shows the two cases:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;[[Image:TutImgStartifacts.png|Lighting and slope pattern artifacts in a smooth triangle]]&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The source code of this image is the following:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
camera { right x*4 location &amp;amp;lt;0,1,-5&amp;amp;gt; look_at 0 angle 35 }&lt;br /&gt;
light_source { y*100, 1 }&lt;br /&gt;
light_source { -y*100, x }&lt;br /&gt;
&lt;br /&gt;
smooth_triangle&lt;br /&gt;
{ &amp;amp;lt;-.5,0,-1&amp;amp;gt;,&amp;amp;lt;-1,1,-1&amp;amp;gt;, &amp;amp;lt;.5,0,-1&amp;amp;gt;,&amp;amp;lt;1,1,-1&amp;amp;gt;, &amp;amp;lt;0,0,1&amp;amp;gt;,&amp;amp;lt;0,1,1&amp;amp;gt;&lt;br /&gt;
  pigment { rgb 1 }&lt;br /&gt;
  translate -x*.6&lt;br /&gt;
}&lt;br /&gt;
smooth_triangle&lt;br /&gt;
{ &amp;amp;lt;-.5,0,-1&amp;amp;gt;,&amp;amp;lt;-1,1,-1&amp;amp;gt;, &amp;amp;lt;.5,0,-1&amp;amp;gt;,&amp;amp;lt;1,1,-1&amp;amp;gt;, &amp;amp;lt;0,0,1&amp;amp;gt;,&amp;amp;lt;0,1,1&amp;amp;gt;&lt;br /&gt;
  pigment { slope y color_map { [0 rgb z][1 rgb x+y] } }&lt;br /&gt;
  finish { ambient 1 }&lt;br /&gt;
  translate x*.6&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The triangle at the left is a regular smooth triangle which is illuminated&lt;br /&gt;
by a white light source from above. There is also a red light source&lt;br /&gt;
illuminating the triangle from below. As you can see, the farther part of the&lt;br /&gt;
triangle is wrongly illuminated as red. No part of the triangle should be&lt;br /&gt;
illuminated by the red light source because the upper side of the triangle&lt;br /&gt;
is nowhere facing down.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The triangle at the right is the same smooth triangle with a slope&lt;br /&gt;
pattern applied to it, which goes from blue (in the negative y direction)&lt;br /&gt;
to yellow (in the positive y direction). Lighting has been eliminated by&lt;br /&gt;
specifying a high ambient. As all the parts of the upper side&lt;br /&gt;
of the triangle are pointing upwards, the whole triangle should be colored&lt;br /&gt;
with shades of yellow, but as you can see, the same farther part is&lt;br /&gt;
wrongly colored blue.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;(If you guessed that the problem happens when the normal vector of the&lt;br /&gt;
triangle is pointing away from the camera, then you guessed right.)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===What causes the problem?===&lt;br /&gt;
&amp;lt;p&amp;gt;The problem is caused by the rendering algorithm used in POV-Ray. The&lt;br /&gt;
following text is quite technical, so if you just want to read about&lt;br /&gt;
possible solutions to this problem, you can skip to the next subsection.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The problem is that the rendering engine assumes that objects return&lt;br /&gt;
the &amp;lt;em&amp;gt;true&amp;lt;/em&amp;gt; normal vector for the given point in their surface. For an&lt;br /&gt;
object to render correctly, it &amp;lt;em&amp;gt;must&amp;lt;/em&amp;gt; give the exact normal vector&lt;br /&gt;
(ie. a vector which is exactly perpendicular to the surface at that point).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Smooth meshes and heightfields do not do this. They return normal vectors&lt;br /&gt;
which are not perpendicular to the actual surface. This causes errors in the&lt;br /&gt;
rendering.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;What happens is that when the rendering engine shoots a ray and it hits&lt;br /&gt;
the surface of an object, the engine asks the object &amp;amp;quot;what is the normal vector&lt;br /&gt;
at this point in your surface?&amp;amp;quot;.&lt;br /&gt;
Now, if the angle between the returned normal vector and the ray vector&lt;br /&gt;
is less than 90 degrees (that is, the normal vector points away from the&lt;br /&gt;
point of view of the starting point of the ray), then the engine reverses&lt;br /&gt;
the returned normal vector. This is essential for the lighting to work&lt;br /&gt;
properly (if the normal is not reversed in this case, you would get all kind&lt;br /&gt;
of errors in lighting, ie. surfaces which are illuminated from behind when&lt;br /&gt;
they should not, or surface which are not illuminated even though they are&lt;br /&gt;
facing a light source).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This assumes that the normal vector returned by the object is a &amp;lt;em&amp;gt;true&amp;lt;/em&amp;gt;&lt;br /&gt;
normal vector, and it works perfectly when this is so.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;However, if the object returns an erroneous normal vector, ie. a vector&lt;br /&gt;
which is not perpendicular to the surface, rendering errors can occur.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Smooth triangles and heightfields do this, and the price to pay are the&lt;br /&gt;
artifacts in the lighting in certain situations.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The artifact is produced when the true normal vector would have an angle&lt;br /&gt;
larger than 90 degrees with the ray, but the the actual vector returned by&lt;br /&gt;
the object has an angle smaller than 90 degrees with the ray.&lt;br /&gt;
In this case the rendering engine reverses the normal vector even though&lt;br /&gt;
it should not. This is because it assumes that it is the true normal vector&lt;br /&gt;
when in fact it is not.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This problem could be solved by making the decision of inverting the&lt;br /&gt;
returned normal vector according to the true normal vector of the surface&lt;br /&gt;
instead of the returned vector. However, due to the internal implementation&lt;br /&gt;
of the rendering engine in the current POV-Ray 3.5, doing this is not&lt;br /&gt;
trivial. It may be fixed in POV-Ray 4.0, where the rendering engine will&lt;br /&gt;
be written again and this kind of things can be taken into account from&lt;br /&gt;
the very beginning.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Can this problem be solved?===&lt;br /&gt;
&amp;lt;p&amp;gt;You can get rid of the lighting artifact by applying&lt;br /&gt;
&amp;lt;code&amp;gt;double_illuminate&amp;lt;/code&amp;gt; to the object in question.&lt;br /&gt;
When a surface is double illuminated, it does not matter which way its normal&lt;br /&gt;
points - it will always be illuminated regardless of which side the light&lt;br /&gt;
source is. Of course it should not matter that the object is now illuminated&lt;br /&gt;
from both sides. If this is a problem, then the problem is not easily&lt;br /&gt;
solvable.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Note that in the example given at the beginning of this&lt;br /&gt;
section&lt;br /&gt;
this solution does not work: It would illuminate the whole triangle with both&lt;br /&gt;
light sources! However, this solution works well with closed triangle meshes,&lt;br /&gt;
where the inner side of the mesh is shadowed by the mesh itself. However,&lt;br /&gt;
if you are using &amp;lt;code&amp;gt;no_shadow&amp;lt;/code&amp;gt; in the object (for example to&lt;br /&gt;
get rid of&lt;br /&gt;
&amp;lt;!--&amp;lt;linkto &amp;quot;the shadow line artifact&amp;quot;&amp;gt;shadow line artifacts&amp;lt;/linkto&amp;gt;---&amp;gt;[[Documentation:Tutorial Section 4.3#The shadow line artifact|shadow line artifacts]]),&lt;br /&gt;
new problems can arise in the lighting (such as bright&lt;br /&gt;
parts in places where there should not be any; these are all cause by this&lt;br /&gt;
same problem).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The slope pattern is more problematic and there is no generic solution&lt;br /&gt;
which will work in all cases. Fortunately the most common use of the slope&lt;br /&gt;
pattern is in heightfields, and there a solution is possible:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If you are having this problem in a smooth heightfield, the solution is&lt;br /&gt;
to mirror the color_map (or whatever map you are using) around 0.5. This way&lt;br /&gt;
it does not matter if the normal is reversed. That is, if you had something&lt;br /&gt;
like this in a heightfield:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  slope y color_map&lt;br /&gt;
  { [0.50 rgb &amp;amp;lt;.5,.5,.5&amp;amp;gt;] // rock&lt;br /&gt;
    [0.75 rgb &amp;amp;lt;.8,.4,.1&amp;amp;gt;] // ground&lt;br /&gt;
    [1.00 rgb &amp;amp;lt;.4,1,.4&amp;amp;gt;] // grass&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;you simply have to mirror the map around 0.5, ie. add the values from&lt;br /&gt;
0 to 0.5 in reverse order:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
  slope y color_map&lt;br /&gt;
  { [0.00 rgb &amp;amp;lt;.4,1,.4&amp;amp;gt;] // grass&lt;br /&gt;
    [0.25 rgb &amp;amp;lt;.8,.4,.1&amp;amp;gt;] // ground&lt;br /&gt;
    [0.50 rgb &amp;amp;lt;.5,.5,.5&amp;amp;gt;] // rock&lt;br /&gt;
    [0.75 rgb &amp;amp;lt;.8,.4,.1&amp;amp;gt;] // ground&lt;br /&gt;
    [1.00 rgb &amp;amp;lt;.4,1,.4&amp;amp;gt;] // grass&lt;br /&gt;
  }&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Besides this you should, of course, apply &amp;lt;code&amp;gt;double_illuminate&amp;lt;/code&amp;gt;&lt;br /&gt;
to the heightfield in order to get the proper lighting.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;wikinav&amp;gt;---&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;table width=100% border=0 cellspacing=0 cellpadding=5&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td width=50% bgcolor=#EEEEEF&amp;gt;&lt;br /&gt;
[[Documentation:Tutorial Section 4.2#CSG speed|CSG speed]]&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;td width=50% bgcolor=#EEEEEF align=right&amp;gt;&lt;br /&gt;
[[Documentation:Tutorial Section 5#Appendices|Appendices]]&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;/wikinav&amp;gt;---&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;wikitalk&amp;gt;---&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;table width=100% border=1 cellspacing=0 cellpadding=5&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td width=100% bgcolor=#FFEEEE&amp;gt;&lt;br /&gt;
This document is protected, so submissions, corrections and discussions should be held on this documents [[Documentation_Talk:Tutorial Section 4.3|talk]] page.&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;!--&amp;lt;/wikitalk&amp;gt;---&amp;gt;&lt;/div&gt;</summary>
		<author><name>WikiSysop</name></author>
	</entry>
</feed>