├── 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 | --------------------------------------------------------------------------------