Merge branch 'hugo'

This commit is contained in:
Chris Hodapp
2020-04-25 10:15:14 -04:00
456 changed files with 16485 additions and 12470 deletions

View File

@@ -0,0 +1,454 @@
//PROGRAM: moo.pi GENERATED WITH POVCAD 2.0a(c) Alfonso Hermida 1993
//Created on 12/21/1999
include "colors.inc"
include "texture.inc"
viewpoint {
from <-0.2, 1.2, -2.0>
at <0.0, 0.0, 0.0>
up <0.0, 1.0, 0.0>
angle 45
hither 1.0e-3
resolution 1024,1024
aspect 1.0
yon 1.0e5
//dither_rays
//dither_objects
max_trace_depth 5
//focal_distance
}
// RAW DATA
object{
polygon 3,
<-0.743697, 0.366594, 0>,
<-0.773109, -0.201735, 0>,
<-0.773109, -0.201735, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.743697, 0.366594, 0.3>,
<-0.743697, 0.366594, 0>,
<-0.773109, -0.201735, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.592437, 0.127983, 0>,
<-0.743697, 0.366594, 0>,
<-0.743697, 0.366594, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.592437, 0.127983, 0.3>,
<-0.592437, 0.127983, 0>,
<-0.743697, 0.366594, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.411765, 0.383948, 0>,
<-0.592437, 0.127983, 0>,
<-0.592437, 0.127983, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.411765, 0.383948, 0.3>,
<-0.411765, 0.383948, 0>,
<-0.592437, 0.127983, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.432773, -0.214751, 0>,
<-0.411765, 0.383948, 0>,
<-0.411765, 0.383948, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.432773, -0.214751, 0.3>,
<-0.432773, -0.214751, 0>,
<-0.411765, 0.383948, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.432773, -0.214751, 0.3>,
<-0.432773, -0.214751, 0>,
<-0.411765, 0.383948, 0.3>
Reflective_gold
}
// RAW DATA
object{
polygon 3,
<-0.147059, 0.370933, 0>,
<-0.252101, 0.219089, 0>,
<-0.252101, 0.219089, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.147059, 0.370933, 0.3>,
<-0.147059, 0.370933, 0>,
<-0.252101, 0.219089, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.0210084, 0.37961, 0>,
<-0.147059, 0.370933, 0>,
<-0.147059, 0.370933, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.0210084, 0.37961, 0.3>,
<0.0210084, 0.37961, 0>,
<-0.147059, 0.370933, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.092437, 0.232104, 0>,
<0.0210084, 0.37961, 0>,
<0.0210084, 0.37961, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.092437, 0.232104, 0.3>,
<0.092437, 0.232104, 0>,
<0.0210084, 0.37961, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.0840336, -0.0932755, 0>,
<0.092437, 0.232104, 0>,
<0.092437, 0.232104, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.0840336, -0.0932755, 0.3>,
<0.0840336, -0.0932755, 0>,
<0.092437, 0.232104, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.00840336, -0.206074, 0>,
<0.0840336, -0.0932755, 0>,
<0.0840336, -0.0932755, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.00840336, -0.206074, 0.3>,
<0.00840336, -0.206074, 0>,
<0.0840336, -0.0932755, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.0840336, -0.214751, 0>,
<0.00840336, -0.206074, 0>,
<0.00840336, -0.206074, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.0840336, -0.214751, 0.3>,
<-0.0840336, -0.214751, 0>,
<0.00840336, -0.206074, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.214286, -0.123644, 0>,
<-0.0840336, -0.214751, 0>,
<-0.0840336, -0.214751, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.214286, -0.123644, 0.3>,
<-0.214286, -0.123644, 0>,
<-0.0840336, -0.214751, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.239496, 0.18872, 0>,
<-0.214286, -0.123644, 0>,
<-0.214286, -0.123644, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.239496, 0.18872, 0.3>,
<-0.239496, 0.18872, 0>,
<-0.214286, -0.123644, 0.3>
Reflective_gold
}
object{
polygon 3,
<-0.239496, 0.18872, 0.3>,
<-0.239496, 0.18872, 0>,
<-0.214286, -0.123644, 0.3>
Reflective_gold
}
// RAW DATA
object{
polygon 3,
<0.214286, -0.0889371, 0>,
<0.193277, 0.266811, 0>,
<0.193277, 0.266811, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.214286, -0.0889371, 0.3>,
<0.214286, -0.0889371, 0>,
<0.193277, 0.266811, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.298319, -0.197397, 0>,
<0.214286, -0.0889371, 0>,
<0.214286, -0.0889371, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.298319, -0.197397, 0.3>,
<0.298319, -0.197397, 0>,
<0.214286, -0.0889371, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.478992, -0.201735, 0>,
<0.298319, -0.197397, 0>,
<0.298319, -0.197397, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.478992, -0.201735, 0.3>,
<0.478992, -0.201735, 0>,
<0.298319, -0.197397, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.546219, -0.106291, 0>,
<0.478992, -0.201735, 0>,
<0.478992, -0.201735, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.546219, -0.106291, 0.3>,
<0.546219, -0.106291, 0>,
<0.478992, -0.201735, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.537815, 0.258134, 0>,
<0.546219, -0.106291, 0>,
<0.546219, -0.106291, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.537815, 0.258134, 0.3>,
<0.537815, 0.258134, 0>,
<0.546219, -0.106291, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.478992, 0.388286, 0>,
<0.537815, 0.258134, 0>,
<0.537815, 0.258134, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.478992, 0.388286, 0.3>,
<0.478992, 0.388286, 0>,
<0.537815, 0.258134, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.264706, 0.383948, 0>,
<0.478992, 0.388286, 0>,
<0.478992, 0.388286, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.264706, 0.383948, 0.3>,
<0.264706, 0.383948, 0>,
<0.478992, 0.388286, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.197479, 0.310195, 0>,
<0.264706, 0.383948, 0>,
<0.264706, 0.383948, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.197479, 0.310195, 0.3>,
<0.197479, 0.310195, 0>,
<0.264706, 0.383948, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.197479, 0.310195, 0.3>,
<0.197479, 0.310195, 0>,
<0.264706, 0.383948, 0.3>
Reflective_gold
}
// RAW DATA
object{
polygon 3,
<0.705882, 0.401302, 0>,
<0.65126, 0.292842, 0>,
<0.65126, 0.292842, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.705882, 0.401302, 0.3>,
<0.705882, 0.401302, 0>,
<0.65126, 0.292842, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.869748, 0.409978, 0>,
<0.705882, 0.401302, 0>,
<0.705882, 0.401302, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.869748, 0.409978, 0.3>,
<0.869748, 0.409978, 0>,
<0.705882, 0.401302, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.962185, 0.266811, 0>,
<0.869748, 0.409978, 0>,
<0.869748, 0.409978, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.962185, 0.266811, 0.3>,
<0.962185, 0.266811, 0>,
<0.869748, 0.409978, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.823529, -0.0021692, 0>,
<0.962185, 0.266811, 0>,
<0.962185, 0.266811, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.823529, -0.0021692, 0.3>,
<0.823529, -0.0021692, 0>,
<0.962185, 0.266811, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.819328, -0.140998, 0>,
<0.823529, -0.0021692, 0>,
<0.823529, -0.0021692, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.819328, -0.140998, 0.3>,
<0.819328, -0.140998, 0>,
<0.823529, -0.0021692, 0.3>
Reflective_gold
}
object{
polygon 3,
<0.819328, -0.140998, 0.3>,
<0.819328, -0.140998, 0>,
<0.823529, -0.0021692, 0.3>
Reflective_gold
}
// RAW DATA
object{
polygon 3,
<0.819328, -0.227766, 0>,
<0.819328, -0.184382, 0>,
<0.819328, -0.184382, 0.3>
translate <0, -0.1, 0>
Reflective_gold
}
object{
polygon 3,
<0.819328, -0.227766, 0.3>,
<0.819328, -0.227766, 0>,
<0.819328, -0.184382, 0.3>
translate <0, -0.1, 0>
Reflective_gold
}
object{
polygon 3,
<0.819328, -0.227766, 0.3>,
<0.819328, -0.227766, 0>,
<0.819328, -0.184382, 0.3>
translate <0, -0.1, 0>
Reflective_gold
}
// LIGHT_SOURCE
light <0, 0, -0.5>
// PLANE (Polygon)
object {
// normal in Z direction
polygon 4, <-1,1,0>, <1,1,0>, <1,-1,0>, <-1,-1,0>
scale <1.5, 1.5, 1.5>
translate <0, 0, 0.3>
Sapphire_agate
}
// LIGHT_SOURCE
light <0, 0.5, 0>
// LIGHT_SOURCE
light <0, -0.5, 0>

View File

@@ -0,0 +1,115 @@
//PROGRAM: polyray\table.pi GENERATED WITH POVCAD 2.0a(c) Alfonso Hermida 1993
//Created on 12/22/1999
include "colors.inc"
include "texture.inc"
viewpoint {
from <-0.5, 1.0, -2.5>
at <0.0, 0.6, 0.0>
up <0.0, 1.0, 0.0>
angle 45
hither 1.0e-3
resolution 2560,2048
//resolution 1280,1024
aspect 1.0
yon 1.0e5
//dither_rays
//dither_objects
max_trace_depth 5
//focal_distance
}
// PLANE (Polygon)
object {
// normal in Y direction
polygon 4, <-1,0,1>, <-1,0,-1>, <1,0,-1>, <1,0,1>
Reflective_gold
}
// CONE
object {
cone <0.0, -0.5, 0.0>, 0.1, <0.0, 0.0, 0.0>, 0.0
translate <-0.3, 0.5, -0.3>
Sapphire_agate
}
// CONE
object {
cone <0.0, -0.5, 0.0>, 0.1, <0.0, 0.0, 0.0>, 0.0
translate <0.3, 0.5, -0.3>
Sapphire_agate
}
// CONE
object {
cone <0.0, -0.5, 0.0>, 0.1, <0.0, 0.0, 0.0>, 0.0
translate <-0.3, 0.5, 0.3>
Sapphire_agate
}
// CONE
object {
cone <0.0, -0.5, 0.0>, 0.1, <0.0, 0.0, 0.0>, 0.0
translate <0.3, 0.5, 0.3>
Sapphire_agate
}
// BOX
object {
box <-1, -1, -1>, <1, 1, 1>
scale <0.7, 0.05, 0.7>
translate <0, 0.55, 0>
White_marble
}
// LIGHT_SOURCE
// light <0, 1.1, 0>
// LIGHT_SOURCE
light <0.8, 0.4, 0>
// LIGHT_SOURCE
light <-0.8, 0.4, 0>
// SPHERE
object {
sphere < 0, 0.85, 0>, 0.25
Mirror
}
// PLANE (Polygon)
object {
// normal in X direction
polygon 4, <0,-1,1>, <0,1,1>, <0,1,-1>, <0,-1,-1>
translate <1, 1, 0>
Sapphire_agate
}
// PLANE (Polygon)
object {
// normal in Z direction
polygon 4, <-1,1,0>, <1,1,0>, <1,-1,0>, <-1,-1,0>
translate <0, 1, 1>
Reflective_gold
}
// PLANE (Polygon)
object {
// normal in X direction
polygon 4, <0,-1,1>, <0,1,1>, <0,1,-1>, <0,-1,-1>
translate <-1, 1, 0>
Sapphire_agate
}
// PLANE (Polygon)
object {
// normal in Y direction
polygon 4, <-1,0,1>, <-1,0,-1>, <1,0,-1>, <1,0,1>
translate <0, 2, 0>
Sapphire_agate
}

View File

@@ -0,0 +1,358 @@
global_settings {
adc_bailout 0.0039216
assumed_gamma 1.5
noise_generator 2
radiosity {
brightness 0.3
}
}
light_source {
<1.23333, 2.5, -3.63333>, rgb <1, 1, 1>
fade_distance 10
fade_power 1
//*PMRawBegin
photons {
refraction on
reflection on
}
//*PMRawEnd
}
light_source {
<-3.9667, 2.5, -2.7667>, rgb <0.992157, 1, 0.862745>
fade_distance 10
fade_power 1
//*PMRawBegin
photons {
refraction on
reflection on
}
//*PMRawEnd
}
plane {
<0, 1, 0>, 0
//*PMRawBegin
normal { dents 1.5 scale 0.05 }
//*PMRawEnd
finish {
diffuse 0.2
brilliance 0.8
phong 0.5
metallic 0.8
specular 0.8
reflection {
rgb <0.458824, 0.964706, 1>
}
}
pigment {
color rgb <0.964706, 0.980392, 0.956863>
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
text {
//*PMName text2
ttf "/usr/lib/X11/fonts/TTF/arial.ttf"
"KPovModeler"
0.25, <0, 0>
scale 0.5
pigment {
color rgb <0.247059, 0, 1>
}
finish {
diffuse 0.4
brilliance 0.9
metallic 0.8
specular 0.9
roughness 0.05
reflection {
rgb <0.247059, 0.368627, 0.901961>
}
}
rotate x*45
translate <-1.95, 0.125, -0.45>
}
text {
ttf "/usr/lib/X11/fonts/TTF/gothic.ttf"
"PovRay"
0.2, <0, 0>
//*PMRawBegin
photons {
refraction on
reflection on
target
collect on
}
//*PMRawEnd
pigment {
color rgbt <0.89804, 0.28627, 0.29412, 0.9>
}
interior {
media {
intervals 1
samples 1,5
emission rgb <0.870588, 0.45098, 0.513725>
}
ior 1.2
caustics 1
}
scale 1
//*PMRawBegin
normal { bumps 0.3 scale 0.04 }
//*PMRawEnd
finish {
diffuse 0.1
brilliance 0.5
phong 1
phong_size 200
specular 0.6
roughness 0.05
reflection {
rgb <0.0313725, 0.294118, 0.388235>
}
}
rotate <0, 0, 0>
translate <-1.93333, 0.25, 0>
}
camera {
//*PMName main
perspective
location <0.21667, 2.3519, -3.8202>
sky <0, 1, 0>
direction <0, 0, 1>
right <1.3333, 0, 0>
up <0, 1, 0>
look_at <-0.37, 0.5, 0>
angle 45
}
sphere {
<-2.9333, 0.7333, 0.63333>, 0.25
pigment {
color rgb <1, 1, 1>
}
finish {
diffuse 0
brilliance 1
metallic 1
specular 1
roughness 0.05
reflection {
rgb <0.92549, 0.866667, 0.72549>
}
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
//*PMName R
<-2.3333, 0.7333, 0.63333>, 0.25
pigment {
color rgb <0.5, 0, 0>
}
finish {
diffuse 0
brilliance 1
metallic 1
specular 1
roughness 0.05
reflection {
rgb <0.5, 0, 0>
}
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
//*PMName O
<-1.7333, 0.7333, 0.63333>, 0.25
pigment {
color rgb <0.5, 0.25, 0>
}
finish {
diffuse 0
brilliance 1
metallic 1
specular 1
roughness 0.05
reflection {
rgb <0.498039, 0.247059, 0>
}
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
//*PMName Y
<-1.1333, 0.7333, 0.63333>, 0.25
pigment {
color rgb <0.498039, 0.498039, 0>
}
finish {
diffuse 0
brilliance 1
metallic 1
specular 1
roughness 0.05
reflection {
rgb <0.498039, 0.498039, 0>
}
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
//*PMName G
<-0.5333, 0.7333, 0.63333>, 0.25
pigment {
color rgb <0, 0.5, 0>
}
finish {
diffuse 0
brilliance 1
metallic 1
specular 1
roughness 0.05
reflection {
rgb <0, 0.498039, 0>
}
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
//*PMName B
<0.066666, 0.7333, 0.63333>, 0.25
pigment {
color rgb <0, 0, 0.5>
}
finish {
diffuse 0
brilliance 1
metallic 1
specular 1
roughness 0.05
reflection {
rgb <0, 0, 0.498039>
}
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
//*PMName I
<0.66667, 0.73333, 0.63333>, 0.25
pigment {
color rgb <0.25, 0, 0.5>
}
finish {
diffuse 0
brilliance 1
metallic 1
specular 1
roughness 0.05
reflection {
rgb <0.25, 0, 0.5>
}
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
//*PMName V
<1.2667, 0.73333, 0.63333>, 0.25
pigment {
color rgb <0.5, 0, 0.5>
}
finish {
diffuse 0
brilliance 1
metallic 1
specular 1
roughness 0.05
reflection {
rgb <0.5, 0, 0.5>
}
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1.8667, 0.73333, 0.63333>, 0.25
pigment {
color rgb <1, 1, 1>
}
finish {
diffuse 0
brilliance 1
metallic 1
specular 1
roughness 0.05
reflection {
rgb <0.92549, 0.866667, 0.72549>
}
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}

View File

@@ -0,0 +1,692 @@
global_settings {
adc_bailout 0.0039216
assumed_gamma 1.5
noise_generator 2
}
box {
<-10, -1, -10>, <10, -2, 10>
pigment {
color rgbft <0.92157, 1, 0.89412, 0.1, 0.08>
}
finish {
diffuse 0.1
brilliance 0.9
metallic 1.1
specular 0.9
roughness 0.05
reflection {
rgb <0.92549, 0.866667, 0.72549>
}
}
//*PMRawBegin
normal { dents 0.4 scale 0.1 }
//*PMRawEnd
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
light_source {
<4, 5, -5>, rgb <1, 1, 1>
//*PMRawBegin
photons {
refraction on
reflection on
}
//*PMRawEnd
}
difference {
box {
<-1, -1, -1>, <1, 1, 1>
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
union {
sphere {
<-1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<-1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
}
//*PMRawBegin
photons {
refraction on
reflection on
target
collect on
}
//*PMRawEnd
pigment {
color rgbft <1, 0, 0, 0.02, 0.9>
}
interior {
media {
intervals 1
samples 1,5
emission rgb <0.490196, 0, 0>
scattering {
1, rgb <0.533333, 0.533333, 0.533333>
}
}
ior 1.9
caustics 1
}
finish {
diffuse 0.3
brilliance 0.5
phong 1
phong_size 200
specular 0.6
roughness 0.05
reflection {
rgb <0.490196, 0, 0>
}
}
rotate y*20.1
translate <-4.63333, 0, -2.36667>
}
difference {
box {
<-1, -1, -1>, <1, 1, 1>
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
union {
sphere {
<-1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<-1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
}
//*PMRawBegin
photons {
refraction on
reflection on
target
collect on
}
//*PMRawEnd
pigment {
color rgbft <1, 1, 0, 0.02, 0.9>
}
interior {
media {
intervals 1
samples 1,5
emission rgb <0.5, 0.5, 0>
scattering {
1, rgb <0.533333, 0.533333, 0.533333>
}
}
ior 1.9
caustics 1
}
finish {
diffuse 0.3
brilliance 0.5
phong 1
phong_size 200
specular 0.6
roughness 0.05
reflection {
rgb <0.490196, 0, 0>
}
}
rotate y*30.9
translate <-5.03333, 0, 0.733334>
}
difference {
box {
<-1, -1, -1>, <1, 1, 1>
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
union {
sphere {
<-1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<-1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
}
//*PMRawBegin
photons {
refraction on
reflection on
target
collect on
}
//*PMRawEnd
pigment {
color rgbft <0, 1, 0, 0.02, 0.9>
}
interior {
media {
intervals 1
samples 1,5
emission rgb <0, 0.498039, 0>
scattering {
1, rgb <0.533333, 0.533333, 0.533333>
}
}
ior 1.9
caustics 1
}
finish {
diffuse 0.3
brilliance 0.5
phong 1
phong_size 200
specular 0.6
roughness 0.05
reflection {
rgb <0, 0.498039, 0>
}
}
rotate y*1.2
translate <-1.63333, 0, 0.333333>
}
difference {
box {
<-1, -1, -1>, <1, 1, 1>
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
union {
sphere {
<-1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<-1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
}
//*PMRawBegin
photons {
refraction on
reflection on
target
collect on
}
//*PMRawEnd
pigment {
color rgbft <0, 1, 1, 0.02, 0.9>
}
interior {
media {
intervals 1
samples 1,5
emission rgb <0, 0.5, 0.5>
scattering {
1, rgb <0.533333, 0.533333, 0.533333>
}
}
ior 1.9
caustics 1
}
finish {
diffuse 0.3
brilliance 0.5
phong 1
phong_size 200
specular 0.6
roughness 0.05
reflection {
rgb <0, 0.5, 0.5>
}
}
rotate y*18.8
translate <-1.9, 0, 3.53333>
}
difference {
box {
<-1, -1, -1>, <1, 1, 1>
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
union {
sphere {
<-1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<-1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
}
//*PMRawBegin
photons {
refraction on
reflection on
target
collect on
}
//*PMRawEnd
pigment {
color rgbft <0, 0, 1, 0.02, 0.9>
}
interior {
media {
intervals 1
samples 1,5
emission rgb <0, 0, 0.5>
scattering {
1, rgb <0.533333, 0.533333, 0.533333>
}
}
ior 1.9
caustics 1
}
finish {
diffuse 0.3
brilliance 0.5
phong 1
phong_size 200
specular 0.6
roughness 0.05
reflection {
rgb <0, 0, 0.5>
}
}
rotate y*12
translate <2.43333, 0, 1.46667>
}
difference {
box {
<-1, -1, -1>, <1, 1, 1>
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
union {
sphere {
<-1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<-1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
}
//*PMRawBegin
photons {
refraction on
reflection on
target
collect on
}
//*PMRawEnd
pigment {
color rgbft <1, 0, 1, 0.02, 0.9>
}
interior {
media {
intervals 1
samples 1,5
emission rgb <0.5, 0, 0.5>
scattering {
1, rgb <0.533333, 0.533333, 0.533333>
}
}
ior 1.9
caustics 1
}
finish {
diffuse 0.3
brilliance 0.5
phong 1
phong_size 200
specular 0.6
roughness 0.05
reflection {
rgb <0.5, 0, 0.5>
}
}
rotate y*13.4
translate <1.7, 0, 4.6>
}
difference {
box {
<-1, -1, -1>, <1, 1, 1>
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
union {
sphere {
<-1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<-1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
}
//*PMRawBegin
photons {
refraction on
reflection on
target
collect on
}
//*PMRawEnd
pigment {
color rgbft <0.341176, 0.341176, 0.341176, 0.02, 0.9>
}
interior {
media {
intervals 1
samples 1,5
emission rgb <0.870588, 0.45098, 0.513725>
scattering {
1, rgb <0.533333, 0.533333, 0.533333>
}
}
ior 1.9
caustics 1
}
finish {
diffuse 0.3
brilliance 0.5
phong 1
phong_size 200
specular 0.6
roughness 0.05
reflection {
rgb <0.415686, 0.415686, 0.415686>
}
}
rotate y*0.4
translate <-0.633333, 0, -3.03333>
}
difference {
box {
<-1, -1, -1>, <1, 1, 1>
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
union {
sphere {
<-1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<-1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, 1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sphere {
<1, 0, -1>, 1
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
}
//*PMRawBegin
photons {
refraction on
reflection on
target
collect on
}
//*PMRawEnd
pigment {
color rgbft <1, 1, 1, 0.02, 0.9>
}
interior {
media {
intervals 1
samples 1,5
emission rgb <0.498039, 0.498039, 0.498039>
scattering {
1, rgb <0.533333, 0.533333, 0.533333>
}
}
ior 1.9
caustics 1
}
finish {
diffuse 0.3
brilliance 0.5
phong 1
phong_size 200
specular 0.6
roughness 0.05
reflection {
rgb <0.443137, 0.443137, 0.443137>
}
}
rotate y*(-23.8)
translate <3.66667, 0, -2.06667>
}
camera {
perspective
location <5.9666, 3.12071, -4.95569>
sky <0, 1, 0>
direction <0, 0, 1>
right <1.3333, 0, 0>
up <0, 1, 0>
look_at <0, -2.5, 0>
rotate x*(-0.9)
}

View File

@@ -0,0 +1,159 @@
/*
* JPatch POV-Ray include file
*/
/*
* New Material
*/
union {
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.4069938,2.4654262,0.92561436>,<0.50058657,2.5282931,0.8104142>,<0.5458608,2.5712624,0.69181824>,<0.5334475,2.5902162,0.57046604>,<0.35798192,1.8612365,0.72670424>,<0.45157468,1.9241035,0.6115041>,<0.4323318,1.9012327,0.6742358>,<0.41991845,1.9201864,0.5528837>,<0.3260259,1.1866684,0.8375052>,<0.37717515,1.1971412,0.8157104>,<0.42670512,1.2293565,0.73965883>,<0.4378359,1.2401483,0.70314586>,<0.19512051,0.61939645,0.77494764>,<0.24626973,0.6298692,0.75315285>,<0.27893057,0.64052653,0.72441983>,<0.29006135,0.6513183,0.68790686> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.5334475,2.5902162,0.57046604>,<0.5195069,2.6115026,0.434182>,<0.37181258,2.6061997,0.19459726>,<0.26008266,2.557377,0.15209132>,<0.41991845,1.9201864,0.5528837>,<0.40597785,1.941473,0.41659963>,<0.4444036,1.9688857,0.3904736>,<0.3326737,1.920063,0.34796768>,<0.4378359,1.2401483,0.70314586>,<0.45009446,1.2520335,0.6629336>,<0.3856378,1.2622768,0.52159953>,<0.3513378,1.2657077,0.4972003>,<0.29006135,0.6513183,0.68790686>,<0.30231988,0.6632035,0.6476946>,<0.2787332,0.6839656,0.5622361>,<0.2444332,0.68739665,0.5378368> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.26008266,2.557377,0.15209132>,<0.14702037,2.5079725,0.10907853>,<0.012734227,2.419555,0.16593413>,<-0.1431433,2.291432,0.32444906>,<0.3326737,1.920063,0.34796768>,<0.2196114,1.8706586,0.3049549>,<0.28859782,1.9687376,0.1098569>,<0.13272029,1.8406146,0.26837185>,<0.3513378,1.2657077,0.4972003>,<0.31702718,1.2691399,0.47279346>,<0.19896749,1.2067622,0.4953617>,<0.12643707,1.1929868,0.5222549>,<0.2444332,0.68739665,0.5378368>,<0.21012257,0.69082874,0.51342994>,<0.15670647,0.6856591,0.5146671>,<0.084176034,0.6718837,0.5415603> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.25690603,2.4566057,0.74154735>,<0.2864765,2.5429611,0.528126>,<0.26648107,2.5557735,0.40995842>,<0.21496728,2.5198748,0.35953307>,<0.29224768,1.8575095,0.59925175>,<0.3218181,1.9438651,0.3858304>,<0.35263738,1.9238966,0.48716158>,<0.3011236,1.8879979,0.43673623>,<0.28330964,1.1983967,0.74236596>,<0.31304452,1.2177966,0.68001604>,<0.30757305,1.2376156,0.5921054>,<0.28942603,1.2412431,0.57243216>,<0.17592004,0.63656974,0.7043662>,<0.20565492,0.6559697,0.6420163>,<0.20580566,0.6659748,0.6047278>,<0.18765864,0.66960245,0.58505464> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.21496728,2.5198748,0.35953307>,<0.17550752,2.4923763,0.3209071>,<0.11755401,2.4362962,0.32202965>,<0.04921837,2.3627956,0.35053545>,<0.3011236,1.8879979,0.43673623>,<0.26166382,1.8604991,0.39811027>,<0.30144393,1.8995631,0.389219>,<0.23310828,1.8260624,0.4177248>,<0.28942603,1.2412431,0.57243216>,<0.27598724,1.2439296,0.55786324>,<0.2238187,1.2083476,0.5497122>,<0.19489412,1.2052646,0.55144006>,<0.18765864,0.66960245,0.58505464>,<0.17421985,0.6722889,0.57048565>,<0.15074629,0.671478,0.56557715>,<0.12182172,0.66839504,0.5673051> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.14463466,2.2318792,0.7692888>,<-0.14057523,2.1863832,0.6047746>,<-0.11050329,2.1794972,0.5002857>,<-0.05448749,2.2111201,0.45566428>,<0.07650392,1.775965,0.5958692>,<0.08056335,1.730469,0.431355>,<0.12006511,1.733428,0.498825>,<0.17608091,1.7650508,0.4542036>,<0.07074815,1.1383929,0.741201>,<0.07593282,1.1563103,0.67608464>,<0.09943747,1.1558211,0.5973954>,<0.12577404,1.1605443,0.5886706>,<0.02468781,0.6236961,0.7012905>,<0.029872485,0.6416135,0.6361742>,<0.046338066,0.65254855,0.60092986>,<0.07267464,0.6572718,0.59220505> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.05448749,2.2111201,0.45566428>,<0.0014299043,2.2426875,0.41112125>,<0.14175588,2.3961983,0.44041878>,<0.19075474,2.420841,0.5008496>,<0.17608091,1.7650508,0.4542036>,<0.2319983,1.796618,0.40966058>,<0.24340639,1.8132179,0.42977422>,<0.29240525,1.8378606,0.49020505>,<0.12577404,1.1605443,0.5886706>,<0.15003672,1.1648955,0.5806328>,<0.25383326,1.2113075,0.61473453>,<0.26441216,1.2061888,0.63741404>,<0.07267464,0.6572718,0.59220505>,<0.09693731,0.6616231,0.58416724>,<0.15891421,0.6602309,0.61031306>,<0.16949311,0.6551121,0.6329926> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.19075474,2.420841,0.5008496>,<0.24161287,2.4464192,0.5635735>,<0.19616303,2.3235276,0.8221811>,<0.23336011,2.3456762,0.8410821>,<0.29240525,1.8378606,0.49020505>,<0.34326336,1.8634388,0.5529289>,<0.23657027,1.7927697,0.6198492>,<0.27376735,1.8149185,0.63875014>,<0.26441216,1.2061888,0.63741404>,<0.2747841,1.2011702,0.65964997>,<0.23110735,1.1685774,0.76554585>,<0.2411745,1.1664166,0.776106>,<0.16949311,0.6551121,0.6329926>,<0.17986503,0.65009344,0.6552285>,<0.12919998,0.6297827,0.71481>,<0.13926715,0.6276219,0.72537017> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.23336011,2.3456762,0.8410821>,<0.26963696,2.3672767,0.8595155>,<0.40372264,2.5051928,0.7190726>,<0.40614885,2.5418165,0.63336265>,<0.27376735,1.8149185,0.63875014>,<0.31004423,1.836519,0.6571835>,<0.3609441,1.8564451,0.65016556>,<0.3633703,1.8930688,0.5644556>,<0.2411745,1.1664166,0.776106>,<0.25199515,1.1640941,0.7874565>,<0.3640829,1.2179531,0.7324003>,<0.37567586,1.2254537,0.70784783>,<0.13926715,0.6276219,0.72537017>,<0.1500878,0.62529933,0.7367207>,<0.23508173,0.63926,0.70850754>,<0.24667469,0.6467606,0.6839551> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.40614885,2.5418165,0.63336265>,<0.408915,2.5835717,0.5356432>,<0.33525938,2.5853088,0.41556135>,<0.16907907,2.5380018,0.26985586>,<0.3633703,1.8930688,0.5644556>,<0.3661365,1.9348242,0.4667362>,<0.44455838,1.9514802,0.53693104>,<0.27837807,1.904173,0.39122558>,<0.37567586,1.2254537,0.70784783>,<0.38934144,1.2342952,0.67890584>,<0.33422095,1.241166,0.5864556>,<0.26476926,1.2534716,0.52203697>,<0.24667469,0.6467606,0.6839551>,<0.26034027,0.65560216,0.6550131>,<0.23750529,0.6660645,0.61012423>,<0.16805357,0.6783701,0.54570556> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.13836819,2.4120846,0.6488564>,<0.052315056,2.3521137,0.66881317>,<-0.0023288243,2.3061981,0.70130646>,<-0.009809854,2.2824774,0.7498667>,<0.2510465,1.8380578,0.5501299>,<0.16499338,1.7780867,0.5700867>,<0.16994976,1.8123379,0.5494522>,<0.16246873,1.788617,0.59801245>,<0.22965768,1.1939131,0.69425464>,<0.19080159,1.1902604,0.694752>,<0.14244738,1.159334,0.7147424>,<0.13459842,1.15449,0.7301671>,<0.14062646,0.6428183,0.669116>,<0.10177036,0.6391655,0.66961336>,<0.076691814,0.63494754,0.67687774>,<0.06884285,0.6301036,0.69230247> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.009809854,2.2824774,0.7498667>,<-0.019387212,2.2521098,0.8120344>,<0.048333526,2.2581184,0.9005351>,<0.22640702,2.3175821,1.0227761>,<0.16246873,1.788617,0.59801245>,<0.15289137,1.7582493,0.6601801>,<0.064333975,1.7541609,0.6171682>,<0.24240747,1.8136245,0.73940927>,<0.13459842,1.15449,0.7301671>,<0.12557936,1.148924,0.7478913>,<0.1764532,1.154552,0.814118>,<0.2181705,1.1472409,0.85550565>,<0.06884285,0.6301036,0.69230247>,<0.059823804,0.6245376,0.7100267>,<0.07355423,0.618145,0.73852557>,<0.11527154,0.6108339,0.7799132> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.30030966,2.3290267,0.9233979>,<0.3164099,2.3692636,0.99703807>,<0.34278885,2.4190412,1.0601618>,<0.38185966,2.4711123,1.0765009>,<0.2936649,1.811391,0.6856722>,<0.3097651,1.8516278,0.7593124>,<0.27900243,1.8251119,0.78477395>,<0.3180732,1.8771828,0.801113>,<0.25693345,1.1573688,0.8148483>,<0.2612129,1.1501149,0.8433665>,<0.28857177,1.1789061,0.89101124>,<0.3063603,1.1772882,0.9030622>,<0.14497653,0.6207086,0.753101>,<0.14925596,0.61345476,0.7816192>,<0.15888725,0.60732996,0.80773294>,<0.1766758,0.60571206,0.8197839> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.38185966,2.4711123,1.0765009>,<0.45657477,2.5706878,1.1077458>,<0.80548316,2.7410617,0.58382535>,<0.7621178,2.7443216,0.4033463>,<0.3180732,1.8771828,0.801113>,<0.3927883,1.9767585,0.8323579>,<0.58758825,2.0126936,0.6807122>,<0.5442229,2.0159535,0.5002331>,<0.3063603,1.1772882,0.9030622>,<0.33939016,1.1742841,0.92543864>,<0.555648,1.2703671,0.7189938>,<0.56198865,1.2861868,0.66209716>,<0.1766758,0.60571206,0.8197839>,<0.20970567,0.60270804,0.84216034>,<0.37175584,0.64912033,0.72372526>,<0.37809646,0.66494,0.66682863> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.7621178,2.7443216,0.4033463>,<0.72736377,2.746934,0.2587062>,<0.5436375,2.6868672,0.096615046>,<0.39721334,2.6164072,0.045781195>,<0.5442229,2.0159535,0.5002331>,<0.50946885,2.018566,0.35559303>,<0.5461546,2.0288494,0.35497427>,<0.39973044,1.9583893,0.30414042>,<0.56198865,1.2861868,0.66209716>,<0.5670328,1.2987717,0.6168344>,<0.4715309,1.2824812,0.5015652>,<0.42848545,1.2868698,0.4706363>,<0.37809646,0.66494,0.66682863>,<0.3831406,0.677525,0.62156594>,<0.34412777,0.6915921,0.5558795>,<0.3010823,0.6959806,0.5249505> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.39721334,2.6164072,0.045781195>,<0.21313411,2.527827,-0.018125296>,<-0.011890635,2.3915637,0.039244294>,<-0.28452533,2.193616,0.26784146>,<0.39973044,1.9583893,0.30414042>,<0.21565121,1.8698094,0.24023393>,<0.2862593,1.9533558,0.121080756>,<0.013624579,1.755408,0.34967792>,<0.42848545,1.2868698,0.4706363>,<0.37345356,1.2924805,0.43109494>,<0.17910513,1.1956058,0.44880337>,<0.052491207,1.1742367,0.48575443>,<0.3010823,0.6959806,0.5249505>,<0.24605045,0.70159125,0.48540914>,<0.16008718,0.6961775,0.47655523>,<0.03347326,0.6748084,0.5135063> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.03859926,2.3141422,0.59689>,<-0.06910537,2.286306,0.711938>,<-0.13219766,2.2743096,0.8236662>,<-0.11797289,2.2887235,0.9189179>,<0.21149802,1.8010674,0.51966316>,<0.10379339,1.773231,0.63471127>,<0.056099728,1.7730947,0.61058784>,<0.0703245,1.7875084,0.7058395>,<0.16508684,1.1747494,0.65822035>,<0.12838547,1.1630015,0.68965816>,<0.0879802,1.1533697,0.7671405>,<0.090817094,1.1448677,0.7998291>,<0.09311791,0.6460855,0.6408632>,<0.05641655,0.6343376,0.67230093>,<0.034783177,0.6235515,0.70524275>,<0.037620075,0.6150495,0.7379314> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.11797289,2.2887235,0.9189179>,<-0.09794591,2.3090165,1.053022>,<0.07533574,2.381658,1.1544671>,<0.49314028,2.5361447,1.1865375>,<0.0703245,1.7875084,0.7058395>,<0.09035148,1.8078012,0.83994365>,<-0.04871559,1.7569695,0.85228086>,<0.36908895,1.9114562,0.8843514>,<0.090817094,1.1448677,0.7998291>,<0.09465114,1.1333774,0.8440076>,<0.23830405,1.1843052,0.92432165>,<0.3547391,1.1844236,0.9632385>,<0.037620075,0.6150495,0.7379314>,<0.041454118,0.6035592,0.78210986>,<0.08998373,0.596241,0.82582605>,<0.20641878,0.5963594,0.8647429> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.13825706,0.6427598,0.6685333>,<0.09788627,0.6389647,0.6690502>,<0.07183017,0.6345823,0.67659783>,<0.063675314,0.6295495,0.69262385>,<0.13904685,0.64277923,0.6687275>,<0.098676056,0.6389842,0.6692444>,<0.07355268,0.63476694,0.67649066>,<0.06539783,0.62973416,0.6925167>,<0.13983665,0.6427988,0.66892177>,<0.10098055,0.63914603,0.66941905>,<0.0749693,0.63476276,0.6769848>,<0.067120336,0.6299189,0.6924096>,<0.14062646,0.6428183,0.669116>,<0.10177036,0.6391655,0.66961336>,<0.076691814,0.63494754,0.67687774>,<0.06884285,0.6301036,0.69230247> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.063675314,0.6295495,0.69262385>,<0.054304775,0.6237664,0.71103895>,<0.06857057,0.6171246,0.74064875>,<0.11191425,0.6095285,0.78364944>,<0.06539783,0.62973416,0.6925167>,<0.056027293,0.6239511,0.7109318>,<0.06968966,0.61755973,0.73940325>,<0.11303334,0.6099636,0.782404>,<0.067120336,0.6299189,0.6924096>,<0.05810129,0.62435293,0.7101338>,<0.07243514,0.6177099,0.7397709>,<0.11415244,0.61039877,0.78115857>,<0.06884285,0.6301036,0.69230247>,<0.059823804,0.6245376,0.7100267>,<0.07355423,0.618145,0.73852557>,<0.11527154,0.6108339,0.7799132> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.017797066,0.62289196,0.70196176>,<0.023186455,0.64150846,0.63430583>,<0.040295713,0.6528698,0.59768814>,<0.06765957,0.65777695,0.58862424>,<0.020093981,0.62316,0.701738>,<0.025483372,0.6417765,0.6340821>,<0.0419674,0.6527014,0.5988817>,<0.06933126,0.6576085,0.5898178>,<0.022390895,0.62342805,0.70151424>,<0.02757557,0.6413455,0.63639796>,<0.044666372,0.65271693,0.5997362>,<0.071002945,0.6574402,0.5910114>,<0.02468781,0.6236961,0.7012905>,<0.029872485,0.6416135,0.6361742>,<0.046338066,0.65254855,0.60092986>,<0.07267464,0.6572718,0.59220505> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.06765957,0.65777695,0.58862424>,<0.092867985,0.66229755,0.58027434>,<0.15725584,0.66085064,0.6074389>,<0.16824743,0.6555324,0.6310024>,<0.06933126,0.6576085,0.5898178>,<0.09453967,0.66212904,0.58146787>,<0.15767106,0.6607105,0.6081023>,<0.16866265,0.6553923,0.6316658>,<0.071002945,0.6574402,0.5910114>,<0.09526562,0.6617915,0.5829736>,<0.15849897,0.660371,0.60964966>,<0.16907787,0.65525216,0.6323292>,<0.07267464,0.6572718,0.59220505>,<0.09693731,0.6616231,0.58416724>,<0.15891421,0.6602309,0.61031306>,<0.16949311,0.6551121,0.6329926> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.16824743,0.6555324,0.6310024>,<0.17902407,0.6503182,0.65410507>,<0.12644383,0.6291195,0.7154465>,<0.13684762,0.6269712,0.7269808>,<0.16866265,0.6553923,0.6316658>,<0.17943928,0.65017813,0.65476847>,<0.12725034,0.6293364,0.71490955>,<0.13765413,0.6271881,0.7264439>,<0.16907787,0.65525216,0.6323292>,<0.1794498,0.65023345,0.6545651>,<0.12839347,0.6295657,0.7153468>,<0.13846064,0.6274049,0.725907>,<0.16949311,0.6551121,0.6329926>,<0.17986503,0.65009344,0.6552285>,<0.12919998,0.6297827,0.71481>,<0.13926715,0.6276219,0.72537017> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.13684762,0.6269712,0.7269808>,<0.14824152,0.6246185,0.7396129>,<0.24125668,0.640992,0.7099478>,<0.25311667,0.64899564,0.68408656>,<0.13765413,0.6271881,0.7264439>,<0.14904803,0.6248353,0.739076>,<0.23910934,0.64024687,0.70990396>,<0.25096932,0.6482506,0.6840427>,<0.13846064,0.6274049,0.725907>,<0.1492813,0.6250824,0.7372575>,<0.23722905,0.640005,0.7085513>,<0.248822,0.6475056,0.6839989>,<0.13926715,0.6276219,0.72537017>,<0.1500878,0.62529933,0.7367207>,<0.23508173,0.63926,0.70850754>,<0.24667469,0.6467606,0.6839551> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.25311667,0.64899564,0.68408656>,<0.2669202,0.65831095,0.65398747>,<0.24144498,0.6685333,0.6072255>,<0.166758,0.6796983,0.540311>,<0.25096932,0.6482506,0.6840427>,<0.26477283,0.65756583,0.65394354>,<0.24187684,0.6680905,0.6090237>,<0.16718985,0.67925555,0.54210913>,<0.248822,0.6475056,0.6839989>,<0.26248762,0.65634716,0.65505683>,<0.23707342,0.66650724,0.60832596>,<0.1676217,0.67881286,0.54390734>,<0.24667469,0.6467606,0.6839551>,<0.26034027,0.65560216,0.6550131>,<0.23750529,0.6660645,0.61012423>,<0.16805357,0.6783701,0.54570556> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.17492485,0.6362673,0.705158>,<0.2058196,0.6564235,0.64037764>,<0.20597635,0.6668186,0.60163563>,<0.18712217,0.6705879,0.58119535>,<0.17525658,0.6363681,0.70489407>,<0.20615134,0.6565243,0.6401137>,<0.20615518,0.6664901,0.60292196>,<0.18730098,0.67025936,0.58248174>,<0.17558831,0.6364689,0.70463014>,<0.20532319,0.65586877,0.6422802>,<0.20562682,0.66630334,0.60344136>,<0.18747981,0.66993093,0.5837682>,<0.17592004,0.63656974,0.7043662>,<0.20565492,0.6559697,0.6420163>,<0.20580566,0.6659748,0.6047278>,<0.18765864,0.66960245,0.58505464> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.18712217,0.6705879,0.58119535>,<0.17315991,0.67337924,0.5660585>,<0.1487721,0.67253685,0.5609583>,<0.11872123,0.6693342,0.56275284>,<0.18730098,0.67025936,0.58248174>,<0.17333871,0.67305076,0.5673449>,<0.14980559,0.6722238,0.5624758>,<0.11975472,0.6690211,0.56427026>,<0.18747981,0.66993093,0.5837682>,<0.174041,0.6726174,0.5691992>,<0.14971279,0.6717911,0.56405973>,<0.12078822,0.6687081,0.5657877>,<0.18765864,0.66960245,0.58505464>,<0.17421985,0.6722889,0.57048565>,<0.15074629,0.671478,0.56557715>,<0.12182172,0.66839504,0.5673051> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.19487718,0.61842525,0.7784903>,<0.24802166,0.6293063,0.75584614>,<0.28195643,0.64037913,0.72599316>,<0.29352117,0.6515916,0.6880567>,<0.19495828,0.61874896,0.7773094>,<0.24810275,0.62962997,0.75466526>,<0.28080314,0.64028805,0.7259432>,<0.29236788,0.65150046,0.68800676>,<0.19503939,0.6190727,0.77612853>,<0.24618861,0.62954545,0.75433373>,<0.28008384,0.6406176,0.7244698>,<0.29121462,0.6514094,0.6879568>,<0.19512051,0.61939645,0.77494764>,<0.24626973,0.6298692,0.75315285>,<0.27893057,0.64052653,0.72441983>,<0.29006135,0.6513183,0.68790686> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.29352117,0.6515916,0.6880567>,<0.3062576,0.6639402,0.6462767>,<0.281749,0.6855118,0.55748546>,<0.246111,0.68907654,0.5321349>,<0.29236788,0.65150046,0.68800676>,<0.30510432,0.66384906,0.64622676>,<0.2811897,0.6849519,0.55938613>,<0.24555172,0.68851656,0.5340355>,<0.29121462,0.6514094,0.6879568>,<0.30347311,0.66329455,0.64774454>,<0.27929243,0.6845256,0.5603354>,<0.24499245,0.6879566,0.5359361>,<0.29006135,0.6513183,0.68790686>,<0.30231988,0.6632035,0.6476946>,<0.2787332,0.6839656,0.5622361>,<0.2444332,0.68739665,0.5378368> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.246111,0.68907654,0.5321349>,<0.21046188,0.69264245,0.50677645>,<0.15496266,0.687271,0.5080621>,<0.07960405,0.67295825,0.5360044>,<0.24555172,0.68851656,0.5340355>,<0.20990261,0.6920825,0.5086771>,<0.15648666,0.6869128,0.50991404>,<0.081128046,0.67260003,0.53785634>,<0.24499245,0.6879566,0.5359361>,<0.21068183,0.6913887,0.5115292>,<0.15518247,0.6860173,0.5128151>,<0.08265203,0.67224187,0.5397083>,<0.2444332,0.68739665,0.5378368>,<0.21012257,0.69082874,0.51342994>,<0.15670647,0.6856591,0.5146671>,<0.084176034,0.6718837,0.5415603> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.09311791,0.6460855,0.6408632>,<0.05641655,0.6343376,0.67230093>,<0.034783177,0.6235515,0.70524275>,<0.037620075,0.6150495,0.7379314>,<0.091710165,0.6461082,0.6403023>,<0.055008814,0.6343603,0.67174006>,<0.032655068,0.623171,0.70594335>,<0.03549197,0.61466897,0.73863196>,<0.09030242,0.646131,0.6397414>,<0.05217135,0.63392514,0.6724051>,<0.030415827,0.62312174,0.70536983>,<0.033363864,0.6142885,0.7393326>,<0.08889468,0.64615375,0.63918054>,<0.05076361,0.6339479,0.67184424>,<0.028287722,0.62274134,0.7060704>,<0.03123576,0.61390805,0.74003327> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.037620075,0.6150495,0.7379314>,<0.041454118,0.6035592,0.78210986>,<0.08998373,0.596241,0.82582605>,<0.20641878,0.5963594,0.8647429>,<0.03549197,0.61466897,0.73863196>,<0.039326012,0.6031786,0.78281045>,<0.090049624,0.5956179,0.82817376>,<0.20648468,0.59573627,0.8670905>,<0.033363864,0.6142885,0.7393326>,<0.03734813,0.6023505,0.7852334>,<0.08557615,0.5949898,0.82900596>,<0.20655058,0.59511316,0.8694382>,<0.03123576,0.61390805,0.74003327>,<0.035220023,0.60196996,0.785934>,<0.08564204,0.59436667,0.83135366>,<0.20661649,0.59449005,0.8717859> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.14277598,0.6197879,0.75579286>,<0.14722282,0.61225176,0.7854213>,<0.15723005,0.6058886,0.81255174>,<0.17571217,0.6042079,0.82507205>,<0.14350949,0.6200948,0.7548955>,<0.14795634,0.61255866,0.78452396>,<0.15755126,0.60639,0.810789>,<0.17603338,0.60470927,0.8233093>,<0.144243,0.6204016,0.7539982>,<0.14852244,0.61314785,0.78251636>,<0.15856606,0.6068286,0.80949557>,<0.17635459,0.60521066,0.82154655>,<0.14497653,0.6207086,0.753101>,<0.14925596,0.61345476,0.7816192>,<0.15888725,0.60732996,0.80773294>,<0.1766758,0.60571206,0.8197839> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.17571217,0.6042079,0.82507205>,<0.21003014,0.60108703,0.84832>,<0.3783942,0.64930713,0.72527176>,<0.3849827,0.66574347,0.66615784>,<0.17603338,0.60470927,0.8233093>,<0.21035135,0.60158837,0.84655726>,<0.37609875,0.64903927,0.72549534>,<0.38268727,0.6654756,0.6663814>,<0.17635459,0.60521066,0.82154655>,<0.20938444,0.6022066,0.843923>,<0.3740512,0.6493882,0.7235017>,<0.38039187,0.6652078,0.666605>,<0.1766758,0.60571206,0.8197839>,<0.20970567,0.60270804,0.84216034>,<0.37175584,0.64912033,0.72372526>,<0.37809646,0.66494,0.66682863> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.3849827,0.66574347,0.66615784>,<0.3902241,0.678819,0.6191309>,<0.3496917,0.69343466,0.55088323>,<0.30496883,0.6979944,0.5187484>,<0.38268727,0.6654756,0.6663814>,<0.38792866,0.6785511,0.6193545>,<0.34839618,0.6927634,0.5529505>,<0.30367333,0.69732314,0.52081573>,<0.38039187,0.6652078,0.666605>,<0.385436,0.6777928,0.6213423>,<0.34542328,0.6922633,0.553812>,<0.30237782,0.6966519,0.5228831>,<0.37809646,0.66494,0.66682863>,<0.3831406,0.677525,0.62156594>,<0.34412777,0.6915921,0.5558795>,<0.3010823,0.6959806,0.5249505> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.30496883,0.6979944,0.5187484>,<0.24779217,0.7038238,0.4776651>,<0.1584777,0.69819915,0.46846592>,<0.02692663,0.67599684,0.506858>,<0.30367333,0.69732314,0.52081573>,<0.24649668,0.7031525,0.4797324>,<0.16065991,0.69780296,0.47068202>,<0.029108837,0.67560065,0.5090741>,<0.30237782,0.6966519,0.5228831>,<0.24734598,0.7022626,0.4833417>,<0.15790498,0.6965736,0.47433913>,<0.03129105,0.6752045,0.5112902>,<0.3010823,0.6959806,0.5249505>,<0.24605045,0.70159125,0.48540914>,<0.16008718,0.6961775,0.47655523>,<0.03347326,0.6748084,0.5135063> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.4069938,2.4654262,0.92561436>,<0.50058657,2.5282931,0.8104142>,<0.5458608,2.5712624,0.69181824>,<0.5334475,2.5902162,0.57046604>,<0.46232766,3.1475492,1.1501817>,<0.5559204,3.210416,1.0349815>,<0.67060757,3.307497,0.7111379>,<0.6581942,3.3264508,0.5897857>,<0.48822862,3.811929,1.5748734>,<0.8938322,4.0224257,1.1244357>,<0.87772226,4.0172243,1.1491389>,<0.823612,4.090974,0.68077874>,<0.47831154,4.446621,2.2356079>,<0.88391507,4.657118,1.7851701>,<1.0889256,4.808837,1.3222868>,<1.0348153,4.8825865,0.85392666> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.5334475,2.5902162,0.57046604>,<0.5195069,2.6115026,0.434182>,<0.37181258,2.6061997,0.19459726>,<0.26008266,2.557377,0.15209132>,<0.6581942,3.3264508,0.5897857>,<0.6442535,3.3477373,0.4535017>,<0.28871137,3.3357885,-0.029639378>,<0.17698145,3.2869656,-0.07214531>,<0.823612,4.090974,0.68077874>,<0.75972533,4.178048,0.1277982>,<0.49651557,4.199292,-0.27517235>,<-0.014566839,4.032557,-0.3894316>,<1.0348153,4.8825865,0.85392666>,<0.9709286,4.9696608,0.30094612>,<0.17427427,4.952891,-0.7021912>,<-0.33680815,4.7861557,-0.8164505> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.26008266,2.557377,0.15209132>,<0.14702037,2.5079725,0.10907853>,<0.012734227,2.419555,0.16593413>,<-0.1431433,2.291432,0.32444906>,<0.17698145,3.2869656,-0.07214531>,<0.06391916,3.237561,-0.11515811>,<-0.34826118,3.0094953,0.23931688>,<-0.5041387,2.881372,0.3978318>,<-0.014566839,4.032557,-0.3894316>,<-0.6564877,3.8231363,-0.5329416>,<-0.43238592,4.041798,-1.002618>,<-1.2461332,3.286302,0.71906227>,<-0.33680815,4.7861557,-0.8164505>,<-0.978729,4.576735,-0.95996046>,<-1.7059598,4.1339393,-0.32405216>,<-2.5197072,3.3784432,1.3976281> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.25690603,2.4566057,0.74154735>,<0.2864765,2.5429611,0.528126>,<0.26648107,2.5557735,0.40995842>,<0.21496728,2.5198748,0.35953307>,<0.21805242,3.115235,0.8979831>,<0.24762285,3.2015908,0.6845617>,<0.17191264,3.2493455,0.32521737>,<0.12039885,3.213447,0.274792>,<0.10038236,3.7627172,1.2184843>,<0.15221012,4.112584,0.28022718>,<0.1591649,4.0688324,0.37757397>,<-0.094065994,3.9245071,0.18768473>,<-0.107564606,4.3925133,1.7263477>,<-0.055736847,4.74238,0.78809065>,<-0.19207987,4.7949824,0.28835994>,<-0.44531077,4.6506577,0.09847069> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.21496728,2.5198748,0.35953307>,<0.17550752,2.4923763,0.3209071>,<0.11755401,2.4362962,0.32202965>,<0.04921837,2.3627956,0.35053545>,<0.12039885,3.213447,0.274792>,<0.080939084,3.1859486,0.236166>,<-0.08544442,3.028803,0.24785846>,<-0.15378006,2.9553022,0.2763643>,<-0.094065994,3.9245071,0.18768473>,<-0.28804153,3.8139534,0.04222907>,<-0.2613622,3.8069506,0.04855232>,<-0.56046915,3.510396,0.2088635>,<-0.44531077,4.6506577,0.09847069>,<-0.6392863,4.5401044,-0.04698497>,<-0.90184706,4.314002,-0.010637835>,<-1.2009541,4.0174475,0.14967334> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.14463466,2.2318792,0.7692888>,<-0.14057523,2.1863832,0.6047746>,<-0.11050329,2.1794972,0.5002857>,<-0.05448749,2.2111201,0.45566428>,<-0.4419932,2.8449337,1.002481>,<-0.43793374,2.7994375,0.8379668>,<-0.3704565,2.682416,0.5019325>,<-0.3144407,2.7140388,0.4573111>,<-1.0733916,3.2762375,1.542419>,<-1.0575001,3.0786285,0.5194683>,<-1.1617455,2.9228554,0.77049935>,<-0.82693374,3.118195,0.52223897>,<-2.185036,3.377203,2.526915>,<-2.1691446,3.1795943,1.5039644>,<-1.9718893,3.2032425,0.9107854>,<-1.6370773,3.3985825,0.66252506> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.05448749,2.2111201,0.45566428>,<0.0014299043,2.2426875,0.41112125>,<0.14175588,2.3961983,0.44041878>,<0.19075474,2.420841,0.5008496>,<-0.3144407,2.7140388,0.4573111>,<-0.2585233,2.745606,0.41276807>,<0.034748167,3.0099032,0.45162433>,<0.08374703,3.0345457,0.51205516>,<-0.82693374,3.118195,0.52223897>,<-0.5419948,3.2844377,0.31095898>,<-0.3908705,3.5443182,0.35034287>,<-0.1467832,3.6414747,0.58541816>,<-1.6370773,3.3985825,0.66252506>,<-1.3521384,3.564825,0.45124507>,<-0.7544653,4.1426573,0.49075377>,<-0.51037794,4.239814,0.725829> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.19075474,2.420841,0.5008496>,<0.24161287,2.4464192,0.5635735>,<0.19616303,2.3235276,0.8221811>,<0.23336011,2.3456762,0.8410821>,<0.08374703,3.0345457,0.51205516>,<0.13460514,3.0601237,0.57477903>,<0.15144184,2.91095,1.0461146>,<0.18863893,2.9330988,1.0650156>,<-0.1467832,3.6414747,0.58541816>,<0.106565624,3.7423177,0.82941306>,<-0.12220973,3.37821,1.4368346>,<0.051668763,3.4649725,1.4991038>,<-0.51037794,4.239814,0.725829>,<-0.25702912,4.3406568,0.9698239>,<-0.36581963,3.8406167,2.1128185>,<-0.19194114,3.9273791,2.1750877> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.23336011,2.3456762,0.8410821>,<0.26963696,2.3672767,0.8595155>,<0.40372264,2.5051928,0.7190726>,<0.40614885,2.5418165,0.63336265>,<0.18863893,2.9330988,1.0650156>,<0.22491577,2.9546993,1.0834489>,<0.45016307,3.2094738,0.7938781>,<0.45258927,3.2460976,0.70816815>,<0.051668763,3.4649725,1.4991038>,<0.22124553,3.5495887,1.5598326>,<0.505409,3.8186512,1.2607981>,<0.48621354,3.9700751,0.8880749>,<-0.19194114,3.9273791,2.1750877>,<-0.022364378,4.0119953,2.2358165>,<0.5243162,4.5609846,1.5588901>,<0.50512075,4.712408,1.1861669> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.40614885,2.5418165,0.63336265>,<0.408915,2.5835717,0.5356432>,<0.33525938,2.5853088,0.41556135>,<0.16907907,2.5380018,0.26985586>,<0.45258927,3.2460976,0.70816815>,<0.45535547,3.2878525,0.6104487>,<0.21137047,3.3037455,0.27799046>,<0.045190156,3.2564383,0.13228497>,<0.48621354,3.9700751,0.8880749>,<0.46432853,4.1427164,0.4631263>,<0.56348455,4.16006,0.5013869>,<-0.2278607,3.9909205,-0.04487475>,<0.50512075,4.712408,1.1861669>,<0.48323575,4.8850493,0.7612183>,<0.11306086,4.9042006,0.27855003>,<-0.6782844,4.7350607,-0.26771158> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.13836819,2.4120846,0.6488564>,<0.052315056,2.3521137,0.66881317>,<-0.0023288243,2.3061981,0.70130646>,<-0.009809854,2.2824774,0.7498667>,<0.015079044,3.0401673,0.75688>,<-0.07097409,2.9801965,0.77683675>,<-0.20272587,2.8806639,0.87794566>,<-0.2102069,2.8569434,0.9265059>,<-0.24797282,3.647243,0.99663454>,<-0.6054163,3.4247575,1.1152929>,<-0.5905241,3.4526324,1.0676749>,<-0.62191194,3.3450284,1.2951078>,<-0.66970944,4.2261667,1.3860093>,<-1.0271529,4.003681,1.5046678>,<-1.2612662,3.8217123,1.6717072>,<-1.2926542,3.714108,1.8991401> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.009809854,2.2824774,0.7498667>,<-0.019387212,2.2521098,0.8120344>,<0.048333526,2.2581184,0.9005351>,<0.22640702,2.3175821,1.0227761>,<-0.2102069,2.8569434,0.9265059>,<-0.21978426,2.8265758,0.9886737>,<0.0286434,2.8782873,1.2492456>,<0.2067169,2.9377513,1.3714868>,<-0.62191194,3.3450284,1.2951078>,<-0.664101,3.200395,1.6008048>,<-0.7844941,3.235724,1.5011699>,<0.09862614,3.441988,2.0542576>,<-1.2926542,3.714108,1.8991401>,<-1.3348433,3.569475,2.204837>,<-1.0107777,3.5591931,2.6196442>,<-0.12765747,3.7654572,3.1727316> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.30030966,2.3290267,0.9233979>,<0.3164099,2.3692636,0.99703807>,<0.34278885,2.4190412,1.0601618>,<0.38185966,2.4711123,1.0765009>,<0.30780387,2.9128354,1.1915137>,<0.3239041,2.953072,1.2651538>,<0.42087555,3.146124,1.3972888>,<0.4599464,3.1981947,1.413628>,<0.25441042,3.4245486,1.7026129>,<0.3675247,3.5986636,2.0077848>,<0.34102243,3.6560059,2.0125253>,<0.52954865,3.8710837,2.0600843>,<0.12836188,3.8431857,2.5000029>,<0.24147618,4.0173006,2.8051746>,<0.39634362,4.2290697,3.0596251>,<0.5848698,4.444147,3.1071842> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.38185966,2.4711123,1.0765009>,<0.45657477,2.5706878,1.1077458>,<0.80548316,2.7410617,0.58382535>,<0.7621178,2.7443216,0.4033463>,<0.4599464,3.1981947,1.413628>,<0.53466153,3.2977705,1.4448729>,<1.0646043,3.607238,0.46860737>,<1.0212389,3.6104982,0.28812832>,<0.52954865,3.8710837,2.0600843>,<0.89006716,4.2823763,2.1510313>,<1.6838217,4.510252,0.9158298>,<1.4163471,4.523738,0.15993327>,<0.5848698,4.444147,3.1071842>,<0.9453883,4.8554397,3.198131>,<2.2465537,5.4606566,0.7740681>,<1.9790792,5.474142,0.018171608> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.7621178,2.7443216,0.4033463>,<0.72736377,2.746934,0.2587062>,<0.5436375,2.6868672,0.096615046>,<0.39721334,2.6164072,0.045781195>,<1.0212389,3.6104982,0.28812832>,<0.9864848,3.6131108,0.14348823>,<0.54066676,3.4634821,-0.20830911>,<0.39424258,3.3930218,-0.25914297>,<1.4163471,4.523738,0.15993327>,<1.2019873,4.534545,-0.4458595>,<1.0085256,4.458645,-0.5650579>,<0.3391727,4.1908092,-0.710549>,<1.9790792,5.474142,0.018171608>,<1.7647192,5.484949,-0.58762115>,<0.8873439,5.2644086,-1.1951182>,<0.21799105,4.9965725,-1.3406093> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.39721334,2.6164072,0.045781195>,<0.21313411,2.527827,-0.018125296>,<-0.011890635,2.3915637,0.039244294>,<-0.28452533,2.193616,0.26784146>,<0.39424258,3.3930218,-0.25914297>,<0.21016335,3.3044417,-0.32304946>,<-0.40400195,2.9678717,-0.0683828>,<-0.67663664,2.7699242,0.16021436>,<0.3391727,4.1908092,-0.710549>,<-0.5023134,3.8540955,-0.89345527>,<-0.32181358,3.9647028,-1.0688434>,<-1.4379237,3.2001262,0.054997645>,<0.21799105,4.9965725,-1.3406093>,<-0.623495,4.6598587,-1.5235156>,<-1.5975859,4.136803,-1.1624933>,<-2.713696,3.3722265,-0.0386523> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.03859926,2.3141422,0.59689>,<-0.06910537,2.286306,0.711938>,<-0.13219766,2.2743096,0.8236662>,<-0.11797289,2.2887235,0.9189179>,<-0.15156934,2.8784652,0.6818306>,<-0.25927398,2.8506289,0.7968786>,<-0.3737441,2.9172645,1.0970013>,<-0.3595193,2.9316783,1.1922531>,<-0.53736824,3.3870249,0.8830135>,<-0.9538946,3.3037598,1.4284334>,<-0.95737576,3.3937924,1.3419878>,<-0.8491549,3.4585538,1.7432964>,<-1.1466849,3.827245,1.2172191>,<-1.5632112,3.74398,1.762639>,<-1.7858495,3.7167857,2.2721453>,<-1.6776285,3.7815473,2.673454> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.11797289,2.2887235,0.9189179>,<-0.09794591,2.3090165,1.053022>,<0.07533574,2.381658,1.1544671>,<0.49314028,2.5361447,1.1865375>,<-0.3595193,2.9316783,1.1922531>,<-0.33949235,2.9519715,1.3263571>,<0.23396009,3.1804466,1.5408723>,<0.65176463,3.3349333,1.5729427>,<-0.8491549,3.4585538,1.7432964>,<-0.69679165,3.5497315,2.3082955>,<-0.9862938,3.524044,2.3761032>,<0.8599433,4.0799084,2.310453>,<-1.6776285,3.7815473,2.673454>,<-1.5252652,3.872725,3.2384534>,<-0.7170855,4.1461744,3.5889878>,<1.1291516,4.702039,3.5233376> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.13825706,0.6427598,0.6685333>,<0.09788627,0.6389647,0.6690502>,<0.07183017,0.6345823,0.67659783>,<0.063675314,0.6295495,0.69262385>,<-0.014158063,0.16562554,0.6203276>,<-0.054528847,0.16183043,0.6208445>,<-0.068740055,0.15954602,0.6245661>,<-0.07689491,0.15451327,0.64059216>,<-0.16657314,-0.31150857,0.5721219>,<-0.18770915,-0.31349546,0.57239246>,<-0.21319562,-0.3178879,0.58017015>,<-0.21746509,-0.32052284,0.58856046>,<-0.31898826,-0.7886428,0.52391624>,<-0.34012425,-0.79062974,0.52418685>,<-0.35376585,-0.79292417,0.52813846>,<-0.35803533,-0.79555905,0.5365288> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.13825706,0.6427598,0.6685333>,<0.13904685,0.64277923,0.6687275>,<0.13983665,0.6427988,0.66892177>,<0.14062646,0.6428183,0.669116>,<-0.014158063,0.16562554,0.6203276>,<-0.013368271,0.165645,0.6205218>,<0.05758974,0.13369823,0.6456988>,<0.058379553,0.13371772,0.645893>,<-0.16657314,-0.31150857,0.5721219>,<-0.16615957,-0.31149834,0.57222366>,<-0.16536975,-0.31147885,0.57241786>,<-0.16495623,-0.31146863,0.57251954>,<-0.31898826,-0.7886428,0.52391624>,<-0.3185747,-0.7886326,0.52401793>,<-0.31816113,-0.7886224,0.5241196>,<-0.3177476,-0.7886121,0.5242213> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.063675314,0.6295495,0.69262385>,<0.054304775,0.6237664,0.71103895>,<0.06857057,0.6171246,0.74064875>,<0.11191425,0.6095285,0.78364944>,<-0.07689491,0.15451327,0.64059216>,<-0.086265445,0.14873016,0.6590073>,<-0.07966077,0.14526802,0.6741607>,<-0.036317095,0.13767192,0.7171614>,<-0.21746509,-0.32052284,0.58856046>,<-0.2223711,-0.32355058,0.59820175>,<-0.20724106,-0.33020747,0.62816024>,<-0.18454841,-0.33418456,0.6506734>,<-0.35803533,-0.79555905,0.5365288>,<-0.36294132,-0.79858685,0.5461701>,<-0.35547245,-0.80206406,0.5616723>,<-0.33277977,-0.8060411,0.58418536> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.063675314,0.6295495,0.69262385>,<0.06539783,0.62973416,0.6925167>,<0.067120336,0.6299189,0.6924096>,<0.06884285,0.6301036,0.69230247>,<-0.07689491,0.15451327,0.64059216>,<-0.075172395,0.1546979,0.64048505>,<0.0046224073,0.13151145,0.6564207>,<0.006344922,0.13169613,0.65631366>,<-0.21746509,-0.32052284,0.58856046>,<-0.21656328,-0.3204261,0.5885043>,<-0.21484077,-0.32024133,0.58839726>,<-0.21393898,-0.32014465,0.5883411>,<-0.35803533,-0.79555905,0.5365288>,<-0.3571335,-0.7954623,0.5364727>,<-0.35623172,-0.7953656,0.5364166>,<-0.35532993,-0.7952689,0.5363605> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.11191425,0.6095285,0.78364944>,<0.11303334,0.6099636,0.782404>,<0.11415244,0.61039877,0.78115857>,<0.11527154,0.6108339,0.7799132>,<-0.036317095,0.13767192,0.7171614>,<-0.035198003,0.138107,0.7159159>,<0.01833418,0.110903084,0.71076775>,<0.01945328,0.1113382,0.7095224>,<-0.18454841,-0.33418456,0.6506734>,<-0.18396258,-0.33395672,0.6500213>,<-0.18284345,-0.3335216,0.64877594>,<-0.18225764,-0.3332938,0.64812386>,<-0.33277977,-0.8060411,0.58418536>,<-0.3321939,-0.8058133,0.5835333>,<-0.3316081,-0.8055855,0.5828812>,<-0.33102226,-0.8053577,0.58222914> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.017797066,0.62289196,0.70196176>,<0.023186455,0.64150846,0.63430583>,<0.040295713,0.6528698,0.59768814>,<0.06765957,0.65777695,0.58862424>,<-0.115486905,0.14891309,0.6484471>,<-0.11009752,0.16752958,0.58079123>,<-0.1009073,0.17335057,0.56217337>,<-0.073543444,0.1782577,0.5531095>,<-0.24877083,-0.3250657,0.59493244>,<-0.24594927,-0.31531918,0.5595114>,<-0.22907269,-0.3038305,0.5223403>,<-0.21474643,-0.3012614,0.5175949>,<-0.3820548,-0.7990446,0.54141784>,<-0.37923324,-0.78929806,0.5059968>,<-0.37027574,-0.78334975,0.48682564>,<-0.35594946,-0.7807807,0.48208022> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.017797066,0.62289196,0.70196176>,<0.020093981,0.62316,0.701738>,<0.022390895,0.62342805,0.70151424>,<0.02468781,0.6236961,0.7012905>,<-0.115486905,0.14891309,0.6484471>,<-0.113189995,0.14918113,0.6482234>,<-0.021758705,0.13008273,0.6632594>,<-0.01946179,0.13035077,0.66303563>,<-0.24877083,-0.3250657,0.59493244>,<-0.24756831,-0.32492542,0.59481525>,<-0.24527138,-0.32465732,0.5945915>,<-0.2440689,-0.32451704,0.5944743>,<-0.3820548,-0.7990446,0.54141784>,<-0.38085228,-0.7989043,0.54130065>,<-0.3796498,-0.798764,0.5411835>,<-0.3784473,-0.7986237,0.5410663> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.06765957,0.65777695,0.58862424>,<0.092867985,0.66229755,0.58027434>,<0.15725584,0.66085064,0.6074389>,<0.16824743,0.6555324,0.6310024>,<-0.073543444,0.1782577,0.5531095>,<-0.04833503,0.1827783,0.54475963>,<7.778406E-5,0.18168789,0.5651938>,<0.011069365,0.17636967,0.5887573>,<-0.21474643,-0.3012614,0.5175949>,<-0.20154858,-0.29889464,0.51322323>,<-0.15186328,-0.30000854,0.5341755>,<-0.14610866,-0.30279297,0.5465122>,<-0.35594946,-0.7807807,0.48208022>,<-0.34275162,-0.77841395,0.47770858>,<-0.30904135,-0.77917135,0.49193048>,<-0.30328673,-0.7819557,0.5042671> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.06765957,0.65777695,0.58862424>,<0.06933126,0.6576085,0.5898178>,<0.071002945,0.6574402,0.5910114>,<0.07267464,0.6572718,0.59220505>,<-0.073543444,0.1782577,0.5531095>,<-0.07187176,0.17808926,0.55430317>,<0.018949218,0.16407865,0.5944762>,<0.020620912,0.16391027,0.59566987>,<-0.21474643,-0.3012614,0.5175949>,<-0.21387118,-0.30134952,0.5182197>,<-0.21219945,-0.30151796,0.51941335>,<-0.21132424,-0.30160615,0.52003825>,<-0.35594946,-0.7807807,0.48208022>,<-0.3550742,-0.78086877,0.4827051>,<-0.35419893,-0.780957,0.48332998>,<-0.3533237,-0.7810452,0.4839549> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.16824743,0.6555324,0.6310024>,<0.17902407,0.6503182,0.65410507>,<0.12644383,0.6291195,0.7154465>,<0.13684762,0.6269712,0.7269808>,<0.011069365,0.17636967,0.5887573>,<0.021845996,0.17115545,0.6118599>,<-0.025747433,0.1544928,0.65795827>,<-0.015343651,0.15234447,0.6694926>,<-0.14610866,-0.30279297,0.5465122>,<-0.1404666,-0.30552292,0.55860746>,<-0.17298171,-0.32115734,0.6059656>,<-0.16753489,-0.32228214,0.61200446>,<-0.30328673,-0.7819557,0.5042671>,<-0.29764467,-0.7846857,0.5163624>,<-0.325173,-0.79578406,0.5484775>,<-0.31972617,-0.79690886,0.5545163> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.16824743,0.6555324,0.6310024>,<0.16866265,0.6553923,0.6316658>,<0.16907787,0.65525216,0.6323292>,<0.16949311,0.6551121,0.6329926>,<0.011069365,0.17636967,0.5887573>,<0.011484593,0.17622954,0.5894207>,<0.08118835,0.14498705,0.6282352>,<0.08160357,0.14484698,0.6288986>,<-0.14610866,-0.30279297,0.5465122>,<-0.14589131,-0.30286622,0.5468596>,<-0.14547607,-0.3030063,0.5475229>,<-0.14525875,-0.30307975,0.54787034>,<-0.30328673,-0.7819557,0.5042671>,<-0.30306938,-0.78202903,0.5046145>,<-0.30285203,-0.78210235,0.50496185>,<-0.30263472,-0.7821758,0.5053092> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.13684762,0.6269712,0.7269808>,<0.14824152,0.6246185,0.7396129>,<0.24125668,0.640992,0.7099478>,<0.25311667,0.64899564,0.68408656>,<-0.015343651,0.15234447,0.6694926>,<-0.0039497465,0.14999175,0.68212473>,<0.070599854,0.16286737,0.6592721>,<0.08245983,0.17087102,0.6334108>,<-0.16753489,-0.32228214,0.61200446>,<-0.16156965,-0.32351375,0.618618>,<-0.09440622,-0.3114437,0.5962746>,<-0.08819696,-0.30725348,0.5827351>,<-0.31972617,-0.79690886,0.5545163>,<-0.31376094,-0.7981405,0.5611298>,<-0.26506305,-0.7895683,0.54559886>,<-0.2588538,-0.7853781,0.53205943> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.13684762,0.6269712,0.7269808>,<0.13765413,0.6271881,0.7264439>,<0.13846064,0.6274049,0.725907>,<0.13926715,0.6276219,0.72537017>,<-0.015343651,0.15234447,0.6694926>,<-0.014537141,0.15256137,0.6689557>,<0.04323587,0.12394178,0.67849827>,<0.044042386,0.12415874,0.67796135>,<-0.16753489,-0.32228214,0.61200446>,<-0.16711265,-0.3221686,0.6117234>,<-0.16630614,-0.32195175,0.6111865>,<-0.1658839,-0.3218382,0.61090547>,<-0.31972617,-0.79690886,0.5545163>,<-0.31930393,-0.7967953,0.5542352>,<-0.3188817,-0.79668176,0.5539542>,<-0.31845945,-0.7965683,0.55367315> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.25311667,0.64899564,0.68408656>,<0.2669202,0.65831095,0.65398747>,<0.24144498,0.6685333,0.6072255>,<0.166758,0.6796983,0.540311>,<0.08245983,0.17087102,0.6334108>,<0.09626338,0.18018633,0.6033118>,<0.08450338,0.18553257,0.57938373>,<0.009816416,0.19669753,0.5124693>,<-0.08819696,-0.30725348,0.5827351>,<-0.08097011,-0.3023765,0.5669768>,<-0.10802281,-0.29214847,0.51966065>,<-0.14712512,-0.28630307,0.48462757>,<-0.2588538,-0.7853781,0.53205943>,<-0.25162694,-0.7805011,0.51630116>,<-0.2649644,-0.7751492,0.491819>,<-0.30406672,-0.7693038,0.45678592> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.25311667,0.64899564,0.68408656>,<0.25096932,0.6482506,0.6840427>,<0.248822,0.6475056,0.6839989>,<0.24667469,0.6467606,0.6839551>,<0.08245983,0.17087102,0.6334108>,<0.08031249,0.17012596,0.63336694>,<0.13318983,0.12878525,0.6625823>,<0.13104251,0.12804025,0.66253847>,<-0.08819696,-0.30725348,0.5827351>,<-0.08932117,-0.30764353,0.5827122>,<-0.09146848,-0.3083886,0.5826683>,<-0.092592694,-0.3087786,0.5826453>,<-0.2588538,-0.7853781,0.53205943>,<-0.259978,-0.78576815,0.5320364>,<-0.2611022,-0.7861582,0.5320134>,<-0.2622264,-0.78654826,0.5319904> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.166758,0.6796983,0.540311>,<0.16718985,0.67925555,0.54210913>,<0.1676217,0.67881286,0.54390734>,<0.16805357,0.6783701,0.54570556>,<0.009816416,0.19669753,0.5124693>,<0.010248274,0.19625479,0.51426744>,<0.080497205,0.16074365,0.5652287>,<0.08092908,0.16030091,0.567027>,<-0.14712512,-0.28630307,0.48462757>,<-0.14689901,-0.2865348,0.48556894>,<-0.14646715,-0.28697747,0.48736715>,<-0.14624107,-0.28720927,0.48830855>,<-0.30406672,-0.7693038,0.45678592>,<-0.3038406,-0.76953554,0.45772728>,<-0.3036145,-0.7697673,0.45866868>,<-0.30338842,-0.7699991,0.4596101> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.17492485,0.6362673,0.705158>,<0.2058196,0.6564235,0.64037764>,<0.20597635,0.6668186,0.60163563>,<0.18712217,0.6705879,0.58119535>,<0.016686313,0.16016418,0.65113574>,<0.047581077,0.18032038,0.58635545>,<0.045800686,0.1852647,0.5673008>,<0.026946492,0.18903401,0.54686046>,<-0.1415522,-0.31593883,0.5971135>,<-0.1253773,-0.3053862,0.56319785>,<-0.12335807,-0.29449308,0.5232271>,<-0.13322915,-0.29251972,0.5125256>,<-0.29979074,-0.792042,0.5430913>,<-0.28361583,-0.7814894,0.50917566>,<-0.28353372,-0.776047,0.48889232>,<-0.29340482,-0.7740736,0.47819078> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.17492485,0.6362673,0.705158>,<0.17525658,0.6363681,0.70489407>,<0.17558831,0.6364689,0.70463014>,<0.17592004,0.63656974,0.7043662>,<0.016686313,0.16016418,0.65113574>,<0.01701805,0.16026497,0.65087175>,<0.07769883,0.124343455,0.66999197>,<0.07803055,0.124444306,0.66972804>,<-0.1415522,-0.31593883,0.5971135>,<-0.14137858,-0.31588602,0.5969753>,<-0.14104685,-0.3157853,0.5967114>,<-0.14087325,-0.31573254,0.5965732>,<-0.29979074,-0.792042,0.5430913>,<-0.2996171,-0.7919892,0.5429531>,<-0.2994435,-0.79193646,0.54281485>,<-0.2992699,-0.7918837,0.5426767> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.18712217,0.6705879,0.58119535>,<0.17315991,0.67337924,0.5660585>,<0.1487721,0.67253685,0.5609583>,<0.11872123,0.6693342,0.56275284>,<0.026946492,0.18903401,0.54686046>,<0.012984246,0.19182539,0.5317236>,<-5.4033846E-4,0.19118214,0.52955234>,<-0.030591212,0.18797946,0.5313469>,<-0.13322915,-0.29251972,0.5125256>,<-0.14053905,-0.2910583,0.50460076>,<-0.1641705,-0.29169846,0.49900156>,<-0.17990361,-0.29337513,0.49994105>,<-0.29340482,-0.7740736,0.47819078>,<-0.30071473,-0.7726122,0.47026592>,<-0.31348294,-0.77305317,0.4675957>,<-0.32921606,-0.77472985,0.46853518> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.18712217,0.6705879,0.58119535>,<0.18730098,0.67025936,0.58248174>,<0.18747981,0.66993093,0.5837682>,<0.18765864,0.66960245,0.58505464>,<0.026946492,0.18903401,0.54686046>,<0.027125299,0.18870544,0.54814684>,<0.0954127,0.15277815,0.59518754>,<0.095591545,0.15244967,0.596474>,<-0.13322915,-0.29251972,0.5125256>,<-0.13313556,-0.2926917,0.5131991>,<-0.13295674,-0.29302013,0.5144855>,<-0.1328632,-0.29319218,0.515159>,<-0.29340482,-0.7740736,0.47819078>,<-0.29331124,-0.77424556,0.47886425>,<-0.2932177,-0.7744175,0.47953773>,<-0.29312414,-0.77458954,0.48021126> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.11872123,0.6693342,0.56275284>,<0.11975472,0.6690211,0.56427026>,<0.12078822,0.6687081,0.5657877>,<0.12182172,0.66839504,0.5673051>,<-0.030591212,0.18797946,0.5313469>,<-0.029557727,0.18766642,0.53286433>,<0.052002788,0.16333544,0.58072186>,<0.053036287,0.1630224,0.58223933>,<-0.17990361,-0.29337513,0.49994105>,<-0.17936254,-0.29353893,0.5007355>,<-0.17832905,-0.2938519,0.50225294>,<-0.17778802,-0.29401594,0.50304747>,<-0.32921606,-0.77472985,0.46853518>,<-0.328675,-0.7748937,0.46932966>,<-0.32813394,-0.77505755,0.47012413>,<-0.3275929,-0.7752215,0.47091866> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.02468781,0.6236961,0.7012905>,<0.029872485,0.6416135,0.6361742>,<0.046338066,0.65254855,0.60092986>,<0.07267464,0.6572718,0.59220505>,<-0.01946179,0.13035077,0.66303563>,<-0.014277115,0.14826816,0.59791934>,<-0.0057156608,0.15918702,0.6043947>,<0.020620912,0.16391027,0.59566987>,<-0.2440689,-0.32451704,0.5944743>,<-0.24135435,-0.31513643,0.56038284>,<-0.22511268,-0.30407894,0.524606>,<-0.21132424,-0.30160615,0.52003825>,<-0.3784473,-0.7986237,0.5410663>,<-0.37573275,-0.7892431,0.5069748>,<-0.36711216,-0.783518,0.4885227>,<-0.3533237,-0.7810452,0.4839549> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.07267464,0.6572718,0.59220505>,<0.09693731,0.6616231,0.58416724>,<0.15891421,0.6602309,0.61031306>,<0.16949311,0.6551121,0.6329926>,<0.020620912,0.16391027,0.59566987>,<0.044883586,0.16826159,0.58763206>,<0.07102467,0.14996576,0.60621905>,<0.08160357,0.14484698,0.6288986>,<-0.21132424,-0.30160615,0.52003825>,<-0.19862157,-0.29932797,0.5158301>,<-0.15079731,-0.3003999,0.53599656>,<-0.14525875,-0.30307975,0.54787034>,<-0.3533237,-0.7810452,0.4839549>,<-0.34062102,-0.77876705,0.47974676>,<-0.30817327,-0.7794959,0.49343538>,<-0.30263472,-0.7821758,0.5053092> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.16949311,0.6551121,0.6329926>,<0.17986503,0.65009344,0.6552285>,<0.12919998,0.6297827,0.71481>,<0.13926715,0.6276219,0.72537017>,<0.08160357,0.14484698,0.6288986>,<0.09197548,0.13982832,0.6511345>,<0.033975214,0.12631953,0.6674012>,<0.044042386,0.12415874,0.67796135>,<-0.14525875,-0.30307975,0.54787034>,<-0.13982859,-0.30570722,0.5595118>,<-0.17115453,-0.32070696,0.6053767>,<-0.1658839,-0.3218382,0.61090547>,<-0.30263472,-0.7821758,0.5053092>,<-0.29720455,-0.7848033,0.5169507>,<-0.32373008,-0.795437,0.5481444>,<-0.31845945,-0.7965683,0.55367315> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.13926715,0.6276219,0.72537017>,<0.1500878,0.62529933,0.7367207>,<0.23508173,0.63926,0.70850754>,<0.24667469,0.6467606,0.6839551>,<0.044042386,0.12415874,0.67796135>,<0.054863036,0.121836185,0.68931186>,<0.119449556,0.120539665,0.687091>,<0.13104251,0.12804025,0.66253847>,<-0.1658839,-0.3218382,0.61090547>,<-0.1602188,-0.3230542,0.6168481>,<-0.09866217,-0.31270552,0.59549963>,<-0.092592694,-0.3087786,0.5826453>,<-0.31845945,-0.7965683,0.55367315>,<-0.31279436,-0.7977842,0.55961573>,<-0.26829588,-0.79047513,0.54484475>,<-0.2622264,-0.78654826,0.5319904> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.24667469,0.6467606,0.6839551>,<0.26034027,0.65560216,0.6550131>,<0.23750529,0.6660645,0.61012423>,<0.16805357,0.6783701,0.54570556>,<0.13104251,0.12804025,0.66253847>,<0.1447081,0.13688183,0.63359654>,<0.15038079,0.1479953,0.63144565>,<0.08092908,0.16030091,0.567027>,<-0.092592694,-0.3087786,0.5826453>,<-0.08543807,-0.30414963,0.56749284>,<-0.10987967,-0.29365188,0.5220348>,<-0.14624107,-0.28720927,0.48830855>,<-0.2622264,-0.78654826,0.5319904>,<-0.2550718,-0.78191924,0.5168379>,<-0.26702702,-0.7764417,0.49333638>,<-0.30338842,-0.7699991,0.4596101> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.19487718,0.61842525,0.7784903>,<0.24802166,0.6293063,0.75584614>,<0.28195643,0.64037913,0.72599316>,<0.29352117,0.6515916,0.6880567>,<0.03346985,0.14515576,0.7128216>,<0.08661434,0.15603685,0.69017744>,<0.10488269,0.16184217,0.6746868>,<0.11644742,0.17305464,0.63675034>,<-0.12793745,-0.32811362,0.64715296>,<-0.10011381,-0.3224169,0.63529754>,<-0.06668097,-0.3113525,0.6053057>,<-0.06062629,-0.30548218,0.58544403>,<-0.2893448,-0.80138314,0.5814843>,<-0.26152116,-0.7956865,0.56962883>,<-0.24375471,-0.78988945,0.5539993>,<-0.23770005,-0.7840191,0.5341377> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.19487718,0.61842525,0.7784903>,<0.19495828,0.61874896,0.7773094>,<0.19503939,0.6190727,0.77612853>,<0.19512051,0.61939645,0.77494764>,<0.03346985,0.14515576,0.7128216>,<0.033550948,0.14547944,0.7116407>,<0.07709965,0.10798663,0.719767>,<0.077180766,0.1083104,0.7185861>,<-0.12793745,-0.32811362,0.64715296>,<-0.12789494,-0.32794416,0.6465347>,<-0.12781382,-0.3276204,0.6453537>,<-0.1277713,-0.32745087,0.6447354>,<-0.2893448,-0.80138314,0.5814843>,<-0.28930226,-0.8012136,0.580866>,<-0.28925973,-0.8010441,0.58024764>,<-0.28921723,-0.8008746,0.5796293> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.29352117,0.6515916,0.6880567>,<0.3062576,0.6639402,0.6462767>,<0.281749,0.6855118,0.55748546>,<0.246111,0.68907654,0.5321349>,<0.11644742,0.17305464,0.63675034>,<0.12918386,0.18540323,0.59497035>,<0.11220488,0.20102167,0.5309422>,<0.07656686,0.20458639,0.50559163>,<-0.06062629,-0.30548218,0.58544403>,<-0.053958178,-0.29901707,0.56357014>,<-0.074319065,-0.28177,0.49232066>,<-0.09297724,-0.27990362,0.47904843>,<-0.23770005,-0.7840191,0.5341377>,<-0.23103192,-0.77755404,0.51226383>,<-0.24386321,-0.76626015,0.46577743>,<-0.2625214,-0.7643938,0.45250523> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.29352117,0.6515916,0.6880567>,<0.29236788,0.65150046,0.68800676>,<0.29121462,0.6514094,0.6879568>,<0.29006135,0.6513183,0.68790686>,<0.11644742,0.17305464,0.63675034>,<0.11529413,0.1729635,0.6367004>,<0.16024274,0.1295321,0.67445064>,<0.15908948,0.12944102,0.6744007>,<-0.06062629,-0.30548218,0.58544403>,<-0.061230034,-0.30552983,0.58541775>,<-0.062383294,-0.3056209,0.5853678>,<-0.062987074,-0.30566853,0.5853417>,<-0.23770005,-0.7840191,0.5341377>,<-0.23830378,-0.78406674,0.5341115>,<-0.23890755,-0.78411436,0.53408533>,<-0.23951131,-0.78416204,0.53405917> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.246111,0.68907654,0.5321349>,<0.21046188,0.69264245,0.50677645>,<0.15496266,0.687271,0.5080621>,<0.07960405,0.67295825,0.5360044>,<0.07656686,0.20458639,0.50559163>,<0.040917724,0.2081523,0.4802332>,<0.011862658,0.20534074,0.48090434>,<-0.06349595,0.19102797,0.50884664>,<-0.09297724,-0.27990362,0.47904843>,<-0.11164129,-0.2780367,0.46577203>,<-0.16714191,-0.2834087,0.46705973>,<-0.20659593,-0.29090217,0.48168892>,<-0.2625214,-0.7643938,0.45250523>,<-0.28118542,-0.76252687,0.43922883>,<-0.31024194,-0.765339,0.439902>,<-0.34969592,-0.77283245,0.4545312> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.246111,0.68907654,0.5321349>,<0.24555172,0.68851656,0.5340355>,<0.24499245,0.6879566,0.5359361>,<0.2444332,0.68739665,0.5378368>,<0.07656686,0.20458639,0.50559163>,<0.076007575,0.2040264,0.5074922>,<0.14895102,0.1684109,0.57244325>,<0.14839177,0.16785097,0.5743439>,<-0.09297724,-0.27990362,0.47904843>,<-0.09327006,-0.2801968,0.48004347>,<-0.093829334,-0.28075677,0.48194408>,<-0.09412219,-0.2810499,0.48293915>,<-0.2625214,-0.7643938,0.45250523>,<-0.26281422,-0.76468694,0.45350027>,<-0.26310706,-0.7649801,0.4544953>,<-0.2633999,-0.7652733,0.45549035> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.07960405,0.67295825,0.5360044>,<0.081128046,0.67260003,0.53785634>,<0.08265203,0.67224187,0.5397083>,<0.084176034,0.6718837,0.5415603>,<-0.06349595,0.19102797,0.50884664>,<-0.061971955,0.19066978,0.51069856>,<0.04221207,0.17359352,0.5581819>,<0.043736063,0.17323536,0.5600338>,<-0.20659593,-0.29090217,0.48168892>,<-0.20579803,-0.2910897,0.4826585>,<-0.20427406,-0.29144788,0.48451042>,<-0.20347619,-0.29163545,0.48548>,<-0.34969592,-0.77283245,0.4545312>,<-0.34889805,-0.77301997,0.45550075>,<-0.3481002,-0.77320755,0.4564703>,<-0.34730232,-0.77339506,0.4574399> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.19512051,0.61939645,0.77494764>,<0.24626973,0.6298692,0.75315285>,<0.27893057,0.64052653,0.72441983>,<0.29006135,0.6513183,0.68790686>,<0.077180766,0.1083104,0.7185861>,<0.12832999,0.118783176,0.6967913>,<0.1479587,0.118649244,0.71091366>,<0.15908948,0.12944102,0.6744007>,<-0.1277713,-0.32745087,0.6447354>,<-0.10099232,-0.32196796,0.63332474>,<-0.068814576,-0.31131864,0.604458>,<-0.062987074,-0.30566853,0.5853417>,<-0.28921723,-0.8008746,0.5796293>,<-0.26243824,-0.7953916,0.5682186>,<-0.2453388,-0.7898121,0.55317545>,<-0.23951131,-0.78416204,0.53405917> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.29006135,0.6513183,0.68790686>,<0.30231988,0.6632035,0.6476946>,<0.2787332,0.6839656,0.5622361>,<0.2444332,0.68739665,0.5378368>,<0.15908948,0.12944102,0.6744007>,<0.171348,0.14132619,0.6341884>,<0.18269178,0.16441995,0.5987432>,<0.14839177,0.16785097,0.5743439>,<-0.062987074,-0.30566853,0.5853417>,<-0.05656916,-0.2994461,0.5642886>,<-0.076164484,-0.28284627,0.49571335>,<-0.09412219,-0.2810499,0.48293915>,<-0.23951131,-0.78416204,0.53405917>,<-0.23309341,-0.77793956,0.5130061>,<-0.24544221,-0.7670696,0.46826452>,<-0.2633999,-0.7652733,0.45549035> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.2444332,0.68739665,0.5378368>,<0.21012257,0.69082874,0.51342994>,<0.15670647,0.6856591,0.5146671>,<0.084176034,0.6718837,0.5415603>,<0.14839177,0.16785097,0.5743439>,<0.114081144,0.17128307,0.549937>,<0.11626649,0.18701077,0.53314054>,<0.043736063,0.17323536,0.5600338>,<-0.09412219,-0.2810499,0.48293915>,<-0.11208546,-0.27925307,0.47016096>,<-0.16550297,-0.28442335,0.47140008>,<-0.20347619,-0.29163545,0.48548>,<-0.2633999,-0.7652733,0.45549035>,<-0.2813632,-0.7634764,0.4427122>,<-0.3093291,-0.7661829,0.44335997>,<-0.34730232,-0.77339506,0.4574399> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.09311791,0.6460855,0.6408632>,<0.05641655,0.6343376,0.67230093>,<0.034783177,0.6235515,0.70524275>,<0.037620075,0.6150495,0.7379314>,<0.024820521,0.14439183,0.62439156>,<-0.011880837,0.13264394,0.6558293>,<-0.0151033625,0.12670445,0.6471969>,<-0.0122664645,0.11820245,0.67988557>,<-0.19737455,-0.30923927,0.553241>,<-0.21658951,-0.31538987,0.5697001>,<-0.23672962,-0.325966,0.60236275>,<-0.23524441,-0.33041716,0.6194768>,<-0.3426208,-0.7869017,0.50942993>,<-0.36183572,-0.7930523,0.52588904>,<-0.3731619,-0.7986994,0.5431355>,<-0.37167668,-0.80315053,0.56024957> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.09311791,0.6460855,0.6408632>,<0.091710165,0.6461082,0.6403023>,<0.09030242,0.646131,0.6397414>,<0.08889468,0.64615375,0.63918054>,<0.024820521,0.14439183,0.62439156>,<0.023412779,0.14441454,0.6238307>,<-0.054273084,0.16845769,0.5961975>,<-0.055680826,0.16848049,0.59563667>,<-0.19737455,-0.30923927,0.553241>,<-0.1981116,-0.30922735,0.5529473>,<-0.19951928,-0.30920458,0.5523864>,<-0.20025632,-0.30919266,0.5520928>,<-0.3426208,-0.7869017,0.50942993>,<-0.3433578,-0.7868898,0.50913626>,<-0.3440948,-0.7868779,0.5088426>,<-0.34483182,-0.78686595,0.508549> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.037620075,0.6150495,0.7379314>,<0.041454118,0.6035592,0.78210986>,<0.08998373,0.596241,0.82582605>,<0.20641878,0.5963594,0.8647429>,<-0.0122664645,0.11820245,0.67988557>,<-0.008432422,0.10671216,0.724064>,<-0.039346695,0.08346832,0.7399411>,<0.077088356,0.08358669,0.77885795>,<-0.23524441,-0.33041716,0.6194768>,<-0.23323715,-0.3364328,0.64260626>,<-0.18102145,-0.3432325,0.6856338>,<-0.12006177,-0.34317055,0.70600855>,<-0.37167668,-0.80315053,0.56024957>,<-0.36966944,-0.80916625,0.58337903>,<-0.34426177,-0.8129976,0.6062666>,<-0.28330207,-0.8129356,0.6266414> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.037620075,0.6150495,0.7379314>,<0.03549197,0.61466897,0.73863196>,<0.033363864,0.6142885,0.7393326>,<0.03123576,0.61390805,0.74003327>,<-0.0122664645,0.11820245,0.67988557>,<-0.01439457,0.11782193,0.6805862>,<-0.10205441,0.14173639,0.67977154>,<-0.10418251,0.14135593,0.68047214>,<-0.23524441,-0.33041716,0.6194768>,<-0.23635852,-0.33061635,0.6198436>,<-0.23848659,-0.33099675,0.6205443>,<-0.23960075,-0.33119607,0.62091106>,<-0.37167668,-0.80315053,0.56024957>,<-0.37279078,-0.80334973,0.5606164>,<-0.37390488,-0.80354893,0.5609832>,<-0.375019,-0.80374825,0.56135> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.20641878,0.5963594,0.8647429>,<0.20648468,0.59573627,0.8670905>,<0.20655058,0.59511316,0.8694382>,<0.20661649,0.59449005,0.8717859>,<0.077088356,0.08358669,0.77885795>,<0.07715425,0.082963586,0.78120553>,<0.043278858,0.12564504,0.78895247>,<0.043344766,0.1250219,0.7913002>,<-0.12006177,-0.34317055,0.70600855>,<-0.1200273,-0.3434968,0.7072377>,<-0.11996138,-0.3441199,0.7095854>,<-0.11992693,-0.34444615,0.71081454>,<-0.28330207,-0.8129356,0.6266414>,<-0.2832676,-0.8132618,0.62787056>,<-0.2832331,-0.813588,0.6290997>,<-0.28319865,-0.8139143,0.6303289> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.17592004,0.63656974,0.7043662>,<0.20565492,0.6559697,0.6420163>,<0.20580566,0.6659748,0.6047278>,<0.18765864,0.66960245,0.58505464>,<0.07803055,0.124444306,0.66972804>,<0.107765436,0.14384425,0.6073781>,<0.11373857,0.14882201,0.61614716>,<0.095591545,0.15244967,0.596474>,<-0.14087325,-0.31573254,0.5965732>,<-0.12530553,-0.30557585,0.5639298>,<-0.12336233,-0.2950914,0.5254588>,<-0.1328632,-0.29319218,0.515159>,<-0.2992699,-0.7918837,0.5426767>,<-0.2837022,-0.78172696,0.51003337>,<-0.28362328,-0.7764888,0.49051106>,<-0.29312414,-0.77458954,0.48021126> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.18765864,0.66960245,0.58505464>,<0.17421985,0.6722889,0.57048565>,<0.15074629,0.671478,0.56557715>,<0.12182172,0.66839504,0.5673051>,<0.095591545,0.15244967,0.596474>,<0.082152754,0.15513611,0.581905>,<0.08196086,0.16610533,0.58051133>,<0.053036287,0.1630224,0.58223933>,<-0.1328632,-0.29319218,0.515159>,<-0.13989905,-0.2917856,0.50753146>,<-0.16264462,-0.29240185,0.5021428>,<-0.17778802,-0.29401594,0.50304747>,<-0.29312414,-0.77458954,0.48021126>,<-0.30016,-0.773183,0.4725837>,<-0.3124495,-0.7736075,0.47001398>,<-0.3275929,-0.7752215,0.47091866> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.08889468,0.64615375,0.63918054>,<0.05076361,0.6339479,0.67184424>,<0.028287722,0.62274134,0.7060704>,<0.03123576,0.61390805,0.74003327>,<-0.055680826,0.16848049,0.59563667>,<-0.0938119,0.15627462,0.6283003>,<-0.10713055,0.15018922,0.6465093>,<-0.10418251,0.14135593,0.68047214>,<-0.20025632,-0.30919266,0.5520928>,<-0.22021973,-0.3155831,0.5691937>,<-0.24114418,-0.32657146,0.60313>,<-0.23960075,-0.33119607,0.62091106>,<-0.34483182,-0.78686595,0.508549>,<-0.36479524,-0.7932564,0.5256499>,<-0.37656245,-0.79912364,0.5435689>,<-0.375019,-0.80374825,0.56135> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.03123576,0.61390805,0.74003327>,<0.035220023,0.60196996,0.785934>,<0.08564204,0.59436667,0.83135366>,<0.20661649,0.59449005,0.8717859>,<-0.10418251,0.14135593,0.68047214>,<-0.10019825,0.12941784,0.72637284>,<-0.077629685,0.12489855,0.75086796>,<0.043344766,0.1250219,0.7913002>,<-0.23960075,-0.33119607,0.62091106>,<-0.23751485,-0.33744633,0.64494216>,<-0.183263,-0.3445109,0.68964624>,<-0.11992693,-0.34444615,0.71081454>,<-0.375019,-0.80374825,0.56135>,<-0.37293312,-0.8099985,0.58538115>,<-0.34653473,-0.8139791,0.6091606>,<-0.28319865,-0.8139143,0.6303289> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.14277598,0.6197879,0.75579286>,<0.14722282,0.61225176,0.7854213>,<0.15723005,0.6058886,0.81255174>,<0.17571217,0.6042079,0.82507205>,<-0.010356732,0.14630195,0.6937288>,<-0.00590989,0.13876587,0.7233572>,<-0.0011335164,0.13487709,0.739485>,<0.017348602,0.13319632,0.75200534>,<-0.16348942,-0.32718384,0.6316649>,<-0.1611613,-0.33112943,0.64717686>,<-0.15069121,-0.33693516,0.67238367>,<-0.14101493,-0.33781514,0.6789387>,<-0.31662214,-0.8006698,0.56960094>,<-0.31429404,-0.8046154,0.5851129>,<-0.3090548,-0.80794674,0.5993171>,<-0.2993785,-0.8088267,0.60587204> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.14277598,0.6197879,0.75579286>,<0.14350949,0.6200948,0.7548955>,<0.144243,0.6204016,0.7539982>,<0.14497653,0.6207086,0.753101>,<-0.010356732,0.14630195,0.6937288>,<-0.0096232295,0.14660889,0.6928315>,<0.039630905,0.11894858,0.6963018>,<0.04036443,0.11925554,0.6954045>,<-0.16348942,-0.32718384,0.6316649>,<-0.16310543,-0.32702315,0.63119507>,<-0.16237187,-0.32671618,0.6302978>,<-0.16198792,-0.32655555,0.6298281>,<-0.31662214,-0.8006698,0.56960094>,<-0.31623814,-0.80050904,0.56913114>,<-0.31585413,-0.80034834,0.5686614>,<-0.31547016,-0.8001877,0.56819165> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.17571217,0.6042079,0.82507205>,<0.21003014,0.60108703,0.84832>,<0.3783942,0.64930713,0.72527176>,<0.3849827,0.66574347,0.66615784>,<0.017348602,0.13319632,0.75200534>,<0.051666573,0.13007545,0.7752533>,<0.18679476,0.16852266,0.6774434>,<0.1933833,0.184959,0.61832947>,<-0.14101493,-0.33781514,0.6789387>,<-0.12304789,-0.33944917,0.69111025>,<-0.0016654432,-0.30443048,0.6014501>,<0.001783967,-0.29582533,0.5705011>,<-0.2993785,-0.8088267,0.60587204>,<-0.28141147,-0.8104607,0.61804354>,<-0.19326484,-0.78521496,0.55362177>,<-0.18981543,-0.7766098,0.5226728> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.17571217,0.6042079,0.82507205>,<0.17603338,0.60470927,0.8233093>,<0.17635459,0.60521066,0.82154655>,<0.1766758,0.60571206,0.8197839>,<0.017348602,0.13319632,0.75200534>,<0.017669812,0.13369775,0.7502426>,<0.06066996,0.095338106,0.7472584>,<0.060991168,0.0958395,0.7454958>,<-0.14101493,-0.33781514,0.6789387>,<-0.14084685,-0.33755255,0.6780158>,<-0.14052564,-0.33705115,0.6762531>,<-0.1403576,-0.33678862,0.6753302>,<-0.2993785,-0.8088267,0.60587204>,<-0.29921043,-0.8085641,0.6049491>,<-0.29904237,-0.80830157,0.60402626>,<-0.29887432,-0.80803907,0.6031034> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.3849827,0.66574347,0.66615784>,<0.3902241,0.678819,0.6191309>,<0.3496917,0.69343466,0.55088323>,<0.30496883,0.6979944,0.5187484>,<0.1933833,0.184959,0.61832947>,<0.19862473,0.19803452,0.57130253>,<0.17079985,0.20752817,0.526466>,<0.126077,0.21208796,0.49433118>,<0.001783967,-0.29582533,0.5705011>,<0.0045280755,-0.28897965,0.5458802>,<-0.02940017,-0.27620554,0.4867381>,<-0.052814804,-0.27381837,0.469914>,<-0.18981543,-0.7766098,0.5226728>,<-0.18707132,-0.76976407,0.49805188>,<-0.20829202,-0.7621121,0.46232092>,<-0.23170665,-0.75972486,0.4454968> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.3849827,0.66574347,0.66615784>,<0.38268727,0.6654756,0.6663814>,<0.38039187,0.6652078,0.666605>,<0.37809646,0.66494,0.66682863>,<0.1933833,0.184959,0.61832947>,<0.19108784,0.18469113,0.61855304>,<0.22316343,0.13403958,0.6706505>,<0.22086802,0.13377178,0.6708741>,<0.001783967,-0.29582533,0.5705011>,<5.8218837E-4,-0.29596555,0.57061815>,<-0.0017132163,-0.2962333,0.5708418>,<-0.0029150248,-0.29637367,0.57095885>,<-0.18981543,-0.7766098,0.5226728>,<-0.19101721,-0.77675,0.52278984>,<-0.19221899,-0.7768903,0.5229069>,<-0.1934208,-0.7770306,0.52302396> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.30496883,0.6979944,0.5187484>,<0.24779217,0.7038238,0.4776651>,<0.1584777,0.69819915,0.46846592>,<0.02692663,0.67599684,0.506858>,<0.126077,0.21208796,0.49433118>,<0.06890035,0.21791738,0.4532479>,<0.023743771,0.21578628,0.4459371>,<-0.10780729,0.193584,0.48432916>,<-0.052814804,-0.27381837,0.469914>,<-0.082749546,-0.27076626,0.4484049>,<-0.17366791,-0.27720475,0.44170034>,<-0.2425412,-0.2888287,0.46180037>,<-0.23170665,-0.75972486,0.4454968>,<-0.26164138,-0.7566728,0.42398775>,<-0.30840185,-0.7596176,0.4191715>,<-0.3772751,-0.77124155,0.43927157> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.30496883,0.6979944,0.5187484>,<0.30367333,0.69732314,0.52081573>,<0.30237782,0.6966519,0.5228831>,<0.3010823,0.6959806,0.5249505>,<0.126077,0.21208796,0.49433118>,<0.12478149,0.21141666,0.49639857>,<0.18956664,0.17343956,0.5709765>,<0.18827114,0.1727683,0.5730439>,<-0.052814804,-0.27381837,0.469914>,<-0.053493053,-0.2741698,0.47099632>,<-0.05478856,-0.27484107,0.4730637>,<-0.055466823,-0.2751925,0.47414604>,<-0.23170665,-0.75972486,0.4454968>,<-0.23238489,-0.7600763,0.44657913>,<-0.23306315,-0.7604277,0.44766146>,<-0.2337414,-0.76077914,0.44874382> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.02692663,0.67599684,0.506858>,<0.029108837,0.67560065,0.5090741>,<0.03129105,0.6752045,0.5112902>,<0.03347326,0.6748084,0.5135063>,<-0.10780729,0.193584,0.48432916>,<-0.105625086,0.19318777,0.48654526>,<0.012679819,0.18645734,0.53844845>,<0.014862031,0.1860612,0.5406646>,<-0.2425412,-0.2888287,0.46180037>,<-0.24139869,-0.28903615,0.4629606>,<-0.23921645,-0.2894323,0.46517664>,<-0.23807397,-0.28963977,0.4663369>,<-0.3772751,-0.77124155,0.43927157>,<-0.3761326,-0.77144897,0.44043177>,<-0.3749901,-0.7716564,0.44159198>,<-0.3738476,-0.77186394,0.44275224> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.14497653,0.6207086,0.753101>,<0.14925596,0.61345476,0.7816192>,<0.15888725,0.60732996,0.80773294>,<0.1766758,0.60571206,0.8197839>,<0.04036443,0.11925554,0.6954045>,<0.044643864,0.11200172,0.7239227>,<0.043202624,0.09745741,0.7334448>,<0.060991168,0.0958395,0.7454958>,<-0.16198792,-0.32655555,0.6298281>,<-0.15974754,-0.33035326,0.6447588>,<-0.14967066,-0.33594155,0.6690209>,<-0.1403576,-0.33678862,0.6753302>,<-0.31547016,-0.8001877,0.56819165>,<-0.31322977,-0.8039854,0.5831223>,<-0.3081874,-0.807192,0.59679407>,<-0.29887432,-0.80803907,0.6031034> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.1766758,0.60571206,0.8197839>,<0.20970567,0.60270804,0.84216034>,<0.37175584,0.64912033,0.72372526>,<0.37809646,0.66494,0.66682863>,<0.060991168,0.0958395,0.7454958>,<0.09402102,0.092835486,0.7678722>,<0.21452737,0.11795211,0.7277708>,<0.22086802,0.13377178,0.6708741>,<-0.1403576,-0.33678862,0.6753302>,<-0.123064995,-0.33836138,0.68704545>,<-0.0062346756,-0.30465615,0.600747>,<-0.0029150248,-0.29637367,0.57095885>,<-0.29887432,-0.80803907,0.6031034>,<-0.28158173,-0.8096118,0.61481863>,<-0.19674045,-0.785313,0.5528121>,<-0.1934208,-0.7770306,0.52302396> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.37809646,0.66494,0.66682863>,<0.3831406,0.677525,0.62156594>,<0.34412777,0.6915921,0.5558795>,<0.3010823,0.6959806,0.5249505>,<0.22086802,0.13377178,0.6708741>,<0.22591215,0.14635676,0.6256114>,<0.23131663,0.16837978,0.6039729>,<0.18827114,0.1727683,0.5730439>,<-0.0029150248,-0.29637367,0.57095885>,<-2.7416646E-4,-0.2897848,0.5472616>,<-0.032930464,-0.27749014,0.4903388>,<-0.055466823,-0.2751925,0.47414604>,<-0.1934208,-0.7770306,0.52302396>,<-0.19077994,-0.7704418,0.49932674>,<-0.21120504,-0.76307684,0.4649366>,<-0.2337414,-0.76077914,0.44874382> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.3010823,0.6959806,0.5249505>,<0.24605045,0.70159125,0.48540914>,<0.16008718,0.6961775,0.47655523>,<0.03347326,0.6748084,0.5135063>,<0.18827114,0.1727683,0.5730439>,<0.13323927,0.17837894,0.5335026>,<0.14147595,0.2074303,0.5037135>,<0.014862031,0.1860612,0.5406646>,<-0.055466823,-0.2751925,0.47414604>,<-0.08427867,-0.27225518,0.45344424>,<-0.17178547,-0.27845192,0.44699126>,<-0.23807397,-0.28963977,0.4663369>,<-0.2337414,-0.76077914,0.44874382>,<-0.26255324,-0.75784177,0.42804202>,<-0.30755913,-0.7606761,0.4234066>,<-0.3738476,-0.77186394,0.44275224> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.14062646,0.6428183,0.669116>,<0.10177036,0.6391655,0.66961336>,<0.076691814,0.63494754,0.67687774>,<0.06884285,0.6301036,0.69230247>,<0.058379553,0.13371772,0.645893>,<0.019523442,0.13006496,0.6463903>,<0.014193885,0.13654006,0.6408889>,<0.006344922,0.13169613,0.65631366>,<-0.16495623,-0.31146863,0.57251954>,<-0.18529934,-0.31338096,0.5727799>,<-0.20982963,-0.31760848,0.5802655>,<-0.21393898,-0.32014465,0.5883411>,<-0.3177476,-0.7886121,0.5242213>,<-0.33809072,-0.7905245,0.52448165>,<-0.35122058,-0.7927328,0.52828485>,<-0.35532993,-0.7952689,0.5363605> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <0.06884285,0.6301036,0.69230247>,<0.059823804,0.6245376,0.7100267>,<0.07355423,0.618145,0.73852557>,<0.11527154,0.6108339,0.7799132>,<0.006344922,0.13169613,0.65631366>,<-0.0026741251,0.1261301,0.67403793>,<-0.022264026,0.118649304,0.6681348>,<0.01945328,0.1113382,0.7095224>,<-0.21393898,-0.32014465,0.5883411>,<-0.21866089,-0.32305872,0.5976206>,<-0.2040987,-0.329466,0.6264553>,<-0.18225764,-0.3332938,0.64812386>,<-0.35532993,-0.7952689,0.5363605>,<-0.36005187,-0.79818296,0.54564>,<-0.3528633,-0.8015299,0.56056064>,<-0.33102226,-0.8053577,0.58222914> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.2992699,-0.7918837,0.5426767>,<-0.2837022,-0.78172696,0.51003337>,<-0.28362328,-0.7764888,0.49051106>,<-0.29312414,-0.77458954,0.48021126>,<-0.2994435,-0.79193646,0.54281485>,<-0.28387582,-0.78177977,0.51017153>,<-0.28371686,-0.77631676,0.48983753>,<-0.2932177,-0.7744175,0.47953773>,<-0.2996171,-0.7919892,0.5429531>,<-0.2834422,-0.78143656,0.5090375>,<-0.2834401,-0.7762189,0.4895658>,<-0.29331124,-0.77424556,0.47886425>,<-0.29979074,-0.792042,0.5430913>,<-0.28361583,-0.7814894,0.50917566>,<-0.28353372,-0.776047,0.48889232>,<-0.29340482,-0.7740736,0.47819078> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.29312414,-0.77458954,0.48021126>,<-0.30016,-0.773183,0.4725837>,<-0.3124495,-0.7736075,0.47001398>,<-0.3275929,-0.7752215,0.47091866>,<-0.2932177,-0.7744175,0.47953773>,<-0.30025357,-0.77301097,0.47191018>,<-0.31299055,-0.7734435,0.46921945>,<-0.32813394,-0.77505755,0.47012413>,<-0.29331124,-0.77424556,0.47886425>,<-0.30062115,-0.77278423,0.4709394>,<-0.31294185,-0.7732171,0.46839017>,<-0.328675,-0.7748937,0.46932966>,<-0.29340482,-0.7740736,0.47819078>,<-0.30071473,-0.7726122,0.47026592>,<-0.31348294,-0.77305317,0.4675957>,<-0.32921606,-0.77472985,0.46853518> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.3426208,-0.7869017,0.50942993>,<-0.36183572,-0.7930523,0.52588904>,<-0.3731619,-0.7986994,0.5431355>,<-0.37167668,-0.80315053,0.56024957>,<-0.3433578,-0.7868898,0.50913626>,<-0.36257273,-0.7930404,0.5255954>,<-0.37427604,-0.7988986,0.54350233>,<-0.37279078,-0.80334973,0.5606164>,<-0.3440948,-0.7868779,0.5088426>,<-0.36405826,-0.7932683,0.5259435>,<-0.3754483,-0.7989243,0.54320204>,<-0.37390488,-0.80354893,0.5609832>,<-0.34483182,-0.78686595,0.508549>,<-0.36479524,-0.7932564,0.5256499>,<-0.37656245,-0.79912364,0.5435689>,<-0.375019,-0.80374825,0.56135> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.37167668,-0.80315053,0.56024957>,<-0.36966944,-0.80916625,0.58337903>,<-0.34426177,-0.8129976,0.6062666>,<-0.28330207,-0.8129356,0.6266414>,<-0.37279078,-0.80334973,0.5606164>,<-0.37078357,-0.8093654,0.58374584>,<-0.3442273,-0.81332374,0.6074958>,<-0.2832676,-0.8132618,0.62787056>,<-0.37390488,-0.80354893,0.5609832>,<-0.37181896,-0.8097992,0.58501434>,<-0.34656918,-0.81365275,0.6079314>,<-0.2832331,-0.813588,0.6290997>,<-0.375019,-0.80374825,0.56135>,<-0.37293312,-0.8099985,0.58538115>,<-0.34653473,-0.8139791,0.6091606>,<-0.28319865,-0.8139143,0.6303289> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.3820548,-0.7990446,0.54141784>,<-0.37923324,-0.78929806,0.5059968>,<-0.37027574,-0.78334975,0.48682564>,<-0.35594946,-0.7807807,0.48208022>,<-0.38085228,-0.7989043,0.54130065>,<-0.37803072,-0.78915775,0.50587964>,<-0.36940044,-0.78343785,0.48745048>,<-0.3550742,-0.78086877,0.4827051>,<-0.3796498,-0.798764,0.5411835>,<-0.37693524,-0.7893834,0.507092>,<-0.3679874,-0.78342986,0.48789775>,<-0.35419893,-0.780957,0.48332998>,<-0.3784473,-0.7986237,0.5410663>,<-0.37573275,-0.7892431,0.5069748>,<-0.36711216,-0.783518,0.4885227>,<-0.3533237,-0.7810452,0.4839549> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.35594946,-0.7807807,0.48208022>,<-0.34275162,-0.77841395,0.47770858>,<-0.30904135,-0.77917135,0.49193048>,<-0.30328673,-0.7819557,0.5042671>,<-0.3550742,-0.78086877,0.4827051>,<-0.34187633,-0.7785021,0.47833347>,<-0.308824,-0.77924466,0.49227786>,<-0.30306938,-0.78202903,0.5046145>,<-0.35419893,-0.780957,0.48332998>,<-0.34149623,-0.7786789,0.4791218>,<-0.30839062,-0.7794225,0.493088>,<-0.30285203,-0.78210235,0.50496185>,<-0.3533237,-0.7810452,0.4839549>,<-0.34062102,-0.77876705,0.47974676>,<-0.30817327,-0.7794959,0.49343538>,<-0.30263472,-0.7821758,0.5053092> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.30328673,-0.7819557,0.5042671>,<-0.29764467,-0.7846857,0.5163624>,<-0.325173,-0.79578406,0.5484775>,<-0.31972617,-0.79690886,0.5545163>,<-0.30306938,-0.78202903,0.5046145>,<-0.29742736,-0.78475904,0.5167098>,<-0.32475072,-0.7956705,0.5481963>,<-0.31930393,-0.7967953,0.5542352>,<-0.30285203,-0.78210235,0.50496185>,<-0.29742187,-0.78472984,0.51660335>,<-0.3241523,-0.79555047,0.54842544>,<-0.3188817,-0.79668176,0.5539542>,<-0.30263472,-0.7821758,0.5053092>,<-0.29720455,-0.7848033,0.5169507>,<-0.32373008,-0.795437,0.5481444>,<-0.31845945,-0.7965683,0.55367315> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.31972617,-0.79690886,0.5545163>,<-0.31376094,-0.7981405,0.5611298>,<-0.26506305,-0.7895683,0.54559886>,<-0.2588538,-0.7853781,0.53205943>,<-0.31930393,-0.7967953,0.5542352>,<-0.3133387,-0.79802704,0.5608487>,<-0.26618725,-0.78995836,0.54557586>,<-0.259978,-0.78576815,0.5320364>,<-0.3188817,-0.79668176,0.5539542>,<-0.31321663,-0.7978977,0.5598968>,<-0.26717168,-0.7900851,0.54486775>,<-0.2611022,-0.7861582,0.5320134>,<-0.31845945,-0.7965683,0.55367315>,<-0.31279436,-0.7977842,0.55961573>,<-0.26829588,-0.79047513,0.54484475>,<-0.2622264,-0.78654826,0.5319904> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.2588538,-0.7853781,0.53205943>,<-0.25162694,-0.7805011,0.51630116>,<-0.2649644,-0.7751492,0.491819>,<-0.30406672,-0.7693038,0.45678592>,<-0.259978,-0.78576815,0.5320364>,<-0.2527511,-0.7808912,0.51627815>,<-0.26473826,-0.77538097,0.49276036>,<-0.3038406,-0.76953554,0.45772728>,<-0.2611022,-0.7861582,0.5320134>,<-0.25394756,-0.7815292,0.51686084>,<-0.2672531,-0.7762099,0.49239492>,<-0.3036145,-0.7697673,0.45866868>,<-0.2622264,-0.78654826,0.5319904>,<-0.2550718,-0.78191924,0.5168379>,<-0.26702702,-0.7764417,0.49333638>,<-0.30338842,-0.7699991,0.4596101> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.28921723,-0.8008746,0.5796293>,<-0.26243824,-0.7953916,0.5682186>,<-0.2453388,-0.7898121,0.55317545>,<-0.23951131,-0.78416204,0.53405917>,<-0.28925973,-0.8010441,0.58024764>,<-0.26248074,-0.7955612,0.5688369>,<-0.24473503,-0.7897644,0.55320156>,<-0.23890755,-0.78411436,0.53408533>,<-0.28930226,-0.8012136,0.580866>,<-0.26147866,-0.79551697,0.5690105>,<-0.24435845,-0.78993714,0.5539731>,<-0.23830378,-0.78406674,0.5341115>,<-0.2893448,-0.80138314,0.5814843>,<-0.26152116,-0.7956865,0.56962883>,<-0.24375471,-0.78988945,0.5539993>,<-0.23770005,-0.7840191,0.5341377> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.23951131,-0.78416204,0.53405917>,<-0.23309341,-0.77793956,0.5130061>,<-0.24544221,-0.7670696,0.46826452>,<-0.2633999,-0.7652733,0.45549035>,<-0.23890755,-0.78411436,0.53408533>,<-0.23248965,-0.7778919,0.5130323>,<-0.24514937,-0.7667764,0.46726948>,<-0.26310706,-0.7649801,0.4544953>,<-0.23830378,-0.78406674,0.5341115>,<-0.23163566,-0.7776016,0.51223755>,<-0.24415606,-0.7665533,0.46677244>,<-0.26281422,-0.76468694,0.45350027>,<-0.23770005,-0.7840191,0.5341377>,<-0.23103192,-0.77755404,0.51226383>,<-0.24386321,-0.76626015,0.46577743>,<-0.2625214,-0.7643938,0.45250523> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.2633999,-0.7652733,0.45549035>,<-0.2813632,-0.7634764,0.4427122>,<-0.3093291,-0.7661829,0.44335997>,<-0.34730232,-0.77339506,0.4574399>,<-0.26310706,-0.7649801,0.4544953>,<-0.28107035,-0.7631832,0.44171715>,<-0.31012696,-0.7659954,0.44239038>,<-0.3481002,-0.77320755,0.4564703>,<-0.26281422,-0.76468694,0.45350027>,<-0.2814783,-0.76282,0.44022387>,<-0.30944407,-0.7655265,0.4408716>,<-0.34889805,-0.77301997,0.45550075>,<-0.2625214,-0.7643938,0.45250523>,<-0.28118542,-0.76252687,0.43922883>,<-0.31024194,-0.765339,0.439902>,<-0.34969592,-0.77283245,0.4545312> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.3177476,-0.7886121,0.5242213>,<-0.33809072,-0.7905245,0.52448165>,<-0.35122058,-0.7927328,0.52828485>,<-0.35532993,-0.7952689,0.5363605>,<-0.31816113,-0.7886224,0.5241196>,<-0.33850425,-0.79053473,0.52437997>,<-0.35212237,-0.7928294,0.52834094>,<-0.35623172,-0.7953656,0.5364166>,<-0.3185747,-0.7886326,0.52401793>,<-0.33971065,-0.79061943,0.52428854>,<-0.35286403,-0.7928275,0.5280824>,<-0.3571335,-0.7954623,0.5364727>,<-0.31898826,-0.7886428,0.52391624>,<-0.34012425,-0.79062974,0.52418685>,<-0.35376585,-0.79292417,0.52813846>,<-0.35803533,-0.79555905,0.5365288> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.35532993,-0.7952689,0.5363605>,<-0.36005187,-0.79818296,0.54564>,<-0.3528633,-0.8015299,0.56056064>,<-0.33102226,-0.8053577,0.58222914>,<-0.35623172,-0.7953656,0.5364166>,<-0.36095363,-0.79827964,0.545696>,<-0.3534491,-0.8017577,0.5612128>,<-0.3316081,-0.8055855,0.5828812>,<-0.3571335,-0.7954623,0.5364727>,<-0.3620395,-0.79849017,0.54611397>,<-0.3548866,-0.80183625,0.56102014>,<-0.3321939,-0.8058133,0.5835333>,<-0.35803533,-0.79555905,0.5365288>,<-0.36294132,-0.79858685,0.5461701>,<-0.35547245,-0.80206406,0.5616723>,<-0.33277977,-0.8060411,0.58418536> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.31662214,-0.8006698,0.56960094>,<-0.31429404,-0.8046154,0.5851129>,<-0.3090548,-0.80794674,0.5993171>,<-0.2993785,-0.8088267,0.60587204>,<-0.31623814,-0.80050904,0.56913114>,<-0.31391,-0.8044547,0.5846431>,<-0.3088867,-0.8076842,0.59839416>,<-0.29921043,-0.8085641,0.6049491>,<-0.31585413,-0.80034834,0.5686614>,<-0.3136137,-0.80414605,0.58359206>,<-0.30835545,-0.80745447,0.5977169>,<-0.29904237,-0.80830157,0.60402626>,<-0.31547016,-0.8001877,0.56819165>,<-0.31322977,-0.8039854,0.5831223>,<-0.3081874,-0.807192,0.59679407>,<-0.29887432,-0.80803907,0.6031034> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.2993785,-0.8088267,0.60587204>,<-0.28141147,-0.8104607,0.61804354>,<-0.19326484,-0.78521496,0.55362177>,<-0.18981543,-0.7766098,0.5226728>,<-0.29921043,-0.8085641,0.6049491>,<-0.28124338,-0.81019807,0.6171206>,<-0.19446662,-0.7853552,0.55373883>,<-0.19101721,-0.77675,0.52278984>,<-0.29904237,-0.80830157,0.60402626>,<-0.28174978,-0.8098743,0.6157415>,<-0.19553864,-0.7851727,0.55269504>,<-0.19221899,-0.7768903,0.5229069>,<-0.29887432,-0.80803907,0.6031034>,<-0.28158173,-0.8096118,0.61481863>,<-0.19674045,-0.785313,0.5528121>,<-0.1934208,-0.7770306,0.52302396> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.18981543,-0.7766098,0.5226728>,<-0.18707132,-0.76976407,0.49805188>,<-0.20829202,-0.7621121,0.46232092>,<-0.23170665,-0.75972486,0.4454968>,<-0.19101721,-0.77675,0.52278984>,<-0.1882731,-0.76990426,0.49816895>,<-0.20897028,-0.76246357,0.46340322>,<-0.23238489,-0.7600763,0.44657913>,<-0.19221899,-0.7768903,0.5229069>,<-0.18957815,-0.77030146,0.49920964>,<-0.21052676,-0.76272535,0.46385425>,<-0.23306315,-0.7604277,0.44766146>,<-0.1934208,-0.7770306,0.52302396>,<-0.19077994,-0.7704418,0.49932674>,<-0.21120504,-0.76307684,0.4649366>,<-0.2337414,-0.76077914,0.44874382> }
bicubic_patch { type 1 flatness 0 u_steps 3 v_steps 3 <-0.23170665,-0.75972486,0.4454968>,<-0.26164138,-0.7566728,0.42398775>,<-0.30840185,-0.7596176,0.4191715>,<-0.3772751,-0.77124155,0.43927157>,<-0.23238489,-0.7600763,0.44657913>,<-0.26231962,-0.7570243,0.42507005>,<-0.30725932,-0.7598251,0.42033172>,<-0.3761326,-0.77144897,0.44043177>,<-0.23306315,-0.7604277,0.44766146>,<-0.26187497,-0.7574904,0.42695963>,<-0.30870163,-0.7604685,0.42224634>,<-0.3749901,-0.7716564,0.44159198>,<-0.2337414,-0.76077914,0.44874382>,<-0.26255324,-0.75784177,0.42804202>,<-0.30755913,-0.7606761,0.4234066>,<-0.3738476,-0.77186394,0.44275224> }
pigment {
color rgbft <1.0,0.0,0.0,0.0,0.0>
}
finish {
ambient 0.1
diffuse 0.9 brilliance 1.0
specular 1.0 roughness 0.01 metallic 0.0
#if (true) conserve_energy #end
reflection {
0.0,0.0
falloff 1.0
metallic 0.0
}
}
interior {
ior 1.0
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,137 @@
global_settings {
adc_bailout 0.00392157
assumed_gamma 1.5
noise_generator 2
}
light_source {
<4, 5, -5>, rgb <1, 1, 1>
}
fog {
fog_type 1
distance 3
rgb <0, 0, 0>
}
camera {
perspective
location <5, 1.15077, -5.57202>
sky <0, 1, 0>
direction <0, 0, 1>
right <1.33333, 0, 0>
up <0, 1, 0>
look_at <0, 0, 0>
}
plane {
//*PMName purple_sky
<0, 1, 0>, 1.9123
pigment {
bozo
turbulence <0.5, 0, 0>
scale <2, 1, 0.5>
pigment_map {
[ 0 color rgbt <0.19216, 0.14902, 0.21569, 0.8>
]
[ 0.3 color rgbt <0.533333, 0.301961, 0.690196, 0.2>
]
[ 0.6 color rgbt <0.21569, 0.16863, 0.23922, 0.8>
]
}
}
finish {
ambient rgb <0.24314, 0.24314, 0.24314>
diffuse 0
}
scale 1
rotate <23.9, -41.9, 0>
translate <0, 0.533496, 0.369343>
}
plane {
//*PMName stars
<0, 1, 0>, 1.9123
texture {
granite
texture_map {
[ 0 pigment {
color rgb <0, 0, 0>
}
]
[ 0.1075 pigment {
color rgb <0, 0, 0>
}
]
[ 0.11 pigment {
color rgb <0.87451, 0.941176, 1>
}
finish {
ambient rgb <1, 1, 1>
}
]
[ 0.1125 pigment {
color rgb <0, 0, 0>
}
]
[ 0.3175 pigment {
color rgb <0, 0, 0>
}
]
[ 0.32 pigment {
color rgb <0.533333, 0.533333, 0.533333>
}
finish {
ambient rgb <1, 0.709804, 0.713725>
}
]
[ 0.3225 pigment {
color rgb <0, 0, 0>
}
]
}
}
scale 1
rotate <23.9, -41.9, 0>
translate <0, 0.779725, 0.369343>
}
height_field {
png "/home/hodapp/geomorph/chris1.png"
texture {
granite
texture_map {
[ 0 finish {
reflection {
rgb <0.835294, 0.835294, 0.835294>
}
}
pigment {
color rgb <0.25098, 0.180392, 0.156863>
}
]
[ 0.33 pigment {
color rgb <0.32549, 0.32549, 0.32549>
}
]
[ 0.66 pigment {
color rgb <0.407843, 0.305882, 0.176471>
}
]
}
}
scale <16, 2, 16>
rotate <0, 0, 0>
translate <-8.6577, -3, -7.3267>
inverse
}

View File

@@ -0,0 +1,598 @@
#declare fence = texture {
crackle
scale 0.125
texture_map {
[ 0.095 normal {
bumps
0.25
}
pigment {
granite
pigment_map {
[ 0 color rgb <0.6, 0.6, 0.6>
]
[ 0.5 color rgb <0.12549, 0.760784, 0.921569>
]
[ 1 color rgb <0.423529, 0.396078, 0.380392>
]
}
}
scale 0.1
finish {
ambient rgb <0.219608, 0.392157, 0.764706>
diffuse 0.5
brilliance 4
metallic 1
specular 1
roughness 0.05
reflection rgb <0.486275, 0.486275, 0.486275>
}
]
[ 0.1 pigment {
color rgbft <0, 0, 0, 0.8, 0.8>
}
finish {
}
]
[ 0.45 pigment {
color rgbft <0.647059, 0.647059, 0.647059, 0.2, 0.2>
}
finish {
}
]
[ 0.8 pigment {
color rgbft <0, 0, 0, 0.8, 0.8>
}
finish {
}
]
[ 0.805 normal {
bumps
0.25
}
pigment {
granite
pigment_map {
[ 0 color rgb <0.6, 0.6, 0.6>
]
[ 0.5 color rgb <0.717647, 0.658824, 0.623529>
]
[ 1 color rgb <0.423529, 0.396078, 0.380392>
]
}
}
scale 0.1
finish {
ambient rgb <0.207843, 0.301961, 0.368627>
diffuse 0.5
brilliance 4
metallic 1
specular 1
roughness 0.025
reflection rgb <0.486275, 0.486275, 0.486275>
}
]
}
}
#declare shinyblue = texture {
finish {
ambient rgb <0.0784314, 0.105882, 0.34902>
diffuse 0.6
brilliance 1
metallic 1
roughness 0.05
reflection rgb <0.647059, 0.784314, 0.929412>
}
pigment {
agate
agate_turb 0.5
color_map {
[ 0 color rgb <0.188235, 0.188235, 0.415686>
]
[ 0.5 color rgb <0.215686, 0.262745, 0.431373>
]
[ 0.51 color rgb <0.0156863, 0.0980392, 0.462745>
]
[ 0.52 color rgb <0.298039, 0.345098, 0.435294>
]
[ 1 color rgb <0.215686, 0.188235, 0.380392>
]
}
}
}
#declare mirror = texture {
finish {
ambient rgb <0.0784314, 0.105882, 0.34902>
diffuse 0.6
brilliance 3
phong 300
phong_size 100
specular 0.5
roughness 0.05
reflection rgb <0.6, 0.662745, 0.717647>
}
pigment {
color rgb <0.392157, 0.415686, 0.458824>
}
}
#declare mirror_dim = texture {
finish {
ambient rgb <0.0784314, 0.105882, 0.34902>
diffuse 0.6
brilliance 3
roughness 0.05
reflection rgb <0.6, 0.662745, 0.717647>
}
pigment {
color rgb <0.392157, 0.415686, 0.458824>
}
}
#declare mirror2 = texture {
crackle
turbulence <0.5, 0.76, 0.8>
texture_map {
[ 0 mirror
]
[ 0.1 mirror
]
[ 0.13 finish {
ambient rgb <0.156863, 0.862745, 0.603922>
}
pigment {
color rgb <0, 0.572549, 0.160784>
}
]
[ 0.16 mirror
]
}
}
#declare mirror3 = texture {
crackle
turbulence <0.1, 0.98, 0.13>
texture_map {
[ 0 mirror_dim
]
[ 0.1 mirror_dim
]
[ 0.13 finish {
ambient rgb <0.156863, 0.862745, 0.603922>
}
pigment {
color rgb <0, 0.572549, 0.160784>
}
]
[ 0.15 mirror_dim
]
}
}
global_settings {
adc_bailout 0.00392157
assumed_gamma 1.5
}
light_source {
<0.69684, 2.83333, -3.90382>, rgb <1, 1, 1>
}
#declare textobj = text {
//*PMName mershell
ttf "/usr/lib/X11/fonts/TTF/Calligra.ttf"
"Mershell"
0.3, <0, 0>
texture {
fence
}
interior {
media {
density {
bozo
turbulence <0.1, 2, 0.5>
warp {
turbulence <0.25, 1, 0.89>
}
color_map {
[ 0 color rgb <0.501961, 0.917647, 0.94902>
]
[ 0.5 color rgb <0.466667, 0.466667, 1>
]
[ 1 color rgb <0.94902, 0.447059, 0.380392>
]
}
}
emission rgb <0.5, 0.5, 1>
}
ior 1.6
}
scale 1
rotate y*45
translate <-0.920553, 1.59743, 0.189526>
hollow
}
#declare fence_0 = texture {
crackle
scale 5
texture_map {
[ 0.09 normal {
bumps
0.25
}
pigment {
granite
pigment_map {
[ 0 color rgb <0.6, 0.6, 0.6>
]
[ 0.5 color rgb <0.717647, 0.658824, 0.623529>
]
[ 1 color rgb <0.423529, 0.396078, 0.380392>
]
}
}
scale 0.1
finish {
ambient rgb <0.176471, 0.176471, 0.176471>
diffuse 0.5
brilliance 4
metallic 1
specular 1
roughness 0.05
reflection rgb <0.486275, 0.486275, 0.486275>
}
]
[ 0.1 pigment {
color rgbft <0, 0, 0, 0.8, 0.8>
}
finish {
}
]
[ 0.45 pigment {
color rgbft <0.737255, 0.737255, 0.737255, 0.2, 0.2>
}
finish {
}
]
[ 0.8 pigment {
color rgbft <0, 0, 0, 0.8, 0.8>
}
finish {
}
]
[ 0.81 normal {
bumps
0.25
}
pigment {
granite
pigment_map {
[ 0 color rgb <0.6, 0.6, 0.6>
]
[ 0.5 color rgb <0.717647, 0.658824, 0.623529>
]
[ 1 color rgb <0.423529, 0.396078, 0.380392>
]
}
}
scale 0.1
finish {
ambient rgb <0.176471, 0.176471, 0.176471>
diffuse 0.5
brilliance 4
metallic 1
specular 1
roughness 0.025
reflection rgb <0.486275, 0.486275, 0.486275>
}
]
}
}
plane {
<0, 1, 0>, -1.09077
texture {
shinyblue
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
plane {
<0, 1, 0>, 3.40923
texture {
fence_0
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
sky_sphere {
pigment {
agate
agate_turb 0.8
color_map {
[ 0 color rgb <0.458824, 0.180392, 0.184314>
]
[ 0.5 color rgb <0.156863, 0.0745098, 0.101961>
]
[ 1 color rgb <0.42, 0.2, 0.15>
]
}
}
}
#declare star = intersection {
cylinder {
<0, 0.5, 0>, <0, 0.3, 0>, 1.5336
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
merge {
box {
<-0.2, 0.51, -1.7>, <0.2, 0.29, 1.7>
scale 1
rotate y*120
translate <0, 0, 0>
}
box {
<-0.2, 0.51, -1.7>, <0.2, 0.29, 1.7>
scale 1
rotate y*60
translate <0, 0, 0>
}
box {
<-0.2, 0.51, -1.7>, <0.2, 0.29, 1.7>
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
}
}
camera {
perspective
location <-1.40748, 2.74671, -3.47222>
sky <0, 1, 0>
direction <0, 0, 1>
right <1.33333, 0, 0>
up <0, 1, 0>
look_at <0.97665, 1.6832, -0.680665>
}
#declare metal1 = texture {
normal {
bumps
0.05
}
pigment {
granite
pigment_map {
[ 0 color rgb <0.6, 0.6, 0.6>
]
[ 0.5 color rgb <0.717647, 0.658824, 0.623529>
]
[ 1 color rgb <0.423529, 0.396078, 0.380392>
]
}
}
scale 0.1
finish {
diffuse 0.3
brilliance 4
metallic 1
specular 1
roughness 0.05
reflection rgb <0.486275, 0.486275, 0.486275>
}
}
#declare greenhaze = interior {
media {
density {
bozo
scale 0.1
}
emission rgb <0.917647, 0.94902, 0.835294>
scattering {
1, rgb <1, 0, 0.0156863>
}
}
}
#declare glass1 = material {
interior {
ior 1.6
}
texture {
pigment {
color rgbft <0.3098, 0.33725, 0.46275, 0.7, 0.7>
}
finish {
diffuse 0.4
specular 0.2
reflection rgb <0.415686, 0.415686, 0.486275>
}
}
}
#declare greenglow = material {
texture {
fence
}
interior {
greenhaze
}
}
#declare diamond = superellipsoid {
<2.5, 2.5>
scale 1
rotate <0, 0, 0>
translate <0.843528, 0.333333, 0.34822>
hollow
}
object {
//*PMName diamond1
diamond
material {
glass1
}
scale 2
rotate <0, 0, 0>
translate <0.122727, 0.28, -0.309468>
}
object {
//*PMName diamond1
diamond
material {
glass1
}
scale 2
rotate <0, 0, 0>
translate <5.78964, 0.28, 4.97454>
}
object {
//*PMName diamond1
diamond
material {
glass1
}
scale 2
rotate <0, 0, 0>
translate <9.006, 0.28, 1.6816>
}
object {
//*PMName diamond1
diamond
material {
glass1
}
scale 2
rotate <0, 0, 0>
translate <2.80303, 0.28, 7.96115>
}
object {
//*PMName diamond2
diamond
texture {
mirror2
translate <5, 5, 5>
}
scale 2
rotate y*(-10)
translate <1.17866, 0.28, 3.45397>
}
object {
//*PMName diamond3
diamond
texture {
mirror3
translate <2, 2, 2>
}
scale 2
rotate y*10
translate <4.18399, 0.28, 0.935986>
}
object {
//*PMName diamond3
diamond
texture {
mirror2
translate <-1, -1, -1>
}
scale 2
rotate y*(-10)
translate <1.23446, 0.28, 13.4378>
}
object {
//*PMName diamond3
diamond
texture {
mirror2
translate <1, 1, 1>
}
scale 2
rotate y*10
translate <8.77923, 0.28, 7.98234>
}
object {
//*PMName diamond3
diamond
texture {
mirror2
translate <0.5, 0.5, 0.5>
}
scale 2
rotate y*10
translate <12.1454, 0.28, 3.91977>
}

View File

@@ -0,0 +1,176 @@
global_settings {
adc_bailout 0.00392157
assumed_gamma 1.5
}
light_source {
<-1.63172, 2.10979, 1.86667>, rgb <1, 1, 1>
}
camera {
perspective
location <-0.133333, 0.0333333, 2.43333>
sky <0, 1, 0>
direction <0, 0, 1>
right <1.33333, 0, 0>
up <0, 1, 0>
look_at <0, 0, 0>
angle 45
}
#declare glass1 = material {
interior {
ior 1.6
}
texture {
finish {
diffuse 0.2
specular 0.2
reflection rgb <0.321569, 0.321569, 0.376471>
}
pigment {
color rgbft <0.376471, 0.411765, 0.560784, 0.8, 0.8>
}
normal {
bumps
0.5
bump_size 1
}
}
}
box {
<-1, -1, -1>, <1, 1, 1>
pigment {
color rgbt <0, 0, 0, 1>
}
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
no_shadow
hollow
}
union {
//*PMName red
//*PMRawBegin
#declare Outer = 2;
#declare Inner = 0.4;
#declare Freq = 20;
#declare Phase = 0;
isosurface {
function { sqrt(pow(y*Outer - Inner*sin(x*Freq + Phase), 2) + pow(z*Outer - Inner*cos(x*Freq + Phase),2) ) }
max_gradient 20
threshold .3
accuracy .00001
}
//*PMRawEnd
pigment {
color rgb <0.890196, 0.258824, 0.270588>
}
finish {
ambient rgb <0.172549, 0.172549, 0.172549>
diffuse 0.62
brilliance 0.9
metallic 1
specular 0.45
roughness 0.06
reflection rgb <0.313725, 0.313725, 0.313725>
}
}
union {
//*PMName blue
//*PMRawBegin
#declare Outer = 2;
#declare Inner = 0.4;
#declare Freq = 20;
#declare Phase = pi;
isosurface {
function { sqrt(pow(y*Outer - Inner*sin(x*Freq + Phase), 2) + pow(z*Outer - Inner*cos(x*Freq + Phase),2) ) }
max_gradient 20
threshold .3
accuracy .00001
}
//*PMRawEnd
pigment {
color rgb <0.0470588, 0.478431, 0.854902>
}
finish {
ambient rgb <0.247059, 0.247059, 0.247059>
diffuse 0.6
brilliance 1
metallic 1
specular 0.5
roughness 0.05
reflection rgb <0.470588, 0.470588, 0.470588>
}
}
union {
//*PMName orange
//*PMRawBegin
#declare Outer = 2;
#declare Inner = 0.9;
#declare Freq = 10;
#declare Phase = pi/2;
isosurface {
function { sqrt(pow(y*Outer - Inner*sin(x*Freq + Phase), 2) + pow(z*Outer - Inner*cos(x*Freq + Phase),2) ) }
max_gradient 20
threshold .3
accuracy .00001
}
//*PMRawEnd
pigment {
color rgb <0.796078, 0.470588, 0.168627>
}
finish {
ambient rgb <0.247059, 0.247059, 0.247059>
diffuse 0.6
brilliance 1
metallic 1
specular 0.5
roughness 0.05
reflection rgb <0.592157, 0.592157, 0.592157>
}
}
union {
//*PMName purple
//*PMRawBegin
#declare Outer = 2;
#declare Inner = 0.9;
#declare Freq = 10;
#declare Phase = 3*pi/2;
isosurface {
function { sqrt(pow(y*Outer - Inner*sin(x*Freq + Phase), 2) + pow(z*Outer - Inner*cos(x*Freq + Phase),2) ) }
max_gradient 20
threshold .3
accuracy .00001
}
//*PMRawEnd
pigment {
color rgb <0.0627451, 0.662745, 0.705882>
}
finish {
ambient rgb <0.247059, 0.247059, 0.247059>
diffuse 0.6
brilliance 1
metallic 1
specular 0.5
roughness 0.05
reflection rgb <0.560784, 0.560784, 0.560784>
}
}

View File

@@ -0,0 +1,300 @@
sky_sphere {
pigment {
color rgb <0.207843, 0.196078, 0.203922>
}
}
global_settings {
adc_bailout 0.00392157
assumed_gamma 1.5
}
light_source {
<-0.398387, 0.50979, 2.5>, rgb <1, 1, 1>
}
camera {
perspective
location <-0.106258, -0.8, 3.60026>
sky <0, 1, 0>
direction <0, 0, 1>
right <1.33333, 0, 0>
up <0, 1, 0>
look_at <0.020949, -0.0333333, 0.0416333>
angle 45
}
//*PMRawBegin
#declare Iso_accuracy = 0.0001;
#declare Outer_Start = 8;
#declare Outer_Peak = 16;
#declare Outer = function(x) { (Outer_Start - Outer_Peak)*x*x + Outer_Peak }
#declare Inner = 0.8;
#declare Freq_Start = 1;
#declare Freq_Peak = 20;
#declare Freq = function(x) { (Freq_Start - Freq_Peak)*x*x + (Freq_Peak) }
//*PMRawEnd
#declare glass1 = material {
interior {
ior 1.6
}
texture {
finish {
diffuse 0.2
specular 0.2
reflection rgb <0.321569, 0.321569, 0.376471>
}
pigment {
color rgbft <0.376471, 0.411765, 0.560784, 0.8, 0.8>
}
normal {
bumps
0.5
bump_size 1
}
}
}
#declare rock = texture {
granite
texture_map {
[ 0 pigment {
color rgb <0.584314, 0.576471, 0.564706>
}
//*PMRawBegin
normal { bumps 1.0 scale 0.07 }
//*PMRawEnd
finish {
ambient rgb <0.180392, 0.180392, 0.180392>
diffuse 0.31
specular 0.2
roughness 0.1
}
]
[ 0.1 pigment {
color rgb <0.572549, 0.560784, 0.533333>
}
//*PMRawBegin
normal { bumps 1.0 scale 0.07 }
//*PMRawEnd
finish {
ambient rgb <0.19, 0.19, 0.19>
diffuse 0.32
specular 0.1
roughness 0.05
}
]
[ 0.2 pigment {
color rgb <0.619608, 0.568627, 0.501961>
}
//*PMRawBegin
normal { bumps 1.0 scale 0.07 }
//*PMRawEnd
finish {
ambient rgb <0.24, 0.24, 0.24>
diffuse 0.3
}
]
[ 0.35 pigment {
color rgb <0, 0, 0>
}
//*PMRawBegin
normal { bumps 1.0 scale 0.07 }
//*PMRawEnd
finish {
ambient rgb <0.2, 0.2, 0.2>
diffuse 0.36
brilliance 0.4
reflection rgb <0.313725, 0.313725, 0.313725>
}
]
[ 0.7 pigment {
color rgb <0.470588, 0.470588, 0.470588>
}
//*PMRawBegin
normal { bumps 1.0 scale 0.07 }
//*PMRawEnd
finish {
ambient rgb <0.17, 0.17, 0.17>
diffuse 0.34
specular 0.2
roughness 0.05
reflection rgb <0.12549, 0.12549, 0.12549>
}
]
[ 1 pigment {
color rgb <0.368627, 0.364706, 0.352941>
}
//*PMRawBegin
normal { bumps 1.0 scale 0.07 }
//*PMRawEnd
finish {
ambient rgb <0.133333, 0.133333, 0.133333>
diffuse 0.3
specular 0.2
roughness 0.005
}
]
}
scale 0.1
}
#declare silver = texture {
pigment {
color rgb <0.819608, 0.890196, 0.788235>
}
finish {
ambient rgb <0.172549, 0.172549, 0.172549>
diffuse 0.62
brilliance 0.9
metallic 1
specular 0.45
roughness 0.06
reflection rgb <0.882353, 0.882353, 0.882353>
}
//*PMRawBegin
normal { bumps 0.3 scale 0.04 }
//*PMRawEnd
}
union {
//*PMName red
//*PMRawBegin
#declare Phase = 0;
isosurface {
function { sqrt(pow(y*Outer(x) - Inner*sin(x*Freq(x) + Phase), 2) + pow(z*Outer(x) - Inner*cos(x*Freq(x) + Phase),2) ) }
max_gradient 125
threshold .3
accuracy Iso_accuracy
}
//*PMRawEnd
//*PMRawBegin
#declare Phase = 0;
isosurface {
function { sqrt(pow(y*Outer(x) - Inner*sin(x*Freq(x) + Phase), 2) + pow(z*Outer(x) - Inner*cos(x*Freq(x) + Phase),2) ) }
max_gradient 125
threshold .3
accuracy Iso_accuracy
rotate <0, 0, 45>
}
//*PMRawEnd
//*PMRawBegin
#declare Phase = 0;
isosurface {
function { sqrt(pow(y*Outer(x) - Inner*sin(x*Freq(x) + Phase), 2) + pow(z*Outer(x) - Inner*cos(x*Freq(x) + Phase),2) ) }
max_gradient 125
threshold .3
accuracy Iso_accuracy
rotate <0, 0, 90>
}
//*PMRawEnd
//*PMRawBegin
#declare Phase = 0;
isosurface {
function { sqrt(pow(y*Outer(x) - Inner*sin(x*Freq(x) + Phase), 2) + pow(z*Outer(x) - Inner*cos(x*Freq(x) + Phase),2) ) }
max_gradient 125
threshold .3
accuracy Iso_accuracy
rotate <0, 0, 135>
}
//*PMRawEnd
pigment {
color rgb <0.819608, 0.890196, 0.788235>
}
finish {
ambient rgb <0.172549, 0.172549, 0.172549>
diffuse 0.62
brilliance 0.9
metallic 1
specular 0.45
roughness 0.06
reflection rgb <0.882353, 0.882353, 0.882353>
}
//*PMRawBegin
normal { bumps 0.45 scale 0.05 }
//*PMRawEnd
}
union {
//*PMName blue
//*PMRawBegin
#declare Phase = pi;
isosurface {
function { sqrt(pow(y*Outer(x) - Inner*sin(x*Freq(x) + Phase), 2) + pow(z*Outer(x) - Inner*cos(x*Freq(x) + Phase),2) ) }
max_gradient 125
threshold .3
accuracy Iso_accuracy
}
//*PMRawEnd
//*PMRawBegin
#declare Phase = pi;
isosurface {
function { sqrt(pow(y*Outer(x) - Inner*sin(x*Freq(x) + Phase), 2) + pow(z*Outer(x) - Inner*cos(x*Freq(x) + Phase),2) ) }
max_gradient 125
threshold .3
accuracy Iso_accuracy
rotate <0, 0, 45>
}
//*PMRawEnd
//*PMRawBegin
#declare Phase = pi;
isosurface {
function { sqrt(pow(y*Outer(x) - Inner*sin(x*Freq(x) + Phase), 2) + pow(z*Outer(x) - Inner*cos(x*Freq(x) + Phase),2) ) }
max_gradient 125
threshold .3
accuracy Iso_accuracy
rotate <0, 0, 90>
}
//*PMRawEnd
//*PMRawBegin
#declare Phase = pi;
isosurface {
function { sqrt(pow(y*Outer(x) - Inner*sin(x*Freq(x) + Phase), 2) + pow(z*Outer(x) - Inner*cos(x*Freq(x) + Phase),2) ) }
max_gradient 125
threshold .3
accuracy Iso_accuracy
rotate <0, 0, 135>
}
//*PMRawEnd
pigment {
color rgb <0.890196, 0.6, 0.286275>
}
finish {
ambient rgb <0.172549, 0.172549, 0.172549>
diffuse 0.62
brilliance 0.9
metallic 1
specular 0.45
roughness 0.06
reflection rgb <0.682353, 0.682353, 0.682353>
}
//*PMRawBegin
normal { bumps 0.5 scale 0.04 }
//*PMRawEnd
}
plane {
<0, 0, 1>, -0.933333
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
texture {
rock
}
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,443 @@
#include "rad_def.inc"
/* Radiosity seems to get rid of photon effects in this scene, at least
if I only use natural lighting (from the skysphere, here) */
#declare Detailed = 1;
#declare Rad = 0;
#declare Sky1 = pigment {
granite
turbulence <0.1, 0.1, 0.1>
omega 0.52
color_map {
[ 0 color rgb <0.670588, 0.794118, 0.780392>
]
[ 0.5 color rgb <0.552941, 0.65098, 0.670588>
]
[ 1 color rgb <0.670588, 0.694118, 0.780392>
]
}
}
sky_sphere {
pigment {
Sky1
}
}
global_settings {
adc_bailout 0.0039216
assumed_gamma 1.5
noise_generator 2
photons {
#if(Detailed)
count 50000
gather 5, 50
#else
count 10000
#end
autostop 0
jitter .4
}
#if(Rad)
radiosity {
Rad_Settings(Radiosity_Default, off, off)
}
#end
}
#if (!Rad)
light_source {
<-0.95792, 1.4554, 1.5166>, rgb <1, 1, 1>
parallel
#if (Detailed & !Rad)
area_light <1, 0.4, 0.2>, <0.2, -0.4, 1>, 6, 6
adaptive 2
jitter
#else
area_light <1, 0.4, 0.2>, <0.2, -0.4, 1>, 2, 2
#end
photons {
refraction on
reflection on
}
}
#end
camera {
perspective
location <0.684467, 1.20461, 0.444912>
sky <0, 1, 0>
direction <0, 0, 1>
right <1.33333, 0, 0>
up <0, 1, 0>
look_at <-0.482067, -0.13609, 0.336985>
}
#declare glass2 = material {
texture {
//*PMRawBegin
normal { bumps 0.05 scale 0.1 }
//*PMRawEnd
finish {
diffuse 0.3
brilliance 0.3
specular 0.4
roughness 0.05
conserve_energy
reflection {
rgb <0.14902, 0.211765, 0.215686>
}
}
pigment {
color rgbft <0.72941, 0.78431, 0.92941, 0.1, 0.8>
}
}
interior {
media {
intervals 1
samples 1,5
emission rgb <0.870588, 0.45098, 0.513725>
}
ior 1.1
caustics 1
}
}
#declare glass1 = material {
interior {
ior 2
}
texture {
pigment {
color rgbft <0.23922, 0.3098, 0.74902, 0.8, 0.6>
}
finish {
ambient rgb <0, 0.027451, 0.282353>
diffuse 0.15
specular 0.2
reflection {
rgb <0.282353, 0.282353, 0.376471>
}
}
}
}
#declare matte_white = texture {
normal { bumps 0.08 scale 0.05 }
finish {
diffuse 0.6
specular 0.5
roughness 0.005
reflection { 0.1 0.6
falloff 5
}
}
pigment { rgb 0.85 }
}
#declare matte_grey = texture {
normal { bumps 0.07 scale 0.05 }
finish {
diffuse 0.5
specular 0.25
roughness 0.005
reflection { 0.2 0.7
falloff 9
}
}
pigment { rgb 0.35 }
}
#declare gloss_white = texture {
finish {
diffuse 0.6
specular 0.25
roughness 0.005
reflection { 0.2 0.7
falloff 9
}
}
pigment {
agate
color_map {
[ 0.0 rgb 0.95 ]
[ 0.5 rgb 0.90 ]
[ 0.55 rgb 0.55 ]
[ 0.60 rgb 0.90 ]
[ 1.00 rgb 0.95 ]
}
}
}
#declare white1 = texture {
finish {
diffuse 0.6
specular 0.5
roughness 0.005
reflection 0.73
}
normal { bumps 0.02 scale 0.1 }
pigment { rgb 0.85 }
}
#declare matte_tan = texture {
normal { bumps 0.07 scale 0.05 }
finish {
diffuse 0.5
specular 0.25
roughness 0.005
reflection { 0.2 0.7
falloff 9
}
}
pigment { rgb <0.76,0.67,0.44> }
}
#declare grey1 = texture {
finish {
diffuse 0.6
specular 0.3
roughness 0.005
reflection 0.63
}
normal { bumps 0.02 scale 0.1 }
pigment { rgb 0.70 }
}
#declare black1 = texture {
finish {
diffuse 0.6
specular 0.2
roughness 0.005
reflection 0.13
}
normal { bumps 0.02 scale 0.1 }
pigment { rgb 0.40 }
}
#declare Grey_amount = 0.1;
#declare Black_amount = 0.05;
#declare positive = texture {
bumps
scale 0.01
texture_map {
[ 0.0 white1 ]
[ (Grey_amount) grey1 ]
[ (2*Grey_amount) white1 ]
[ 0.5 white1 ]
[ (0.5 + Black_amount) black1 ]
[ (0.5 + 2*Black_amount) white1 ]
}
}
#declare negative = texture {
bumps
scale 0.01
texture_map {
[ 0.0 grey1 ]
[ (Grey_amount) black1 ]
[ (2*Grey_amount) grey1 ]
[ 0.5 grey1 ]
[ (0.5 + Black_amount) black1 ]
[ (0.5 + 2*Black_amount) grey1 ]
}
}
#declare rock1 = texture {
finish {
diffuse 0.6
ambient 0.05
phong 0.25
phong_size 100
}
normal { dents 0.5 scale 0.01 }
pigment {
granite
pigment_map {
[ 0.0 rgb <0.646,0.557,0.482> ]
[ 0.3 rgb <0.473,0.420,0.361> ]
[ 0.6 rgb <0.697,0.623,0.537> ]
[ 0.7 rgb <0.148,0.118,0.118> ]
[ 0.8 rgb <0.473,0.420,0.361> ]
[ 1.0 rgb <0.646,0.557,0.482> ]
}
scale 0.25
}
}
#declare rock2 = texture {
finish {
diffuse 0.7
ambient 0.06
phong 0.2
phong_size 75
}
normal { dents 0.6 scale 0.007 }
pigment {
granite
pigment_map {
[ 0.0 rgb <0.696,0.607,0.532> ]
[ 0.3 rgb <0.573,0.470,0.381> ]
[ 0.6 rgb <0.797,0.673,0.557> ]
[ 0.7 rgb <0.448,0.368,0.338> ]
[ 0.8 rgb <0.573,0.470,0.381> ]
[ 1.0 rgb <0.696,0.607,0.532> ]
}
scale 0.25
}
}
#declare tile_pattern = texture {
material_map {
png "/home/hodapp/pov/map1.png"
texture { matte_tan }
texture { matte_white }
}
rotate x*90
rotate y*70
scale 0.5
}
#declare mortar1 = texture {
normal { bumps 0.08 scale 0.05 }
finish {
diffuse 0.8
reflection 0
}
pigment {
granite
color_map {
[0.0 rgb 0.85]
[0.5 rgb 0.35]
[1.0 rgb 0.85]
}
scale 0.1
}
}
#declare hex = texture {
hexagon
texture { matte_white },
texture { matte_grey },
texture { matte_tan }
scale 0.25
}
#declare minx = -3;
#declare minz = -2;
#declare maxx = 2;
#declare maxz = 3;
#declare dx = 0.5;
#declare dz = 0.5;
#declare sx = 0.05;
#declare sz = 0.05;
#declare y1 = 0;
#declare y2 = -0.1;
#declare sy = 0.02;
#declare cx = minx;
union {
#while(cx < maxx)
#declare cz = minz;
#while(cz < maxz)
box { <cx, y1, cz>, <cx+dx, y2, cz+dz> }
#declare cz = cz + dz + sz;
#end
#declare cx = cx + dx + sz;
#end
photons { collect on }
texture { gloss_white }
}
box { <minx, y1 - sy, minz>, <maxx, y2 + sy, maxz>
photons {collect on}
texture { mortar1 }
}
/*
box {
<-3, 0, 3>, <2, -0.1, -2>
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
photons { collect on }
texture {
gloss_white
}
}*/
#declare Teardrop = lathe {
cubic_spline
10,
<-0.069618, 1.9881>, <0, 1.4609>, <0.084975, 1.057>, <0.19148, 0.83258>, <0.28808, 0.66645>, <0.39872, 0.48367>, <0.44644, 0.267513>, <0.308297, 0.0832133>, <0, 0.0375>, <0, 0.0375>
scale 1
rotate x*(-90)
translate <0, 0, 0>
material {
glass1
}
//*PMRawBegin
#if (Detailed)
sturm
#end
photons{
target
collect off
reflection on
refraction on
}
//*PMRawEnd
}
merge {
object {
Teardrop
scale 1
rotate <0, 0, 0>
translate <0, 0, 0>
}
object {
Teardrop
scale 1
rotate x*(-72)
translate <-9.98173e-16, 1.3905, -1.0079>
}
object {
Teardrop
scale 1
rotate x*(-144)
translate <-9.98173e-16, 0.85872, -2.6427>
}
object {
Teardrop
scale 1
rotate x*(-216)
translate <-9.98173e-16, -0.862947, -2.65281>
}
object {
Teardrop
scale 1
rotate x*(-288)
translate <-9.98173e-16, -1.389, -1.008>
}
rotate z*90
scale 0.5
translate <-0.472669, 0.25145, 1.06121>
}

View File

@@ -0,0 +1,491 @@
// 0 = simple gradient skysphere
// 1 = emitting media
#declare sky_type = 1;
// Radiosity looks bad here, probably because I don't know how to use it.
#declare use_radiosity = 0;
// Arbaro
#include "palm.inc"
#include "functions.inc"
#include "rad_def.inc"
#declare invsquare = function { 1 / pow(2, sqrt(x*x + y*y + z*z + 0.01)) }
#declare sinewave = function { sin(x) + sin(y)/2 + 0.5 + sin(z) }
// Screw you, I'm defining my own gradient function... bastards...
// height = y, base = sqrt(x^2+z^2), angle = arctan(opp/adj) = arctan(height/base)
// This is in radians. Horizon is 0 rad, zenith is pi/2 rad.
// This is for a texture map, so let's get that into [0,1] instead of [0,pi/2]
#declare gah = function { atan2(y, sqrt(x*x+z*z)) / (3.14 / 2) }
global_settings {
adc_bailout 0.00392157
assumed_gamma 1.5
noise_generator 2
#if (use_radiosity)
radiosity { Rad_Settings(Radiosity_OutdoorLight, off, off) }
#end
}
#if (sky_type = 0)
sky_sphere {
pigment {
gradient y
//granite
color_map {
[(1-cos(radians( 0)))/2 color rgb <0.5,0,0>]
[(1-cos(radians(45)))/2 color rgb <0.5,0.4,0>]
[(1-cos(radians(90)))/2 color rgb <0.5,0,0>]
}
}
}
#declare sun_vector = <64, 5, 90>;
#declare sun = sphere {
sun_vector * 4 - <0,12,0>, 20
pigment { color rgbt 1 }
interior { media {
emission 0.05
density { bozo density_map {
[0 rgb <1,0.5,0>]
//[0.6 rgb <0,0,0>]
[1 rgb <0,0,0>] }
}
} }
hollow
}
light_source {
sun_vector, rgb <1, 1, 1>
looks_like { sun }
}
object { sun }
#end
#if (sky_type = 1)
#declare sun_vector = <64, 5, 90>;
#declare sun = sphere {
sun_vector*3 - <0,5,0>, 20
pigment { color rgbt 1 }
interior {
media {
emission 0.1
density { bozo density_map {
[0 rgb <1,0.5,0>]
[1 rgb <0,0,0>] }
}
}
}
hollow
}
sky_sphere { pigment { color rgb <1,1,1> } }
light_source {
sun_vector, rgb <1, 1, 1>
}
object { sun }
#if(use_radiosity = 0)
light_source {
<0, 6, 0>, 0.1
shadowless
media_interaction off
}
#end
#declare sky_red = density {
bozo density_map {
[0 rgb 0.6]
[0.2 rgb <0.2, 0.5, 0.5>]
[0.5 rgb <0.0, 0.3, 0.8>]
[0.7 rgb <0.2, 0.3, 0.8>]
[0.8 rgb <0.05, 0.8, 0.9>]
[0.9 rgb <0.2, 0.3, 0.8>]
[1 rgb 0.6]
}
scale <4, 0.8, 4>
}
#declare sky_red2 = density {
bozo density_map {
[0 rgb 0.7]
[0.2 rgb <0.2, 0.6, 0.6>]
[0.5 rgb <0.0, 0.4, 0.9>]
[0.7 rgb <0.2, 0.4, 0.9>]
[0.8 rgb <0.05, 0.9, 1.0>]
[0.9 rgb <0.2, 0.4, 0.9>]
[1 rgb 0.7]
}
scale <4, 1.5, 4>
}
#declare sky_yellow = density {
bozo density_map {
[0 rgb 0.2]
[0.2 rgb <0.14, 0.11, 0.19>]
[0.5 rgb <0.00, 0.06, 0.35>]
[0.6 rgb <0.01, 0.16, 0.14>]
[0.7 rgb <0.04, 0.08, 0.05>]
[0.9 rgb <0.02, 0.12, 0.4>]
[1 rgb 0.2]
}
scale <6, 0.53, 6>
}
#declare sky_yellow2 = density {
bozo density_map {
[0 rgb 0.2]
[0.2 rgb <0.14, 0.21, 0.39>]
[0.5 rgb <0.05, 0.16, 0.45>]
[0.6 rgb <0.11, 0.26, 0.24>]
[0.7 rgb <0.14, 0.18, 0.15>]
[0.9 rgb <0.12, 0.22, 0.5>]
[1 rgb 0.2]
}
scale <9, 0.79, 9>
}
#declare sky_orange = density {
bozo density_map {
[0 rgb<0.05, 0.31, 0.90>]
[0.5 rgb<0.05, 0.24, 0.93>]
[1.0 rgb<0.05, 0.31, 0.90>]
}
scale <6, 0.4, 6>
}
#declare sky_orange_light = density {
bozo density_map {
[0 rgb<0.05, 0.18, 0.80>]
[0.5 rgb<0.09, 0.11, 0.73>]
[1.0 rgb<0.05, 0.18, 0.80>]
}
scale <21, 0.44, 22>
}
#declare sky_gradient = density {
function { gah(x,y,z) } density_map {
//gradient y density_map {
[0 sky_red ]
[0.1 sky_red2 ]
[0.2 sky_orange ]
[0.3 sky_yellow ]
[1.0 sky_orange_light ]
}
scale <1,1,1>
}
sphere {
<0,0,0> 60
translate 15*y
rotate 0
pigment { rgbt 1 }
hollow
interior {
media {
absorption 0.07
density { sky_gradient }
}
}
}
#end
#declare bark = pigment {
onion
//spiral1 1
turbulence 0.7
color_map {
[ 0 color rgb <0.50, 0.42, 0.25> ]
[ 0.2 color rgb <0.55, 0.50, 0.22> ]
[ 0.25 color rgb <0.52, 0.35, 0.25> ]
[ 0.4 color rgb <0.55, 0.50, 0.52> ]
[ 0.5 color rgb <0.52, 0.35, 0.25> ]
[ 1 color rgb <0.50, 0.42, 0.25> ]
}
rotate 100*x + 180*z
scale <1, 0.2, 1>
}
#declare vine_texture = texture {
finish {
//ambient rgbft <0.188235, 0.196078, 0.156863, 0.1, 0.1>
diffuse 0.9
brilliance 1
specular 0.5
roughness 0.0029512
}
pigment {
gradient <1, 1, 1>
turbulence <0.4, 0.4, 0.4>
pigment_map {
[ 0 rgb <0.49, 0.50, 0.22> ]
[ 0.6 bark ]
[ 1.0 rgb <0.49, 0.50, 0.22> ]
}
//rotate z*130
//scale 0.1
}
normal {
gradient <1, 1, 1> 1
turbulence <0.4, 0.4, 0.4>
slope_map {
[ 0 <0, 0> ]
[ 0.6 <0.5, 2> ]
[ 0.9 <0.2, 4> ]
}
rotate z*130
scale 0.1
}
}
#declare leaf = texture {
finish {
brilliance 3
specular 0.4
roughness 0.005
}
pigment {
spotted
turbulence 0.2
color_map {
[0 color rgb <0.10, 0.46, 0.09>]
[0.5 color rgb <0.06, 0.27, 0.05>]
[0.75 color rgb <0.63, 0.68, 0.08>]
[1 color rgb <0.1, 0.46, 0.09>]
}
}
}
#declare palmtree = merge {
object {
palm_13_stems
texture { vine_texture }
}
object {
palm_13_leaves
texture { leaf }
}
}
#declare sand2 = texture {
finish {
ambient rgb <0.19, 0.19, 0.19>
diffuse 0.8
}
//*PMRawBegin
normal { bumps 0.12 scale 0.0001 }
//*PMRawEnd
scale 0.0001
pigment {
granite
turbulence <0.6, 0.6, 0.6>
color_map {
[ 0 color rgb <0.65, 0.62, 0.45> ]
[ 0.1 color rgb <0.19, 0.19, 0.19> ]
[ 0.2 color rgb <0.82, 0.77, 0.70> ]
[ 0.35 color rgb <1, 0.83, 0.64> ]
[ 0.4 color rgb <0.50, 0.50, 0.42> ]
[ 0.7 color rgb <0.25, 0.25, 0.25> ]
[ 1 color rgb <0.47, 0.45, 0.42> ]
}
}
}
#declare sand3 = texture {
finish {
ambient rgb <0.19, 0.19, 0.19>
diffuse 0.8
}
//normal { bumps 0.12 scale 0.0001 }
scale 0.0001
pigment {
granite
turbulence <0.6, 0.6, 0.6>
color_map {
[ 0 color rgb <0.65, 0.62, 0.45> ]
[ 0.1 color rgb <0.39, 0.39, 0.39> ]
[ 0.2 color rgb <0.82, 0.77, 0.70> ]
[ 0.35 color rgb <1, 0.83, 0.64> ]
[ 0.4 color rgb <0.60, 0.55, 0.42> ]
[ 0.7 color rgb <0.65, 0.65, 0.65> ]
[ 1 color rgb <0.57, 0.45, 0.42> ]
}
}
}
#declare sand4_wet = texture {
finish {
ambient 0.02
diffuse 0.4
specular 0.8 roughness 0.0005
reflection <0.14, 0.10, 0.06>
}
normal { bumps 0.12 scale 0.0001 }
scale 0.0001
pigment {
granite
turbulence <0.6, 0.6, 0.6>
color_map {
[ 0 color rgb <0.60, 0.57, 0.40> ]
[ 0.1 color rgb <0.34, 0.34, 0.34> ]
[ 0.2 color rgb <0.77, 0.72, 0.66> ]
[ 0.35 color rgb <0.95, 0.79, 0.60> ]
[ 0.4 color rgb <0.55, 0.51, 0.39> ]
[ 0.7 color rgb <0.61, 0.60, 0.61> ]
[ 1 color rgb <0.52, 0.41, 0.39> ]
}
}
}
#declare sand4 = texture {
finish {
ambient 0.1
diffuse 0.8
specular 0.05 roughness 0.0005
//reflection <0.14, 0.10, 0.06>
}
//normal { bumps 0.12 scale 0.0001 }
scale 0.0001
pigment {
granite
turbulence <0.6, 0.6, 0.6>
color_map {
[ 0 color rgb <0.65, 0.62, 0.45> ]
[ 0.1 color rgb <0.39, 0.39, 0.39> ]
[ 0.2 color rgb <0.82, 0.77, 0.70> ]
[ 0.35 color rgb <1, 0.83, 0.64> ]
[ 0.4 color rgb <0.60, 0.55, 0.42> ]
[ 0.7 color rgb <0.65, 0.65, 0.65> ]
[ 1 color rgb <0.57, 0.45, 0.42> ]
}
}
}
#declare sand = texture {
gradient x + z
texture_map {
[ 0.0 sand4 ]
[ 0.5 sand4 ]
[ 0.65 sand4_wet ]
[ 1.0 sand4_wet ]
}
// Tune these so it starts with the dry sand and gets to its max near
// the water
scale <20,1,20>
translate <-3,0,-3>
}
#declare sky1 = texture {
pigment {
bozo
turbulence <1, 0, 1>
scale <2, 1, 0.5>
pigment_map {
[ 0 color rgbt <0.19216, 0.14902, 0.21569, 0.8> ]
[ 0.3 color rgbt <0.533333, 0.301961, 0.690196, 0.2> ]
[ 0.6 color rgbt <0.21569, 0.16863, 0.23922, 0.8> ]
}
}
finish {
ambient rgb <0.24314, 0.24314, 0.24314>
diffuse 0
}
}
#declare water = material {
texture {
pigment {
color rgbf <0.7, 0.4, 0.9, 0.6>
}
finish {
ambient 0.0
diffuse 0.0
reflection {
0.0, 1.0
fresnel on
}
specular 0.4
roughness 0.003
}
normal {
function {
f_ridged_mf(x, y, z, 0.1, 3.0, 7, 0.7, 0.7, 2)
} 0.8
scale 0.5
}
}
interior {
ior 1.3
}
}
#declare xmin = -8;
#declare zmin = -8;
#declare xscale = 64;
#declare zscale = 64;
#declare xcount = 8;
#declare zcount = 8;
#declare r = <6,0,-5.5>;
#declare height = 6;
// Y start
#declare y1 = -2;
#declare sandfloor = height_field {
png "/home/hodapp/geomorph/floor1.png"
smooth
}
#declare cx = 0;
#while (cx < xcount)
#declare cz = 0;
#while (cz < zcount)
object {
sandfloor
scale <xscale, height, zscale>
translate <xmin + cx * xscale, y1, zmin + cz * zscale>
rotate r
texture { sand }
}
#declare cz = cz + 1;
#end
#declare cx = cx + 1;
#end
box {
<xmin, -0.75, zmin>,
<xmin + xscale * xcount, -3, zmin + zscale * zcount>
material { water }
}
object {
palmtree
rotate 90*y
scale 0.25
translate <0.5,0.5,-0.5>
}
light_source {
<-0.5, 0.25, -1.5>, 0.1
shadowless
media_interaction off
}
camera {
perspective
location <-2.5, 3, -2.5>
sky <0, 1, 0>
direction <0, 0, 1>
right <1.33333, 0, 0>
up <0, 1, 0>
look_at <0, 2.5, 0>
}

View File

@@ -0,0 +1,200 @@
global_settings {
max_trace_level 100
adc_bailout 1/255
}
camera {
perspective
location <0, 1, -6>
sky <0, 1, 0>
direction <0, 0, 1>
right <1.33333, 0, 0>
up <0, 1, 0>
look_at <0, 0, 0>
}
light_source {
<0, 2.5, -2.5>, 0.9
}
// x1,x2 = endpoints of cylinder
// dx = length of each block
// sx = x spacing between each block
// r = radius to center of block
// height = size of block
// dz = Z size
// copies = copies of block per section
// ph = phase, given in terms of _amount of ONE BLOCK_
// shear1,shear2 = start and end values for Z-shearing (linear)
#macro Make_Blocked_Cylinder_Corrected(x1, x2, dx, sx, r, height, dz, copies, ph, shear1, shear2)
#local arc = 360/copies;
#local start = arc * ph;
#local cx = x1;
// Linear formula thingy, y=mx+b
#local m = (shear1 - shear2) / (x1 - x2);
#local b = shear1 - m * x1;
#local step = 0;
#while (cx <= x2)
#local shear = m * cx + b;
#local i = 0;
#while (i < copies)
box {
< 0, -height/2, -dz/2>,
< dx, height/2, dz/2>
matrix <1,0,shear,
0,1,0,
0,0,1,
0,0,0>
translate <cx, r, 0>
rotate <i * arc + start + step, 0, 0>
}
#local i = i + 1;
#end
#local cx = cx + dx + sx;
//#debug "\nStep: "
//#debug str(, 0, -1)
#local step = step + degrees(atan2(shear,r));
#end
#end
#declare outer_red = texture {
pigment { rgbft<0.3, 0.3, 0.7, 0.4, 0.3> }
finish {
ambient 0.7
specular 0.25
roughness 0.02
}
}
#declare outer_cyan = texture {
pigment { rgbft<0.5, 0.8, 0.9, 0.3, 0.5> }
finish {
ambient 0.4
specular 0.25
roughness 0.02
}
}
#declare med_red = texture {
pigment { rgbft<0.2, 0.2, 0.8, 0.1, 0.2> }
finish {
ambient 0.4
specular 0.25
roughness 0.05
}
}
#declare med_orange = texture {
pigment { rgbft<0.2, 0.5, 0.8, 0.1, 0.2> }
finish {
ambient 0.45
specular 0.20
roughness 0.05
}
}
#declare inner_yellow = texture {
pigment { rgbft<0.4, 0.8, 0.9, 0.0, 0.0> }
finish {
ambient 0.6
specular 0.35
roughness 0.02
//reflection 0.3
}
}
#declare inner_red = texture {
pigment { rgbft<0.0, 0.0, 0.8, 0.0, 0.0> }
finish { ambient 0.8 }
}
#declare core_red = texture {
pigment { rgbft<0.1, 0.6, 1.0, 0.0, 0.0> }
finish { ambient 1.0 }
}
#declare glow = material {
texture { pigment { rgbt 1 } }
interior {
media {
emission 2
density {
bozo density_map {
[0 rgb<0.2, 0.7, 0.8>]
[0.35 rgb<0, 0.4, 0.9>]
[0.5 rgb 0]
[0.65 rgb<0, 0.4, 0.9>]
[1.0 rgb<0.2, 0.7, 0.8>]
}
scale 1
}
}
}
}
// Make_Blocked_Cylinder_Corrected(x1, x2, dx, sx, r, height, dz, copies, ph, shear_start, shear_end)
union { Make_Blocked_Cylinder_Corrected(-4, 4, 0.8, 0.02, 2.4, 0.1, 0.4, 16, 0, -1, 0)
texture { outer_red } }
union { Make_Blocked_Cylinder_Corrected(-4, 4, 0.8, 0.02, 2.4, 0.1, 0.4, 16, 0.5, -1, 0)
texture { outer_cyan } }
union { Make_Blocked_Cylinder_Corrected(-4, 4, 0.8, 0.1, 2.0, 0.1, 0.2, 12, 0, 0, 1)
texture { med_red } }
// union { Make_Blocked_Cylinder_Corrected(-4, 4, 0.8, 0.1, 2.0, 0.1, 0.3, 12, 0.5, 0, 1)
// texture { med_orange } }
union { Make_Blocked_Cylinder_Corrected(-3.6, 4.4, 0.75, 0.07, 1.8, 0.03, 0.2, 11, 0, -1, -0)
texture { inner_yellow } }
// union { Make_Blocked_Cylinder_Corrected(-4, 4, 0.2, 0.01, 1.6, 0.1, 0.05, 32, 0, -1.5, -1.4)
// texture { inner_red } }
union { Make_Blocked_Cylinder_Corrected(-3.9, 4.1, 0.2, 0.01, 1.4, 0.1, 0.05, 23, 0, 1.1, 1.2)
texture { core_red } }
cylinder {
<-5, 0, 0>, <5, 0, 0>, 1.2
hollow
material { glow }
}
#macro Crazy_Tile(x1, x2, z1, z2, dx, dz, sx, sz, height, xz_sh1, xz_sh2, zx_sh1, zx_sh2, tex1, tex2)
#local cx = x1;
// Linear formula thingy, y=mx+b
#local xz_m = (xz_sh1 - xz_sh2) / (z1 - z2);
#local xz_b = xz_sh1 - xz_m * z1;
#local zx_m = (zx_sh1 - zx_sh2) / (x1 - x2);
#local zx_b = zx_sh1 - zx_m * x1;
#local tex = 0;
#while (cx < x2)
#local cz = z1;
// #if (tex = 0) #local tex = 1;
// #else #local tex = 0;
// #end
#while (cz < z2)
#local z_shift = 0;
#local x_shift = 0;
#if (tex = 0) #local tex = 1;
#else #local tex = 0;
#end
box {
#local x_shear = zx_m*cx + zx_b;
#local z_shear = xz_m*cz + xz_b;
<0, 0, 0>, <dx, height, dz>
matrix < 1, 0, z_shear,
0, 1, 0,
x_shear, 0, 1
0, 0, 0 >
translate <cx + x_shift, 0, cz + z_shift>
#if (tex=0) texture { tex1 }
#else texture { tex2 }
#end
#local x_shift = x_shift + x_shear * dz;
#local z_shift = z_shift + z_shear * dx;
}
#local cz = cz + dz + sz;
#end
#local cx = cx + dx + sx;
#end
#end
#declare t1 = texture { pigment { rgb<1, 0.5, 0.5> } }
#declare t2 = texture { pigment { rgb<0.5, 0.5, 1> } }
// union {
// Crazy_Tile(-5, 5, -5, 5, 0.5, 0.5, 0.05, 0.05, 0.5, 0.5, -1.5, -1.5, 1.5, t1, t2)
// //rotate -45*x
// translate -*y
// }

View File

@@ -0,0 +1,27 @@
startshape MAIN
# This is a pretty complex shape. 1370x1034 produced 476K shapes.
background { b -1 }
rule MAIN {
CASCADE_DEEP{ sat 0.5 hue 120 b 1 }
}
rule CASCADE_DEEP {
CURVE1 { r 0 }
CASCADE_DEEP { x 1 flip 0 r 0 s 0.32 sat 0.2 hue 0 b -0.1 }
CASCADE_DEEP { x 0 y 0.15 s 0.9 r 10 sat 0.0 hue 2.5 }
}
rule CASCADE2 {
CURVE1 { r 0 }
CASCADE2 { flip 0 r 2 s 0.12}
CASCADE2 { x 0.05 y 0.23 s 0.975 r 9 }
}
path CURVE1 {
ARCTO { x 1 y 0 r 0.2 }
STROKE { p roundcap width 0.01 }
}

View File

@@ -0,0 +1,37 @@
startshape Main
background { b -1 }
rule Main {
#12 * { h 30 a -0.1 } Hex { b 0.1 sat 0 }
ChangeColor { }
}
rule ChangeColor 1 {
4 * { h 10 r 90 a -0.01 } Hex { b 0.1 sat 0 a -0.4 }
}
rule ChangeColor 200 {
ChangeColor { h 10 }
}
rule Hex {
1 * { r 60 x 0.5 y 0.333 h 10 } Section { }
}
rule Section 2 {
TRIANGLE { }
Section { s 0.9 b 0.1 y 0.1 r 10 sat -0.1 h 0.5 }
}
rule Section 1 {
TRIANGLE { }
Section { s 1.1 b -0.1 y -0.2 r 20 h -0.5 }
}
rule Section 2 {
TRIANGLE { }
Section { s 0.9 b -0.1 x 0.3 r -10 sat 0.1 h 1 }
}
rule Section 1 {
TRIANGLE { }
Section { s 1.1 b 0.1 x -0.2 r -10 h -1 }
}

Binary file not shown.

View File

@@ -0,0 +1,6 @@
This directory is something of a placeholder for larger assets than
should be committed into git along with everything else. It might
eventually be absorbed into something like git-lfs, or it might move
to some other format.
For now: Don't commit things here into git, just sync them manually.

View File

@@ -0,0 +1,52 @@
---
title: Retrospect on Foresight
author: Chris Hodapp
date: January 8, 2018
tags: technobabble, rambling
---
/(Spawned from some idle thoughts around the summer of 2015.)/
Why are old technological ideas that were "ahead of their time", but
which lost out to other ideas, worth studying?
We can see them as raw ideas that "modern" understanding never
refined - misguided fantasies or even just mistakes. The flip side of
this is that we can see them as ideas that are free of a nearly
inescapable modern context and all of the preconceptions and blinders
it carries.
In some of these visionaries is a valuable combination:
- they're detached from this modern context (by mere virtue of it not
existing yet),
- they have considerable experience, imagination, and foresight,
- they devoted time and effort to work extensively on something and to
communicate their thoughts, feelings, and analysis in a durable way.
To put it in another way: They give us analysis done from a context
that is long gone. They help us think beyond our current context.
They help us answer a question, "What if we took a different path
then?"
[[http://www.cs.yale.edu/homes/perlis-alan/quotes.html][Epigram #53]] from Alan Perlis offers some relevant skepticism here: "So
many good ideas are never heard from again once they embark in a
voyage on the semantic gulf." My interpretation of it is that we tend
to idolize ideas, old and new, because they sound somehow different,
innovative, and groundbreaking, but attempts at analysis or practical
realization of the ideas leads to a bleaker reality, perhaps that the
idea is completely meaningless (the equivalent of a [[https://en.wiktionary.org/wiki/deepity][deepity]], perhaps),
wildly impractical, or a mere facade over what is already established.
* Examples
* Scratch
- Douglas Engelbart is perhaps one of the canonical examples of a person
who was an endless source of these ideas. Ted Nelson arguably is
another. Alan Turing is an early example widely regarded for his
foresight.
- [[https://www.theatlantic.com/magazine/archive/1945/07/as-we-may-think/303881/][As We May Think (Vannevar Bush)]]
- "Do you remember a time when..." only goes so far.
# Tools For Thought

View File

@@ -0,0 +1,376 @@
#+TITLE: Modularity & Abstraction (working title)
#+AUTHOR: Chris Hodapp
#+DATE: April 20, 2017
#+TAGS: technobabble
# Why don't I turn this into a paper for arXiv too? It can still be
# posted to the blog (just also make it exportable to LaTeX perhaps)
_Modularity_ and _abstraction_ feature prominently wherever computers
are involved. This is meant very broadly: it applies to designing
software, using software, integrating software, and to a lot of
hardware as well. It applies elsewhere, and almost certainly
originated elsewhere first, however, it appears especially crucial
around software.
Definitions, though, are a bit vague (including anything in this
post). My goal in this post isn't to try to (re)define them, but to
explain their essence and expand on a few theses:
- Modularity arises naturally in a wide array of places.
- Modularity and abstraction are intrinsically connected.
- Both are for the benefit of people. This usually doesn't need
stated, but to echo Paul Graham and probably others: to the
computer, it is all the same.
- More specifically, both are there to manage *complexity* by
assigning meaningful information and boundaries which allow people
to match a problem to what they can actually think about.
# - Whether a given modularization makes sense depends strongly on
# meaning and relevance of *information* inside and outside of
# modules, and broad context matters to those.
* Why?
People generally agree that "modularity" is good. The idea that
something complex can be designed and understood in terms of smaller,
simpler pieces comes naturally to anyone that has built something out
of smaller pieces or taken something apart. (This isn't to say that
reductionism is the best way to understand everything, but that's
another matter.) It runs very deep in the Unix philosophy, which ESR
gives a good overview of in [[http://www.catb.org/~esr/writings/taoup/html/ch01s06.html][The Art of Unix Programming]] - or, listen
to it from [[https://youtu.be/tc4ROCJYbm0?t%3D248][Kernighan himself]] at Bell Labs in
1982.
Tim Berners-Lee gives some practical limitations in [[https://www.w3.org/DesignIssues/Principles.html][Principles of
Design]] and in [[https://www.w3.org/DesignIssues/Modularity.html][Modularity]]: "Modular design hinges on the simplicity and
abstract nature of the interface definition between the modules. A
design in which the insides of each module need to know all about each
other is not a modular design but an arbitrary partitioning of the
bits... It is not only necessary to make sure your own system is
designed to be made of modular parts. It is also necessary to realize
that your own system, no matter how big and wonderful it seems now,
should always be designed to be a part of another larger system." Les
Hatton in [[http://www.leshatton.org/TAIC2008-29-08-2008.html][The role of empiricism in improving the reliability of
future software]] even did an interesting derivation tying the defect
density in software to how it is broken into pieces. The 1972 paper
[[https://www.cs.virginia.edu/~eos/cs651/papers/parnas72.pdf][On the Criteria to be Used in Decomposing System into Modules]] cites a
1970 textbook on why modularity is important in systems programming,
but also notes that nothing is said on how to divide a systems into
modules.
"Abstraction" doesn't have quite the same consensus. In software, it's
generally understood that decoupled or loosely-coupled is better than
tightly-coupled, but at the same time, "abstraction" can have the
connotation of something that gets in the way, adds overhead, and
confuses things. Dijkstra, in one of few instances of not being
snarky, allegedly said, "Being abstract is something profoundly
different from being vague. The purpose of abstraction is not to be
vague, but to create a new semantic level in which one can be
absolutely precise." Joel Spolsky, in one of few instances of me
actually caring what he said, also has a blog post from 2002 on the
[[https://www.joelonsoftware.com/2002/11/11/the-law-of-leaky-abstractions/][Law of Leaky Abstractions]] ("All non-trivial abstractions, to some
degree, are leaky.") The [[https://en.wikipedia.org/wiki/Principle_of_least_privilege][principle of least privilege]] is likewise a
thing. So, abstraction too has its practical and theoretical
limitations.
* How They Relate
I bring these up together because: *abstractions* are the boundaries
between *modules*, and the communication channels (APIs, languages,
interfaces, protocols) through which they talk. It need not
necessarily be a standardized interface or a well-documented boundary,
though that helps.
Available abstractions vary. They vary by, for instance:
- ...what language you choose. Consider, for instance, that a language
like Haskell contains various abstractions done largely within the
type system that cannot be expressed in many other languages.
Languages like Python, Ruby, or JavaScript might have various
abstractions meaningful only in the context of dynamic typing. Some
languages more readily permit the creation of new abstractions, and
this might lead to a broader range of abstractions implemented in
libraries.
- ...the operating system and its standard library. What is a
process? What is a thread? What is a dynamic library? What is a
filesystem? What is a file? What is a block device? What is a
socket? What is a virtual machine? What is a bus? What is a
commandline?
- ...the time period. How many of the abstractions named above were
around or viable in 1970, 1980, 1990, 2000? In the opposite
direction, when did you last use that lovely standardized protocol,
[[https://en.wikipedia.org/wiki/Common_Gateway_Interface][CGI]], to let your web application and your web server communicate,
use [[https://en.wikipedia.org/wiki/PHIGS][PHIGS]] to render graphics, or access a large multiuser system
via hard-wired terminals?
As such: Possible ways to modularize things vary. It may make no
sense that certain ways of modularization even can or should exist
until it's been done other ways hundreds or thousands of times.
Other terms are related too. "Loosely-coupled" (or loose coupling)
and "tightly-coupled" refer to the sort of abstractions sitting
between modules, or whether or not there even are separate modules.
"Decoupling" involves changing the relationship between modules
(sometimes, creating them in the first place), typically splitting
things into two more sensible pieces that a more sensible abstraction
separates. "Factoring out" is really a form of decoupling in which
smaller parts of something are turned into a module which the original
thing then interfaces with (one canonical example is taking some bits
of code, often that are very similar or identical in many places, and
moving them into a single function). To say one has "abstracted over"
some details implies that a module is handling those details, that the
details shouldn't matter, and what does matter is the abstraction one
is using.
One of Rich Hickey's favorite topics is *composition*, and with good
reason (and you should check out [[http://www.infoq.com/presentations/Simple-Made-Easy/][Simple Made Easy]] regardless). This
relates as well: to *compose* things together effectively into bigger
parts requires that they support some common abstraction.
In the same area, [[https://clojurefun.wordpress.com/2012/08/17/composition-over-convention/][Composition over convention]] is a good read on how
/frameworks/ run counter to modularity: they aren't built to behave
like modules of a larger system.
# -----
It has a very pragmatic reason behind it: When something is a module
unto itself, presumably it is relying on specific abstractions, and it
is possible to freely change this module's internal details (provided
that it still respects the same abstractions), to move this module to
other contexts (anywhere that provides the same abstractions), and to
replace it with other modules (anything that respects the same
abstractions).
It also has a more abstract reason: When something is a module unto
itself, the way it is designed and implemented usually presents more
insight into the fundamentals of the problem it is solving. It
contains fewer incidental details, and more essential details.
# -------
* Information
I referred earlier to the abstractions themselves as both boundaries
and communications channels. Another common view is that abstractions
are *contracts* with a communicated and agreed purpose, and I think
this is a useful definition too: it conveys the notion that there are
multiple parties involved and that they are free to behave as needed
provided that they fulfill some obligation
Some definitions refer directly to information, like the [[https://en.wikipedia.org/wiki/Abstraction_principle_(computer_programming)][abstraction
principle]] which aims to reduce duplication of information which fits
with [[https://en.wikipedia.org/wiki/Don%2527t_repeat_yourself][don't repeat yourself]] so that "a modification of any single
element of a system does not require a change in other logically
unrelated elements".
# ----- FIXME
Consider the information this module deals in, in essence.
What is the most general form this information could be expressed in,
without being so general as to encompass other things that are
irrelevant or so low-level as to needlessly constrain the possible
contexts?
(Aristotle's theory of definitions?)
* Less-Conventional Examples
One thing I've watched with some interest is when new abstractions
emerge (or, perhaps, old ones become more widespread) to solve
problems that I wasn't even aware existed.
[[https://circleci.com/blog/it-really-is-the-future/][It really is the future]] talks about a lot of more recent forms of
modularity from the land of devops, most of which were completely
unheard-of in, say, 2010. [[https://www.functionalgeekery.com/episode-75-eric-b-merritt/][Functional Geekery episode 75]] talks about
many similar things.
[[https://jupyter.org/][Jupyter Notebook]] is one of my favorites here. It provides a notebook
interface (similar to something like Maple or Mathematica) which:
- allows the notebook to use various different programming languages
underneath,
- decouples where the notebook is used and where it is running, due to
being implemented as a web application accessed through the browser,
- decouples the presentation of a stored notebook from Jupyter itself
by using a [[https://nbformat.readthedocs.io/en/latest/][JSON-based file format]] which can be rendered without
Jupyter (like GitHub does if you commit a .ipynb file).
I love notebook interfaces already because they simplify experimenting
by handling a lot of things I'd otherwise have to do manually - like
saving results and keeping them lined up with the exact code that
produced them. Jupyter adds some other use-cases I find marvelous -
for instance, I can let the interpreter run on my workstation which
has all of the computing power, but I can access it across the
Internet from my laptop.
[[https://zeppelin.apache.org/][Apache Zeppelin]] does similar things with different languages; I've
just used it much less.
Another favorite of mine is [[https://nixos.org/nix/][Nix]]. One excellent article, [[http://blog.ezyang.com/2014/08/the-fundamental-problem-of-programming-language-package-management/][The
fundamental problem of programming language package management]],
doesn't ever mention Nix but explains very well the problems it sets
out to solve. To be able to combine nearly all of the
programming-language specific package managers into a single module is
a very lofty goal, but Nix appears to do a decent job of it (among
other things).
The [[https://www.lua.org/][Lua]] programming language is noteworthy here. It's written in
clean C with minimal dependencies, so it runs nearly anywhere that a C
or C++ compiler targets. It's purposely very easy both to *embed*
(i.e. to put inside of a program and use as an extension language,
such as for plugins or scripting) and to *extend* (i.e. to connect
with libraries to allow their functionality to be used from Lua). [[https://www.gnu.org/software/guile/][GNU
Guile]] has many of the same properties, I'm told.
We ordinarily think of object systems as something living in the
programming language. However, the object system is sometimes made a
module that is outside of the programming language, and languages just
interact with it. [[https://en.wikipedia.org/wiki/GObject][GObject]], [[https://en.wikipedia.org/wiki/Component_Object_Model][COM]], and [[https://en.wikipedia.org/wiki/XPCOM][XPCOM]] do this, and to some
extent, so does [[https://en.wikipedia.org/wiki/Meta-object_System][Qt & MOC]] - and there are probably hundreds of others,
particularly if you allow dead ones created during the object-oriented
hype of the '90s. This seems to happen in systems where the object
hierarchy is in effect "bigger" than the language.
[[https://zeromq.org/][ZeroMQ]] is another example: a set of cross-language abstractions for
communication patterns in a distributed system. I know it's likely
not unique, but it is one of the better-known and the first I thought
of, and I think their [[http://zguide.zeromq.org/page:all][guide]] is excellent.
Interestingly, the same iMatix behind ZeroMQ also created [[https://github.com/imatix/gsl][GSL]] and
explained its value in [[https://imatix-legacy.github.io/mop/introduction.html][Model-Oriented Programming]], for which
abstraction features heavily. I've not used GSL, and am skeptical of
its stated usefulness, but it looks like it is meant to help create
compile-time abstractions that likewise sit outside of any particular
programming language.
# TODO: Expand on this.
[[https://web.hypothes.is/][hypothes.is]] is a curious one that I find fascinating. They're trying
to factor out annotation and commenting from something that is handled
on a per-webpage basis and turn it into its own module, and I really
like what I've seen. However, it does not seem to have caught on
much.
The Unix tradition lives on in certain modern tools. [[https://stedolan.github.io/jq/][jq]] has proven
very useful anytime I've had to mess with JSON data. [[http://www.dest-unreach.org/socat/][socat]] and [[http://netcat.sourceforge.net/][netcat]]
have saved me numerous times. I'm sure certain people love the fact
that [[https://neovim.io/][Neovim]] is designed to be seamlessly embedded and to extend with
plugins. [[https://suckless.org/philosophy][suckless]] perhaps takes it too far, but gets an honorary
mention...
# ???
# Also, TCP/IP and the entire notion of packet-switched networks.
# And the entire OSI 7-layer model.
# Also, caches - of all types. (CPU, disk...)
# One key is how the above let you *reason* about things without
# knowing their specifics.
People know that I love Emacs, but I also do believe many of the
complaints on how large it is. Despite that it is basically its own
operating system, /within this/ it has considerable modularity. The
same applies somewhat to Blender, I suppose.
Consider [[https://research.google.com/pubs/pub43146.html][Machine Learning: The High Interest Credit Card of Technical Debt]],
a paper that anyone working around machine learning should read and
re-read regularly. Large parts of the paper are about ways in which
machine learning conflicts with proper modularity and abstraction.
(However, [[https://colah.github.io/posts/2015-09-NN-Types-FP/][Neural Networks, Types, and Functional Programming]] is still
a good post and shows some sorts of abstraction that still exist
at least in neural networks.)
Even DOS had useful abstractions. Things like
DriveSpace/DoubleSpace/Stacker worked well enough because most
software that needed files relied on DOS's normal abstractions to
access them - so it did not matter to them that the underlying
filesystem was actually compressed, or was actually a RAM disk, or was
on some obscure SCSI interface. Likewise, for the silliness known as
[[https://en.wikipedia.org/wiki/Expanded_memory][EMS]], applications that accessed memory through the EMS abstraction
could disregard whether it was a "real" EMS board providing access to
that memory, whether it was an expanded memory manager providing
indirect access to some other memory or even to a hard disk pretending
to be memory.
Even more abstractly: emulators work because so much software
respected the abstraction of some specific CPU and hardware platform.
Submitted without further comment:
https://github.com/stevemao/left-pad/issues/4
* Fragments
- Abstracting over...
- Multiple applications
- Multiple users
- Multiple CPUs
- Multiple hosts
- [[Notes - Paper, 2016-11-13]]
- Tanenbaum vs. Linus war & microkernels
- TBL: "The choice of language is a common design choice. The low
power end of the scale is typically simpler to design, implement and
use, but the high power end of the scale has all the attraction of
being an open-ended hook into which anything can be placed: a door
to uses bounded only by the imagination of the programmer. Computer
Science in the 1960s to 80s spent a lot of effort making languages
which were as powerful as possible. Nowadays we have to appreciate
the reasons for picking not the most powerful solution but the least
powerful. The reason for this is that the less powerful the
language, the more you can do with the data stored in that
language. If you write it in a simple declarative from, anyone can
write a program to analyze it in many ways." (Languages are a kind
of abstraction - one that influences how a module is written, and
what contexts it is useful in.)
- "Self" paper & structural reification?
- I'm still not sure how this relates, but it may perhaps relate to
how *not* to make things modular (structural reification is a sort
of check on the scope of objects/classes)
- What by Rich Hickey?
- Simple Made Easy?
- The Value of Values?
- SICP: [[https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-19.html#%25_chap_3][Modularity, Objects, and State]]
- [[https://www.cs.utexas.edu/~wcook/Drafts/2009/essay.pdf][On Understanding Data Abstraction, Revisited]]
- http://www.catb.org/~esr/writings/taoup/html/apb.html#Baldwin-Clark -
Carliss Baldwin and Kim Clark. Design Rules, Vol 1: The Power of
Modularity. 2000. MIT Press. ISBN 0-262-024667.
- Brooks, No Silver Bullet?
- https://en.wikipedia.org/wiki/Essential_complexity
- https://twitter.com/fchollet/status/962074070513631232
- [[https://mitpress.mit.edu/sites/default/files/sicp/full-text/book/book-Z-H-9.html#%25_chap_1][From SICP chapter 1 intro]]: "The acts of the mind, wherein it exerts
its power over simple ideas, are chiefly these three: 1. Combining
several simple ideas into one compound one, and thus all complex
ideas are made. 2. The second is bringing two ideas, whether simple
or complex, together, and setting them by one another so as to take
a view of them at once, without uniting them into one, by which it
gets all its ideas of relations. 3. The third is separating them
from all other ideas that accompany them in their real existence:
this is called abstraction, and thus all its general ideas are
made." -John Locke, An Essay Concerning Human Understanding (1690)
- One point I have ignored (maybe): You clearly separate the 'inside'
of a module (its implementation) from the 'outside' (that is - its
boundaries, the abstractions that it interfaces with or that it
implements) so that the 'inside' can change more or less freely
without having any effect on the outside.
- Abstractions as a way of reducing the work required to add
functionality (changes can be made just in the relevant modules, and
other modules do not need to change to conform)
- What is more key? Communication, information content, contracts,
details?
- [[https://en.wikipedia.org/wiki/Don%2527t_repeat_yourself][Don't repeat yourself]]
- [[https://simplyphilosophy.org/study/aristotles-definitions/][Aristotle & theory of definitions]]
- this isn't right. I need to find the quote in the Durant book
(which will probably have an actual source) that pertains to how
specific and how general a definition must be
- [[https://en.wikipedia.org/wiki/SOLID][SOLID]]
- [[https://en.wikipedia.org/wiki/Cross-cutting_concern][Cross-cutting concerns]] and [[https://en.wikipedia.org/wiki/Aspect-oriented_programming][Aspect-oriented programming]]
- [[https://en.wikipedia.org/wiki/Separation_of_concerns][Separation of Concerns]]
- [[https://en.wikipedia.org/wiki/Abstraction_principle_(computer_programming)][Abstraction principle]]
- [[https://en.wikipedia.org/wiki/Don%2527t_repeat_yourself][Don't repeat yourself]]

View File

@@ -0,0 +1,368 @@
---
title: Explaining RetinaNet
author: Chris Hodapp
date: December 13, 2017
tags: technobabble
---
# Above uses style from https://github.com/turboMaCk/turboMaCk.github.io/blob/develop/posts/2016-12-21-org-mode-in-hakyll.org
# and https://turbomack.github.io/posts/2016-12-21-org-mode-in-hakyll.html
# description:
# subtitle:
A paper came out in the past few months,
[[https://arxiv.org/abs/1708.02002][Focal Loss for Dense Object Detection]], from one of
Facebook's teams. The goal of this post is to
explain this paper as I work through it, through some of its
references, and one particular [[https://github.com/fizyr/keras-retinanet][implementation in Keras]].
* Object Detection
"Object detection" as it is used here refers to machine learning
models that can not just identify a single object in an image, but can
identify and *localize* multiple objects, like in the below photo
taken from
[[https://research.googleblog.com/2017/06/supercharge-your-computer-vision-models.html][Supercharge your Computer Vision models with the TensorFlow Object Detection API]]:
# TODO:
# Define mAP
#+CAPTION: TensorFlow object detection example 2.
#+ATTR_HTML: :width 100% :height 100%
[[../images/2017-12-13-retinanet/2017-12-13-objdet.jpg]]
At the time of writing, the most accurate object-detection methods
were based around R-CNN and its variants, and all used two-stage
approaches:
1. One model proposes a sparse set of locations in the image that
probably contain something. Ideally, this contains all objects in
the image, but filters out the majority of negative locations
(i.e. only background, not foreground).
2. Another model, typically a CNN (convolutional neural network),
classifies each location in that sparse set as either being
foreground and some specific object class (like "kite" or "person"
above), or as being background.
Single-stage approaches were also developed, like [[https://pjreddie.com/darknet/yolo/][YOLO]], [[https://arxiv.org/abs/1512.02325][SSD]], and
OverFeat. These simplified/approximated the two-stage approach by
replacing the first step with brute force. That is, instead of
generating a sparse set of locations that probably have something of
interest, they simply handle all locations, whether or not they likely
contain something, by blanketing the entire image in a dense sampling
of many locations, many sizes, and many aspect ratios.
This is simpler and faster - but not as accurate as the two-stage
approaches.
Methods like [[https://arxiv.org/abs/1506.01497][Faster R-CNN]] (not to be confused with Fast R-CNN... no, I
didn't come up with these names) merge the two models of two-stage
approaches into a single CNN, and exploit the possibility of sharing
computations that would otherwise be done twice. I assume that this
is included in the comparisons done in the paper, but I'm not entirely
sure.
* Training & Class Imbalance
Briefly, the process of training these models requires minimizing some
kind of loss function that is based on what the model misclassifies
when it is run on some training data. It's preferable to be able to
compute some loss over each individual instance, and add all of these
losses up to produce an overall loss. (Yes, far more can be said on
this, but the details aren't really important here.)
# TODO: What else can I say about why loss should be additive?
# Quote DL text? ML text?
This leads to a problem in one-stage detectors: That dense set of
locations that it's classifying usually contains a small number of
locations that actually have objects (positives), and a much larger
number of locations that are just background and can be very easily
classified as being in the background (easy negatives). However, the
loss function still adds all of them up - and even if the loss is
relatively low for each of the easy negatives, their cumulative loss
can drown out the loss from objects that are being misclassified.
That is: A large number of tiny, irrelevant losses overwhelm a smaller
number of larger, relevant losses. The paper was a bit terse on this;
it took a few re-reads to understand why "easy negatives" were an
issue, so hopefully I have this right.
The training process is trying to minimize this loss, and so it is
mostly nudging the model to improve where it least needs it (its
ability to classify background areas that it already classifies well)
and neglecting where it most needs it (its ability to classify the
"difficult" objects that it is misclassifying).
# TODO: Visualize this. Can I?
This is *class imbalance* in a nutshell, which the paper gives as the
limiting factor for the accuracy of one-stage detectors. While the
existing approaches try to tackle it with methods like bootstrapping
or hard example mining, the accuracy still is lower.
** Focal Loss
So, the point of all this is: A tweak to the loss function can fix
this issue, and retain the speed and simplicity of one-stage
approaches while surpassing the accuracy of existing two-stage ones.
At least, this is what the paper claims. Their novel loss function is
called *Focal Loss* (as the title references), and it multiplies the
normal cross-entropy by a factor, $(1-p_t)^\gamma$, where $p_t$
approaches 1 as the model predicts a higher and higher probability of
the correct classification, or 0 for an incorrect one, and $\gamma$ is
a "focusing" hyperparameter (they used $\gamma=2$). Intuitively, this
scaling makes sense: if a classification is already correct (as in the
"easy negatives"), $(1-p_t)^\gamma$ tends toward 0, and so the portion
of the loss multiplied by it will likewise tend toward 0.
* RetinaNet architecture
The paper gives the name *RetinaNet* to the network they created which
incorporates this focal loss in its training. While it says, "We
emphasize that our simple detector achieves top results not based on
innovations in network design but due to our novel loss," it is
important not to miss that /innovations in/: they are saying that they
didn't need to invent a new network design - not that the network
design doesn't matter. Later in the paper, they say that it is in
fact crucial that RetinaNet's architecture relies on FPN (Feature
Pyramid Network) as its backbone. As far as I can tell, the
architecture's use of a variant of RPN (Region Proposal Network) is
also very important.
I go into both of these aspects below.
* Feature Pyramid Network
Another recent paper, [[https://arxiv.org/abs/1612.03144][Feature Pyramid Networks for Object Detection]],
describes the basis of this FPN in detail (and, non-coincidentally I'm
sure, the paper shares 4 co-authors with the paper this post
explores). The paper is fairly concise in describing FPNs; it only
takes it around 3 pages to explain their purpose, related work, and
their entire design. The remainder shows experimental results and
specific applications of FPNs. While it shows FPNs implemented on a
particular underlying network (ResNet, mentioned below), they were
made purposely to be very simple and adaptable to nearly any kind of
CNN.
To begin understanding this, start with [[https://en.wikipedia.org/wiki/Pyramid_%2528image_processing%2529][image pyramids]]. The below
diagram illustrates an image pyramid:
#+CAPTION: Source: https://en.wikipedia.org/wiki/File:Image_pyramid.svg
#+ATTR_HTML: :width 100% :height 100%
[[../images/2017-12-13-retinanet/1024px-Image_pyramid.svg.png]]
Image pyramids have many uses, but the paper focuses on their use in
taking something that works only at a certain scale of image - for
instance, an image classification model that only identifies objects
that are around 50 pixels across - and adapting it to handle different
scales by applying it at every level of the image pyramid. If the
model has a little flexibility, some level of the image pyramid is
bound to have scaled the object to the correct size that the model can
match it.
Typically, though, detection or classification isn't done directly on
an image, but rather, the image is converted to some more useful
feature space. However, these feature spaces likewise tend to be
useful only at a specific scale. This is the rationale behind
"featurized image pyramids", or feature pyramids built upon image
pyramids, created by converting each level of an image pyramid to that
feature space.
The problem with featurized image pyramids, the paper says, is that if
you try to use them in CNNs, they drastically slow everything down,
and use so much memory as to make normal training impossible.
However, take a look below at this generic diagram of a generic deep
CNN:
#+CAPTION: Source: https://commons.wikimedia.org/wiki/File:Typical_cnn.png
#+ATTR_HTML: :width 100% :height 100%
[[../images/2017-12-13-retinanet/Typical_cnn.png]]
You may notice that this network has a structure that bears some
resemblance to an image pyramid. This is because deep CNNs are
already computing a sort of pyramid in their convolutional and
subsampling stages. In a nutshell, deep CNNs used in image
classification push an image through a cascade of feature detectors or
filters, and each successive stage contains a feature map that is
built out of features in the prior stage - thus producing a *feature
hierarchy* which already is something like a pyramid and contains
multiple different scales. (Being able to train deep CNNs to jointly
learn the filters at each stage of that feature hierarchy from the
data, rather than engineering them by hand, is what sets deep learning
apart from "shallow" machine learning.)
When you move through levels of a featurized image pyramid, only scale
should change. When you move through levels of a feature hierarchy
described here, scale changes, but so does the meaning of the
features. This is the *semantic gap* the paper references. Meaning
changes because each stage builds up more complex features by
combining simpler features of the last stage. The first stage, for
instance, commonly handles pixel-level features like points, lines or
edges at a particular direction. In the final stage, presumably, the
model has learned complex enough features that things like "kite" and
"person" can be identified.
The goal in the paper was to find a way to exploit this feature
hierarchy that is already being computed and to produce something that
has similar power to a featurized image pyramid but without too high
of a cost in speed, memory, or complexity.
Everything described so far (none of which is specific to FPNs), the
paper calls the *bottom-up* pathway - the feed-forward portion of the
CNN. FPN adds to this a *top-down* pathway and some lateral
connections.
** Top-Down Pathway
** Lateral Connections
** As Applied to ResNet
# Note C=256 and such
# TODO: Link to some good explanations
For two reasons, I don't explain much about ResNet here. The first is
that residual networks, like the ResNet used here, have seen lots of
attention and already have many good explanations online. The second
is that the paper claims that the underlying network
[[https://arxiv.org/abs/1512.03385][Deep Residual Learning for Image Recognition]]
[[https://arxiv.org/abs/1603.05027][Identity Mappings in Deep Residual Networks]]
* Anchors & Region Proposals
Recall last section what was said about feature maps, and the that the
deeper stages of the CNN happen to be good for classifying images.
While these deeper stages are lower-resolution than the input images,
and while their influence is spread out over larger areas of the input
image (that is, their [[https://en.wikipedia.org/wiki/Receptive_field#In_the_context_of_neural_networks][receptive field]] is rather large due to each
stage spreading it a little further), the features here still maintain
a spatial relationship with the input image. That is, moving across
one axis of this feature map still corresponds to moving across the
same axis of the input image.
# Just re-explain the above with the feature pyramid
RetinaNet's design draws heavily from RPNs (Region Proposal Networks)
here, and here I follow the explanation given in the paper [[https://arxiv.org/abs/1506.01497][Faster
R-CNN: Towards Real-Time Object Detection with Region Proposal
Networks]]. I find the explanations in terms of "proposals", of
focusing the "attention" of the neural network, or of "telling the
neural network where to look" to be needlessly confusing and
misleading. I'd rather explain very plainly how they work.
Central to RPNs is *anchors*. Anchors aren't exactly a feature of the
CNN. They're more a property that's used in its training and
inference.
In particular:
- Say that the feature pyramid has $L$ levels, and that level $l+1$ is
half the resolution (thus double the scale) of level $l$.
- Say that level $l$ is a 256-channel feature map of size $W \times H$
(i.e. it's a tensor with shape $W \times H \times 256$). Note that
$W$ and $H$ will be larger at lower levels, and smaller at higher
levels, but in RetinaNet at least, always 256-channel samples.
- For every point on that feature map (all $WH$ of them), we can
identify a corresponding point in the input image. This is the
center point of a broad region of the input image that influences
this point in the feature map (i.e. its receptive field). Note that
as we move up to higher levels in the feature pyramid, these regions
grow larger, and neighboring points in the feature map correspond to
larger and larger jumps across the input image.
- We can make these regions explicit by defining *anchors* - specific
rectangular regions associated with each point of a feature map.
The size of the anchor depends on the scale of the feature map, or
equivalently, what level of the feature map it came from. All this
means is that anchors in level $l+1$ are twice as large as the
anchors of level $l$.
The view that this should paint is that a dense collection of anchors
covers the entire input image at different sizes - still in a very
ordered pattern, but with lots of overlap. Remember how I mentioned
at the beginning of this post that one-stage object detectors use a
very "brute force" method?
My above explanation glossed over a couple things, but nothing that
should change the fundamentals.
- Anchors are actually associated with every 3x3 window in the anchor
map, not precisely every point, but all this really means is that
it's "every point and its immediate neighbors" rather than "every
point". This doesn't really matter to anchors, but matters
elsewhere.
- It's not a single anchor per 3x3 window, but 9 anchors - one for
each of three aspect ratios (1:2, 1:1, and 2:1), and each of three
scale factors ($1, 2^{1/3}, and 2^{2/3}$) on top of its base scale.
This is just to handle objects of less-square shapes and to cover
the gap in scale in between levels of the feature pyramid. Note
that the scale factors are evenly-spaced exponentially, such that an
additional step down wouldn't make sense (the largest anchors at the
pyramid level /below/ already cover this scale), and nor would an
additional step up (the smallest anchors at the pyramid level
/above/ already cover it).
Here, finally, is where actual classification and regression come in.
The *classification subnet* and *box regression subnet* are here.
** Classification Subnet
Every anchor associates an image region with a 3x3 window (i.e. a
3x3x256 section - it's still 256-channel). The classification subnet
is responsible for learning: do the features in this 3x3 window,
produced from some input, image indicate that an object is inside this
anchor? Or, more accurately: For each of $K$ object classes, what's
the probability of each object (or just of it being background)?
** Box Regression Subnet
The box regression subnet takes the same input as the classification
subnet, but tries to learn the answer to a different question. It is
responsible for learning: what are the coordinates to the object
inside of this anchor (assuming there is one)? More specifically, it
tries to learn to produce 4 numbers values which give offsets relative
to the anchor's bounds (thus specifying a different region). Note
that this subnet completely ignores the class of the object.
The classification subnet already tells us whether or not a given
anchor contains an object - which already gives rough bounds on
it. The box regression subnet helps tighten these bounds.
** Other notes (?)
I've glossed over a few details here. Everything I've described above
is implemented with bog-standard convolutional networks...
# Parameter sharing? How to explain?
* Training
# Ground-truth object boxes
# Intersection-over-Union thresholds
* Inference
# Top N results
* References
# Does org-mode have a way to make a special section for references?
# I know I saw this somewhere
1. [[https://arxiv.org/abs/1708.02002][Focal Loss for Dense Object Detection]]
2. [[https://arxiv.org/abs/1612.03144][Feature Pyramid Networks for Object Detection]]
3. [[https://arxiv.org/abs/1506.01497][Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks]]
4. [[https://arxiv.org/abs/1504.08083][Fast R-CNN]]
5. [[https://arxiv.org/abs/1512.03385][Deep Residual Learning for Image Recognition]]
6. [[https://arxiv.org/abs/1603.05027][Identity Mappings in Deep Residual Networks]]
7. [[https://openreview.net/pdf?id%3DSJAr0QFxe][Demystifying ResNet]]
8. [[https://vision.cornell.edu/se3/wp-content/uploads/2016/10/nips_camera_ready_draft.pdf][Residual Networks Behave Like Ensembles of Relatively Shallow Networks]]
9. https://github.com/KaimingHe/deep-residual-networks
10. https://github.com/broadinstitute/keras-resnet (keras-retinanet uses this)
11. [[https://arxiv.org/abs/1311.2524][Rich feature hierarchies for accurate object detection and semantic segmentation]] (contains the same parametrization as in the Faster R-CNN paper)
12. http://deeplearning.csail.mit.edu/instance_ross.pdf and http://deeplearning.csail.mit.edu/

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 431 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 256 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 124 KiB

View File

@@ -0,0 +1,28 @@
Copyright (C) 2009 CodePlex Foundation
Copyright (C) 2010-2013 OpenSeadragon contributors
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
- Neither the name of CodePlex Foundation nor the names of its contributors
may be used to endorse or promote products derived from this software
without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.

View File

@@ -0,0 +1,415 @@
OPENSEADRAGON CHANGELOG
=======================
2.2.1:
* Fixed problems with zoom/pan constraints with certain extreme settings (#965)
* Fixed an issue causing the browser to crash on iOS (#966)
2.2.0:
* BREAKING CHANGE: Viewport.homeBounds, Viewport.contentSize, Viewport.contentAspectX and
Viewport.contentAspectY have been removed. (#846)
* BREAKING CHANGE: The Overlay.getBounds method now takes the viewport as parameter. (#896)
* DEPRECATION: Overlay.scales, Overlay.bounds and Overlay.position have been deprecated. (#896)
* Overlay.width !== null should be used to test whether the overlay scales horizontally
* Overlay.height !== null should be used to test whether the overlay scales vertically
* The Overlay.getBounds method should be used to get the bounds of the overlay in viewport coordinates
* Overlay.location replaces Overlay.position
* DEPRECATION: Viewport.setHomeBounds has been deprecated (#846)
* DEPRECATION: the Viewport constructor is now ignoring the contentSize option (#846)
* Tile edge smoothing at high zoom (#764)
* Fixed issue with reference strip popping up virtual keyboard on mobile devices (#779)
* Now supporting rotation in the Rect class (#782)
* Drag outside of iframe now works better, as long as both pages are on the same domain (#790)
* Coordinate conversion now takes rotation into account (#796)
* Support tile-less IIIF as per LegacyTileSource (#816)
* You can now give an empty string to the tabIndex option (#805)
* Fixed issue with rotation and clicking in the navigator (#807)
* Broadened the check for mime type in LegacyTileSource URLs to allow query strings (#819)
* Added globalCompositeOperation option for tiledImage, to allow for different transfer modes (#814)
* Added Viewer.addSimpleImage method for easily adding non-tiled images (#827)
* DziTileSource now works properly with DZI files that have no extension (#835)
* Fixed content clipping with rotation (#463, #567 and #833)
* Fixed navigator not being rotated when viewport rotation is set in constructor (#840)
* Fixed: Viewer.setMouseNavEnabled wasn't affecting all of the viewer's trackers (#845)
* Fixed: with scrollToZoom disabled, the viewer caused page scrolling to slow down (#858)
* Added Viewer.getOverlayById and Overlay.getBounds functions (#853)
* Tiled images with 0 opacity no longer load their tiles or do drawing calculations (#859)
* Fixed issue with edge smoothing with PNG tiles at high zoom (#860)
* Fixed: Images with transparency were clearing images layered below them (#861)
* Fixed issue causing HTML pages to jump unwantedly to the reference strip upon loading (#872)
* Added addOnceHandler method to EventSource (#887)
* Added TiledImage.fitBounds method (#888)
* Overlays can now be scaled in a single dimension by providing a point location and either width or height (#896)
* Added full rotation support to overlays (#729, #193)
* Viewport.goHome() now takes clipping into account (#910)
* Improved zoom to point (#923)
* Optimized sketch canvas clearing and blending for images with opacity or transfer modes (#927)
* Now taking rotation into account in viewport getBounds and fitBounds methods (#934)
* Added option to disable navigator auto-fade (#935)
* Fixed issue with maintaining viewport position with full screen (#940)
* Fixed an issue with simultaneous touch events (#930)
* Avoid loading clipped out tiles (#939)
* Improved precision for subtle moves with fitBounds (#939)
* Fixed an issue in viewer.addTiledImage with replace:true when viewer has navigator (#948)
2.1.0:
* BREAKING CHANGE: the tile does not hold a reference to its image anymore. Only the tile cache keep a reference to images.
* BREAKING CHANGE: TileSource.tileSize no longer exists; use TileSource.getTileWidth() and TileSource.getTileHeight() instead.
* DEPRECATION: let ImageRecord.getRenderedContext create the rendered context instead of using ImageRecord.setRenderedContext
* DEPRECATION: TileSource.getTileSize() is deprecated. Use TileSource.getTileWidth() and TileSource.getTileHeight() instead.
* Changed resize behaviour to prevent "snapping" to world bounds when constraints allow more space (#711)
* Added support for non-square tiles (#673)
* TileSource.Options objects can now optionally provide tileWidth/tileHeight instead of tileSize for non-square tile support.
* IIIFTileSources will now respect non-square tiles if available.
* Added new tile source for simple images: ImageTileSource (#760)
* Optimized adding large numbers of items to the world with collectionMode (#735)
* Registers as an AMD module where possible (#719)
* Added "tile-loaded" event on the viewer allowing to modify a tile before it is marked ready to be drawn (#659)
* Added "tile-unloaded" event on the viewer allowing to free up memory one has allocated on a tile (#659)
* Added 'tile-load-failed' event (#725)
* Added additional coordinates conversion methods to TiledImage (#662)
* Added `preserveImageSizeOnResize` option (#666)
* Added collectionColumns as a configuration parameter (#680)
* Added option in addTiledImage to replace tiledImage at index (#706)
* Added autoRefigureSizes flag to World for optimizing mass rearrangements (#715)
* You can now change viewport margins after the viewer is created (#721)
* Added a patch to help slow down the scroll devices that fire too fast (#754)
* Fixed flickering tiles with useCanvas=false when no cache is used (#661)
* 'display: none' no longer gets reset on overlays during draw (#668)
* Better error reporting for tile load failures (#679)
* Added XDomainRequest as fallback method for ajax requests if XMLHttpRequest fails (for IE < 10) (#693)
* Now avoiding using eval when JSON.parse is available (#696)
* Rotation now works properly on retina display (#708)
* Fixed issue with tiledImages loading tiles at every level instead of just the best level (#728)
* Fixed placeholderFillStyle flicker (#727)
* Fix for Chrome (v45) issue that key is sometimes undefined outside of the for-in loop (#730)
* World.removeAll now cancels any in-flight image loads; same for Viewer.open and Viewer.close (#734)
* Fixed overlays position (use rounding instead of flooring and ceiling) (#741)
* Fixed issue with including overlays in your tileSources array when creating/opening in the viewer (#745)
* Fixed issue in iOS devices that would cause all touch events to fail after a Multitasking Gesture was triggered (#744)
* Fixed an issue with TiledImage setPosition/setWidth/setHeight not reliably triggering a redraw (#720)
* Fixed zooming in with plus key on a Swedish keyboard (#763)
2.0.0:
* True multi-image mode (#450)
* BREAKING CHANGE: Passing an array for the tileSources option is no longer enough to trigger sequence mode; you have to set the sequenceMode option to true as well
* BREAKING CHANGE: Navigator no longer sends an open event when its viewer opens
* BREAKING CHANGE: Viewer.drawers and Viewer.drawersContainer no longer exist
* BREAKING CHANGE: A Viewer's Drawer and Viewport are now made once per Viewer and reused for every image that Viewer opens (rather than being recreated for every open); this means if you change Viewer options between opens, the behavior is different now.
* DEPRECATION: use Viewer.addTiledImage instead of Viewer.addLayer
* addTiledImage supports positioning config properties
* DEPRECATION: use World.getItemAt instead of Viewer.getLayerAtLevel
* DEPRECATION: use World.getIndexOfItem instead of Viewer.getLevelOfLayer
* DEPRECATION: use World.getItemCount instead of Viewer.getLayersCount
* DEPRECATION: use World.setItemIndex instead of Viewer.setLayerLevel
* DEPRECATION: use World.removeItem instead of Viewer.removeLayer
* DEPRECATION: use World.needsDraw instead of Drawer.needsUpdate
* DEPRECATION: use TileCache.numTilesLoaded instead of Drawer.numTilesLoaded
* DEPRECATION: use World.resetItems instead of Drawer.reset
* DEPRECATION: use Drawer.clear and World.draw instead of Drawer.update
* DEPRECATION: the layersAspectRatioEpsilon option is no longer necessary
* DEPRECATION: Viewer's add-layer event is now World's add-item event
* DEPRECATION: Viewer's layer-level-changed event is now World's item-index-change event
* DEPRECATION: Viewer's remove-layer event is now World's remove-item event
* DEPRECATION: Viewer's add-layer-failed event is now add-item-failed
* DEPRECATION: TileSourceCollection has been retired in favor of World
* DEPRECATION: collectionMode no longer draws outlines or reflections for items
* Drawer has been split into three classes:
* TiledImage, tile management and positioning for a single tiled image
* TileCache, tile caching for all images
* Drawer, tile drawing for all images
* New class: World, keeps track of multiple images in the scene
* Viewer now has world and tileCache properties
* Rect and Point now have clone functions
* New Viewport method for managing homeBounds as well as constraints: setHomeBounds
* Viewport.open supports positioning config properties
* For multi-image open, drawing isn't started until all tileSources have been opened
* You can specify a clip area for each image (only works on browsers that support the HTML5 canvas) (#594)
* Added placeholderFillStyle so image rectangles can be drawn even before their tiles load (#635)
* Ability to set opacity on individual TiledImages (#644)
* Margins option to push the home region in from the edges of the Viewer (#505)
* Rect and Point toString() functions are now consistent: rounding values to nearest hundredth
* Overlays appear in the DOM immediately on open or addOverlay (#507)
* imageLoaderLimit now works (#544)
* Turning off scrollToZoom in gestureSettings now allows scroll events to propagate
* You can now set a minZoomLevel that's greater than the home zoom level
* Added union() to OpenSeadragon.Rect
* Fixed an error in fitBounds if the new and old bounds were extremely close in size
* Added ajaxWithCredentials option (#543)
* Added viewport-change event for after the viewport changes but before it's drawn
* A spring's current value is now updated immediately on reset (#524)
* Fixed an error in fitBounds that occurred sometimes with immediately = true
* Added support for HDPI (retina) displays (#583)
* Corrected IIIF tile source to use canonical syntax (#586)
* Fixed x/y typo that caused horizontal reference strip to be rendered only relative to height (#595)
* Fixed Firefox 35 not able to open local files (#588)
* Fixed an issue with zero size viewers in IE8 (#609)
* Fixed: Cross Origin policy not working (#613)
* Optimized tile loading by clearing the queue on a re-draw when imageLoaderLimit is set (#616)
* Now animating zoom spring exponentially (#631)
* Added http://editorconfig.org/ config file (#637)
* Keyboard pan speed is now the same regardless of zoom level (#645)
1.2.1:
* Added preserveOverlays option (#561)
* Fixed: DZI tilesource was broken on IE8/IE9 (#563)
* Exposed secondary pointer button (middle, right, etc.) events from MouseTracker and through viewer (#479)
* MouseTracker - Improved IE 8 compatibility (#562)
* MouseTracker - Improved IE 9+ compatibility (#564)
* MouseTracker - Simulated touchenter/touchleave events now bubble to parent element MouseTrackers (#566)
* MouseTracker - Improved multitouch support in enter/exit event handlers (#566)
* MouseTracker - orphaned tracked touch pointers removed (fix for #539)
* MouseTracker - removed touchenter/touchleave event support since the events don't exist on any known platform and have been removed from the W3C specification (#566)
* Removed Viewer onContainerPress/onContainerRelease handlers (and the associated 'container-release' event ) that were never fired due to the canvas (child) element capturing the DOM events (#566)
* Added 'canvas-enter', 'canvas-exit', and 'canvas-press' events to Viewer (#566)
* ButtonGroup - removed obsolete MouseTracker event handlers (#566)
* MouseTracker - added keydown and keyup handlers (#568)
* Modifier keys ignored in keyboard navigation handlers (#503)
* Requesting keyboard focus when viewer is clicked (#537)
* Arrow key navigation fixed across platforms (#565)
* Removed textarea element from viewer DOM. Viewer.canvas now handles keyboard navigation (#569)
* Removed 'position' property from MouseTracker keyDownHandler/keyUpHandler/keyHandler functions (#573)
* Fixed pointer event model detection for IE 10 and IE 11 (#571)
* Added setMouseNavEnabled() support to Navigator (#572)
* MouseTracker now defaults to tracking on (#558)
* Removed Viewer focusHandler/onCanvasFocus (#577)
* Added tabIndex option to viewer (#577)
1.2.0:
* New combined IIIF TileSource for 1.0 through 2.0 (#441)
* BREAKING CHANGE: Removed IIIF1_1TileSource (now that IIIFTileSource supports all versions)
* Allowed TileSources to have dynamic tileSize via source.getTileSize(level) (#441)
* DEPRECATION: Use .getTileSize(level) instead of .tileSize
* Fix for IIPServer-style urls when using DZI (#413)
* Fix memory leak while destroying the viewer (#421)
* Added fitBoundsWithConstraints() to the viewport (#423)
* Fixed MouseTracker cross-browser issues with tracking pointers over and out of the tracked element (pull request #448, fix for #152, #404, #420, and #427)
* Fixed incorrect flick direction after image is rotated (#452)
* Debug mode now works with rotate images (#453)
* Now supporting dzi xml with namespaces (#462)
* You can now rotate the navigator along with the main viewer (#455)
* Viewport.setRotation now allows all rotation angles (#466)
* Pinch rotate is now available (defaults to off) (#468)
* Added option for home button to fill viewer (#474)
* Better handling of mid-update image loaded callbacks (#409)
* Tracked pointers are now cleaned up when Viewer.setMouseNavEnabled(false) is called (#518)
* Added explicit pointer capture for touch event model touchstart events (#552)
1.1.1:
* Fixed issue with dragging the navigator highlight on Webkit browsers (#395)
* Improved Viewer Options Support in Gesture Handling (#399)
1.1.0:
* BREAKING CHANGE: the openseadragon-canvas element now has two child divs. This means: (#298)
* The drawer element is no longer accessible via viewer.canvas.firstChild but via viewer.drawersContainer.firstChild or viewer.drawer.canvas.
* The overlays elements are no longer accessible via viewer.canvas.childNodes but via viewer.overlaysContainer.childNodes or viewer.currentOverlays[i].element.
* BREAKING CHANGE: Pseudo full screen mode on IE<11 using activex has been dropped. OpenSeadragon will run in full page if full screen mode is requested.
* BREAKING CHANGE: MouseTracker touch pinch gestures are no longer converted to scroll events. MouseTracker.pinchHandler should be used instead. (#369)
* DEPRECATION: overlay functions have been moved from Drawer to Viewer (#331)
* DEPRECATION: OpenSeadragon.cancelFullScreen has been renamed OpenSeadragon.exitFullScreen (#358)
* DEPRECATION: The 'isTouchEvent' property passed in MouseTracker events is deprecated and has been replaced with 'pointerType', which is a String value "mouse", "touch", "pen", etc. to support multiple simultaneous pointing devices (#369)
* DEPRECATION: The 'buttonDownAny' property passed in MouseTracker enter and exit events (enterHandler/exitHandler) is deprecated and has been replaced with 'buttons', which indicates the button(s) currently pressed (#369)
* DEPRECATION: The 'buttonDownAny' property passed in Viewer's 'container-enter' and 'container-exit' events is deprecated and has been replaced with 'buttons', which indicates the button(s) currently pressed (#369)
* Added layers support. Multiple images can now been displayed on top of each other with transparency via the Viewer.addLayer method (#298)
* Improved overlay functions (#331)
* Fixed: Nav button highlight states aren't quite aligned on Firefox (#303)
* Added ControlAnchor options for default controls (#304)
* Enabled basic cross-domain tile loading without tainting canvas (works in Chrome and Firefox) (#308)
* Added crossOriginPolicy drawer configuration to enable or disable CORS image requests (#364)
* Disabled CORS by default (#377)
* Added a ControlAnchor.ABSOLUTE enumeration. Enables absolute positioning of control elements in the viewer (#310)
* Added a 'navigator-scroll' event to Navigator. Fired when mousewheel events occur in the navigator (#310)
* Added a navigatorMaintainSizeRatio option. If set to true, the navigator minimap resizes when the viewer element is resized (#310)
* Added 'ABSOLUTE' as a navigatorPosition option, along with corresponding navigatorTop, navigatorLeft options. Allows the navigator minimap to be placed anywhere in the viewer (#310)
* Enhanced the navigatorTop, navigatorLeft, navigatorHeight, and navigatorWidth options to allow a number for pixel units or a string for other element units (%, em, etc.) (#310)
* Additional enhancements for IIIF support (#315)
* Fixed: Setting degrees in Viewer constructor has no effect (#336)
* Added pre-draw event for tiles to allow applications to alter the image (#348)
* Added optional Rotate Left/Right buttons to standard controls (#341)
* Added optimization for large numbers of overlays: `checkResize = false` option for OpenSeadragon.Overlay (#365)
* Updated full screen API, adding support for Opera and IE11 and allowing keyboard input in Chrome (#358)
* Various fixes to bring OpenSeadragon into W3C compliance (#375)
* Added separate flags for turning off each of the nav buttons (#376)
* Added support for query parameters in DZI tileSource URL (#378)
* Enhanced MouseTracker for multi-touch (#369)
* Added support for tracking multiple touch-points on multiple/simultaneous pointing devices
* Added support for the W3C Pointer Events event model. Enables touch/multi-touch on IE10+
* Added a dragEndHandler event callback, called when a drag gesture ends
* Added a pinchHandler event callback, called as a pinch gesture (2 touch points) is occurring
* Added real-time velocity (speed and direction) tracking to drag operations. 'speed' and 'direction' values are passed in the dragHandler and dragEndHandler event data
* Enhanced Viewer for multi-touch (#369)
* Added pinch zoom with the new MouseTracker pinchHandler. The 'pan' and 'zoom' Viewer events can be used to detect changes resulting in pinch gestures
* Added a "canvas-pinch" event fired by the pinch event handler
* Added flick gesture with the new MouseTracker dragEndHandler
* Added a "canvas-drag-end" event fired by the drag-end event handler
* Added a GestureSettings class for per-device gesture options. Currently has settings to enable/disable zoom-on-scroll, zoom-on-pinch, zoom-on-click, and flick gesture settings.
* Added GestureSettings objects for mouse, touch, and pen devices to the Viewer options giving users the ability to customize gesture handling in the viewer
* Added velocity (speed and direction) properties to the "canvas-drag" event
* Added double-click gesture detection to MouseTracker with corresponding dblClickHandler event callback (#392)
* Added zoom on double-click feature to Viewer, with corresponding dblClickToZoom option added to the GestureSettings class (#392)
* Made it possible to run OpenSeadragon from local filesystem on some browsers (#379)
1.0.0:
NOTE: This version has a number of breaking changes to the API, mostly in event handling. See below.
* BREAKING CHANGE: All EventSource and MouseTracker event handler method signatures changed to 'handlerMethod(event)' where event == { eventSource, userData, ... } (#251) (Also fixes #23, #224, #239)
* The new eventSource property in the event object replaces the old eventSource parameter that was passed to handler methods.
* Where the event object duplicated the eventSource value, those properties have been removed. This affects the following events:
* All Button events - 'button' property removed
* All Viewer (Viewer, Drawer, Viewport) events - 'viewer' property removed
* BREAKING CHANGE: Renamed EventHandler to EventSource (#225)
* BREAKING CHANGE: Event names changed for consistency: changed to lower case, compound names hyphenated, and "on" prefixes removed (#226):
* Viewer "animationstart" changed to "animation-start"
* Viewer "animationfinish" changed to "animation-finish"
* Button "onPress" changed to "press"
* Button "onRelease" changed to "release"
* Button "onClick" changed to "click"
* Button "onEnter" changed to "enter"
* Button "onExit" changed to "exit"
* Button "onFocus" changed to "focus"
* Button "onBlur" changed to "blur"
* BREAKING CHANGE: Numerous improvements to fullPage/fullScreen (#256):
* Retains zoom/pan position better when switching into and out of fullPage.
* Retains scroll position when switching back out.
* More resilient to styling variations on the page.
* setFullPage no longer automatically engages fullScreen; there's now a separate setFullScreen.
* 'fullpage' event is now 'full-page'.
* The `fullpage` property of the 'full-page' event is now `fullPage`.
* There is now a 'full-screen' event with a `fullScreen` property (true if it has gone to full screen).
* There are now 'pre-full-page' and 'pre-full-screen' events that include a `preventDefaultAction` property you can set in your handler to cancel. They also have `fullPage` and `fullScreen` properties respectively, to indicate if they are going into or out of the mode.
* BREAKING CHANGE: Removed the 'onPageChange' callback from the viewer options. Viewer.goToPage() now raises the 'page' event only (#285)
* Major documentation improvements (#281)
* MouseTracker now passes the original event objects to its handler methods (#23)
* MouseTracker now supports an optional 'moveHandler' method for tracking mousemove events (#215)
* Added stopHandler to MouseTracker. (#262)
* Fixed: Element-relative mouse coordinates now correct if the element and/or page is scrolled (using new OpenSeadragon.getElementOffset() method) (#131)
* Fixed: Pinch zoom event issue, regressive issue from previous event system changes (#244)
* Added IIIF Image API 1.1 Tile Source (#230)
* IIIF 1.0 now uses pixel based syntax (#249)
* Fixed: Touch event issue where no canvas-click events were being raised (#240)
* Check that zoom reference point is valid before using it in zoomTo and zoomBy (#247)
* Added a number of easier coordinate conversion methods to viewport (#243)
* Added the ability to create a viewer and start at a specified page (#252)
* Fixed image resolve issue with collection mode (#255)
* DOM events are now passed through as 'event.originalEvent' in viewer and button events where appropriate. (#257) Affects the following events:
* Viewer: 'canvas-release', 'canvas-click', 'canvas-drag', 'canvas-scroll', 'container-enter', 'container-exit', 'container-release'
* Button: 'enter', 'exit', 'press', 'release', 'focus', 'blur', 'click'
* Fixed: IE 10 not reading DZI file correctly in certain circumstances (#218)
* Added support for the 'wheel' DOM mousewheel event (#261)
* Fix for non-canvas tile rendering at large size (#264)
* Drawer now uses an HTML5 canvas element whenever it's available. Can be overridden with the Viewer.useCanvas option (#191)
* Added a boolean preventDefaultAction property (default false) to the event object passed to MouseTracker handler methods. (#270) Implemented in the following MouseTracker subscribers:
* Viewer.keyboardCommandArea.innerTracker.focusHandler: preventDefaultAction == true prevents scrolling viewer into view
* Viewer.keyboardCommandArea.innerTracker.keyHandler: preventDefaultAction == true prevents viewer keyboard navigation
* Viewer.innerTracker.clickHandler: preventDefaultAction == true prevents viewer zoom on click
* Viewer.innerTracker.dragHandler: preventDefaultAction == true prevents viewer panning with mouse/touch
* Viewer.innerTracker.scrollHandler: preventDefaultAction == true prevents viewer zooming on mousewheel/pinch
* Fixed: IE8 error with custom buttons - "Object doesn't support this action" (#279)
* Support IIIF servers that don't report tile dimensions (#286)
* Added an autoResize option. Default is true. When set to false, the viewer takes no action when its container element is resized. (#291)
* Added a static 'version' property to OpenSeadragon. Useful for plugins that require specific OpenSeadragon versions. (#292)
0.9.131:
* Fixed: canvas-click event shouldn't fire as you drag (#198)
* Fixed: LegacyTileSource doesn't fail gracefully when no supported file formats are found (#202)
* Added an optional userData argument to EventHandler.addHandler() which is passed unchanged to the handler method (#203)
* Fixed AJAX error reporting on IE8 (#208)
* Added viewportToImageRectangle method, and updated imageToViewportRectangle, imageToViewportCoordinates, and viewportToImageCoordinates to be more flexible with params (#212)
* Fixed: Viewer is not responsive (css) after returning from full screen (#222)
0.9.130:
* Added partial support for rotation (just 90 degree increments for now). (#185)
* Hiding and restoring broke the viewer; fixed (#177)
* You can now provide an onDraw function for overlays to do custom overlay manipulation (#160)
* Added a destroy function on the viewer to clean up and remove elements (#179)
* Fixed: navigatorPosition option corrected. (#163)
* OpenSeadragon.now() returned undefined the first time; fixed
* onTouchEnd did not call the correct mouse up handler; fixed (#159)
* Touch events no longer capture mouse (was causing issues on devices that support both) (#168)
* Clicking on a button control no longer refreshes page (#184)
* Drawer now works when the page is rtl (#187)
* Fixed a situation that could throw errors in touch handling (#188)
0.9.129:
* Fixed: navigator image not updating when base zoom image is changed (#147)
* Fixed tile rendering issue at lower zoom levels with the IIIF TileSource (#55)
* On IE, ajax errors would cause an exception to be thrown; fixed (#144)
* Faster and more consistent millisecond getter (#138)
* Fixed an error when using navPrevNextWrap on single images (#135)
* Various fixes to our timer handling (#133)
* Now generating source map for openseadragon.min.js (#51)
* Fix for calculating overlay width / height (#142)
* JSHint tidying (#136)
* Improved Ajax method (#149)
* Overhauled AJAX error reporting (#151)
0.9.128:
* The navigator is now off by default (#102)
* Reverted minPixelRatio to 0.5 for better quality (#116)
* Sometimes tiles wouldn't resolve if you used the blendTime option; fixed. (#95)
* You can now choose to have previous and next buttons wrap using the config.navPrevNextWrap. (#114)
* You can now specify an ID for a div to hold the navigator (#46)
* You can now click in the navigator to go to a new location (#46)
* Keyboard handling is now done in the viewer rather than navigator (#46)
* Additional navigator fixes (#46)
* Drawer events now fire properly (#94)
* Fixed an error in EventHandler.removeHandler() (#48)
* Better requestAnimationFrame detection on older Firefox (#103)
* More efficient navigator loading (#115)
* Simplified element opacity setting implementation (#123)
0.9.127:
* Fixed a problem with getString when the string property is a sub-property. (#64)
* Fixed: Tooltips for Navigation Controls not displaying (#63)
* Cleaned up some diagnostic code that was broken.
* Added fullpage class to viewer element when in fullpage mode (#61)
* Reverted to original New BSD license; cleaned up license declarations (#89)
0.9.126:
* DZI JSONp was broken; fixed.
0.9.125:
* Fully deprecated OpenSeadragon.createFromDZI, safely deprecated Viewer.openTileSource and
Viewer.openDZI to use Viewer.open internally. (#53 & #54).
* Full page bug fix for when viewer is child of document body (#43).
* Overlays for DZI bug fix (#45).
* DziTileSource: avoid changing relative paths (#56).
* Fix typo in preserveViewport handling (#77).
* Fix updateMulti timer leak after multiple Viewer.open() calls (#76).
* Minor documentation fixes.
0.9.124:
* Performance enhancements.
0.9.123:
* Real fullscreen support.
0.9.122:
* Performance enhancements.
0.9.121:
* Touch pan now works on Android.
* Pinch zoom is better on all devices.

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load Diff