├── LICENSE
└── README.md
/LICENSE:
--------------------------------------------------------------------------------
1 | Creative Commons Legal Code
2 |
3 | CC0 1.0 Universal
4 |
5 | CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
6 | LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
7 | ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
8 | INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
9 | REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
10 | PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
11 | THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
12 | HEREUNDER.
13 |
14 | Statement of Purpose
15 |
16 | The laws of most jurisdictions throughout the world automatically confer
17 | exclusive Copyright and Related Rights (defined below) upon the creator
18 | and subsequent owner(s) (each and all, an "owner") of an original work of
19 | authorship and/or a database (each, a "Work").
20 |
21 | Certain owners wish to permanently relinquish those rights to a Work for
22 | the purpose of contributing to a commons of creative, cultural and
23 | scientific works ("Commons") that the public can reliably and without fear
24 | of later claims of infringement build upon, modify, incorporate in other
25 | works, reuse and redistribute as freely as possible in any form whatsoever
26 | and for any purposes, including without limitation commercial purposes.
27 | These owners may contribute to the Commons to promote the ideal of a free
28 | culture and the further production of creative, cultural and scientific
29 | works, or to gain reputation or greater distribution for their Work in
30 | part through the use and efforts of others.
31 |
32 | For these and/or other purposes and motivations, and without any
33 | expectation of additional consideration or compensation, the person
34 | associating CC0 with a Work (the "Affirmer"), to the extent that he or she
35 | is an owner of Copyright and Related Rights in the Work, voluntarily
36 | elects to apply CC0 to the Work and publicly distribute the Work under its
37 | terms, with knowledge of his or her Copyright and Related Rights in the
38 | Work and the meaning and intended legal effect of CC0 on those rights.
39 |
40 | 1. Copyright and Related Rights. A Work made available under CC0 may be
41 | protected by copyright and related or neighboring rights ("Copyright and
42 | Related Rights"). Copyright and Related Rights include, but are not
43 | limited to, the following:
44 |
45 | i. the right to reproduce, adapt, distribute, perform, display,
46 | communicate, and translate a Work;
47 | ii. moral rights retained by the original author(s) and/or performer(s);
48 | iii. publicity and privacy rights pertaining to a person's image or
49 | likeness depicted in a Work;
50 | iv. rights protecting against unfair competition in regards to a Work,
51 | subject to the limitations in paragraph 4(a), below;
52 | v. rights protecting the extraction, dissemination, use and reuse of data
53 | in a Work;
54 | vi. database rights (such as those arising under Directive 96/9/EC of the
55 | European Parliament and of the Council of 11 March 1996 on the legal
56 | protection of databases, and under any national implementation
57 | thereof, including any amended or successor version of such
58 | directive); and
59 | vii. other similar, equivalent or corresponding rights throughout the
60 | world based on applicable law or treaty, and any national
61 | implementations thereof.
62 |
63 | 2. Waiver. To the greatest extent permitted by, but not in contravention
64 | of, applicable law, Affirmer hereby overtly, fully, permanently,
65 | irrevocably and unconditionally waives, abandons, and surrenders all of
66 | Affirmer's Copyright and Related Rights and associated claims and causes
67 | of action, whether now known or unknown (including existing as well as
68 | future claims and causes of action), in the Work (i) in all territories
69 | worldwide, (ii) for the maximum duration provided by applicable law or
70 | treaty (including future time extensions), (iii) in any current or future
71 | medium and for any number of copies, and (iv) for any purpose whatsoever,
72 | including without limitation commercial, advertising or promotional
73 | purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
74 | member of the public at large and to the detriment of Affirmer's heirs and
75 | successors, fully intending that such Waiver shall not be subject to
76 | revocation, rescission, cancellation, termination, or any other legal or
77 | equitable action to disrupt the quiet enjoyment of the Work by the public
78 | as contemplated by Affirmer's express Statement of Purpose.
79 |
80 | 3. Public License Fallback. Should any part of the Waiver for any reason
81 | be judged legally invalid or ineffective under applicable law, then the
82 | Waiver shall be preserved to the maximum extent permitted taking into
83 | account Affirmer's express Statement of Purpose. In addition, to the
84 | extent the Waiver is so judged Affirmer hereby grants to each affected
85 | person a royalty-free, non transferable, non sublicensable, non exclusive,
86 | irrevocable and unconditional license to exercise Affirmer's Copyright and
87 | Related Rights in the Work (i) in all territories worldwide, (ii) for the
88 | maximum duration provided by applicable law or treaty (including future
89 | time extensions), (iii) in any current or future medium and for any number
90 | of copies, and (iv) for any purpose whatsoever, including without
91 | limitation commercial, advertising or promotional purposes (the
92 | "License"). The License shall be deemed effective as of the date CC0 was
93 | applied by Affirmer to the Work. Should any part of the License for any
94 | reason be judged legally invalid or ineffective under applicable law, such
95 | partial invalidity or ineffectiveness shall not invalidate the remainder
96 | of the License, and in such case Affirmer hereby affirms that he or she
97 | will not (i) exercise any of his or her remaining Copyright and Related
98 | Rights in the Work or (ii) assert any associated claims and causes of
99 | action with respect to the Work, in either case contrary to Affirmer's
100 | express Statement of Purpose.
101 |
102 | 4. Limitations and Disclaimers.
103 |
104 | a. No trademark or patent rights held by Affirmer are waived, abandoned,
105 | surrendered, licensed or otherwise affected by this document.
106 | b. Affirmer offers the Work as-is and makes no representations or
107 | warranties of any kind concerning the Work, express, implied,
108 | statutory or otherwise, including without limitation warranties of
109 | title, merchantability, fitness for a particular purpose, non
110 | infringement, or the absence of latent or other defects, accuracy, or
111 | the present or absence of errors, whether or not discoverable, all to
112 | the greatest extent permissible under applicable law.
113 | c. Affirmer disclaims responsibility for clearing rights of other persons
114 | that may apply to the Work or any use thereof, including without
115 | limitation any person's Copyright and Related Rights in the Work.
116 | Further, Affirmer disclaims responsibility for obtaining any necessary
117 | consents, permissions or other rights required for any use of the
118 | Work.
119 | d. Affirmer understands and acknowledges that Creative Commons is not a
120 | party to this document and has no duty or obligation with respect to
121 | this CC0 or use of the Work.
122 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Scene Description Changes from pbrt-v3 to pbrt-v4
2 |
3 | This list is currently based off the changes made up to this commit- https://github.com/mmp/pbrt-v4/tree/cdccb7
4 |
5 | ## Table of Contents
6 | * [Preamble](#preamble)
7 | * [Base Scene Description](#base-scene-description-changes)
8 | * [Camera](#camera-changes)
9 | * [Film](#film-changes)
10 | * [Filter](#filter-changes)
11 | * [Sampler](#sampler-changes)
12 | * [Integrator](#integrator-changes)
13 | * [Light](#light-changes)
14 | * [Material](#material-changes)
15 | * [Texture](#texture-changes)
16 | * [Shape](#shape-changes)
17 | * [Medium](#medium-changes)
18 |
19 | ## Preamble
20 | This is not meant to be the official document representing the changes between pbrt-v3 and pbrt-v4, I'll leave that to Matt's much more capable hands. These are my notes during the process of updating an exporter from v3 to v4. I am making these public to aid others in the transition until a formal page is created by Matt. The changes listed are deduced from reading through the source code of https://github.com/mmp/pbrt-v4. As pbrt-v4 is still an early release and changing rapidly expect these notes to be out of sync at times. When in doubt, trust the code! :)
21 |
22 | ### Updating an exporter while the interface is still undergoing changes?
23 | Yup, I'm an idiot. But its exciting to follow the developments and try out the changes!
24 |
25 | ### Legend
26 | A few emoji are used to call attention for the reasons listed below-
27 | | Icon | Reasoning |
28 | |----|----|
29 | |:exclamation: | Significant change to scene description structure |
30 |
31 | ## Base Scene Description Changes
32 | * :exclamation:`WorldEnd` has been removed
33 | * :exclamation:`TransformBegin` and `TransformEnd` are deprecated, use `AttributeBegin` and `AttributeEnd` instead.
34 | * New `Import` statement, similar to the `Include` but does not maintain graphics state (but does maintain defined objects).
35 | * New `ColorSpace "name"` graphics state Attribute(?)
36 | Sets the ColorSpace to be "name" which defines the color space of spectrum parameters. Accepts the following builtin names -
37 | * srgb (default)
38 | * dci-p3
39 | * rec2020
40 | * aces2065-1
41 | * New `Attribute "target" "parm" [ value ]` for setting parameter "overrides" for various targets which include -
42 | * shape
43 | * light
44 | * material
45 | * medium
46 | * texture
47 | * New `Option "name" "value"` call added
48 | This sets some global options including
49 | * `bool disablepixeljitter` (false)
50 | * `bool disablewavelengthjitter` (false)
51 | * `bool disabletexturefiltering` (false)
52 | * `float displacementedgescale` (1.0)
53 | * `string rendercoordsys` valid values are:
54 | * camera
55 | * cameraworld (default)
56 | * world
57 | * `string msereferenceimage` ("")
58 | * `string msereferenceout` ("")
59 | * `integer seed` (0)
60 | * `bool forcediffuse` (false)
61 | * `bool pixelstats` (false)
62 | * `bool wavefront` (false)
63 | * Type Changes
64 | * :exclamation: bool types are no longer quoted
65 | * pbrt-v3 `"bool parm" ["true"]`
66 | * pbrt-v4 `"bool parm" [true]`
67 | * :exclamation: spectrum type changes
68 | * spectrum blackbody parameters should no longer specify an intensity value
69 | * pbrt-v3 `"blackbody parm" [6500 0.5]`
70 | * pbrt-v4 `"blackbody parm" [6500]`
71 | * spectrum xyz parameters are no longer supporter
72 | * pbrt-v3 `"xyz parm" [ 0.2 0.5 0.8 ]`
73 | * pbrt-v4 *not supported*
74 |
75 | ## Camera Changes
76 | #### EnvironmentCamera is now SphericalCamera
77 | * Declaration is now "spherical" (was "environment")
78 | * New `string mapping` parameter with possible values of
79 | * equalarea (default)
80 | * equirectangle
81 | #### PerspectiveCamera
82 | * Remove `float halffov` parameter (just use "fov" parameter)
83 | #### RealisticCamera
84 | * New `string aperture` parameter (defaults to "")
85 | This parameter supports a image file path or one of the following built-ins
86 | * gaussian
87 | * square
88 | * pentagon
89 | * star
90 |
91 | ## Film Changes
92 | #### General Film Changes
93 | * Default film is "rgb"
94 | * Currently both RGBFilm and GBufferFilm have the same parameters.
95 | * New Sensor Parameters:
96 | * `float iso` defaults to 100
97 | * `float whitebalance` defaults to 0
98 | *If your whitebalance is 0, and your sensor is something other than cie1931, pbrt will automatically default the sensor to 6500*
99 | * `string sensor` defaults to "cie1931"
100 | The sensor parameter accepts any of the following camera sensors.
101 |
102 | | Parm Value | Common Name |
103 | | ---- | ---- |
104 | | cie1931 | CIE 1931 |
105 | |canon_eos_100d | Canon EOS 100D|
106 | |canon_eos_1dx_mkii | Canon EOS 1D X Mark II|
107 | |canon_eos_200d | Canon EOS-200D|
108 | |canon_eos_200d_mkii | Canon EOS 200D Mark II|
109 | |canon_eos_5d | Canon EOS 5D|
110 | |canon_eos_5d_mkii | Canon EOS 5D Mark II|
111 | |canon_eos_5d_mkiii | Canon EOS 5D Mark III|
112 | |canon_eos_5d_mkiv | Canon EOS 5D Mark IV|
113 | |canon_eos_5ds | Canon EOS 5DS|
114 | |canon_eos_m | Canon EOS M|
115 | |hasselblad_l1d_20c | Hasselblad L1D-20C|
116 | |nikon_d810 | Nikon D810|
117 | |nikon_d850 | Nikon D850|
118 | |sony_ilce_6400 | Sony A6400|
119 | |sony_ilce_7m3 | Sony A7 Mark III|
120 | |sony_ilce_7rm3 | Sony A7R Mark III|
121 | |sony_ilce_9 | Sony A9|
122 |
123 | #### ImageFilm is now RGBFilm
124 | * Declaration is now "rgb" (was "image")
125 | * `xresolution` and `yresolution` defaults have changed to (1280x720) respectively.
126 | * `integer[4] pixelbounds` parameter added. If crop region is specificed it will override this.
127 | (this previously lived on certain integrators)
128 | * `float maxsampleluminance` changed to `float maxcomponentvalue`
129 | * New `bool savefp16` parameter for saving half images. (default true)
130 | #### New GBufferFilm
131 | * Declaration is "gbuffer"
132 | * Parameters are the same as RGBFilm with the additional -
133 | * `string coordinatesystem` defaults to "camera"
134 | Possible values include:
135 | * "camera"
136 | * "world"
137 | #### New SpectralFilm
138 | * Declaration is "spectral"
139 | * Parameters are the same as RGBFilm with the additional -
140 | * `integer buckets` defaults to 16
141 | * `float lambdamin` defaults to 360
142 | * `float lambdamax` defaults to 830
143 |
144 |
145 | ## Filter Changes
146 | #### All Filters
147 | * Rename `float xwidth` to `float xradius`
148 | * Rename `float ywidth` to `float yradius`
149 | #### Gaussian Filter
150 | * `float xradius` and `float yradius` defaults are now 1.5
151 | * `float alpha` is now `float sigma` default is 0.5
152 |
153 | ## Sampler Changes
154 | The default sampler is "zsobol"
155 | * All samplers have a `int seed` parameter that defaults to a global `Option "seed" value`
156 | #### Remove MaxMinDist Sampler
157 | #### Renamed Random Sampler to Independent Sampler
158 | * Declared with "independent"
159 | #### New PMJ02BN Sampler
160 | * Declared with "pmj02bn"
161 | * Parameters:
162 | * `integer pixelsamples` parameter (defaults to 16)
163 | #### New ZSobolSampler
164 | * Declared with "zsobol"
165 | * This has the same parameters as the Sobol Sampler
166 | #### 02Sequence Sampler has become the more aptly named PaddedSobol Sampler
167 | * Declared with "paddedsobol"
168 | * This has the same parameters as the Sobol Sampler
169 | #### Sobol Sampler
170 | * New `string randomization` parameter with the following options
171 | * none
172 | * owen
173 | * fastowen (default)
174 | * permutedigits
175 | #### Stratified Sampler
176 | * Remove `integer dimensions` parameter
177 | #### Halton Sampler
178 | * Remove `bool samplepixelcenter` parameter
179 | * New `string randomization` parameter with the following options
180 | * none
181 | * owen
182 | * permutedigits (default)
183 |
184 | ## Integrator Changes
185 | #### General
186 | * `integer[4] pixelbounds` that existed on the various Integrators has been removed and now live on Film
187 | * Default integrator is now VolumePath
188 | #### Remove Whitted Integrator
189 | #### Remove DirectLighting Integrator
190 | #### New LightPath Integrator
191 | * Declared with "lightpath"
192 | * Parameters:
193 | * `integer maxdepth` defaults to 5
194 | #### New RandomWalk Integrator
195 | * Declared with "randomwalk"
196 | * Parameters:
197 | * `integer maxdepth` defaults to 5
198 | #### New Function Integrator
199 | * Declared with "function"
200 | * Parameters:
201 | * `string function`
202 | The following options are supported
203 | * step (default)
204 | * diagonal
205 | * disk
206 | * checkerboard
207 | * rotatedcheckerboard
208 | * gaussian
209 | * `bool skipbad` (true)
210 | * `string filename` defaults to Options->imageFile if supplied otherwise {function}-mse.txt
211 | * `string imagefilename` ("")
212 | #### New SimplePath Integrator
213 | * Declared with "simplepath"
214 | * Parameters:
215 | * `integer maxdepth` defaults to 5
216 | * `bool samplelights` defaults to true
217 | * `bool samplebsdf` defaults to true
218 | #### New SimpleVolPath Integrator
219 | * Declared with "simplevolapath"
220 | * Parameters:
221 | * `integer maxdepth` defaults to 5
222 | #### Rename AO Integrator
223 | * Type name is now "ambientocclusion", previously it was "ao"
224 | * Remove `integer maxsamples` parameter
225 | * New `float maxdistance` parameter, defaults to Inf
226 | #### BDPT Integrator
227 | * Replace `string lightsamplestrategy` with `string lightsampler`
228 | The following options are supported
229 | * uniform
230 | * :exclamation: power (default)
231 | *BDPT's lightsampler default is different from Path/VolPath*
232 | * bvh
233 | * exhaustive *(new)*
234 | * New `bool regularize` parameter, defaults to false
235 | #### MLT Integrator
236 | * New `bool regularize` parameter, defaults to false
237 | #### Path Integrator
238 | * Replace `string lightsamplestrategy` with `string lightsampler`
239 | The following options are supported
240 | * uniform
241 | * power
242 | * bvh (default)
243 | * exhaustive *(new)*
244 | * New `bool regularize` parameter, defaults to false
245 | * Remove `float rrthreshold` parameter
246 | #### SPPM Integrator
247 | * New `integer seed` parameter, defaults to 6502
248 | (This does **not** lookup the seed value stored in `Options`)
249 | * Remove `integer iterations` parameter
250 | #### VolPath Integrator
251 | * Replace `string lightsamplestrategy` with `string lightsampler`
252 | The following options are supported
253 | * uniform
254 | * power
255 | * bvh (default)
256 | * exhaustive *(new)*
257 | * New `bool regularize` parameter, defaults to false
258 | * Remove `float rrthreshold` parameter
259 |
260 | ## Light Changes
261 | #### All Lights
262 | * `spectrum scale` is now `float scale`
263 | * New `float power` parameter defaults to -1
264 | #### Goniometric Light
265 | * `string mapname` is now `string filename`
266 | #### Infinite Light
267 | * Remove `integer samples` parameter
268 | * `string mapname` is now `string filename`
269 | * New `float illuminance` parameter, defaults to -1
270 | * New `point[4] portal` parameter
271 | * `spectrum L` and `string filename` are mutually exclusive and should not be declared together.
272 | If `portal` and `L` are used, `L` is converted to an RGB texture.
273 | #### Projection Light
274 | * `string mapname` is now `string filename`
275 | * Remove `spectrum I` parameter
276 | *Spectrum values come only from the supplied image*
277 | * New `float power` parameter, defaults to -1
278 | * `float fov` default has changed from 45 to 90
279 | #### Diffuse AreaLight
280 | * Remove `integer samples` parameter
281 | * New "string filename" parameter, defaults to ""
282 | * New `float power` parameter, defaults to -1
283 | * `spectrum L` and `string filename` are mutually exclusive and should not be declared together.
284 | * Alpha textures act on emission similar to visiblity. A special case when alpha is a constant 0 will result in an emissive invisible light source.
285 | #### Distant Light
286 | * New `float illuminance` parameter, defaults to -1
287 |
288 | ## Material Changes
289 | #### General Changes
290 | * `float texture bumpmap` has been renamed to `float texture displacement`
291 | * `string normalmap` has been added, defaults to ""
292 | #### Following Materials Have Been Removed
293 | * Uber
294 | * Translucent
295 | * Substrate
296 | * Plastic
297 | * Mirror
298 | * Metal
299 | * Matte
300 | * KdSubsurface
301 | * Glass
302 | * Fourier
303 | * Disney
304 | #### None Material renamed Interface Material
305 | * Declared with "interface", lights with an interface material are ignored.
306 | #### CoatedConductor Material
307 | Type name: "coatedconductor"
308 | ##### Parameters:
309 | * `float texture displacement` defaults to null
310 | * `spectrum interface.eta` defaults to 1.5
311 | * `float texture thickness` defaults to 0.01
312 | * `float texture interface.roughness` defaults to 0
313 | * `float texture interface.uroughness` defaults to `interface.roughness`
314 | * `float texture interface.vroughness` defaults to `interface.roughness`
315 | * `spectrum texture conductor.eta` defaults to "metal-Cu-eta"
316 | * `spectrum texture conductor.k` defaults to "metal-Cu-k"
317 | * `spectrum texture reflectance` defaults to null, not to be used with `conductor.eta` and `conductor.k`
318 | * `float texture conductor.roughness` defaults to 0
319 | * `float texture conductor.uroughness` defaults to `conductor.roughness`
320 | * `float texture conductor.vroughness` defaults to `conductor.roughness`
321 | * `bool remaproughness` defaults to true
322 | * `integer maxdepth` defaults to 10
323 | * `integer nsamples` defaults to 1
324 | * `float texture g` defaults to 0
325 | * `spectrum texture albedo` defaults to 0
326 | #### CoatedDiffuse Material
327 | Type name: "coateddiffuse"
328 | ##### Parameters:
329 | * `float texture displacement` defaultsto null
330 | * `spectrum texture reflectance` defaults to 0.5
331 | * `spectrum eta` default 1.5
332 | * `float texture thickness` default 0.01
333 | * `float texture roughness` defaults to 0
334 | * `float texture uroughness` defaults to `roughness`
335 | * `float texture vroughness` defaults to `roughness`
336 | * `bool remaproughness` defaults to true
337 | * `integer maxdepth` defaults to 10
338 | * `integer nsamples` defaults to 1
339 | * `float texture g` defaults to 0
340 | * `spectrum texture albedo` defaults to 0
341 | #### Conductor Material
342 | Type name: "conductor"
343 | ##### Parameters:
344 | * `float texture displacement` defaults to null
345 | * `spectrum texture eta` defaults to "metal-Cu-eta"
346 | * `spectrum texture k` defaults to "metal-Cu-k"
347 | * `spectrum texture reflectance` defaults to null, not to be used with `eta` and `k`
348 | * `float texture roughness` defaults to 0
349 | * `float texture uroughness` defaults to `roughness`
350 | * `float texture vroughness` defaults to `roughness`
351 | * `bool remaproughness` defaults to true
352 | #### Diffuse Material
353 | Type name: "diffuse"
354 | ##### Parameters:
355 | * `float texture displacement` defaults to null
356 | * `spectrum texture reflectance` defaults to 0.5
357 | #### DiffuseTransmission Material
358 | Type name: "diffusetransmission"
359 | ##### Parameters:
360 | * `float texture displacement` defaults to null
361 | * `spectrum texture reflectance` defaults to 0.25
362 | * `spectrum texture transmittance` defaults to 0.25
363 | * `float scale` defaults to 1
364 | #### Measured Material
365 | Type name: "measured"
366 | ##### Parameters:
367 | * `float texture displacement` defaults to null
368 | * `string filename` defaults to ""
369 | #### ThinDielectric Material
370 | Type name: "thindielectric"
371 | ##### Parameters:
372 | * `float texture displacement` defaults to null
373 | * `spectrum eta` defaults to 1.5
374 | #### Dielectric Material
375 | Type name: "dielectric"
376 | ##### Parameters:
377 | * `float texture displacement` defaults to null
378 | * `spectrum eta` defaults to 1.5
379 | * `float texture roughness` defaults to 0
380 | * `float texture uroughness` defaults to `roughness`
381 | * `float texture vroughness` defaults to `roughness`
382 | * `bool remaproughness` defaults to true
383 | #### Subsurface Material
384 | * Remove `spectrum Kr` parameter
385 | * Remove `spectrum Kt` parameter
386 | * New `spectrum texture reflectance` defaults to 1
387 | * New `spectrum texture mfp` defaults to 1
388 | * New `float g` defaults to 0
389 | * New `float texture roughness` defaults to 0
390 | #### Mix Material
391 | * Change `spectrum texture amount` to `float texture amount`
392 | * Remove `string namedmaterial1` and `string namedmaterial2`
393 | * Add `string[2] materials`
394 | #### Hair Material
395 | * Change `spectrum texture color` to `spectrum texture reflectance` (color still works if reflectance isn't specified)
396 |
397 | ## Texture Changes
398 | #### Remove UVTexture
399 | #### New DirectionMix Texture
400 | * Supports both float and spectrum
401 | * Parameters are
402 | * `float|spectrum texture tex1` defaults to 0.0
403 | * `float|specturm texture tex2` defaults to 1.0
404 | * `vector3 dir` defaults to (0.0, 1.0, 0.0)
405 | #### Fbm Texture
406 | * Output is now only float, in pbrt-v3 it was float and spectrum.
407 | #### ImageMap Texture
408 | * New `float scale` parmeter, defaults to 1
409 | * New "octahedralsphere" mode for `string wrap`
410 | * Remove `bool trilinear` parameter
411 | * New `string filter` parameter, options include
412 | * point
413 | * bilinear (default)
414 | * trilinear
415 | * ewa
416 | * Remove `bool gamma` parameter
417 | * New `bool invert` parameter, defaults to false
418 | * New `string encoding` parameter, this accepts either a builtin name or a "gamma value".
419 | One of the following options can be specified. (The default is based on the file extension of the texture.)
420 | * linear
421 | * sRGB
422 | * gamma float_value
423 | #### Marble Texture
424 | * Output is now only spectrum, in pbrt-v3 it was float and spectrum
425 | #### Scale Texture
426 | * `texture tex1` is now just `texture tex`
427 | * `texture tex2` has been replaced with `float scale`, defaults to 1
428 | #### Windy Texture
429 | * Output is now only float, in pbrt-v3 it was float and spectrum.
430 | #### Wrinkled Texture
431 | * Output is now only float, in pbrt-v3 it was float and spectrum.
432 | #### Ptex Texture
433 | * New `float scale` parameter, defaults to 1
434 |
435 | ## Shape Changes
436 | #### General
437 | * All shapes now support an `float texture alpha` parameter.
438 | * :exclamation: Shapes no longer support overriding of a Material's parameters as described here https://www.pbrt.org/fileformat-v3.html#materials
439 |
440 | #### Shape Removals
441 | * Cone
442 | * HeightField
443 | * NURBS
444 | * Hyperboloid
445 | * Paraboloid
446 | #### New Bilinear Patch Mesh
447 | * Declared with "bilinearmesh"
448 | * Parameters:
449 | * `point3[] P`
450 | * `integer[] indices`
451 | * `point2[] uv` optional
452 | * `normal3[] N` optional
453 | * `integer[] faceIndices` optional
454 | * `string emissionfilename` optional
455 | #### Triangle Shape
456 | * Remove `texture shadowalpha` parameter
457 | * :exclamation:Change uv parameter from `float[] uv` to `point2[] uv`
458 | #### Ply Shape
459 | * Remove `texture shadowalpha` parameter
460 | * Add `float texture displacement` parameter, defaults to null (deactivated)
461 | * Add `float edgelength` parameter, defaults to 1.0
462 |
463 | ## Medium Changes
464 | #### Homogeneous Medium
465 | * New `spectrum Le` parameter, defaults to 0
466 | * `string preset` default ("") Only exists on Homogeneous Medium
467 | * The list of presets scattering properties has not changed since pbrt-v3*
468 | #### New Uniform Medium
469 | This was previously the Heterogeneous Medium in pbrt-v3
470 | * Declare with "uniformgrid"
471 | * Parameters:
472 | * General Medium parameters described above
473 | * `float[] density`
474 | * `float[] temperature`
475 | * `float[] Lescale`
476 | * Only one combination of Le or temperature is allowed
477 | * `spectrum sigma_a` defaults to (1, 1, 1)
478 | * `spectrum sigma_s` defaults to (1, 1, 1)
479 | * `spectrum Le` defaults to 0
480 | * `float scale` defaults to 1.0
481 | * `float g` defaults to 0.0
482 | * `integer nx` defaults to 1
483 | * `integer ny` defaults to 1
484 | * `integer nz` defaults to 1
485 | * `point3 p0` defaults to (0,0,0)
486 | * `point3 p1` defaults to (1,1,1)
487 | #### New RGBGrid Medium
488 | * Declare with "rgbgrid"
489 | * Parameters:
490 | * `rgb[] sigma_a`
491 | * `rgb[] sigma_s`
492 | * `rgb[] Le`
493 | * Can specify sigma_a and/or sigma_s. But if Le is used then sigma_a is required.
494 | * `float LeScale` defaults to 0
495 | * `float scale` defaults to 1.0
496 | * `float g` defaults to 0.0
497 | * `integer nx` defaults to 1
498 | * `integer ny` defaults to 1
499 | * `integer nz` defaults to 1
500 | * `point3 p0` defaults to (0,0,0)
501 | * `point3 p1` defaults to (1,1,1)
502 | #### New Cloud Medium
503 | * Declare with "cloud"
504 | * Parameters:
505 | * `float density` defaults to 1
506 | * `float wispiness` defaults to 1
507 | * `float frequency` defauts to 5
508 | * `spectrum sigma_a` defaults to (1, 1, 1)
509 | * `spectrum sigma_s` defaults to (1, 1, 1)
510 | * `spectrum Le` defaults to 0
511 | * `float g` defaults to 0.0
512 | * `point3 p0` defaults to (0,0,0)
513 | * `point3 p1` defaults to (1,1,1)
514 | #### New NanoVDB Medium
515 | * Declare with "nanovdb"
516 | Looks for fields within the VDB of the name "density" and "temperature"
517 | * Parameters:
518 | * General Medium parameters described above
519 | * `string filename` defaults to ""
520 | * `float LeScale` defaults to 1.0
521 | * `float temperaturecutoff` defaults to 0.0
522 | * `float temperaturescale` defaults to 1.0
523 | * `spectrum sigma_a` defaults to (1, 1, 1)
524 | * `spectrum sigma_s` defaults to (1, 1, 1)
525 | * `float scale` defaults to 1.0
526 |
527 |
528 |
--------------------------------------------------------------------------------