123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685 |
- # ======================================================
- # orrery.yml
- #
- # This file describes the title image for the "Texture
- # Mapping" bonus chapter at:
- #
- # http://www.raytracerchallenge.com/bonus/texture-mapping.html
- #
- # It requires several additional resources, provided as a
- # separate download. The resources were found on the following
- # sites:
- #
- # * https://www.bittbox.com/freebies/free-hi-resolution-wood-textures
- # : the wooden texture for the table
- # * https://astrogeology.usgs.gov/search/map/Mercury/Messenger/Global/Mercury_MESSENGER_MDIS_Basemap_LOI_Mosaic_Global_166m
- # : the map of Mercury
- # * http://planetpixelemporium.com/planets.html
- # : maps of Earth, Mars, Jupiter, Saturn, Uranus, and Neptune
- # * https://hdrihaven.com/hdri/?c=indoor&h=artist_workshop
- # : the "artist workshop" environment map
- #
- # by Jamis Buck <jamis@jamisbuck.org>
- # ======================================================
- - add: camera
- width: 800
- height: 400
- field-of-view: 1.2
- from: [ 2, 4, -10]
- to: [ -1, -1, 0 ]
- up: [ 0, 1, 0 ]
- # The scene as shown in the bonus chapter is rendered using an area light,
- # precisely as described in the "Rendering soft shadows" bonus chapter,
- # here: http://www.raytracerchallenge.com/bonus/area-light.html
- #
- # if you haven't implemented area lights, you can replace this with a point
- # light located at [0, 2.5, -10].
- - add: light
- corner: [-5, 0, -10 ]
- uvec: [ 10, 0, 0 ]
- vvec: [ 0, 5, 0 ]
- usteps: 10
- vsteps: 5
- jitter: true
- intensity: [ 1, 1, 1 ]
- # -------------------------------------------
- # some common textures
- # -------------------------------------------
- - define: GOLD
- value:
- color: [ 1, 0.8, 0.1 ]
- ambient: 0.1
- diffuse: 0.6
- specular: 0.3
- shininess: 15
- - define: SILVER
- value:
- color: [ 1, 1, 1 ]
- ambient: 0.1
- diffuse: 0.7
- specular: 0.3
- shininess: 15
- # -----------------------------------------------
- # CSG definition for the gears used to construct
- # the orrery.
- #
- # NOTCH is a helper object used to create the
- # teeth for the gears.
- #
- # GEAR is the actual gear object itself.
- # -----------------------------------------------
- - define: NOTCH
- value:
- add: csg
- operation: difference
- left:
- type: cube
- transform:
- - [ scale, 1, 0.25, 1 ]
- - [ translate, 1, 0, 1 ]
- - [ rotate-y, 0.7854 ]
- - [ scale, 1, 1, 0.1 ]
- right:
- type: cylinder
- min: -0.26
- max: 0.26
- closed: true
- transform:
- - [ scale, 0.8, 1, 0.8 ]
- - define: GEAR
- value:
- add: csg
- operation: difference
- left:
- type: cylinder
- min: -0.025
- max: 0.025
- closed: true
- right:
- type: group
- children:
- # center hole
- - add: cylinder
- min: -0.06
- max: 0.06
- closed: true
- transform:
- - [ scale, 0.1, 1, 0.1 ]
- # crescents
- - add: csg
- operation: difference
- left:
- type: cylinder
- min: -0.06
- max: 0.06
- closed: true
- transform:
- - [ scale, 0.7, 1, 0.7 ]
- right:
- type: cube
- transform:
- - [ scale, 1, 0.1, 0.2 ]
- # teeth
- - add: NOTCH
- - add: NOTCH
- transform:
- - [ rotate-y, 0.31415 ]
- - add: NOTCH
- transform:
- - [ rotate-y, 0.6283 ]
- - add: NOTCH
- transform:
- - [ rotate-y, 0.94245 ]
- - add: NOTCH
- transform:
- - [ rotate-y, 1.2566 ]
- - add: NOTCH
- transform:
- - [ rotate-y, 1.57075 ]
- - add: NOTCH
- transform:
- - [ rotate-y, 1.8849 ]
- - add: NOTCH
- transform:
- - [ rotate-y, 2.19905 ]
- - add: NOTCH
- transform:
- - [ rotate-y, 2.5132 ]
- - add: NOTCH
- transform:
- - [ rotate-y, 2.82735 ]
- - add: NOTCH
- transform:
- - [ rotate-y, 3.1415 ]
- - add: NOTCH
- transform:
- - [ rotate-y, -0.31415 ]
- - add: NOTCH
- transform:
- - [ rotate-y, -0.6283 ]
- - add: NOTCH
- transform:
- - [ rotate-y, -0.94245 ]
- - add: NOTCH
- transform:
- - [ rotate-y, -1.2566 ]
- - add: NOTCH
- transform:
- - [ rotate-y, -1.57075 ]
- - add: NOTCH
- transform:
- - [ rotate-y, -1.8849 ]
- - add: NOTCH
- transform:
- - [ rotate-y, -2.19905 ]
- - add: NOTCH
- transform:
- - [ rotate-y, -2.5132 ]
- - add: NOTCH
- transform:
- - [ rotate-y, -2.82735 ]
- # mechanism: top plate
- - add: csg
- operation: difference
- material: GOLD
- transform:
- - [ rotate-y, -1 ]
- left:
- type: cylinder
- min: -1.51
- max: -1.5
- closed: true
- right:
- type: group
- children:
- - add: cylinder
- min: -1.52
- max: -1.49
- closed: true
- transform:
- - [ scale, 0.1, 1, 0.1 ]
- - add: csg
- operation: difference
- left:
- type: cylinder
- min: -1.52
- max: -1.49
- closed: true
- transform:
- - [ scale, 0.75, 1, 0.75 ]
- right:
- type: cube
- transform:
- - [ scale, 1, 0.1, 0.2 ]
- - [ translate, 0, -1.5, 0 ]
- # mechanism: gear
- - add: GEAR
- material: SILVER
- transform:
- - [ scale, 0.5, 0.5, 0.5 ]
- - [ translate, 0.4, -1.45, -0.4 ]
- # mechanism: gear
- - add: GEAR
- material: SILVER
- transform:
- - [ rotate-y, 0.8 ]
- - [ scale, 0.4, 0.4, 0.4 ]
- - [ translate, -0.4, -1.45, 0.2 ]
- # sun
- - add: group
- children:
- - add: sphere
- shadow: false
- material:
- color: [1, 1, 0]
- ambient: 0.1
- diffuse: 0.6
- specular: 0 # count on the skybox reflection being the specular highlight
- reflective: 0.2
- - add: group
- material: GOLD
- children:
- - add: cylinder
- min: -4
- max: -0.5
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- # base
- - add: sphere
- transform:
- - [ translate, 0, -4, 0 ]
- material:
- pattern:
- type: map
- mapping: spherical
- uv_pattern:
- type: checkers
- width: 16
- height: 8
- colors:
- - [ 0, 0, 0 ]
- - [ 0.5, 0.5, 0.5 ]
- diffuse: 0.6
- specular: 0 # count on the skybox reflection being the specular highlight
- ambient: 0.1
- reflective: 0.2
- # table
- - add: cube
- transform:
- - [ scale, 5, 0.1, 5 ]
- - [ translate, 0, -4, 0 ]
- material:
- diffuse: 0.9
- ambient: 0.1
- specular: 0
- pattern:
- type: map
- mapping: planar
- uv_pattern:
- type: image
- file: res/wood.ppm
- transform:
- - [ scale, 0.5, 0.5, 0.5 ]
- # mechanism: gear-plate between top & mercury
- - add: GEAR
- material: SILVER
- transform:
- - [ rotate-y, -0.4 ]
- - [ scale, 0.9, 0.9, 0.9 ]
- - [ translate, 0, -1.75, 0 ]
- # mercury
- - add: group
- transform:
- - [ translate, 2, 0, 0 ]
- - [ rotate-y, 0.7 ]
- children:
- - add: sphere
- transform:
- - [ scale, 0.25, 0.25, 0.25 ]
- material:
- pattern:
- type: map
- mapping: spherical
- uv_pattern:
- type: image
- file: res/mercury-small.ppm
- - add: group
- material: GOLD
- children:
- - add: cylinder
- min: -2
- max: 0
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - add: sphere
- transform:
- - [ scale, 0.025, 0.025, 0.025 ]
- - [ translate, 0, -2, 0 ]
- - add: cylinder
- min: 0
- max: 2
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - [ rotate-z, 1.5708 ]
- - [ translate, 0, -2, 0 ]
- # mechanism: gear-plate between mercury & venus
- - add: GEAR
- material: SILVER
- transform:
- - [ rotate-y, 1.3 ]
- - [ translate, 0, -2.05, 0 ]
- # venus
- - add: group
- transform:
- - [ translate, 3, 0, 0 ]
- - [ rotate-y, 0.3 ]
- children:
- - add: sphere
- transform:
- - [ scale, 0.25, 0.25, 0.25 ]
- material:
- color: [ 1, 1, 0.8 ]
- - add: group
- material: GOLD
- children:
- - add: cylinder
- min: -2.1
- max: 0
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - add: sphere
- transform:
- - [ scale, 0.025, 0.025, 0.025 ]
- - [ translate, 0, -2.1, 0 ]
- - add: cylinder
- min: 0
- max: 3
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - [ rotate-z, 1.5708 ]
- - [ translate, 0, -2.1, 0 ]
- # mechanism: gear-plate between venus & earth
- - add: GEAR
- material: SILVER
- transform:
- - [ scale, 0.9, 0.9, 0.9 ]
- - [ rotate-y, -2.2 ]
- - [ translate, 0, -2.15, 0 ]
- # earth
- - add: group
- transform:
- - [ translate, 4, 0, 0 ]
- - [ rotate-y, 2 ]
- children:
- - add: sphere
- transform:
- - [ scale, 0.25, 0.25, 0.25 ]
- material:
- pattern:
- type: map
- mapping: spherical
- uv_pattern:
- type: image
- file: res/earthmap-small.ppm
- - add: group
- material: GOLD
- children:
- - add: cylinder
- min: -2.2
- max: 0
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - add: sphere
- transform:
- - [ scale, 0.025, 0.025, 0.025 ]
- - [ translate, 0, -2.2, 0 ]
- - add: cylinder
- min: 0
- max: 4
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - [ rotate-z, 1.5708 ]
- - [ translate, 0, -2.2, 0 ]
- # mechanism: gear-plate between earth & mars
- - add: GEAR
- material: SILVER
- transform:
- - [ scale, 0.8, 0.8, 0.8 ]
- - [ rotate-y, 1.7 ]
- - [ translate, 0, -2.25, 0 ]
- # mars
- - add: group
- transform:
- - [ translate, 5, 0, 0 ]
- - [ rotate-y, -2 ]
- children:
- - add: sphere
- transform:
- - [ scale, 0.25, 0.25, 0.25 ]
- material:
- pattern:
- type: map
- mapping: spherical
- uv_pattern:
- type: image
- file: res/mars-small.ppm
- - add: group
- material: GOLD
- children:
- - add: cylinder
- min: -2.3
- max: 0
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - add: sphere
- transform:
- - [ scale, 0.025, 0.025, 0.025 ]
- - [ translate, 0, -2.3, 0 ]
- - add: cylinder
- min: 0
- max: 5
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - [ rotate-z, 1.5708 ]
- - [ translate, 0, -2.3, 0 ]
- # mechanism: gear-plate between mars & jupiter
- - add: GEAR
- material: SILVER
- transform:
- - [ rotate-y, -0.9 ]
- - [ translate, 0, -2.35, 0 ]
- # jupiter
- - add: group
- transform:
- - [ translate, 6.5, 0, 0 ]
- - [ rotate-y, -0.75 ]
- children:
- - add: sphere
- transform:
- - [ scale, 0.67, 0.67, 0.67 ]
- material:
- pattern:
- type: map
- mapping: spherical
- uv_pattern:
- type: image
- file: res/jupitermap-small.ppm
- - add: group
- material: GOLD
- children:
- - add: cylinder
- min: -2.4
- max: 0
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - add: sphere
- transform:
- - [ scale, 0.025, 0.025, 0.025 ]
- - [ translate, 0, -2.4, 0 ]
- - add: cylinder
- min: 0
- max: 6.5
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - [ rotate-z, 1.5708 ]
- - [ translate, 0, -2.4, 0 ]
- # mechanism: gear-plate between jupiter & saturn
- - add: GEAR
- material: SILVER
- transform:
- - [ scale, 0.95, 0.95, 0.95 ]
- - [ rotate-y, -1.1 ]
- - [ translate, 0, -2.45, 0 ]
- # saturn
- - add: group
- transform:
- - [ translate, 8, 0, 0 ]
- - [ rotate-y, -2.5 ]
- children:
- - add: sphere
- transform:
- - [ scale, 0.5, 0.5, 0.5 ]
- material:
- pattern:
- type: map
- mapping: spherical
- uv_pattern:
- type: image
- file: res/saturnmap-small.ppm
- # rings
- - add: csg
- operation: difference
- transform:
- - [ rotate-z, 0.2 ]
- material:
- pattern:
- type: rings
- colors:
- - [ 1, 1, 0.5 ]
- - [ 1, 1, 0 ]
- transform:
- - [ scale, 0.05, 1, 0.05 ]
- left:
- type: cylinder
- min: -0.01
- max: 0.01
- closed: true
- transform:
- - [ scale, 1.2, 1, 1.2 ]
- right:
- type: cylinder
- min: -0.02
- max: 0.02
- closed: true
- transform:
- - [ scale, 0.75, 1, 0.75 ]
- - add: group
- material: GOLD
- children:
- - add: cylinder
- min: -2.5
- max: 0
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - add: sphere
- transform:
- - [ scale, 0.025, 0.025, 0.025 ]
- - [ translate, 0, -2.5, 0 ]
- - add: cylinder
- min: 0
- max: 8
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - [ rotate-z, 1.5708 ]
- - [ translate, 0, -2.5, 0 ]
- # mechanism: gear-plate between saturn & uranus
- - add: GEAR
- material: SILVER
- transform:
- - [ scale, 0.9, 0.9, 0.9 ]
- - [ rotate-y, 1 ]
- - [ translate, 0, -2.55, 0 ]
- # uranus
- - add: group
- transform:
- - [ translate, 9, 0, 0 ]
- - [ rotate-y, -3 ]
- children:
- - add: sphere
- transform:
- - [ scale, 0.4, 0.4, 0.4 ]
- material:
- pattern:
- type: map
- mapping: spherical
- uv_pattern:
- type: image
- file: res/uranusmap-small.ppm
- - add: group
- material: GOLD
- children:
- - add: cylinder
- min: -2.6
- max: 0
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - add: sphere
- transform:
- - [ scale, 0.025, 0.025, 0.025 ]
- - [ translate, 0, -2.6, 0 ]
- - add: cylinder
- min: 0
- max: 9
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - [ rotate-z, 1.5708 ]
- - [ translate, 0, -2.6, 0 ]
- # mechanism: gear-plate between uranus & neptune
- - add: GEAR
- material: SILVER
- transform:
- - [ rotate-y, -1 ]
- - [ translate, 0, -2.65, 0 ]
- # neptune
- - add: group
- transform:
- - [ translate, 10, 0, 0 ]
- - [ rotate-y, -1.25 ]
- children:
- - add: sphere
- transform:
- - [ scale, 0.4, 0.4, 0.4 ]
- material:
- pattern:
- type: map
- mapping: spherical
- uv_pattern:
- type: image
- file: res/neptunemap-small.ppm
- - add: group
- material: GOLD
- children:
- - add: cylinder
- min: -2.7
- max: 0
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - add: sphere
- transform:
- - [ scale, 0.025, 0.025, 0.025 ]
- - [ translate, 0, -2.7, 0 ]
- - add: cylinder
- min: 0
- max: 10
- transform:
- - [ scale, 0.025, 1, 0.025 ]
- - [ rotate-z, 1.5708 ]
- - [ translate, 0, -2.7, 0 ]
- # outer sphere as the surrounding environment
- - add: sphere
- transform:
- - [ scale, 1000, 1000, 1000 ]
- material:
- pattern:
- type: map
- mapping: spherical
- uv_pattern:
- type: image
- file: res/artist_workshop.ppm
- transform:
- - [ rotate-y, -2.7 ]
- diffuse: 0
- specular: 0
- ambient: 1
|