// This work is licensed under the Creative Commons Attribution-ShareAlike 4.0
// International Public License.
// Visit https://creativecommons.org/licenses/by-sa/4.0/.
// SPDX-License-Identifier: CC-BY-SA-4.0
//     yuqk blend_mode_5_00.pov +w900 +h900  (quick and ugly)
//     yuqk blend_mode_5_00.pov +w900 +h900 +a0.05 +am2 +r3 +j3.33 +d +p
//  
// The blend_modes 4 and 5 were added to the yuqk fork with a set of possible
// applications in mind. Blend mode 5, with blend_gamma settings larger than
// one, uses only the middle of the interpolation segments in a map. This
// capability can be used to define specific colors in media aligning in some
// aspect with functions or patterns.
// 
// The example herein uses absorption only media in front of a white plane and
// based upon a 'gradient x' pattern.
// 
// Absorption only media must be used with the inverse of the color one wishes
// to see through the media and in shadows.

#version unofficial 3.8; // yuqk
#if (file_exists("version.inc"))
    #include "version.inc"
#end
#if (!defined(Fork_yuqk))
    #error "This POV-Ray SDL code requires the yuqk fork."
#end
global_settings { assumed_gamma 1 }
// Colors
#declare White = srgb <1,1,1>;
#declare Grey10 = srgb <0.1,0.1,0.1>;
#declare Red = srgb <1,0,0>;
#declare Green = srgb <0,1,0>;
#declare Blue = srgb <0,0,1>;
#declare ChristmasBlue0 = srgb <0.16471,0.56078,0.74118>;
#declare ChristmasBlue1 = srgb <0.21176,0.31765,0.58039>;
#declare ChristmasBrown0 = srgb <0.36471,0.16863,0.17255>;
#declare ChristmasBrown1 = srgb <0.29804,0.12157,0.00784>;
#declare ChristmasGold = srgb <0.79216,0.66275,0.02353>;
#declare ChristmasGreen = srgb <0.17647,1,0>;
#declare ChristmasGreen0 = srgb <0.23529,0.55294,0.05098>;
#declare ChristmasGreen1 = srgb <0,0.45882,0.00784>;
#declare ChristmasOrange0 = srgb <1,0.4,0>;
#declare ChristmasOrange1 = srgb <0.83529,0.42353,0.16863>;
#declare ChristmasPink0 = srgb <1,0.8,0.79608>;
#declare ChristmasPink1 = srgb <0.8902,0.25882,0.52157>;
#declare ChristmasPurple0 = srgb <0.4,0.2,0.59608>;
#declare ChristmasPurple1 = srgb <0.30196,0.03137,0.29412>;
#declare ChristmasRed = srgb <0.88235,0.11765,0>;
#declare ChristmasRed0 = srgb <0.66667,0.00392,0.07843>;
#declare ChristmasRed1 = srgb <0.6902,0.10588,0.18039>;
#declare ChristmasSilver = srgb <0.88235,0.87451,0.87843>;
#declare ChristmasYellow0 = srgb <1,0.8,0>;
#declare ChristmasYellow1 = srgb <0.99608,0.94902,0>;
// Inverted versions of the colors
#declare ChristmasBlue0_inv = White-ChristmasBlue0;
#declare ChristmasBlue1_inv = White-ChristmasBlue1;
#declare ChristmasBrown0_inv = White-ChristmasBrown0;
#declare ChristmasBrown1_inv = White-ChristmasBrown1;
#declare ChristmasGold_inv = White-ChristmasGold;
#declare ChristmasGreen_inv = White-ChristmasGreen;
#declare ChristmasGreen0_inv = White-ChristmasGreen0;
#declare ChristmasGreen1_inv = White-ChristmasGreen1;
#declare ChristmasOrange0_inv = White-ChristmasOrange0;
#declare ChristmasOrange1_inv = White-ChristmasOrange1;
#declare ChristmasPink0_inv = White-ChristmasPink0;
#declare ChristmasPink1_inv = White-ChristmasPink1;
#declare ChristmasPurple0_inv = White-ChristmasPurple0;
#declare ChristmasPurple1_inv = White-ChristmasPurple1;
#declare ChristmasRed_inv = White-ChristmasRed;
#declare ChristmasRed0_inv = White-ChristmasRed0;
#declare ChristmasRed1_inv = White-ChristmasRed1;
#declare ChristmasSilver_inv = White-ChristmasSilver;
#declare ChristmasYellow0_inv = White-ChristmasYellow0;
#declare ChristmasYellow1_inv = White-ChristmasYellow1;
background { Grey10 }
#declare VarOrthoMult =
    22.0/max(image_width/image_height,image_height/image_width);
#declare Camera01z = camera {
    orthographic
    location <0,0,-2>
    direction z
    right VarOrthoMult*x*max(1,image_width/image_height)
    up VarOrthoMult*y*max(1,image_height/image_width)
}
#declare Plane01 = plane { -z, -5 pigment { White } }
#declare FinEmit1 = finish {
    ambient rgb <0,0,0>
    diffuse 0
    emission White
}
#declare ObjPlane1 = object { Plane01 finish { FinEmit1 } }
#declare CylinderX = cylinder { -1*x, 1*x, 0.01 pigment { Red } }
#declare CylinderY = cylinder { -1*y, 1*y, 0.01 pigment { Green } }
#declare CylinderZ = cylinder { -1*z, 1*z, 0.01 pigment { Blue } }
#declare DensityMapNeg = density_map {
    blend_mode 5 blend_gamma 3
    [ -10 ChristmasBlue0_inv ]
    [ -9 ChristmasBlue0_inv ]
    [ -9 ChristmasBlue1_inv ]
    [ -8 ChristmasBlue1_inv ]
    [ -8 ChristmasBrown0_inv ]
    [ -7 ChristmasBrown0_inv ]
    [ -7 ChristmasBrown1_inv ]
    [ -6 ChristmasBrown1_inv ]
    [ -6 ChristmasGold_inv ]
    [ -5 ChristmasGold_inv ]
    [ -5 ChristmasGreen_inv ]
    [ -4 ChristmasGreen_inv ]
    [ -4 ChristmasGreen0_inv ]
    [ -3 ChristmasGreen0_inv ]
    [ -3 ChristmasGreen1_inv ]
    [ -2 ChristmasGreen1_inv ]
    [ -2 ChristmasOrange0_inv ]
    [ -1 ChristmasOrange0_inv ]
    [ -1 ChristmasOrange1_inv ]
    [ 0 ChristmasOrange1_inv ]
    [ 0 ChristmasPink0_inv ]
    [ 1 ChristmasPink0_inv ]
    [ 1 ChristmasPink1_inv ]
    [ 2 ChristmasPink1_inv ]
    [ 2 ChristmasPurple0_inv ]
    [ 3 ChristmasPurple0_inv ]
    [ 3 ChristmasPurple1_inv ]
    [ 4 ChristmasPurple1_inv ]
    [ 4 ChristmasRed_inv ]
    [ 5 ChristmasRed_inv ]
    [ 5 ChristmasRed0_inv ]
    [ 6 ChristmasRed0_inv ]
    [ 6 ChristmasRed1_inv ]
    [ 7 ChristmasRed1_inv ]
    [ 7 ChristmasSilver_inv ]
    [ 8 ChristmasSilver_inv ]
    [ 8 ChristmasYellow0_inv ]
    [ 9 ChristmasYellow0_inv ]
    [ 9 ChristmasYellow1_inv ]
    [ 10 ChristmasYellow1_inv ]
}
#declare DensityNeg = density {
    gradient x
    raw_wave
    density_map { DensityMapNeg }
}
#declare MediaNeg = media {
    method       3
    samples      33
    absorption   rgb <0.33,0.33,0.33>
    density { DensityNeg }
}

//--- scene ---
    camera { Camera01z }
    object { CylinderX }
    object { CylinderY }
    object { CylinderZ }
    object { ObjPlane1 }
    media { MediaNeg }