RenderMan API  23.0
RixColorTemperature.h
Go to the documentation of this file.
1 /*
2 # ------------------------------------------------------------------------------
3 #
4 # Copyright (c) 1986-2019 Pixar. All rights reserved.
5 #
6 # The information in this file (the "Software") is provided for the exclusive
7 # use of the software licensees of Pixar ("Licensees"). Licensees have the
8 # right to incorporate the Software into other products for use by other
9 # authorized software licensees of Pixar, without fee. Except as expressly
10 # permitted herein, the Software may not be disclosed to third parties, copied
11 # or duplicated in any form, in whole or in part, without the prior written
12 # permission of Pixar.
13 #
14 # The copyright notices in the Software and this entire statement, including the
15 # above license grant, this restriction and the following disclaimer, must be
16 # included in all copies of the Software, in whole or in part, and all permitted
17 # derivative works of the Software, unless such copies or derivative works are
18 # solely in the form of machine-executable object code generated by a source
19 # language processor.
20 #
21 # PIXAR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL
22 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL PIXAR BE
23 # LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
24 # WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
25 # OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
26 # CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. IN NO CASE WILL
27 # PIXAR'S TOTAL LIABILITY FOR ALL DAMAGES ARISING OUT OF OR IN CONNECTION WITH
28 # THE USE OR PERFORMANCE OF THIS SOFTWARE EXCEED $50.
29 #
30 # Pixar
31 # 1200 Park Ave
32 # Emeryville CA 94608
33 #
34 # ------------------------------------------------------------------------------
35 */
36 
37 
38 #ifndef RixColorTemp_h
39 #define RixColorTemp_h
40 
41 #include "RixInterfaces.h" // for RixShadeFunctions, etc
42 #include "RixShadingUtils.h" // for RixClamp
43 #include "prmanapi.h" // for PRMAN_INLINE
44 #include "ri.h" // for RtFloat3, RtColorRGB
45 
46 namespace
47 {
48 
49 // Lookup table generated with specrend.py (leveraging the colour-science module)
50 
51 // NOTE: 6500K doesn't give a pure white because the D65
52 // illuminant used by Rec. 709 doesn't lie on the
53 // Planckian Locus. We would need to compute the
54 // Correlated Colour Temperature (CCT) using Ohno's
55 // method to get pure white. Maybe one day.
56 
57 static RtFloat3 const s_blackbodyRGB[2][199] = {
58  {
59  // Blackbody RGB values converted to ITU-R BT.709
60  RtFloat3(1.000000f, 0.008654f, 0.000000f), // 1000 K
61  RtFloat3(1.000000f, 0.008654f, 0.000000f), // 1000 K
62  RtFloat3(1.000000f, 0.070039f, 0.000000f), // 1250 K
63  RtFloat3(1.000000f, 0.132992f, 0.000000f), // 1500 K
64  RtFloat3(1.000000f, 0.195578f, 0.000000f), // 1750 K
65  RtFloat3(1.000000f, 0.256671f, 0.008102f), // 2000 K
66  RtFloat3(1.000000f, 0.315617f, 0.034020f), // 2250 K
67  RtFloat3(1.000000f, 0.372048f, 0.067463f), // 2500 K
68  RtFloat3(1.000000f, 0.425778f, 0.107640f), // 2750 K
69  RtFloat3(1.000000f, 0.476733f, 0.153627f), // 3000 K
70  RtFloat3(1.000000f, 0.524916f, 0.204469f), // 3250 K
71  RtFloat3(1.000000f, 0.570376f, 0.259243f), // 3500 K
72  RtFloat3(1.000000f, 0.613194f, 0.317089f), // 3750 K
73  RtFloat3(1.000000f, 0.653469f, 0.377229f), // 4000 K
74  RtFloat3(1.000000f, 0.691316f, 0.438973f), // 4250 K
75  RtFloat3(1.000000f, 0.726855f, 0.501716f), // 4500 K
76  RtFloat3(1.000000f, 0.760210f, 0.564939f), // 4750 K
77  RtFloat3(1.000000f, 0.791505f, 0.628200f), // 5000 K
78  RtFloat3(1.000000f, 0.820863f, 0.691129f), // 5250 K
79  RtFloat3(1.000000f, 0.848405f, 0.753421f), // 5500 K
80  RtFloat3(1.000000f, 0.874249f, 0.814825f), // 5750 K
81  RtFloat3(1.000000f, 0.898504f, 0.875141f), // 6000 K
82  RtFloat3(1.000000f, 0.921279f, 0.934214f), // 6250 K
83  RtFloat3(1.000000f, 0.942674f, 0.991923f), // 6500 K
84  RtFloat3(0.954034f, 0.918528f, 1.000000f), // 6750 K
85  RtFloat3(0.906681f, 0.890086f, 1.000000f), // 7000 K
86  RtFloat3(0.864965f, 0.864531f, 1.000000f), // 7250 K
87  RtFloat3(0.827996f, 0.841464f, 1.000000f), // 7500 K
88  RtFloat3(0.795055f, 0.820552f, 1.000000f), // 7750 K
89  RtFloat3(0.765554f, 0.801519f, 1.000000f), // 8000 K
90  RtFloat3(0.739011f, 0.784134f, 1.000000f), // 8250 K
91  RtFloat3(0.715029f, 0.768200f, 1.000000f), // 8500 K
92  RtFloat3(0.693274f, 0.753550f, 1.000000f), // 8750 K
93  RtFloat3(0.673466f, 0.740041f, 1.000000f), // 9000 K
94  RtFloat3(0.655370f, 0.727552f, 1.000000f), // 9250 K
95  RtFloat3(0.638784f, 0.715975f, 1.000000f), // 9500 K
96  RtFloat3(0.623537f, 0.705218f, 1.000000f), // 9750 K
97  RtFloat3(0.609481f, 0.695201f, 1.000000f), // 10000 K
98  RtFloat3(0.596489f, 0.685854f, 1.000000f), // 10250 K
99  RtFloat3(0.584451f, 0.677113f, 1.000000f), // 10500 K
100  RtFloat3(0.573270f, 0.668924f, 1.000000f), // 10750 K
101  RtFloat3(0.562862f, 0.661240f, 1.000000f), // 11000 K
102  RtFloat3(0.553154f, 0.654015f, 1.000000f), // 11250 K
103  RtFloat3(0.544081f, 0.647213f, 1.000000f), // 11500 K
104  RtFloat3(0.535585f, 0.640798f, 1.000000f), // 11750 K
105  RtFloat3(0.527615f, 0.634740f, 1.000000f), // 12000 K
106  RtFloat3(0.520126f, 0.629010f, 1.000000f), // 12250 K
107  RtFloat3(0.513078f, 0.623584f, 1.000000f), // 12500 K
108  RtFloat3(0.506434f, 0.618440f, 1.000000f), // 12750 K
109  RtFloat3(0.500163f, 0.613556f, 1.000000f), // 13000 K
110  RtFloat3(0.494234f, 0.608914f, 1.000000f), // 13250 K
111  RtFloat3(0.488622f, 0.604498f, 1.000000f), // 13500 K
112  RtFloat3(0.483303f, 0.600291f, 1.000000f), // 13750 K
113  RtFloat3(0.478255f, 0.596280f, 1.000000f), // 14000 K
114  RtFloat3(0.473460f, 0.592451f, 1.000000f), // 14250 K
115  RtFloat3(0.468899f, 0.588794f, 1.000000f), // 14500 K
116  RtFloat3(0.464556f, 0.585297f, 1.000000f), // 14750 K
117  RtFloat3(0.460417f, 0.581951f, 1.000000f), // 15000 K
118  RtFloat3(0.456467f, 0.578745f, 1.000000f), // 15250 K
119  RtFloat3(0.452695f, 0.575673f, 1.000000f), // 15500 K
120  RtFloat3(0.449090f, 0.572725f, 1.000000f), // 15750 K
121  RtFloat3(0.445641f, 0.569894f, 1.000000f), // 16000 K
122  RtFloat3(0.442338f, 0.567175f, 1.000000f), // 16250 K
123  RtFloat3(0.439172f, 0.564561f, 1.000000f), // 16500 K
124  RtFloat3(0.436136f, 0.562045f, 1.000000f), // 16750 K
125  RtFloat3(0.433222f, 0.559623f, 1.000000f), // 17000 K
126  RtFloat3(0.430423f, 0.557290f, 1.000000f), // 17250 K
127  RtFloat3(0.427732f, 0.555041f, 1.000000f), // 17500 K
128  RtFloat3(0.425143f, 0.552872f, 1.000000f), // 17750 K
129  RtFloat3(0.422652f, 0.550778f, 1.000000f), // 18000 K
130  RtFloat3(0.420252f, 0.548756f, 1.000000f), // 18250 K
131  RtFloat3(0.417939f, 0.546803f, 1.000000f), // 18500 K
132  RtFloat3(0.415709f, 0.544914f, 1.000000f), // 18750 K
133  RtFloat3(0.413557f, 0.543088f, 1.000000f), // 19000 K
134  RtFloat3(0.411479f, 0.541320f, 1.000000f), // 19250 K
135  RtFloat3(0.409471f, 0.539609f, 1.000000f), // 19500 K
136  RtFloat3(0.407531f, 0.537951f, 1.000000f), // 19750 K
137  RtFloat3(0.405654f, 0.536345f, 1.000000f), // 20000 K
138  RtFloat3(0.403839f, 0.534788f, 1.000000f), // 20250 K
139  RtFloat3(0.402081f, 0.533278f, 1.000000f), // 20500 K
140  RtFloat3(0.400379f, 0.531812f, 1.000000f), // 20750 K
141  RtFloat3(0.398730f, 0.530389f, 1.000000f), // 21000 K
142  RtFloat3(0.397131f, 0.529008f, 1.000000f), // 21250 K
143  RtFloat3(0.395581f, 0.527665f, 1.000000f), // 21500 K
144  RtFloat3(0.394076f, 0.526361f, 1.000000f), // 21750 K
145  RtFloat3(0.392616f, 0.525093f, 1.000000f), // 22000 K
146  RtFloat3(0.391198f, 0.523859f, 1.000000f), // 22250 K
147  RtFloat3(0.389821f, 0.522659f, 1.000000f), // 22500 K
148  RtFloat3(0.388482f, 0.521491f, 1.000000f), // 22750 K
149  RtFloat3(0.387181f, 0.520354f, 1.000000f), // 23000 K
150  RtFloat3(0.385915f, 0.519246f, 1.000000f), // 23250 K
151  RtFloat3(0.384684f, 0.518167f, 1.000000f), // 23500 K
152  RtFloat3(0.383486f, 0.517115f, 1.000000f), // 23750 K
153  RtFloat3(0.382320f, 0.516090f, 1.000000f), // 24000 K
154  RtFloat3(0.381184f, 0.515090f, 1.000000f), // 24250 K
155  RtFloat3(0.380077f, 0.514115f, 1.000000f), // 24500 K
156  RtFloat3(0.378999f, 0.513164f, 1.000000f), // 24750 K
157  RtFloat3(0.377948f, 0.512235f, 1.000000f), // 25000 K
158  RtFloat3(0.376922f, 0.511329f, 1.000000f), // 25250 K
159  RtFloat3(0.375923f, 0.510444f, 1.000000f), // 25500 K
160  RtFloat3(0.374947f, 0.509579f, 1.000000f), // 25750 K
161  RtFloat3(0.373995f, 0.508734f, 1.000000f), // 26000 K
162  RtFloat3(0.373066f, 0.507909f, 1.000000f), // 26250 K
163  RtFloat3(0.372159f, 0.507102f, 1.000000f), // 26500 K
164  RtFloat3(0.371272f, 0.506313f, 1.000000f), // 26750 K
165  RtFloat3(0.370406f, 0.505541f, 1.000000f), // 27000 K
166  RtFloat3(0.369560f, 0.504786f, 1.000000f), // 27250 K
167  RtFloat3(0.368733f, 0.504048f, 1.000000f), // 27500 K
168  RtFloat3(0.367924f, 0.503325f, 1.000000f), // 27750 K
169  RtFloat3(0.367134f, 0.502617f, 1.000000f), // 28000 K
170  RtFloat3(0.366360f, 0.501925f, 1.000000f), // 28250 K
171  RtFloat3(0.365603f, 0.501246f, 1.000000f), // 28500 K
172  RtFloat3(0.364863f, 0.500582f, 1.000000f), // 28750 K
173  RtFloat3(0.364138f, 0.499931f, 1.000000f), // 29000 K
174  RtFloat3(0.363428f, 0.499293f, 1.000000f), // 29250 K
175  RtFloat3(0.362733f, 0.498668f, 1.000000f), // 29500 K
176  RtFloat3(0.362052f, 0.498056f, 1.000000f), // 29750 K
177  RtFloat3(0.361385f, 0.497455f, 1.000000f), // 30000 K
178  RtFloat3(0.360731f, 0.496866f, 1.000000f), // 30250 K
179  RtFloat3(0.360091f, 0.496288f, 1.000000f), // 30500 K
180  RtFloat3(0.359463f, 0.495721f, 1.000000f), // 30750 K
181  RtFloat3(0.358848f, 0.495165f, 1.000000f), // 31000 K
182  RtFloat3(0.358244f, 0.494620f, 1.000000f), // 31250 K
183  RtFloat3(0.357652f, 0.494084f, 1.000000f), // 31500 K
184  RtFloat3(0.357072f, 0.493558f, 1.000000f), // 31750 K
185  RtFloat3(0.356502f, 0.493042f, 1.000000f), // 32000 K
186  RtFloat3(0.355943f, 0.492535f, 1.000000f), // 32250 K
187  RtFloat3(0.355394f, 0.492038f, 1.000000f), // 32500 K
188  RtFloat3(0.354856f, 0.491549f, 1.000000f), // 32750 K
189  RtFloat3(0.354327f, 0.491068f, 1.000000f), // 33000 K
190  RtFloat3(0.353808f, 0.490596f, 1.000000f), // 33250 K
191  RtFloat3(0.353298f, 0.490132f, 1.000000f), // 33500 K
192  RtFloat3(0.352797f, 0.489677f, 1.000000f), // 33750 K
193  RtFloat3(0.352305f, 0.489229f, 1.000000f), // 34000 K
194  RtFloat3(0.351821f, 0.488788f, 1.000000f), // 34250 K
195  RtFloat3(0.351346f, 0.488355f, 1.000000f), // 34500 K
196  RtFloat3(0.350879f, 0.487929f, 1.000000f), // 34750 K
197  RtFloat3(0.350420f, 0.487510f, 1.000000f), // 35000 K
198  RtFloat3(0.349969f, 0.487098f, 1.000000f), // 35250 K
199  RtFloat3(0.349525f, 0.486693f, 1.000000f), // 35500 K
200  RtFloat3(0.349089f, 0.486294f, 1.000000f), // 35750 K
201  RtFloat3(0.348660f, 0.485901f, 1.000000f), // 36000 K
202  RtFloat3(0.348238f, 0.485515f, 1.000000f), // 36250 K
203  RtFloat3(0.347822f, 0.485135f, 1.000000f), // 36500 K
204  RtFloat3(0.347414f, 0.484761f, 1.000000f), // 36750 K
205  RtFloat3(0.347012f, 0.484392f, 1.000000f), // 37000 K
206  RtFloat3(0.346616f, 0.484029f, 1.000000f), // 37250 K
207  RtFloat3(0.346227f, 0.483672f, 1.000000f), // 37500 K
208  RtFloat3(0.345843f, 0.483320f, 1.000000f), // 37750 K
209  RtFloat3(0.345466f, 0.482974f, 1.000000f), // 38000 K
210  RtFloat3(0.345094f, 0.482632f, 1.000000f), // 38250 K
211  RtFloat3(0.344728f, 0.482296f, 1.000000f), // 38500 K
212  RtFloat3(0.344368f, 0.481965f, 1.000000f), // 38750 K
213  RtFloat3(0.344013f, 0.481638f, 1.000000f), // 39000 K
214  RtFloat3(0.343663f, 0.481316f, 1.000000f), // 39250 K
215  RtFloat3(0.343319f, 0.480999f, 1.000000f), // 39500 K
216  RtFloat3(0.342979f, 0.480687f, 1.000000f), // 39750 K
217  RtFloat3(0.342645f, 0.480378f, 1.000000f), // 40000 K
218  RtFloat3(0.342315f, 0.480075f, 1.000000f), // 40250 K
219  RtFloat3(0.341990f, 0.479775f, 1.000000f), // 40500 K
220  RtFloat3(0.341670f, 0.479480f, 1.000000f), // 40750 K
221  RtFloat3(0.341355f, 0.479188f, 1.000000f), // 41000 K
222  RtFloat3(0.341043f, 0.478901f, 1.000000f), // 41250 K
223  RtFloat3(0.340736f, 0.478618f, 1.000000f), // 41500 K
224  RtFloat3(0.340434f, 0.478338f, 1.000000f), // 41750 K
225  RtFloat3(0.340136f, 0.478063f, 1.000000f), // 42000 K
226  RtFloat3(0.339841f, 0.477791f, 1.000000f), // 42250 K
227  RtFloat3(0.339551f, 0.477522f, 1.000000f), // 42500 K
228  RtFloat3(0.339265f, 0.477257f, 1.000000f), // 42750 K
229  RtFloat3(0.338982f, 0.476996f, 1.000000f), // 43000 K
230  RtFloat3(0.338703f, 0.476738f, 1.000000f), // 43250 K
231  RtFloat3(0.338428f, 0.476483f, 1.000000f), // 43500 K
232  RtFloat3(0.338157f, 0.476232f, 1.000000f), // 43750 K
233  RtFloat3(0.337889f, 0.475984f, 1.000000f), // 44000 K
234  RtFloat3(0.337625f, 0.475738f, 1.000000f), // 44250 K
235  RtFloat3(0.337364f, 0.475497f, 1.000000f), // 44500 K
236  RtFloat3(0.337107f, 0.475258f, 1.000000f), // 44750 K
237  RtFloat3(0.336852f, 0.475022f, 1.000000f), // 45000 K
238  RtFloat3(0.336601f, 0.474789f, 1.000000f), // 45250 K
239  RtFloat3(0.336353f, 0.474559f, 1.000000f), // 45500 K
240  RtFloat3(0.336109f, 0.474331f, 1.000000f), // 45750 K
241  RtFloat3(0.335867f, 0.474107f, 1.000000f), // 46000 K
242  RtFloat3(0.335628f, 0.473885f, 1.000000f), // 46250 K
243  RtFloat3(0.335393f, 0.473666f, 1.000000f), // 46500 K
244  RtFloat3(0.335160f, 0.473450f, 1.000000f), // 46750 K
245  RtFloat3(0.334930f, 0.473236f, 1.000000f), // 47000 K
246  RtFloat3(0.334703f, 0.473024f, 1.000000f), // 47250 K
247  RtFloat3(0.334478f, 0.472815f, 1.000000f), // 47500 K
248  RtFloat3(0.334256f, 0.472609f, 1.000000f), // 47750 K
249  RtFloat3(0.334037f, 0.472405f, 1.000000f), // 48000 K
250  RtFloat3(0.333821f, 0.472203f, 1.000000f), // 48250 K
251  RtFloat3(0.333607f, 0.472004f, 1.000000f), // 48500 K
252  RtFloat3(0.333395f, 0.471807f, 1.000000f), // 48750 K
253  RtFloat3(0.333186f, 0.471612f, 1.000000f), // 49000 K
254  RtFloat3(0.332980f, 0.471419f, 1.000000f), // 49250 K
255  RtFloat3(0.332775f, 0.471229f, 1.000000f), // 49500 K
256  RtFloat3(0.332573f, 0.471041f, 1.000000f), // 49750 K
257  RtFloat3(0.332374f, 0.470854f, 1.000000f), // 50000 K
258  RtFloat3(0.332374f, 0.470854f, 1.000000f) // 50000 K
259  // 199 samples
260  },
261  {
262  // Blackbody RGB values converted to ACEScg
263  RtFloat3(1.000000f, 0.128644f, 0.007880f), // 1000 K
264  RtFloat3(1.000000f, 0.128644f, 0.007880f), // 1000 K
265  RtFloat3(1.000000f, 0.214859f, 0.014875f), // 1250 K
266  RtFloat3(1.000000f, 0.297738f, 0.029601f), // 1500 K
267  RtFloat3(1.000000f, 0.374978f, 0.053521f), // 1750 K
268  RtFloat3(1.000000f, 0.445739f, 0.086717f), // 2000 K
269  RtFloat3(1.000000f, 0.509926f, 0.128336f), // 2250 K
270  RtFloat3(1.000000f, 0.567817f, 0.177050f), // 2500 K
271  RtFloat3(1.000000f, 0.619861f, 0.231383f), // 2750 K
272  RtFloat3(1.000000f, 0.666576f, 0.289904f), // 3000 K
273  RtFloat3(1.000000f, 0.708485f, 0.351329f), // 3250 K
274  RtFloat3(1.000000f, 0.746087f, 0.414552f), // 3500 K
275  RtFloat3(1.000000f, 0.779847f, 0.478652f), // 3750 K
276  RtFloat3(1.000000f, 0.810187f, 0.542880f), // 4000 K
277  RtFloat3(1.000000f, 0.837484f, 0.606639f), // 4250 K
278  RtFloat3(1.000000f, 0.862079f, 0.669464f), // 4500 K
279  RtFloat3(1.000000f, 0.884270f, 0.731000f), // 4750 K
280  RtFloat3(1.000000f, 0.904326f, 0.790983f), // 5000 K
281  RtFloat3(1.000000f, 0.922481f, 0.849224f), // 5250 K
282  RtFloat3(1.000000f, 0.938944f, 0.905594f), // 5500 K
283  RtFloat3(1.000000f, 0.953900f, 0.960015f), // 5750 K
284  RtFloat3(0.987708f, 0.955618f, 1.000000f), // 6000 K
285  RtFloat3(0.940845f, 0.921952f, 1.000000f), // 6250 K
286  RtFloat3(0.899834f, 0.891963f, 1.000000f), // 6500 K
287  RtFloat3(0.863706f, 0.865109f, 1.000000f), // 6750 K
288  RtFloat3(0.831687f, 0.840946f, 1.000000f), // 7000 K
289  RtFloat3(0.803153f, 0.819108f, 1.000000f), // 7250 K
290  RtFloat3(0.777596f, 0.799291f, 1.000000f), // 7500 K
291  RtFloat3(0.754600f, 0.781241f, 1.000000f), // 7750 K
292  RtFloat3(0.733818f, 0.764744f, 1.000000f), // 8000 K
293  RtFloat3(0.714963f, 0.749615f, 1.000000f), // 8250 K
294  RtFloat3(0.697792f, 0.735701f, 1.000000f), // 8500 K
295  RtFloat3(0.682102f, 0.722868f, 1.000000f), // 8750 K
296  RtFloat3(0.667719f, 0.711001f, 1.000000f), // 9000 K
297  RtFloat3(0.654495f, 0.699999f, 1.000000f), // 9250 K
298  RtFloat3(0.642301f, 0.689776f, 1.000000f), // 9500 K
299  RtFloat3(0.631028f, 0.680255f, 1.000000f), // 9750 K
300  RtFloat3(0.620580f, 0.671371f, 1.000000f), // 10000 K
301  RtFloat3(0.610875f, 0.663064f, 1.000000f), // 10250 K
302  RtFloat3(0.601840f, 0.655283f, 1.000000f), // 10500 K
303  RtFloat3(0.593410f, 0.647981f, 1.000000f), // 10750 K
304  RtFloat3(0.585530f, 0.641117f, 1.000000f), // 11000 K
305  RtFloat3(0.578150f, 0.634655f, 1.000000f), // 11250 K
306  RtFloat3(0.571226f, 0.628561f, 1.000000f), // 11500 K
307  RtFloat3(0.564719f, 0.622808f, 1.000000f), // 11750 K
308  RtFloat3(0.558594f, 0.617368f, 1.000000f), // 12000 K
309  RtFloat3(0.552820f, 0.612217f, 1.000000f), // 12250 K
310  RtFloat3(0.547368f, 0.607334f, 1.000000f), // 12500 K
311  RtFloat3(0.542214f, 0.602699f, 1.000000f), // 12750 K
312  RtFloat3(0.537334f, 0.598295f, 1.000000f), // 13000 K
313  RtFloat3(0.532709f, 0.594105f, 1.000000f), // 13250 K
314  RtFloat3(0.528319f, 0.590115f, 1.000000f), // 13500 K
315  RtFloat3(0.524148f, 0.586311f, 1.000000f), // 13750 K
316  RtFloat3(0.520180f, 0.582682f, 1.000000f), // 14000 K
317  RtFloat3(0.516402f, 0.579215f, 1.000000f), // 14250 K
318  RtFloat3(0.512800f, 0.575901f, 1.000000f), // 14500 K
319  RtFloat3(0.509364f, 0.572730f, 1.000000f), // 14750 K
320  RtFloat3(0.506081f, 0.569693f, 1.000000f), // 15000 K
321  RtFloat3(0.502944f, 0.566783f, 1.000000f), // 15250 K
322  RtFloat3(0.499941f, 0.563991f, 1.000000f), // 15500 K
323  RtFloat3(0.497066f, 0.561311f, 1.000000f), // 15750 K
324  RtFloat3(0.494310f, 0.558737f, 1.000000f), // 16000 K
325  RtFloat3(0.491667f, 0.556262f, 1.000000f), // 16250 K
326  RtFloat3(0.489130f, 0.553882f, 1.000000f), // 16500 K
327  RtFloat3(0.486693f, 0.551591f, 1.000000f), // 16750 K
328  RtFloat3(0.484349f, 0.549383f, 1.000000f), // 17000 K
329  RtFloat3(0.482095f, 0.547256f, 1.000000f), // 17250 K
330  RtFloat3(0.479926f, 0.545205f, 1.000000f), // 17500 K
331  RtFloat3(0.477836f, 0.543225f, 1.000000f), // 17750 K
332  RtFloat3(0.475821f, 0.541314f, 1.000000f), // 18000 K
333  RtFloat3(0.473878f, 0.539467f, 1.000000f), // 18250 K
334  RtFloat3(0.472004f, 0.537683f, 1.000000f), // 18500 K
335  RtFloat3(0.470193f, 0.535957f, 1.000000f), // 18750 K
336  RtFloat3(0.468445f, 0.534287f, 1.000000f), // 19000 K
337  RtFloat3(0.466754f, 0.532671f, 1.000000f), // 19250 K
338  RtFloat3(0.465119f, 0.531105f, 1.000000f), // 19500 K
339  RtFloat3(0.463537f, 0.529588f, 1.000000f), // 19750 K
340  RtFloat3(0.462006f, 0.528118f, 1.000000f), // 20000 K
341  RtFloat3(0.460523f, 0.526692f, 1.000000f), // 20250 K
342  RtFloat3(0.459086f, 0.525309f, 1.000000f), // 20500 K
343  RtFloat3(0.457693f, 0.523966f, 1.000000f), // 20750 K
344  RtFloat3(0.456341f, 0.522662f, 1.000000f), // 21000 K
345  RtFloat3(0.455030f, 0.521396f, 1.000000f), // 21250 K
346  RtFloat3(0.453758f, 0.520165f, 1.000000f), // 21500 K
347  RtFloat3(0.452522f, 0.518969f, 1.000000f), // 21750 K
348  RtFloat3(0.451322f, 0.517805f, 1.000000f), // 22000 K
349  RtFloat3(0.450155f, 0.516673f, 1.000000f), // 22250 K
350  RtFloat3(0.449021f, 0.515572f, 1.000000f), // 22500 K
351  RtFloat3(0.447918f, 0.514499f, 1.000000f), // 22750 K
352  RtFloat3(0.446845f, 0.513455f, 1.000000f), // 23000 K
353  RtFloat3(0.445800f, 0.512438f, 1.000000f), // 23250 K
354  RtFloat3(0.444783f, 0.511447f, 1.000000f), // 23500 K
355  RtFloat3(0.443793f, 0.510481f, 1.000000f), // 23750 K
356  RtFloat3(0.442828f, 0.509539f, 1.000000f), // 24000 K
357  RtFloat3(0.441888f, 0.508620f, 1.000000f), // 24250 K
358  RtFloat3(0.440972f, 0.507723f, 1.000000f), // 24500 K
359  RtFloat3(0.440078f, 0.506849f, 1.000000f), // 24750 K
360  RtFloat3(0.439207f, 0.505995f, 1.000000f), // 25000 K
361  RtFloat3(0.438356f, 0.505161f, 1.000000f), // 25250 K
362  RtFloat3(0.437527f, 0.504347f, 1.000000f), // 25500 K
363  RtFloat3(0.436716f, 0.503551f, 1.000000f), // 25750 K
364  RtFloat3(0.435925f, 0.502774f, 1.000000f), // 26000 K
365  RtFloat3(0.435152f, 0.502014f, 1.000000f), // 26250 K
366  RtFloat3(0.434398f, 0.501271f, 1.000000f), // 26500 K
367  RtFloat3(0.433660f, 0.500545f, 1.000000f), // 26750 K
368  RtFloat3(0.432939f, 0.499834f, 1.000000f), // 27000 K
369  RtFloat3(0.432233f, 0.499139f, 1.000000f), // 27250 K
370  RtFloat3(0.431544f, 0.498459f, 1.000000f), // 27500 K
371  RtFloat3(0.430869f, 0.497793f, 1.000000f), // 27750 K
372  RtFloat3(0.430209f, 0.497142f, 1.000000f), // 28000 K
373  RtFloat3(0.429564f, 0.496503f, 1.000000f), // 28250 K
374  RtFloat3(0.428931f, 0.495878f, 1.000000f), // 28500 K
375  RtFloat3(0.428313f, 0.495266f, 1.000000f), // 28750 K
376  RtFloat3(0.427706f, 0.494666f, 1.000000f), // 29000 K
377  RtFloat3(0.427113f, 0.494078f, 1.000000f), // 29250 K
378  RtFloat3(0.426531f, 0.493502f, 1.000000f), // 29500 K
379  RtFloat3(0.425961f, 0.492937f, 1.000000f), // 29750 K
380  RtFloat3(0.425403f, 0.492383f, 1.000000f), // 30000 K
381  RtFloat3(0.424855f, 0.491840f, 1.000000f), // 30250 K
382  RtFloat3(0.424319f, 0.491307f, 1.000000f), // 30500 K
383  RtFloat3(0.423792f, 0.490784f, 1.000000f), // 30750 K
384  RtFloat3(0.423276f, 0.490271f, 1.000000f), // 31000 K
385  RtFloat3(0.422770f, 0.489768f, 1.000000f), // 31250 K
386  RtFloat3(0.422273f, 0.489273f, 1.000000f), // 31500 K
387  RtFloat3(0.421786f, 0.488788f, 1.000000f), // 31750 K
388  RtFloat3(0.421307f, 0.488312f, 1.000000f), // 32000 K
389  RtFloat3(0.420837f, 0.487844f, 1.000000f), // 32250 K
390  RtFloat3(0.420376f, 0.487384f, 1.000000f), // 32500 K
391  RtFloat3(0.419923f, 0.486933f, 1.000000f), // 32750 K
392  RtFloat3(0.419479f, 0.486490f, 1.000000f), // 33000 K
393  RtFloat3(0.419042f, 0.486054f, 1.000000f), // 33250 K
394  RtFloat3(0.418613f, 0.485626f, 1.000000f), // 33500 K
395  RtFloat3(0.418191f, 0.485205f, 1.000000f), // 33750 K
396  RtFloat3(0.417777f, 0.484791f, 1.000000f), // 34000 K
397  RtFloat3(0.417370f, 0.484384f, 1.000000f), // 34250 K
398  RtFloat3(0.416969f, 0.483984f, 1.000000f), // 34500 K
399  RtFloat3(0.416576f, 0.483590f, 1.000000f), // 34750 K
400  RtFloat3(0.416189f, 0.483203f, 1.000000f), // 35000 K
401  RtFloat3(0.415808f, 0.482823f, 1.000000f), // 35250 K
402  RtFloat3(0.415434f, 0.482448f, 1.000000f), // 35500 K
403  RtFloat3(0.415066f, 0.482079f, 1.000000f), // 35750 K
404  RtFloat3(0.414704f, 0.481717f, 1.000000f), // 36000 K
405  RtFloat3(0.414347f, 0.481360f, 1.000000f), // 36250 K
406  RtFloat3(0.413997f, 0.481008f, 1.000000f), // 36500 K
407  RtFloat3(0.413652f, 0.480662f, 1.000000f), // 36750 K
408  RtFloat3(0.413312f, 0.480322f, 1.000000f), // 37000 K
409  RtFloat3(0.412978f, 0.479986f, 1.000000f), // 37250 K
410  RtFloat3(0.412648f, 0.479656f, 1.000000f), // 37500 K
411  RtFloat3(0.412324f, 0.479331f, 1.000000f), // 37750 K
412  RtFloat3(0.412005f, 0.479010f, 1.000000f), // 38000 K
413  RtFloat3(0.411691f, 0.478695f, 1.000000f), // 38250 K
414  RtFloat3(0.411381f, 0.478384f, 1.000000f), // 38500 K
415  RtFloat3(0.411076f, 0.478077f, 1.000000f), // 38750 K
416  RtFloat3(0.410776f, 0.477775f, 1.000000f), // 39000 K
417  RtFloat3(0.410480f, 0.477477f, 1.000000f), // 39250 K
418  RtFloat3(0.410188f, 0.477184f, 1.000000f), // 39500 K
419  RtFloat3(0.409901f, 0.476895f, 1.000000f), // 39750 K
420  RtFloat3(0.409617f, 0.476610f, 1.000000f), // 40000 K
421  RtFloat3(0.409338f, 0.476329f, 1.000000f), // 40250 K
422  RtFloat3(0.409063f, 0.476052f, 1.000000f), // 40500 K
423  RtFloat3(0.408791f, 0.475778f, 1.000000f), // 40750 K
424  RtFloat3(0.408524f, 0.475509f, 1.000000f), // 41000 K
425  RtFloat3(0.408260f, 0.475243f, 1.000000f), // 41250 K
426  RtFloat3(0.407999f, 0.474981f, 1.000000f), // 41500 K
427  RtFloat3(0.407743f, 0.474722f, 1.000000f), // 41750 K
428  RtFloat3(0.407490f, 0.474467f, 1.000000f), // 42000 K
429  RtFloat3(0.407240f, 0.474215f, 1.000000f), // 42250 K
430  RtFloat3(0.406993f, 0.473966f, 1.000000f), // 42500 K
431  RtFloat3(0.406750f, 0.473721f, 1.000000f), // 42750 K
432  RtFloat3(0.406511f, 0.473479f, 1.000000f), // 43000 K
433  RtFloat3(0.406274f, 0.473240f, 1.000000f), // 43250 K
434  RtFloat3(0.406040f, 0.473005f, 1.000000f), // 43500 K
435  RtFloat3(0.405810f, 0.472772f, 1.000000f), // 43750 K
436  RtFloat3(0.405582f, 0.472542f, 1.000000f), // 44000 K
437  RtFloat3(0.405358f, 0.472315f, 1.000000f), // 44250 K
438  RtFloat3(0.405136f, 0.472091f, 1.000000f), // 44500 K
439  RtFloat3(0.404917f, 0.471870f, 1.000000f), // 44750 K
440  RtFloat3(0.404701f, 0.471652f, 1.000000f), // 45000 K
441  RtFloat3(0.404487f, 0.471436f, 1.000000f), // 45250 K
442  RtFloat3(0.404277f, 0.471223f, 1.000000f), // 45500 K
443  RtFloat3(0.404068f, 0.471012f, 1.000000f), // 45750 K
444  RtFloat3(0.403863f, 0.470804f, 1.000000f), // 46000 K
445  RtFloat3(0.403660f, 0.470599f, 1.000000f), // 46250 K
446  RtFloat3(0.403459f, 0.470396f, 1.000000f), // 46500 K
447  RtFloat3(0.403261f, 0.470195f, 1.000000f), // 46750 K
448  RtFloat3(0.403065f, 0.469997f, 1.000000f), // 47000 K
449  RtFloat3(0.402872f, 0.469801f, 1.000000f), // 47250 K
450  RtFloat3(0.402681f, 0.469608f, 1.000000f), // 47500 K
451  RtFloat3(0.402492f, 0.469417f, 1.000000f), // 47750 K
452  RtFloat3(0.402305f, 0.469228f, 1.000000f), // 48000 K
453  RtFloat3(0.402121f, 0.469041f, 1.000000f), // 48250 K
454  RtFloat3(0.401938f, 0.468856f, 1.000000f), // 48500 K
455  RtFloat3(0.401758f, 0.468673f, 1.000000f), // 48750 K
456  RtFloat3(0.401580f, 0.468493f, 1.000000f), // 49000 K
457  RtFloat3(0.401404f, 0.468314f, 1.000000f), // 49250 K
458  RtFloat3(0.401230f, 0.468138f, 1.000000f), // 49500 K
459  RtFloat3(0.401058f, 0.467963f, 1.000000f), // 49750 K
460  RtFloat3(0.400887f, 0.467791f, 1.000000f), // 50000 K
461  RtFloat3(0.400887f, 0.467791f, 1.000000f) // 50000 K
462  // 199 samples
463  }
464 };
465 
467 {
468  kScene=-1,
469  kRec709=0,
470  kACEScg=1,
471  kNumColorSpaces
472 };
473 
474 
475 RtColorRGB RixKtoRGB(float colorTemp, RixContext &ctx, bool normalize = true,
476  RenderColorSpace cs = RenderColorSpace::kRec709);
477 RtColorRGB RixKtoRGB(float colorTemp, RixShadeFunctions *sfunc, bool normalize = true,
478  RenderColorSpace cs = RenderColorSpace::kRec709);
479 
480 
482 RixKtoRGB(float colorTemp, RixContext &ctx, bool normalize, RenderColorSpace cs)
483 {
484  RixShadeFunctions *shadeFunctions =
486  if (!shadeFunctions)
487  return RtColorRGB(1.0f);
488 
489  return RixKtoRGB(colorTemp, shadeFunctions, normalize, cs);
490 }
491 
493 RixKtoRGB(float colorTemp, RixShadeFunctions* sfunc, bool normalize, RenderColorSpace cs)
494 {
495  assert(static_cast<int>(cs) >= 0);
496  // Normalize and clamp temperature from 1000 K -> 50000 K
497  float temp = RixClamp((colorTemp - 1000.0f) / 49000.0f, 0.0f, 1.0f);
498 
499  // Lookup the table
500  int idx = std::max(static_cast<int>(cs), 0);
501  RtInt numKnots = sizeof(s_blackbodyRGB[idx]) / sizeof(s_blackbodyRGB[idx][0]);
503  s_blackbodyRGB[idx], numKnots, temp);
504 
505  // Perceptually normalize the output color using Rec 709 Luma coefficients.
506  if (normalize)
507  {
508  float lum = rgb.r * 0.2126f + rgb.g * 0.7152f + rgb.b * 0.0722f;
509  rgb /= lum;
510  }
511 
512  return rgb;
513 }
514 
515 } // end namespace
516 
517 #endif
pxrcore::ColorRGB RtColorRGB
Id for Shade functions interface.
PRMAN_INLINE float RixClamp(float x, float min, float max)
#define PRMAN_INLINE
Definition: prmanapi.h:86
virtual RtFloat3 EvalSpline3(SplineType type, RtFloat3 const knot[], int nknot, float a)=0
pxrcore::Float3 RtFloat3
Definition: RiTypesHelper.h:68
virtual RixInterface * GetRixInterface(RixInterfaceId id) const =0
RenderColorSpace
int RtInt
Definition: ri.h:55