This list is currently based off the changes made up to this commit- https://github.com/mmp/pbrt-v4/tree/cdccb7
- Preamble
- Base Scene Description
- Camera
- Film
- Filter
- Sampler
- Integrator
- Light
- Material
- Texture
- Shape
- Medium
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! :)
Yup, I'm an idiot. But its exciting to follow the developments and try out the changes!
A few emoji are used to call attention for the reasons listed below-
| Icon | Reasoning |
|---|---|
| ❗ | Significant change to scene description structure |
- ❗
WorldEndhas been removed - ❗
TransformBeginandTransformEndare deprecated, useAttributeBeginandAttributeEndinstead. - New
Importstatement, similar to theIncludebut does not maintain graphics state (but does maintain defined objects). - New
ColorSpace "name"graphics state Attribute(?)
Sets the ColorSpace to be "name" which defines the color space of spectrum parameters. Accepts the following builtin names -- srgb (default)
- dci-p3
- rec2020
- aces2065-1
- New
Attribute "target" "parm" [ value ]for setting parameter "overrides" for various targets which include -- shape
- light
- material
- medium
- texture
- New
Option "name" "value"call added
This sets some global options includingbool disablepixeljitter(false)bool disablewavelengthjitter(false)bool disabletexturefiltering(false)float displacementedgescale(1.0)string rendercoordsysvalid values are:- camera
- cameraworld (default)
- world
string msereferenceimage("")string msereferenceout("")integer seed(0)bool forcediffuse(false)bool pixelstats(false)bool wavefront(false)
- Type Changes
- ❗ bool types are no longer quoted
- pbrt-v3
"bool parm" ["true"] - pbrt-v4
"bool parm" [true]
- pbrt-v3
- ❗ spectrum type changes
- spectrum blackbody parameters should no longer specify an intensity value
- pbrt-v3
"blackbody parm" [6500 0.5] - pbrt-v4
"blackbody parm" [6500]
- pbrt-v3
- spectrum xyz parameters are no longer supporter
- pbrt-v3
"xyz parm" [ 0.2 0.5 0.8 ] - pbrt-v4 not supported
- pbrt-v3
- spectrum blackbody parameters should no longer specify an intensity value
- ❗ bool types are no longer quoted
- Declaration is now "spherical" (was "environment")
- New
string mappingparameter with possible values of- equalarea (default)
- equirectangle
- Remove
float halffovparameter (just use "fov" parameter)
- New
string apertureparameter (defaults to "")
This parameter supports a image file path or one of the following built-ins- gaussian
- square
- pentagon
- star
- Default film is "rgb"
- Currently both RGBFilm and GBufferFilm have the same parameters.
- New Sensor Parameters:
float isodefaults to 100float whitebalancedefaults to 0
If your whitebalance is 0, and your sensor is something other than cie1931, pbrt will automatically default the sensor to 6500string sensordefaults to "cie1931"
The sensor parameter accepts any of the following camera sensors.
| Parm Value | Common Name |
|---|---|
| cie1931 | CIE 1931 |
| canon_eos_100d | Canon EOS 100D |
| canon_eos_1dx_mkii | Canon EOS 1D X Mark II |
| canon_eos_200d | Canon EOS-200D |
| canon_eos_200d_mkii | Canon EOS 200D Mark II |
| canon_eos_5d | Canon EOS 5D |
| canon_eos_5d_mkii | Canon EOS 5D Mark II |
| canon_eos_5d_mkiii | Canon EOS 5D Mark III |
| canon_eos_5d_mkiv | Canon EOS 5D Mark IV |
| canon_eos_5ds | Canon EOS 5DS |
| canon_eos_m | Canon EOS M |
| hasselblad_l1d_20c | Hasselblad L1D-20C |
| nikon_d810 | Nikon D810 |
| nikon_d850 | Nikon D850 |
| sony_ilce_6400 | Sony A6400 |
| sony_ilce_7m3 | Sony A7 Mark III |
| sony_ilce_7rm3 | Sony A7R Mark III |
| sony_ilce_9 | Sony A9 |
- Declaration is now "rgb" (was "image")
xresolutionandyresolutiondefaults have changed to (1280x720) respectively.integer[4] pixelboundsparameter added. If crop region is specificed it will override this.
(this previously lived on certain integrators)float maxsampleluminancechanged tofloat maxcomponentvalue- New
bool savefp16parameter for saving half images. (default true)
- Declaration is "gbuffer"
- Parameters are the same as RGBFilm with the additional -
string coordinatesystemdefaults to "camera"
Possible values include:- "camera"
- "world"
- Declaration is "spectral"
- Parameters are the same as RGBFilm with the additional -
integer bucketsdefaults to 16float lambdamindefaults to 360float lambdamaxdefaults to 830
- Rename
float xwidthtofloat xradius - Rename
float ywidthtofloat yradius
float xradiusandfloat yradiusdefaults are now 1.5float alphais nowfloat sigmadefault is 0.5
The default sampler is "zsobol"
- All samplers have a
int seedparameter that defaults to a globalOption "seed" value
- Declared with "independent"
- Declared with "pmj02bn"
- Parameters:
integer pixelsamplesparameter (defaults to 16)
- Declared with "zsobol"
- This has the same parameters as the Sobol Sampler
- Declared with "paddedsobol"
- This has the same parameters as the Sobol Sampler
- New
string randomizationparameter with the following options- none
- owen
- fastowen (default)
- permutedigits
- Remove
integer dimensionsparameter
- Remove
bool samplepixelcenterparameter - New
string randomizationparameter with the following options- none
- owen
- permutedigits (default)
integer[4] pixelboundsthat existed on the various Integrators has been removed and now live on Film- Default integrator is now VolumePath
- Declared with "lightpath"
- Parameters:
integer maxdepthdefaults to 5
- Declared with "randomwalk"
- Parameters:
integer maxdepthdefaults to 5
- Declared with "function"
- Parameters:
string functionThe following options are supported- step (default)
- diagonal
- disk
- checkerboard
- rotatedcheckerboard
- gaussian
bool skipbad(true)string filenamedefaults to Options->imageFile if supplied otherwise {function}-mse.txtstring imagefilename("")
- Declared with "simplepath"
- Parameters:
integer maxdepthdefaults to 5bool samplelightsdefaults to truebool samplebsdfdefaults to true
- Declared with "simplevolapath"
- Parameters:
integer maxdepthdefaults to 5
- Type name is now "ambientocclusion", previously it was "ao"
- Remove
integer maxsamplesparameter - New
float maxdistanceparameter, defaults to Inf
- Replace
string lightsamplestrategywithstring lightsampler
The following options are supported- uniform
- ❗ power (default)
BDPT's lightsampler default is different from Path/VolPath - bvh
- exhaustive (new)
- New
bool regularizeparameter, defaults to false
- New
bool regularizeparameter, defaults to false
- Replace
string lightsamplestrategywithstring lightsampler
The following options are supported- uniform
- power
- bvh (default)
- exhaustive (new)
- New
bool regularizeparameter, defaults to false - Remove
float rrthresholdparameter
- New
integer seedparameter, defaults to 6502
(This does not lookup the seed value stored inOptions) - Remove
integer iterationsparameter
- Replace
string lightsamplestrategywithstring lightsampler
The following options are supported- uniform
- power
- bvh (default)
- exhaustive (new)
- New
bool regularizeparameter, defaults to false - Remove
float rrthresholdparameter
spectrum scaleis nowfloat scale- New
float powerparameter defaults to -1
string mapnameis nowstring filename
- Remove
integer samplesparameter string mapnameis nowstring filename- New
float illuminanceparameter, defaults to -1 - New
point[4] portalparameter spectrum Landstring filenameare mutually exclusive and should not be declared together. IfportalandLare used,Lis converted to an RGB texture.
string mapnameis nowstring filename- Remove
spectrum Iparameter
Spectrum values come only from the supplied image - New
float powerparameter, defaults to -1 float fovdefault has changed from 45 to 90
- Remove
integer samplesparameter - New "string filename" parameter, defaults to ""
- New
float powerparameter, defaults to -1 spectrum Landstring filenameare mutually exclusive and should not be declared together.- 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.
- New
float illuminanceparameter, defaults to -1
float texture bumpmaphas been renamed tofloat texture displacementstring normalmaphas been added, defaults to ""
- Uber
- Translucent
- Substrate
- Plastic
- Mirror
- Metal
- Matte
- KdSubsurface
- Glass
- Fourier
- Disney
- Declared with "interface", lights with an interface material are ignored.
Type name: "coatedconductor"
float texture displacementdefaults to nullspectrum interface.etadefaults to 1.5float texture thicknessdefaults to 0.01float texture interface.roughnessdefaults to 0float texture interface.uroughnessdefaults tointerface.roughnessfloat texture interface.vroughnessdefaults tointerface.roughnessspectrum texture conductor.etadefaults to "metal-Cu-eta"spectrum texture conductor.kdefaults to "metal-Cu-k"spectrum texture reflectancedefaults to null, not to be used withconductor.etaandconductor.kfloat texture conductor.roughnessdefaults to 0float texture conductor.uroughnessdefaults toconductor.roughnessfloat texture conductor.vroughnessdefaults toconductor.roughnessbool remaproughnessdefaults to trueinteger maxdepthdefaults to 10integer nsamplesdefaults to 1float texture gdefaults to 0spectrum texture albedodefaults to 0
Type name: "coateddiffuse"
float texture displacementdefaultsto nullspectrum texture reflectancedefaults to 0.5spectrum etadefault 1.5float texture thicknessdefault 0.01float texture roughnessdefaults to 0float texture uroughnessdefaults toroughnessfloat texture vroughnessdefaults toroughnessbool remaproughnessdefaults to trueinteger maxdepthdefaults to 10integer nsamplesdefaults to 1float texture gdefaults to 0spectrum texture albedodefaults to 0
Type name: "conductor"
float texture displacementdefaults to nullspectrum texture etadefaults to "metal-Cu-eta"spectrum texture kdefaults to "metal-Cu-k"spectrum texture reflectancedefaults to null, not to be used withetaandkfloat texture roughnessdefaults to 0float texture uroughnessdefaults toroughnessfloat texture vroughnessdefaults toroughnessbool remaproughnessdefaults to true
Type name: "diffuse"
float texture displacementdefaults to nullspectrum texture reflectancedefaults to 0.5
Type name: "diffusetransmission"
float texture displacementdefaults to nullspectrum texture reflectancedefaults to 0.25spectrum texture transmittancedefaults to 0.25float scaledefaults to 1
Type name: "measured"
float texture displacementdefaults to nullstring filenamedefaults to ""
Type name: "thindielectric"
float texture displacementdefaults to nullspectrum etadefaults to 1.5
Type name: "dielectric"
float texture displacementdefaults to nullspectrum etadefaults to 1.5float texture roughnessdefaults to 0float texture uroughnessdefaults toroughnessfloat texture vroughnessdefaults toroughnessbool remaproughnessdefaults to true
- Remove
spectrum Krparameter - Remove
spectrum Ktparameter - New
spectrum texture reflectancedefaults to 1 - New
spectrum texture mfpdefaults to 1 - New
float gdefaults to 0 - New
float texture roughnessdefaults to 0
- Change
spectrum texture amounttofloat texture amount - Remove
string namedmaterial1andstring namedmaterial2 - Add
string[2] materials
- Change
spectrum texture colortospectrum texture reflectance(color still works if reflectance isn't specified)
- Supports both float and spectrum
- Parameters are
float|spectrum texture tex1defaults to 0.0float|specturm texture tex2defaults to 1.0vector3 dirdefaults to (0.0, 1.0, 0.0)
- Output is now only float, in pbrt-v3 it was float and spectrum.
- New
float scaleparmeter, defaults to 1 - New "octahedralsphere" mode for
string wrap - Remove
bool trilinearparameter - New
string filterparameter, options include- point
- bilinear (default)
- trilinear
- ewa
- Remove
bool gammaparameter - New
bool invertparameter, defaults to false - New
string encodingparameter, this accepts either a builtin name or a "gamma value".
One of the following options can be specified. (The default is based on the file extension of the texture.)- linear
- sRGB
- gamma float_value
- Output is now only spectrum, in pbrt-v3 it was float and spectrum
texture tex1is now justtexture textexture tex2has been replaced withfloat scale, defaults to 1
- Output is now only float, in pbrt-v3 it was float and spectrum.
- Output is now only float, in pbrt-v3 it was float and spectrum.
- New
float scaleparameter, defaults to 1
- All shapes now support an
float texture alphaparameter. - ❗ Shapes no longer support overriding of a Material's parameters as described here https://www.pbrt.org/fileformat-v3.html#materials
- Cone
- HeightField
- NURBS
- Hyperboloid
- Paraboloid
- Declared with "bilinearmesh"
- Parameters:
point3[] Pinteger[] indicespoint2[] uvoptionalnormal3[] Noptionalinteger[] faceIndicesoptionalstring emissionfilenameoptional
- Remove
texture shadowalphaparameter - ❗Change uv parameter from
float[] uvtopoint2[] uv
- Remove
texture shadowalphaparameter - Add
float texture displacementparameter, defaults to null (deactivated) - Add
float edgelengthparameter, defaults to 1.0
- New
spectrum Leparameter, defaults to 0 string presetdefault ("") Only exists on Homogeneous Medium- The list of presets scattering properties has not changed since pbrt-v3*
This was previously the Heterogeneous Medium in pbrt-v3
- Declare with "uniformgrid"
- Parameters:
- General Medium parameters described above
float[] densityfloat[] temperaturefloat[] Lescale- Only one combination of Le or temperature is allowed
spectrum sigma_adefaults to (1, 1, 1)spectrum sigma_sdefaults to (1, 1, 1)spectrum Ledefaults to 0float scaledefaults to 1.0float gdefaults to 0.0integer nxdefaults to 1integer nydefaults to 1integer nzdefaults to 1point3 p0defaults to (0,0,0)point3 p1defaults to (1,1,1)
- Declare with "rgbgrid"
- Parameters:
rgb[] sigma_argb[] sigma_srgb[] Le- Can specify sigma_a and/or sigma_s. But if Le is used then sigma_a is required.
float LeScaledefaults to 0float scaledefaults to 1.0float gdefaults to 0.0integer nxdefaults to 1integer nydefaults to 1integer nzdefaults to 1point3 p0defaults to (0,0,0)point3 p1defaults to (1,1,1)
- Declare with "cloud"
- Parameters:
float densitydefaults to 1float wispinessdefaults to 1float frequencydefauts to 5spectrum sigma_adefaults to (1, 1, 1)spectrum sigma_sdefaults to (1, 1, 1)spectrum Ledefaults to 0float gdefaults to 0.0point3 p0defaults to (0,0,0)point3 p1defaults to (1,1,1)
- Declare with "nanovdb"
Looks for fields within the VDB of the name "density" and "temperature" - Parameters:
- General Medium parameters described above
string filenamedefaults to ""float LeScaledefaults to 1.0float temperaturecutoffdefaults to 0.0float temperaturescaledefaults to 1.0spectrum sigma_adefaults to (1, 1, 1)spectrum sigma_sdefaults to (1, 1, 1)float scaledefaults to 1.0