pbrt 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/README.md +267 -0
- data/lib/pbrt.rb +26 -0
- data/lib/pbrt/builder.rb +184 -0
- data/lib/pbrt/builder/accelerator.rb +36 -0
- data/lib/pbrt/builder/area_light_source.rb +25 -0
- data/lib/pbrt/builder/camera.rb +67 -0
- data/lib/pbrt/builder/film.rb +29 -0
- data/lib/pbrt/builder/integrator.rb +82 -0
- data/lib/pbrt/builder/light_source.rb +81 -0
- data/lib/pbrt/builder/material.rb +266 -0
- data/lib/pbrt/builder/named_material.rb +24 -0
- data/lib/pbrt/builder/named_medium.rb +46 -0
- data/lib/pbrt/builder/pixel_filter.rb +64 -0
- data/lib/pbrt/builder/sampler.rb +60 -0
- data/lib/pbrt/builder/shape.rb +171 -0
- data/lib/pbrt/builder/texture.rb +167 -0
- data/lib/pbrt/parameter.rb +12 -0
- data/lib/pbrt/parameter_list.rb +45 -0
- data/lib/pbrt/signature.rb +39 -0
- data/lib/pbrt/spectrum.rb +29 -0
- data/lib/pbrt/statement.rb +11 -0
- data/lib/pbrt/statement/fixed_size.rb +28 -0
- data/lib/pbrt/statement/variadic.rb +15 -0
- data/lib/pbrt/texture.rb +63 -0
- data/lib/pbrt/values.rb +25 -0
- metadata +82 -0
@@ -0,0 +1,36 @@
|
|
1
|
+
module PBRT
|
2
|
+
class Builder
|
3
|
+
class Accelerator
|
4
|
+
def initialize(builder)
|
5
|
+
@builder = builder
|
6
|
+
end
|
7
|
+
|
8
|
+
def bvh(params = {})
|
9
|
+
write Statement.variadic("Accelerator", "bvh", ParameterList.from(
|
10
|
+
params,
|
11
|
+
|
12
|
+
maxnodeprims: :integer,
|
13
|
+
splitmethod: :string,
|
14
|
+
))
|
15
|
+
end
|
16
|
+
|
17
|
+
def kdtree(params = {})
|
18
|
+
write Statement.variadic("Accelerator", "kdtree", ParameterList.from(
|
19
|
+
params,
|
20
|
+
|
21
|
+
intersectcost: :integer,
|
22
|
+
traversalcost: :integer,
|
23
|
+
emptybonus: :float,
|
24
|
+
maxprims: :integer,
|
25
|
+
maxdepth: :integer,
|
26
|
+
))
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
def write(statement)
|
32
|
+
@builder.write(statement)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module PBRT
|
2
|
+
class Builder
|
3
|
+
class AreaLightSource
|
4
|
+
def initialize(builder)
|
5
|
+
@builder = builder
|
6
|
+
end
|
7
|
+
|
8
|
+
def diffuse(params = {})
|
9
|
+
write Statement.variadic("AreaLightSource", "diffuse", ParameterList.from(
|
10
|
+
params,
|
11
|
+
|
12
|
+
L: :spectrum,
|
13
|
+
twosided: :bool,
|
14
|
+
samples: :integer,
|
15
|
+
))
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def write(statement)
|
21
|
+
@builder.write(statement)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module PBRT
|
2
|
+
class Builder
|
3
|
+
class Camera
|
4
|
+
def initialize(builder)
|
5
|
+
@builder = builder
|
6
|
+
end
|
7
|
+
|
8
|
+
def environment(params = {})
|
9
|
+
write Statement.variadic("Camera", "environment", ParameterList.from(
|
10
|
+
params,
|
11
|
+
|
12
|
+
shutteropen: :float,
|
13
|
+
shutterclose: :float,
|
14
|
+
frameaspectratio: :float,
|
15
|
+
screenwindow: :float,
|
16
|
+
))
|
17
|
+
end
|
18
|
+
|
19
|
+
def orthographic(params = {})
|
20
|
+
write Statement.variadic("Camera", "orthographic", ParameterList.from(
|
21
|
+
params,
|
22
|
+
|
23
|
+
shutteropen: :float,
|
24
|
+
shutterclose: :float,
|
25
|
+
frameaspectratio: :float,
|
26
|
+
screenwindow: :float,
|
27
|
+
lensradius: :float,
|
28
|
+
focaldistance: :float,
|
29
|
+
))
|
30
|
+
end
|
31
|
+
|
32
|
+
def perspective(params = {})
|
33
|
+
write Statement.variadic("Camera", "perspective", ParameterList.from(
|
34
|
+
params,
|
35
|
+
|
36
|
+
shutteropen: :float,
|
37
|
+
shutterclose: :float,
|
38
|
+
frameaspectratio: :float,
|
39
|
+
screenwindow: :float,
|
40
|
+
lensradius: :float,
|
41
|
+
focaldistance: :float,
|
42
|
+
fov: :float,
|
43
|
+
halffov: :float,
|
44
|
+
))
|
45
|
+
end
|
46
|
+
|
47
|
+
def realistic(params = {})
|
48
|
+
write Statement.variadic("Camera", "realistic", ParameterList.from(
|
49
|
+
params,
|
50
|
+
|
51
|
+
shutteropen: :float,
|
52
|
+
shutterclose: :float,
|
53
|
+
lensfile: :string,
|
54
|
+
aperturediameter: :float,
|
55
|
+
focusdistance: :float,
|
56
|
+
simpleweighting: :bool,
|
57
|
+
))
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
def write(statement)
|
63
|
+
@builder.write(statement)
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module PBRT
|
2
|
+
class Builder
|
3
|
+
class Film
|
4
|
+
def initialize(builder)
|
5
|
+
@builder = builder
|
6
|
+
end
|
7
|
+
|
8
|
+
def image(params = {})
|
9
|
+
write Statement.variadic("Film", "image", ParameterList.from(
|
10
|
+
params,
|
11
|
+
|
12
|
+
xresolution: :integer,
|
13
|
+
yresolution: :integer,
|
14
|
+
cropwindow: :float,
|
15
|
+
scale: :float,
|
16
|
+
maxsampleluminance: :float,
|
17
|
+
diagonal: :float,
|
18
|
+
filename: :string,
|
19
|
+
))
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def write(statement)
|
25
|
+
@builder.write(statement)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
module PBRT
|
2
|
+
class Builder
|
3
|
+
class Integrator
|
4
|
+
def initialize(builder)
|
5
|
+
@builder = builder
|
6
|
+
end
|
7
|
+
|
8
|
+
def bdpt(params = {})
|
9
|
+
write Statement.variadic("Integrator", "bdpt", ParameterList.from(
|
10
|
+
params,
|
11
|
+
|
12
|
+
maxdepth: :integer,
|
13
|
+
pixelbounds: :integer,
|
14
|
+
lightsamplestrategy: :string,
|
15
|
+
visualizestrategies: :bool,
|
16
|
+
visualizeweights: :bool,
|
17
|
+
))
|
18
|
+
end
|
19
|
+
|
20
|
+
def directlighting(params = {})
|
21
|
+
write Statement.variadic("Integrator", "directlighting", ParameterList.from(
|
22
|
+
params,
|
23
|
+
|
24
|
+
strategy: :string,
|
25
|
+
maxdepth: :integer,
|
26
|
+
pixelbounds: :integer,
|
27
|
+
))
|
28
|
+
end
|
29
|
+
|
30
|
+
def mlt(params = {})
|
31
|
+
write Statement.variadic("Integrator", "mlt", ParameterList.from(
|
32
|
+
params,
|
33
|
+
|
34
|
+
maxdepth: :integer,
|
35
|
+
bootstrapsamples: :integer,
|
36
|
+
chains: :integer,
|
37
|
+
mutationsperpixel: :integer,
|
38
|
+
largestepprobability: :float,
|
39
|
+
sigma: :float,
|
40
|
+
))
|
41
|
+
end
|
42
|
+
|
43
|
+
def path(params = {})
|
44
|
+
write Statement.variadic("Integrator", "path", ParameterList.from(
|
45
|
+
params,
|
46
|
+
|
47
|
+
maxdepth: :integer,
|
48
|
+
pixelbounds: :integer,
|
49
|
+
rrthreshold: :float,
|
50
|
+
lightsamplestrategy: :string,
|
51
|
+
))
|
52
|
+
end
|
53
|
+
|
54
|
+
def sppm(params = {})
|
55
|
+
write Statement.variadic("Integrator", "sppm", ParameterList.from(
|
56
|
+
params,
|
57
|
+
|
58
|
+
maxdepth: :integer,
|
59
|
+
iterations: :integer,
|
60
|
+
photonsperiteration: :integer,
|
61
|
+
imagewritefrequency: :integer,
|
62
|
+
radius: :float,
|
63
|
+
))
|
64
|
+
end
|
65
|
+
|
66
|
+
def whitted(params = {})
|
67
|
+
write Statement.variadic("Integrator", "whitted", ParameterList.from(
|
68
|
+
params,
|
69
|
+
|
70
|
+
maxdepth: :integer,
|
71
|
+
pixelbounds: :integer,
|
72
|
+
))
|
73
|
+
end
|
74
|
+
|
75
|
+
private
|
76
|
+
|
77
|
+
def write(statement)
|
78
|
+
@builder.write(statement)
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,81 @@
|
|
1
|
+
module PBRT
|
2
|
+
class Builder
|
3
|
+
class LightSource
|
4
|
+
def initialize(builder)
|
5
|
+
@builder = builder
|
6
|
+
end
|
7
|
+
|
8
|
+
def distant(params = {})
|
9
|
+
write Statement.variadic("LightSource", "distant", ParameterList.from(
|
10
|
+
params,
|
11
|
+
|
12
|
+
scale: :spectrum,
|
13
|
+
L: :spectrum,
|
14
|
+
from: :point3,
|
15
|
+
to: :point3,
|
16
|
+
))
|
17
|
+
end
|
18
|
+
|
19
|
+
def goniometric(params = {})
|
20
|
+
write Statement.variadic("LightSource", "goniometric", ParameterList.from(
|
21
|
+
params,
|
22
|
+
|
23
|
+
scale: :spectrum,
|
24
|
+
I: :spectrum,
|
25
|
+
mapname: :string,
|
26
|
+
))
|
27
|
+
end
|
28
|
+
|
29
|
+
def infinite(params = {})
|
30
|
+
write Statement.variadic("LightSource", "infinite", ParameterList.from(
|
31
|
+
params,
|
32
|
+
|
33
|
+
scale: :spectrum,
|
34
|
+
L: :spectrum,
|
35
|
+
samples: :integer,
|
36
|
+
mapname: :string,
|
37
|
+
))
|
38
|
+
end
|
39
|
+
|
40
|
+
def point(params = {})
|
41
|
+
write Statement.variadic("LightSource", "point", ParameterList.from(
|
42
|
+
params,
|
43
|
+
|
44
|
+
scale: :spectrum,
|
45
|
+
I: :spectrum,
|
46
|
+
from: :point3,
|
47
|
+
))
|
48
|
+
end
|
49
|
+
|
50
|
+
def projection(params = {})
|
51
|
+
write Statement.variadic("LightSource", "projection", ParameterList.from(
|
52
|
+
params,
|
53
|
+
|
54
|
+
scale: :spectrum,
|
55
|
+
I: :spectrum,
|
56
|
+
fov: :float,
|
57
|
+
mapname: :string,
|
58
|
+
))
|
59
|
+
end
|
60
|
+
|
61
|
+
def spot(params = {})
|
62
|
+
write Statement.variadic("LightSource", "spot", ParameterList.from(
|
63
|
+
params,
|
64
|
+
|
65
|
+
scale: :spectrum,
|
66
|
+
I: :spectrum,
|
67
|
+
from: :point3,
|
68
|
+
to: :point3,
|
69
|
+
coneangle: :float,
|
70
|
+
conedeltaangle: :float,
|
71
|
+
))
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def write(statement)
|
77
|
+
@builder.write(statement)
|
78
|
+
end
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
@@ -0,0 +1,266 @@
|
|
1
|
+
module PBRT
|
2
|
+
class Builder
|
3
|
+
class Material
|
4
|
+
def initialize(builder)
|
5
|
+
@builder = builder
|
6
|
+
end
|
7
|
+
|
8
|
+
def disney(params = {})
|
9
|
+
write Statement.variadic("Material", "disney", ParameterList.from(
|
10
|
+
params,
|
11
|
+
|
12
|
+
bumpmap: :float_texture,
|
13
|
+
color: :spectrum_texture,
|
14
|
+
anisotropic: :float_texture,
|
15
|
+
clearcoat: :float_texture,
|
16
|
+
clearcoatgloss: :float_texture,
|
17
|
+
eta: :float_texture,
|
18
|
+
metallic: :float_texture,
|
19
|
+
roughness: :float_texture,
|
20
|
+
scatterdistance: :spectrum_texture,
|
21
|
+
sheen: :float_texture,
|
22
|
+
sheentint: :float_texture,
|
23
|
+
spectrans: :float_texture,
|
24
|
+
speculartint: :float_texture,
|
25
|
+
thin: :bool,
|
26
|
+
difftrans: :spectrum_texture,
|
27
|
+
flatness: :spectrum_texture,
|
28
|
+
))
|
29
|
+
end
|
30
|
+
|
31
|
+
def fourier(params = {})
|
32
|
+
write Statement.variadic("Material", "fourier", ParameterList.from(
|
33
|
+
params,
|
34
|
+
|
35
|
+
bumpmap: :float_texture,
|
36
|
+
bsdffile: :string,
|
37
|
+
))
|
38
|
+
end
|
39
|
+
|
40
|
+
def glass(params = {})
|
41
|
+
write Statement.variadic("Material", "glass", ParameterList.from(
|
42
|
+
params,
|
43
|
+
|
44
|
+
bumpmap: :float_texture,
|
45
|
+
Kr: :spectrum_texture,
|
46
|
+
Kt: :spectrum_texture,
|
47
|
+
eta: :float_texture,
|
48
|
+
uroughness: :float_texture,
|
49
|
+
vroughness: :float_texture,
|
50
|
+
remaproughness: :bool,
|
51
|
+
))
|
52
|
+
end
|
53
|
+
|
54
|
+
def hair(params = {})
|
55
|
+
write Statement.variadic("Material", "hair", ParameterList.from(
|
56
|
+
params,
|
57
|
+
|
58
|
+
bumpmap: :float_texture,
|
59
|
+
sigma_a: :spectrum_texture,
|
60
|
+
color: :spectrum_texture,
|
61
|
+
eumelanin: :float_texture,
|
62
|
+
pheomelanin: :float_texture,
|
63
|
+
eta: :float_texture,
|
64
|
+
beta_m: :float_texture,
|
65
|
+
beta_n: :float_texture,
|
66
|
+
alpha: :float_texture,
|
67
|
+
))
|
68
|
+
end
|
69
|
+
|
70
|
+
def kdsubsurface(params = {})
|
71
|
+
write Statement.variadic("Material", "kdsubsurface", ParameterList.from(
|
72
|
+
params,
|
73
|
+
|
74
|
+
bumpmap: :float_texture,
|
75
|
+
Kd: :spectrum_texture,
|
76
|
+
mfp: :float_texture,
|
77
|
+
eta: :float_texture,
|
78
|
+
Kr: :spectrum_texture,
|
79
|
+
Kt: :spectrum_texture,
|
80
|
+
uroughness: :float_texture,
|
81
|
+
vroughness: :float_texture,
|
82
|
+
remaproughness: :bool,
|
83
|
+
))
|
84
|
+
end
|
85
|
+
|
86
|
+
def matte(params = {})
|
87
|
+
write Statement.variadic("Material", "matte", ParameterList.from(
|
88
|
+
params,
|
89
|
+
|
90
|
+
bumpmap: :float_texture,
|
91
|
+
Kd: :spectrum_texture,
|
92
|
+
sigma: :float_texture,
|
93
|
+
))
|
94
|
+
end
|
95
|
+
|
96
|
+
def metal(params = {})
|
97
|
+
write Statement.variadic("Material", "metal", ParameterList.from(
|
98
|
+
params,
|
99
|
+
|
100
|
+
bumpmap: :float_texture,
|
101
|
+
eta: :spectrum_texture,
|
102
|
+
k: :spectrum_texture,
|
103
|
+
roughness: :float_texture,
|
104
|
+
uroughness: :float_texture,
|
105
|
+
vroughness: :float_texture,
|
106
|
+
remaproughness: :bool,
|
107
|
+
))
|
108
|
+
end
|
109
|
+
|
110
|
+
def mirror(params = {})
|
111
|
+
write Statement.variadic("Material", "mirror", ParameterList.from(
|
112
|
+
params,
|
113
|
+
|
114
|
+
bumpmap: :float_texture,
|
115
|
+
Kr: :spectrum_texture,
|
116
|
+
))
|
117
|
+
end
|
118
|
+
|
119
|
+
def mix(params = {})
|
120
|
+
write Statement.variadic("Material", "mix", ParameterList.from(
|
121
|
+
params,
|
122
|
+
|
123
|
+
bumpmap: :float_texture,
|
124
|
+
amount: :spectrum_texture,
|
125
|
+
namedmaterial1: :string,
|
126
|
+
namedmaterial2: :string,
|
127
|
+
))
|
128
|
+
end
|
129
|
+
|
130
|
+
def none(params = {})
|
131
|
+
write Statement.variadic("Material", "none", ParameterList.from(
|
132
|
+
params,
|
133
|
+
bumpmap: :float_texture,
|
134
|
+
))
|
135
|
+
end
|
136
|
+
|
137
|
+
def plastic(params = {})
|
138
|
+
write Statement.variadic("Material", "plastic", ParameterList.from(
|
139
|
+
params,
|
140
|
+
|
141
|
+
bumpmap: :float_texture,
|
142
|
+
Kd: :spectrum_texture,
|
143
|
+
Ks: :spectrum_texture,
|
144
|
+
roughness: :float_texture,
|
145
|
+
remaproughness: :bool,
|
146
|
+
))
|
147
|
+
end
|
148
|
+
|
149
|
+
def substrate(params = {})
|
150
|
+
write Statement.variadic("Material", "substrate", ParameterList.from(
|
151
|
+
params,
|
152
|
+
|
153
|
+
bumpmap: :float_texture,
|
154
|
+
Kd: :spectrum_texture,
|
155
|
+
Ks: :spectrum_texture,
|
156
|
+
uroughness: :float_texture,
|
157
|
+
vroughness: :float_texture,
|
158
|
+
remaproughness: :bool,
|
159
|
+
))
|
160
|
+
end
|
161
|
+
|
162
|
+
def subsurface(params = {})
|
163
|
+
write Statement.variadic("Material", "subsurface", ParameterList.from(
|
164
|
+
params,
|
165
|
+
|
166
|
+
bumpmap: :float_texture,
|
167
|
+
name: :string,
|
168
|
+
sigma_a: :spectrum_texture,
|
169
|
+
sigma_prime_s: :spectrum_texture,
|
170
|
+
scale: :float,
|
171
|
+
eta: :float_texture,
|
172
|
+
Kr: :spectrum_texture,
|
173
|
+
Kt: :spectrum_texture,
|
174
|
+
uroughness: :float_texture,
|
175
|
+
vroughness: :float_texture,
|
176
|
+
remaproughness: :bool,
|
177
|
+
))
|
178
|
+
end
|
179
|
+
|
180
|
+
def translucent(params = {})
|
181
|
+
write Statement.variadic("Material", "translucent", ParameterList.from(
|
182
|
+
params,
|
183
|
+
|
184
|
+
bumpmap: :float_texture,
|
185
|
+
Kd: :spectrum_texture,
|
186
|
+
Ks: :spectrum_texture,
|
187
|
+
reflect: :spectrum_texture,
|
188
|
+
transmit: :spectrum_texture,
|
189
|
+
roughness: :float_texture,
|
190
|
+
remaproughness: :bool,
|
191
|
+
))
|
192
|
+
end
|
193
|
+
|
194
|
+
def uber(params = {})
|
195
|
+
write Statement.variadic("Material", "uber", ParameterList.from(
|
196
|
+
params,
|
197
|
+
|
198
|
+
bumpmap: :float_texture,
|
199
|
+
Kd: :spectrum_texture,
|
200
|
+
Ks: :spectrum_texture,
|
201
|
+
Kr: :spectrum_texture,
|
202
|
+
Kt: :spectrum_texture,
|
203
|
+
roughness: :float_texture,
|
204
|
+
uroughness: :float_texture,
|
205
|
+
vroughness: :float_texture,
|
206
|
+
eta: :float_texture,
|
207
|
+
opacity: :spectrum_texture,
|
208
|
+
remaproughness: :bool,
|
209
|
+
))
|
210
|
+
end
|
211
|
+
|
212
|
+
private
|
213
|
+
|
214
|
+
def write(statement)
|
215
|
+
@builder.write(statement)
|
216
|
+
end
|
217
|
+
|
218
|
+
ALL_PARAMS = {
|
219
|
+
Kd: :spectrum_texture,
|
220
|
+
Kr: :spectrum_texture,
|
221
|
+
Ks: :spectrum_texture,
|
222
|
+
Kt: :spectrum_texture,
|
223
|
+
alpha: :float_texture,
|
224
|
+
amount: :spectrum_texture,
|
225
|
+
anisotropic: :float_texture,
|
226
|
+
beta_m: :float_texture,
|
227
|
+
beta_n: :float_texture,
|
228
|
+
bsdffile: :string,
|
229
|
+
bumpmap: :float_texture,
|
230
|
+
clearcoat: :float_texture,
|
231
|
+
clearcoatgloss: :float_texture,
|
232
|
+
color: :spectrum_texture,
|
233
|
+
difftrans: :spectrum_texture,
|
234
|
+
eumelanin: :float_texture,
|
235
|
+
flatness: :spectrum_texture,
|
236
|
+
k: :spectrum_texture,
|
237
|
+
metallic: :float_texture,
|
238
|
+
mfp: :float_texture,
|
239
|
+
name: :string,
|
240
|
+
namedmaterial1: :string,
|
241
|
+
namedmaterial2: :string,
|
242
|
+
opacity: :spectrum_texture,
|
243
|
+
pheomelanin: :float_texture,
|
244
|
+
reflect: :spectrum_texture,
|
245
|
+
remaproughness: :bool,
|
246
|
+
roughness: :float_texture,
|
247
|
+
scale: :float,
|
248
|
+
scatterdistance: :spectrum_texture,
|
249
|
+
sheen: :float_texture,
|
250
|
+
sheentint: :float_texture,
|
251
|
+
sigma: :float_texture,
|
252
|
+
sigma_a: :spectrum_texture,
|
253
|
+
sigma_prime_s: :spectrum_texture,
|
254
|
+
spectrans: :float_texture,
|
255
|
+
speculartint: :float_texture,
|
256
|
+
thin: :bool,
|
257
|
+
transmit: :spectrum_texture,
|
258
|
+
uroughness: :float_texture,
|
259
|
+
vroughness: :float_texture,
|
260
|
+
|
261
|
+
# eta appears as both a float_texture and spectrum_texture
|
262
|
+
eta: :texture,
|
263
|
+
}.freeze
|
264
|
+
end
|
265
|
+
end
|
266
|
+
end
|