10 typedef TissueForge::fVector3 rgb_color;
14 inline real lerp(
int i, real x,
const real *values,
size_t N = 256) {
15 x = std::max(std::min(x, 1.0f), 0.0f);
17 int ix = std::min((
int)std::trunc(x*(N - 1)), (
int)(N - 2));
18 real f_lower = values[ix * 3 + i];
19 real f_upper = values[(ix + 1) * 3 + i];
20 return f_lower + (dx - ix)*(f_upper - f_lower);
24 inline rgb_color grey_0_100_c0(real x) {
25 static const real values[] = {
26#include "CETperceptual/linear_grey_0-100_c0_n256.csv"
28 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
31 inline rgb_color grey_10_95_c0(real x) {
32 static const real values[] = {
33#include "CETperceptual/linear_grey_10-95_c0_n256.csv"
35 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
38 inline rgb_color kryw_0_100_c71(real x) {
39 static const real values[] = {
40#include "CETperceptual/linear_kryw_0-100_c71_n256.csv"
42 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
45 inline rgb_color kryw_0_97_c73(real x) {
46 static const real values[] = {
47#include "CETperceptual/linear_kryw_0-97_c73_n256.csv"
49 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
52 inline rgb_color green_5_95_c69(real x) {
53 static const real values[] = {
54#include "CETperceptual/linear_green_5-95_c69_n256.csv"
56 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
59 inline rgb_color blue_5_95_c73(real x) {
60 static const real values[] = {
61#include "CETperceptual/linear_blue_5-95_c73_n256.csv"
63 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
66 inline rgb_color bmw_5_95_c86(real x) {
67 static const real values[] = {
68#include "CETperceptual/linear_bmw_5-95_c86_n256.csv"
70 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
73 inline rgb_color bmy_10_95_c71(real x) {
74 static const real values[] = {
75#include "CETperceptual/linear_bmy_10-95_c71_n256.csv"
77 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
80 inline rgb_color bgyw_15_100_c67(real x) {
81 static const real values[] = {
82#include "CETperceptual/linear_bgyw_15-100_c67_n256.csv"
84 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
87 inline rgb_color gow_60_85_c27(real x) {
88 static const real values[] = {
89#include "CETperceptual/linear_gow_60-85_c27_n256.csv"
91 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
94 inline rgb_color gow_65_90_c35(real x) {
95 static const real values[] = {
96#include "CETperceptual/linear_gow_65-90_c35_n256.csv"
98 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
101 inline rgb_color blue_95_50_c20(real x) {
102 static const real values[] = {
103#include "CETperceptual/linear_blue_95-50_c20_n256.csv"
105 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
108 inline rgb_color red_0_50_c52(real x) {
109 static const real values[] = {
110#include "CETperceptual/linear_ternary-red_0-50_c52_n256.csv"
112 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
115 inline rgb_color green_0_46_c42(real x) {
116 static const real values[] = {
117#include "CETperceptual/linear_ternary-green_0-46_c42_n256.csv"
119 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
122 inline rgb_color blue_0_44_c57(real x) {
123 static const real values[] = {
124#include "CETperceptual/linear_ternary-blue_0-44_c57_n256.csv"
126 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
129 inline rgb_color bwr_40_95_c42(real x) {
130 static const real values[] = {
131#include "CETperceptual/diverging_bwr_40-95_c42_n256.csv"
133 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
136 inline rgb_color gwv_55_95_c39(real x) {
137 static const real values[] = {
138#include "CETperceptual/diverging_gwv_55-95_c39_n256.csv"
140 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
143 inline rgb_color gwr_55_95_c38(real x) {
144 static const real values[] = {
145#include "CETperceptual/diverging_gwr_55-95_c38_n256.csv"
147 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
150 inline rgb_color bkr_55_10_c35(real x) {
151 static const real values[] = {
152#include "CETperceptual/diverging_bkr_55-10_c35_n256.csv"
154 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
157 inline rgb_color bky_60_10_c30(real x) {
158 static const real values[] = {
159#include "CETperceptual/diverging_bky_60-10_c30_n256.csv"
161 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
164 inline rgb_color bjy_30_90_c45(real x) {
165 static const real values[] = {
166#include "CETperceptual/diverging-linear_bjy_30-90_c45_n256.csv"
168 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
171 inline rgb_color bjr_30_55_c53(real x) {
172 static const real values[] = {
173#include "CETperceptual/diverging-linear_bjr_30-55_c53_n256.csv"
175 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
178 inline rgb_color bwr_55_98_c37(real x) {
179 static const real values[] = {
180#include "CETperceptual/diverging_bwr_55-98_c37_n256.csv"
182 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
185 inline rgb_color cwm_80_100_c22(real x) {
186 static const real values[] = {
187#include "CETperceptual/diverging_cwm_80-100_c22_n256.csv"
189 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
192 inline rgb_color bgymr_45_85_c67(real x) {
193 static const real values[] = {
194#include "CETperceptual/diverging-rainbow_bgymr_45-85_c67_n256.csv"
196 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
199 inline rgb_color bgyrm_35_85_c69(real x) {
200 static const real values[] = {
201#include "CETperceptual/rainbow_bgyrm_35-85_c69_n256.csv"
203 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
206 inline rgb_color bgyr_35_85_c72(real x) {
207 static const real values[] = {
208#include "CETperceptual/rainbow_bgyr_35-85_c72_n256.csv"
210 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
213 inline rgb_color mrybm_35_75_c68(real x) {
214 static const real values[] = {
215#include "CETperceptual/cyclic_mrybm_35-75_c68_n256.csv"
217 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
220 inline rgb_color mygbm_30_95_c78(real x) {
221 static const real values[] = {
222#include "CETperceptual/cyclic_mygbm_30-95_c78_n256.csv"
224 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
227 inline rgb_color wrwbw_40_90_c42(real x) {
228 static const real values[] = {
229#include "CETperceptual/cyclic_wrwbw_40-90_c42_n256.csv"
231 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
234 inline rgb_color grey_15_85_c0(real x) {
235 static const real values[] = {
236#include "CETperceptual/cyclic_grey_15-85_c0_n256.csv"
238 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
241 inline rgb_color cgo_70_c39(real x) {
242 static const real values[] = {
243#include "CETperceptual/isoluminant_cgo_70_c39_n256.csv"
245 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
248 inline rgb_color cgo_80_c38(real x) {
249 static const real values[] = {
250#include "CETperceptual/isoluminant_cgo_80_c38_n256.csv"
252 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
255 inline rgb_color cm_70_c39(real x) {
256 static const real values[] = {
257#include "CETperceptual/isoluminant_cm_70_c39_n256.csv"
259 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
262 inline rgb_color cjo_70_c25(real x) {
263 static const real values[] = {
264#include "CETperceptual/diverging-isoluminant_cjo_70_c25_n256.csv"
266 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
269 inline rgb_color cjm_75_c23(real x) {
270 static const real values[] = {
271#include "CETperceptual/diverging-isoluminant_cjm_75_c23_n256.csv"
273 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
276 inline rgb_color kbjyw_5_95_c25(real x) {
277 static const real values[] = {
278#include "CETperceptual/linear-protanopic-deuteranopic_kbjyw_5-95_c25_n256.csv"
280 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
283 inline rgb_color kbw_5_98_c40(real x) {
284 static const real values[] = {
285#include "CETperceptual/linear-protanopic-deuteranopic_kbw_5-98_c40_n256.csv"
287 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
290 inline rgb_color bwy_60_95_c32(real x) {
291 static const real values[] = {
292#include "CETperceptual/diverging-protanopic-deuteranopic_bwy_60-95_c32_n256.csv"
294 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
297 inline rgb_color bwyk_16_96_c31(real x) {
298 static const real values[] = {
299#include "CETperceptual/cyclic-protanopic-deuteranopic_bwyk_16-96_c31_n256.csv"
301 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
304 inline rgb_color wywb_55_96_c33(real x) {
305 static const real values[] = {
306#include "CETperceptual/cyclic-protanopic-deuteranopic_wywb_55-96_c33_n256.csv"
308 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
311 inline rgb_color krjcw_5_98_c46(real x) {
312 static const real values[] = {
313#include "CETperceptual/linear-tritanopic_krjcw_5-98_c46_n256.csv"
315 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
318 inline rgb_color krjcw_5_95_c24(real x) {
319 static const real values[] = {
320#include "CETperceptual/linear-tritanopic_krjcw_5-95_c24_n256.csv"
322 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
325 inline rgb_color cwr_75_98_c20(real x) {
326 static const real values[] = {
327#include "CETperceptual/diverging-tritanopic_cwr_75-98_c20_n256.csv"
329 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
332 inline rgb_color cwrk_40_100_c20(real x) {
333 static const real values[] = {
334#include "CETperceptual/cyclic-tritanopic_cwrk_40-100_c20_n256.csv"
336 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
339 inline rgb_color wrwc_70_100_c20(real x) {
340 static const real values[] = {
341#include "CETperceptual/cyclic-tritanopic_wrwc_70-100_c20_n256.csv"
343 return rgb_color(lerp(0, x, values), lerp(1, x, values), lerp(2, x, values));
348 using all::grey_0_100_c0;
349 using all::grey_10_95_c0;
350 using all::kryw_0_100_c71;
351 using all::kryw_0_97_c73;
352 using all::green_5_95_c69;
353 using all::blue_5_95_c73;
354 using all::bmw_5_95_c86;
355 using all::bmy_10_95_c71;
356 using all::bgyw_15_100_c67;
357 using all::gow_60_85_c27;
358 using all::gow_65_90_c35;
359 using all::blue_95_50_c20;
360 namespace diverging {
361 using all::bjy_30_90_c45;
362 using all::bjr_30_55_c53;
365 using all::red_0_50_c52;
366 using all::green_0_46_c42;
367 using all::blue_0_44_c57;
369 namespace colorblind {
370 namespace protanopic_deuteranopic {
371 using all::kbjyw_5_95_c25;
372 using all::kbw_5_98_c40;
374 namespace tritanopic {
375 using all::krjcw_5_98_c46;
376 using all::krjcw_5_95_c24;
378 using namespace protanopic_deuteranopic;
379 using namespace tritanopic;
381 using namespace diverging;
382 using namespace ternary;
383 using namespace colorblind;
385 namespace diverging {
386 using all::bwr_40_95_c42;
387 using all::gwv_55_95_c39;
388 using all::gwr_55_95_c38;
389 using all::bkr_55_10_c35;
390 using all::bky_60_10_c30;
391 using all::bwr_55_98_c37;
392 using all::cwm_80_100_c22;
394 using all::bjy_30_90_c45;
395 using all::bjr_30_55_c53;
398 using all::bgymr_45_85_c67;
400 namespace isoluminant {
401 using all::cjo_70_c25;
402 using all::cjm_75_c23;
404 namespace colorblind {
405 namespace protanopic_deuteranopic {
406 using all::bwy_60_95_c32;
408 namespace tritanopic {
409 using all::cwr_75_98_c20;
411 using namespace protanopic_deuteranopic;
412 using namespace tritanopic;
414 using namespace linear;
415 using namespace rainbow;
416 using namespace isoluminant;
417 using namespace colorblind;
420 using all::bgyrm_35_85_c69;
421 using all::bgyr_35_85_c72;
422 namespace diverging {
423 using all::bgymr_45_85_c67;
425 using namespace diverging;
428 using all::mrybm_35_75_c68;
429 using all::mygbm_30_95_c78;
430 using all::wrwbw_40_90_c42;
431 using all::grey_15_85_c0;
432 namespace colorblind {
433 namespace protanopic_deuteranopic {
434 using all::bwyk_16_96_c31;
435 using all::wywb_55_96_c33;
437 namespace tritanopic {
438 using all::cwrk_40_100_c20;
439 using all::wrwc_70_100_c20;
441 using namespace protanopic_deuteranopic;
442 using namespace tritanopic;
444 using namespace colorblind;
446 namespace isoluminant {
447 using all::cgo_70_c39;
448 using all::cgo_80_c38;
449 using all::cm_70_c39;
450 namespace diverging {
451 using all::cjo_70_c25;
452 using all::cjm_75_c23;
454 using namespace diverging;
456 namespace colorblind {
457 namespace protanopic_deuteranopic {
459 using all::kbjyw_5_95_c25;
460 using all::kbw_5_98_c40;
462 namespace diverging {
463 using all::bwy_60_95_c32;
466 using all::bwyk_16_96_c31;
467 using all::wywb_55_96_c33;
469 using namespace linear;
470 using namespace diverging;
471 using namespace cyclic;
473 namespace tritanopic {
475 using all::krjcw_5_98_c46;
476 using all::krjcw_5_95_c24;
478 namespace diverging {
479 using all::cwr_75_98_c20;
482 using all::cwrk_40_100_c20;
483 using all::wrwc_70_100_c20;
485 using namespace linear;
486 using namespace diverging;
487 using namespace cyclic;
489 using namespace protanopic_deuteranopic;
490 using namespace tritanopic;