pbrt 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,24 @@
1
+ module PBRT
2
+ class Builder
3
+ class NamedMaterial
4
+ def initialize(builder, name)
5
+ @builder = builder
6
+ @name = name
7
+ end
8
+
9
+ def method_missing(method, *args)
10
+ Material.new(self).public_send(method, *args)
11
+ end
12
+
13
+ def write(statement)
14
+ @builder.write(modified(statement))
15
+ end
16
+
17
+ private
18
+
19
+ def modified(statement)
20
+ statement.to_s.sub("Material", %(MakeNamedMaterial "#@name" "string type"))
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,46 @@
1
+ module PBRT
2
+ class Builder
3
+ class NamedMedium
4
+ def initialize(builder, name)
5
+ @builder = builder
6
+ @directive = %(MakeNamedMedium "#{name}" "string type")
7
+ end
8
+
9
+ def homogeneous(params = {})
10
+ write Statement.variadic(@directive, "homogeneous", ParameterList.from(
11
+ params,
12
+
13
+ sigma_a: :spectrum,
14
+ sigma_s: :spectrum,
15
+ preset: :string,
16
+ g: :float,
17
+ scale: :float,
18
+ ))
19
+ end
20
+
21
+ def heterogeneous(params = {})
22
+ write Statement.variadic(@directive, "heterogeneous", ParameterList.from(
23
+ params,
24
+
25
+ sigma_a: :spectrum,
26
+ sigma_s: :spectrum,
27
+ preset: :string,
28
+ g: :float,
29
+ scale: :float,
30
+ p0: :point3,
31
+ p1: :point3,
32
+ nx: :integer,
33
+ ny: :integer,
34
+ nz: :integer,
35
+ density: :float,
36
+ ))
37
+ end
38
+
39
+ private
40
+
41
+ def write(statement)
42
+ @builder.write(statement)
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,64 @@
1
+ module PBRT
2
+ class Builder
3
+ class PixelFilter
4
+ def initialize(builder)
5
+ @builder = builder
6
+ end
7
+
8
+ def box(params = {})
9
+ write Statement.variadic("PixelFilter", "box", ParameterList.from(
10
+ params,
11
+
12
+ xwidth: :float,
13
+ ywidth: :float,
14
+ ))
15
+ end
16
+
17
+ def gaussian(params = {})
18
+ write Statement.variadic("PixelFilter", "gaussian", ParameterList.from(
19
+ params,
20
+
21
+ xwidth: :float,
22
+ ywidth: :float,
23
+ alpha: :float,
24
+ ))
25
+ end
26
+
27
+ def mitchell(params = {})
28
+ write Statement.variadic("PixelFilter", "mitchell", ParameterList.from(
29
+ params,
30
+
31
+ xwidth: :float,
32
+ ywidth: :float,
33
+ B: :float,
34
+ C: :float,
35
+ ))
36
+ end
37
+
38
+ def sinc(params = {})
39
+ write Statement.variadic("PixelFilter", "sinc", ParameterList.from(
40
+ params,
41
+
42
+ xwidth: :float,
43
+ ywidth: :float,
44
+ tau: :float,
45
+ ))
46
+ end
47
+
48
+ def triangle(params = {})
49
+ write Statement.variadic("PixelFilter", "triangle", ParameterList.from(
50
+ params,
51
+
52
+ xwidth: :float,
53
+ ywidth: :float,
54
+ ))
55
+ end
56
+
57
+ private
58
+
59
+ def write(statement)
60
+ @builder.write(statement)
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,60 @@
1
+ module PBRT
2
+ class Builder
3
+ class Sampler
4
+ def initialize(builder)
5
+ @builder = builder
6
+ end
7
+
8
+ def o2sequence(params = {})
9
+ write Statement.variadic("Sampler", "02sequence", ParameterList.from(
10
+ params,
11
+ pixelsamples: :integer,
12
+ ))
13
+ end
14
+
15
+ def halton(params = {})
16
+ write Statement.variadic("Sampler", "halton", ParameterList.from(
17
+ params,
18
+ pixelsamples: :integer,
19
+ ))
20
+ end
21
+
22
+ def maxmindist(params = {})
23
+ write Statement.variadic("Sampler", "maxmindist", ParameterList.from(
24
+ params,
25
+ pixelsamples: :integer,
26
+ ))
27
+ end
28
+
29
+ def random(params = {})
30
+ write Statement.variadic("Sampler", "random", ParameterList.from(
31
+ params,
32
+ pixelsamples: :integer,
33
+ ))
34
+ end
35
+
36
+ def sobol(params = {})
37
+ write Statement.variadic("Sampler", "sobol", ParameterList.from(
38
+ params,
39
+ pixelsamples: :integer,
40
+ ))
41
+ end
42
+
43
+ def stratified(params = {})
44
+ write Statement.variadic("Sampler", "stratified", ParameterList.from(
45
+ params,
46
+
47
+ jitter: :bool,
48
+ xsamples: :integer,
49
+ ysamples: :integer,
50
+ ))
51
+ end
52
+
53
+ private
54
+
55
+ def write(statement)
56
+ @builder.write(statement)
57
+ end
58
+ end
59
+ end
60
+ end
@@ -0,0 +1,171 @@
1
+ module PBRT
2
+ class Builder
3
+ class Shape
4
+ def initialize(builder)
5
+ @builder = builder
6
+ end
7
+
8
+ def cone(params = {})
9
+ write Statement.variadic("Shape", "cone", ParameterList.from(
10
+ params,
11
+
12
+ allow_material_overrides: true,
13
+ radius: :float,
14
+ height: :float,
15
+ phimax: :float,
16
+ ))
17
+ end
18
+
19
+ def curve(params = {})
20
+ write Statement.variadic("Shape", "curve", ParameterList.from(
21
+ params,
22
+
23
+ allow_material_overrides: true,
24
+ P: :point3,
25
+ basis: :string,
26
+ degree: :integer,
27
+ type: :string,
28
+ N: :normal3,
29
+ width: :float,
30
+ width0: :float,
31
+ width1: :float,
32
+ splitdepth: :integer,
33
+ ))
34
+ end
35
+
36
+ def cylinder(params = {})
37
+ write Statement.variadic("Shape", "cylinder", ParameterList.from(
38
+ params,
39
+
40
+ allow_material_overrides: true,
41
+ radius: :float,
42
+ zmin: :float,
43
+ zmax: :float,
44
+ phimax: :float,
45
+ ))
46
+ end
47
+
48
+ def disk(params = {})
49
+ write Statement.variadic("Shape", "disk", ParameterList.from(
50
+ params,
51
+
52
+ allow_material_overrides: true,
53
+ height: :float,
54
+ radius: :float,
55
+ innerradius: :float,
56
+ phimax: :float,
57
+ ))
58
+ end
59
+
60
+ def hyperboloid(params = {})
61
+ write Statement.variadic("Shape", "hyperboloid", ParameterList.from(
62
+ params,
63
+
64
+ allow_material_overrides: true,
65
+ p1: :point3,
66
+ p2: :point3,
67
+ phimax: :float,
68
+ ))
69
+ end
70
+
71
+ def paraboloid(params = {})
72
+ write Statement.variadic("Shape", "paraboloid", ParameterList.from(
73
+ params,
74
+
75
+ allow_material_overrides: true,
76
+ radius: :float,
77
+ zmin: :float,
78
+ zmax: :float,
79
+ phimax: :float,
80
+ ))
81
+ end
82
+
83
+ def sphere(params = {})
84
+ write Statement.variadic("Shape", "sphere", ParameterList.from(
85
+ params,
86
+
87
+ allow_material_overrides: true,
88
+ radius: :float,
89
+ zmin: :float,
90
+ zmax: :float,
91
+ phimax: :float,
92
+ ))
93
+ end
94
+
95
+ def trianglemesh(params = {})
96
+ write Statement.variadic("Shape", "trianglemesh", ParameterList.from(
97
+ params,
98
+
99
+ allow_material_overrides: true,
100
+ indices: :integer,
101
+ P: :point3,
102
+ N: :normal3,
103
+ S: :vector3,
104
+ uv: :float,
105
+ alpha: :float_texture,
106
+ shadowalpha: :float_texture,
107
+ st: :float,
108
+ ))
109
+ end
110
+
111
+ def heightfield(params = {})
112
+ write Statement.variadic("Shape", "heightfield", ParameterList.from(
113
+ params,
114
+
115
+ allow_material_overrides: true,
116
+ nu: :integer,
117
+ nv: :integer,
118
+ Pz: :float,
119
+ ))
120
+ end
121
+
122
+ def loopsubdiv(params = {})
123
+ write Statement.variadic("Shape", "loopsubdiv", ParameterList.from(
124
+ params,
125
+
126
+ allow_material_overrides: true,
127
+ levels: :integer,
128
+ indices: :integer,
129
+ P: :point3,
130
+ ))
131
+ end
132
+
133
+ def nurbs(params = {})
134
+ write Statement.variadic("Shape", "nurbs", ParameterList.from(
135
+ params,
136
+
137
+ allow_material_overrides: true,
138
+ nu: :integer,
139
+ nv: :integer,
140
+ uorder: :integer,
141
+ vorder: :integer,
142
+ uknots: :float,
143
+ vknots: :float,
144
+ u0: :float,
145
+ v0: :float,
146
+ u1: :float,
147
+ v1: :float,
148
+ P: :point3,
149
+ Pw: :float,
150
+ ))
151
+ end
152
+
153
+ def plymesh(params = {})
154
+ write Statement.variadic("Shape", "plymesh", ParameterList.from(
155
+ params,
156
+
157
+ allow_material_overrides: true,
158
+ filename: :string,
159
+ alpha: :float_texture,
160
+ shadowalpha: :float_texture,
161
+ ))
162
+ end
163
+
164
+ private
165
+
166
+ def write(statement)
167
+ @builder.write(statement)
168
+ end
169
+ end
170
+ end
171
+ end
@@ -0,0 +1,167 @@
1
+ module PBRT
2
+ class Builder
3
+ class Texture
4
+ def initialize(builder, name, type)
5
+ @builder = builder
6
+ @directive = %(Texture "#{name}" "#{type}")
7
+ end
8
+
9
+ def bilerp(params = {})
10
+ write Statement.variadic(@directive, "bilerp", ParameterList.from(
11
+ params,
12
+
13
+ mapping: :string,
14
+ uscale: :float,
15
+ vscale: :float,
16
+ udelta: :float,
17
+ vdelta: :float,
18
+ v1: :vector3,
19
+ v2: :vector3,
20
+ v00: :texture,
21
+ v01: :texture,
22
+ v10: :texture,
23
+ v11: :texture,
24
+ ))
25
+ end
26
+
27
+ def checkerboard(params = {})
28
+ write Statement.variadic(@directive, "checkerboard", ParameterList.from(
29
+ params,
30
+
31
+ mapping: :string,
32
+ uscale: :float,
33
+ vscale: :float,
34
+ udelta: :float,
35
+ vdelta: :float,
36
+ v1: :vector3,
37
+ v2: :vector3,
38
+ dimension: :integer,
39
+ tex1: :texture,
40
+ tex2: :texture,
41
+ aamode: :string,
42
+ ))
43
+ end
44
+
45
+ def constant(params = {})
46
+ write Statement.variadic(@directive, "constant", ParameterList.from(
47
+ params,
48
+
49
+ value: :texture,
50
+ foo: :texture,
51
+ ))
52
+ end
53
+
54
+ def dots(params = {})
55
+ write Statement.variadic(@directive, "dots", ParameterList.from(
56
+ params,
57
+
58
+ mapping: :string,
59
+ uscale: :float,
60
+ vscale: :float,
61
+ udelta: :float,
62
+ vdelta: :float,
63
+ v1: :vector3,
64
+ v2: :vector3,
65
+ inside: :texture,
66
+ outside: :texture,
67
+ ))
68
+ end
69
+
70
+ def fbm(params = {})
71
+ write Statement.variadic(@directive, "fbm", ParameterList.from(
72
+ params,
73
+
74
+ octaves: :integer,
75
+ roughness: :float,
76
+ ))
77
+ end
78
+
79
+ def imagemap(params = {})
80
+ write Statement.variadic(@directive, "imagemap", ParameterList.from(
81
+ params,
82
+
83
+ mapping: :string,
84
+ uscale: :float,
85
+ vscale: :float,
86
+ udelta: :float,
87
+ vdelta: :float,
88
+ v1: :vector3,
89
+ v2: :vector3,
90
+ filename: :string,
91
+ wrap: :string,
92
+ maxanisotropy: :float,
93
+ trilinear: :bool,
94
+ scale: :float,
95
+ gamma: :bool,
96
+ ))
97
+ end
98
+
99
+ def marble(params = {})
100
+ write Statement.variadic(@directive, "marble", ParameterList.from(
101
+ params,
102
+
103
+ octaves: :integer,
104
+ roughness: :float,
105
+ scale: :float,
106
+ variation: :float,
107
+ ))
108
+ end
109
+
110
+ def mix(params = {})
111
+ write Statement.variadic(@directive, "mix", ParameterList.from(
112
+ params,
113
+
114
+ tex1: :texture,
115
+ tex2: :texture,
116
+ amount: :float_texture,
117
+ ))
118
+ end
119
+
120
+ def scale(params = {})
121
+ write Statement.variadic(@directive, "scale", ParameterList.from(
122
+ params,
123
+
124
+ tex1: :texture,
125
+ tex2: :texture,
126
+ ))
127
+ end
128
+
129
+ def uv(params = {})
130
+ write Statement.variadic(@directive, "uv", ParameterList.from(
131
+ params,
132
+
133
+ mapping: :string,
134
+ uscale: :float,
135
+ vscale: :float,
136
+ udelta: :float,
137
+ vdelta: :float,
138
+ v1: :vector3,
139
+ v2: :vector3,
140
+ ))
141
+ end
142
+
143
+ def windy(params = {})
144
+ write Statement.variadic(@directive, "windy", ParameterList.from(
145
+ params,
146
+
147
+ mapping: :string,
148
+ ))
149
+ end
150
+
151
+ def wrinkled(params = {})
152
+ write Statement.variadic(@directive, "wrinkled", ParameterList.from(
153
+ params,
154
+
155
+ octaves: :integer,
156
+ roughness: :float,
157
+ ))
158
+ end
159
+
160
+ private
161
+
162
+ def write(statement)
163
+ @builder.write(statement)
164
+ end
165
+ end
166
+ end
167
+ end