File: CastleRayTracer.TPathTracer.html

package info (click to toggle)
castle-game-engine 5.2.0-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 185,428 kB
  • sloc: pascal: 260,781; cpp: 1,363; objc: 713; makefile: 537; xml: 496; sh: 480; php: 4
file content (201 lines) | stat: -rw-r--r-- 14,031 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<title>Castle Game Engine: CastleRayTracer: Class TPathTracer</title>
<meta name="generator" content="PasDoc 0.13.0">
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<link rel="StyleSheet" type="text/css" href="pasdoc.css">
</head>
<body>
<table class="container"><tr><td class="navigation">
<h2>Castle Game Engine</h2><p><a href="introduction.html" class="navigation">Introduction</a></p><p><a href="AllUnits.html" class="navigation">Units</a></p><p><a href="ClassHierarchy.html" class="navigation">Class Hierarchy</a></p><p><a href="AllClasses.html" class="navigation">Classes, Interfaces, Objects and Records</a></p><p><a href="AllTypes.html" class="navigation">Types</a></p><p><a href="AllVariables.html" class="navigation">Variables</a></p><p><a href="AllConstants.html" class="navigation">Constants</a></p><p><a href="AllFunctions.html" class="navigation">Functions and Procedures</a></p><p><a href="AllIdentifiers.html" class="navigation">Identifiers</a></p></td><td class="content">
<a name="TPathTracer"></a><h1 class="cio">Class TPathTracer</h1>
<table class="sections wide_list">
<tr>
<td><a class="section" href="#PasDoc-Description">Description</a></td><td><a class="section" href="#PasDoc-Hierarchy">Hierarchy</a></td><td><a class="section" href="#PasDoc-Fields">Fields</a></td><td><a class="section" href="#PasDoc-Methods">Methods</a></td><td>Properties</td></tr></table>
<a name="PasDoc-Description"></a><h2 class="unit">Unit</h2>
<p class="unitlink">
<a  href="CastleRayTracer.html">CastleRayTracer</a></p>
<h2 class="declaration">Declaration</h2>
<p class="declaration">
<code>type TPathTracer = class(<a class="normal" href="CastleRayTracer.TRayTracer.html">TRayTracer</a>)</code></p>
<h2 class="description">Description</h2>
<p>
Path tracer. See [<a  href="http://castle-engine.sourceforge.net/vrml_engine_doc/output/xsl/html/section.path_tracer.html">http://castle-engine.sourceforge.net/vrml_engine_doc/output/xsl/html/section.path_tracer.html</a>] for documentation.</p>
<a name="PasDoc-Hierarchy"></a><h2 class="hierarchy">Hierarchy</h2>
<ul class="hierarchy"><li class="ancestor">TObject</li>
<li class="ancestor"><a class="normal" href="CastleRayTracer.TRayTracer.html">TRayTracer</a></li>
<li class="thisitem">TPathTracer</li></ul><h2 class="overview">Overview</h2>
<a name="PasDoc-Fields"></a><h3 class="summary">Fields</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="CastleRayTracer.TPathTracer.html#MinDepth">MinDepth</a></b>: Integer;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="CastleRayTracer.TPathTracer.html#RRoulContinue">RRoulContinue</a></b>: Single;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="CastleRayTracer.TPathTracer.html#PrimarySamplesCount">PrimarySamplesCount</a></b>: Cardinal;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="CastleRayTracer.TPathTracer.html#NonPrimarySamplesCount">NonPrimarySamplesCount</a></b>: Cardinal;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="CastleRayTracer.TPathTracer.html#DirectIllumSamplesCount">DirectIllumSamplesCount</a></b>: Cardinal;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code><b><a  href="CastleRayTracer.TPathTracer.html#SFCurveClass">SFCurveClass</a></b>: <a  href="CastleSpaceFillingCurves.html#TSpaceFillingCurveClass">TSpaceFillingCurveClass</a>;</code></td>
</tr>
</table>
<a name="PasDoc-Methods"></a><h3 class="summary">Methods</h3>
<table class="summary wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleRayTracer.TPathTracer.html#AppendStats">AppendStats</a></b>(const Stats: TStrings; const RenderingTime: Single); override;</code></td>
</tr>
<tr class="list2">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>constructor <b><a  href="CastleRayTracer.TPathTracer.html#Create">Create</a></b>;</code></td>
</tr>
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><code>procedure <b><a  href="CastleRayTracer.TPathTracer.html#Execute">Execute</a></b>; override;</code></td>
</tr>
</table>
<h2 class="description">Description</h2>
<h3 class="detail">Fields</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="MinDepth"></a><code><b>MinDepth</b>: Integer;</code></td>
</tr>
<tr><td colspan="2">
<p>
<code>MinDepth</code> and <a class="normal" href="CastleRayTracer.TPathTracer.html#RRoulContinue">RRoulContinue</a> together determine the path length. The path has at least <code>MinDepth</code> length, and then Russian roulette is used.

<p>See [<a  href="http://castle-engine.sourceforge.net/rayhunter.php">http://castle-engine.sourceforge.net/rayhunter.php</a>] documentation about &quot;&lt;recursion-depth&gt;&quot; and --r-roul-continue for suggestions about how to use these parameters. See also [<a  href="http://castle-engine.sourceforge.net/raytr_gallery.php">http://castle-engine.sourceforge.net/raytr_gallery.php</a>] for some experiments with these values.

<p><a class="normal" href="CastleRayTracer.TPathTracer.html#RRoulContinue">RRoulContinue</a> must be in 0..1 range.

<p>You can give <a class="normal" href="CastleRayTracer.TPathTracer.html#RRoulContinue">RRoulContinue</a> = 0 if you don't want to use Russian roulette at all (works OK because our comparison <code>Random &lt; <a class="normal" href="CastleRayTracer.TPathTracer.html#RRoulContinue">RRoulContinue</a></code> uses &quot;&lt;&quot;, not &quot;&lt;=&quot;). Note that this causes bias (result is darker than it should be). Only <a class="normal" href="CastleRayTracer.TPathTracer.html#RRoulContinue">RRoulContinue</a> &gt; 0 removes bias (the expected result is the correct one).

<p>Small <a class="normal" href="CastleRayTracer.TPathTracer.html#RRoulContinue">RRoulContinue</a> values cause a lot of noise. Large <a class="normal" href="CastleRayTracer.TPathTracer.html#RRoulContinue">RRoulContinue</a> values cause long rendering.

<p><code>MinDepth</code> must be &gt;= 0. You can use <code>MinDepth</code> = 0 to disable &quot;minimal path length&quot;, and use Russian roulette always (noisy). </p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="RRoulContinue"></a><code><b>RRoulContinue</b>: Single;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="PrimarySamplesCount"></a><code><b>PrimarySamplesCount</b>: Cardinal;</code></td>
</tr>
<tr><td colspan="2">
<p>
How many paths to use. Both must be &gt; 0.

<p><code>PrimarySamplesCount</code> tells how many paths are used for primary ray, and is really useful only for anti-aliasing. You can set this to a few. Values above &tilde;10 are useless, they cause much longer rendering without really improving the result. You can set this to 1 if you don't need anti-aliasing.

<p><a class="normal" href="CastleRayTracer.TPathTracer.html#NonPrimarySamplesCount">NonPrimarySamplesCount</a> is the number of paths caused by each hit of a primary ray. This is the main quality control for the path-tracer, more paths mean that colors are gathered from more random samples, which means that final color is more accurate. In total you have pixels count * <code>PrimarySamplesCount</code> * <a class="normal" href="CastleRayTracer.TPathTracer.html#NonPrimarySamplesCount">NonPrimarySamplesCount</a>, so beware when increasing this: you really have a lot paths.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="NonPrimarySamplesCount"></a><code><b>NonPrimarySamplesCount</b>: Cardinal;</code></td>
</tr>
<tr><td colspan="2">
<p>
How many paths to use. Both must be &gt; 0.

<p><a class="normal" href="CastleRayTracer.TPathTracer.html#PrimarySamplesCount">PrimarySamplesCount</a> tells how many paths are used for primary ray, and is really useful only for anti-aliasing. You can set this to a few. Values above &tilde;10 are useless, they cause much longer rendering without really improving the result. You can set this to 1 if you don't need anti-aliasing.

<p><code>NonPrimarySamplesCount</code> is the number of paths caused by each hit of a primary ray. This is the main quality control for the path-tracer, more paths mean that colors are gathered from more random samples, which means that final color is more accurate. In total you have pixels count * <a class="normal" href="CastleRayTracer.TPathTracer.html#PrimarySamplesCount">PrimarySamplesCount</a> * <code>NonPrimarySamplesCount</code>, so beware when increasing this: you really have a lot paths.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="DirectIllumSamplesCount"></a><code><b>DirectIllumSamplesCount</b>: Cardinal;</code></td>
</tr>
<tr><td colspan="2">
<p>
How many samples are used to calculate <i>direct</i> illumination at every path point. These are rays sent into random points of random light sources, to test if given light shines here.

<p>Set this to 0 to have a really naive path-tracing, that wanders randomly hoping to hit light source by chance. This will usually need an enormous amount of <a class="normal" href="CastleRayTracer.TPathTracer.html#PrimarySamplesCount">PrimarySamplesCount</a> * <a class="normal" href="CastleRayTracer.TPathTracer.html#NonPrimarySamplesCount">NonPrimarySamplesCount</a> to given any sensible results.

<p>Set this to 1 or more for a normal path-tracer.</p>
</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="SFCurveClass"></a><code><b>SFCurveClass</b>: <a  href="CastleSpaceFillingCurves.html#TSpaceFillingCurveClass">TSpaceFillingCurveClass</a>;</code></td>
</tr>
<tr><td colspan="2">
<p>
Order of pixels filled. In theory, something like <a class="normal" href="CastleSpaceFillingCurves.THilbertCurve.html">THilbertCurve</a> or <a class="normal" href="CastleSpaceFillingCurves.TPeanoCurve.html">TPeanoCurve</a> could speed up rendering (because shadow cache is more utilized) compared to <a class="normal" href="CastleSpaceFillingCurves.TSwapScanCurve.html">TSwapScanCurve</a>. But in practice, right now this doesn't give any noticeable benefit.</p>
</td></tr>
</table>
<h3 class="detail">Methods</h3>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="protected.gif" alt="Protected" title="Protected"></a></td>
<td class="itemcode"><a name="AppendStats"></a><code>procedure <b>AppendStats</b>(const Stats: TStrings; const RenderingTime: Single); override;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Create"></a><code>constructor <b>Create</b>;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<table class="detail wide_list">
<tr class="list">
<td class="visibility"><a  href="legend.html"><img  src="public.gif" alt="Public" title="Public"></a></td>
<td class="itemcode"><a name="Execute"></a><code>procedure <b>Execute</b>; override;</code></td>
</tr>
<tr><td colspan="2">
&nbsp;</td></tr>
</table>
<!-- Piwik -->
<script type="text/javascript">
  var _paq = _paq || [];
  _paq.push(["trackPageView"]);
  _paq.push(["enableLinkTracking"]);

  (function() {
    var u=(("https:" == document.location.protocol) ? "https" : "http") + "://michalis.ii.uni.wroc.pl/piwik-castle-engine/";
    _paq.push(["setTrackerUrl", u+"piwik.php"]);
    _paq.push(["setSiteId", "1"]);
    var d=document, g=d.createElement("script"), s=d.getElementsByTagName("script")[0]; g.type="text/javascript";
    g.defer=true; g.async=true; g.src=u+"piwik.js"; s.parentNode.insertBefore(g,s);
  })();
</script>
<!-- End Piwik Code -->

<noscript>
<!-- Piwik Image Tracker -->
<img src="http://michalis.ii.uni.wroc.pl/piwik-castle-engine/piwik.php?idsite=1&amp;rec=1" style="border:0" alt="" />
<!-- End Piwik -->
</noscript>
<hr noshade size="1"><span class="appinfo"><em>Generated by <a  href="http://pasdoc.sourceforge.net/">PasDoc 0.13.0</a> on 2015-06-15 04:43:11</em>
</span>
</td></tr></table></body></html>