orrery.yml 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685
  1. # ======================================================
  2. # orrery.yml
  3. #
  4. # This file describes the title image for the "Texture
  5. # Mapping" bonus chapter at:
  6. #
  7. # http://www.raytracerchallenge.com/bonus/texture-mapping.html
  8. #
  9. # It requires several additional resources, provided as a
  10. # separate download. The resources were found on the following
  11. # sites:
  12. #
  13. # * https://www.bittbox.com/freebies/free-hi-resolution-wood-textures
  14. # : the wooden texture for the table
  15. # * https://astrogeology.usgs.gov/search/map/Mercury/Messenger/Global/Mercury_MESSENGER_MDIS_Basemap_LOI_Mosaic_Global_166m
  16. # : the map of Mercury
  17. # * http://planetpixelemporium.com/planets.html
  18. # : maps of Earth, Mars, Jupiter, Saturn, Uranus, and Neptune
  19. # * https://hdrihaven.com/hdri/?c=indoor&h=artist_workshop
  20. # : the "artist workshop" environment map
  21. #
  22. # by Jamis Buck <jamis@jamisbuck.org>
  23. # ======================================================
  24. - add: camera
  25. width: 800
  26. height: 400
  27. field-of-view: 1.2
  28. from: [ 2, 4, -10]
  29. to: [ -1, -1, 0 ]
  30. up: [ 0, 1, 0 ]
  31. # The scene as shown in the bonus chapter is rendered using an area light,
  32. # precisely as described in the "Rendering soft shadows" bonus chapter,
  33. # here: http://www.raytracerchallenge.com/bonus/area-light.html
  34. #
  35. # if you haven't implemented area lights, you can replace this with a point
  36. # light located at [0, 2.5, -10].
  37. - add: light
  38. corner: [-5, 0, -10 ]
  39. uvec: [ 10, 0, 0 ]
  40. vvec: [ 0, 5, 0 ]
  41. usteps: 10
  42. vsteps: 5
  43. jitter: true
  44. intensity: [ 1, 1, 1 ]
  45. # -------------------------------------------
  46. # some common textures
  47. # -------------------------------------------
  48. - define: GOLD
  49. value:
  50. color: [ 1, 0.8, 0.1 ]
  51. ambient: 0.1
  52. diffuse: 0.6
  53. specular: 0.3
  54. shininess: 15
  55. - define: SILVER
  56. value:
  57. color: [ 1, 1, 1 ]
  58. ambient: 0.1
  59. diffuse: 0.7
  60. specular: 0.3
  61. shininess: 15
  62. # -----------------------------------------------
  63. # CSG definition for the gears used to construct
  64. # the orrery.
  65. #
  66. # NOTCH is a helper object used to create the
  67. # teeth for the gears.
  68. #
  69. # GEAR is the actual gear object itself.
  70. # -----------------------------------------------
  71. - define: NOTCH
  72. value:
  73. add: csg
  74. operation: difference
  75. left:
  76. type: cube
  77. transform:
  78. - [ scale, 1, 0.25, 1 ]
  79. - [ translate, 1, 0, 1 ]
  80. - [ rotate-y, 0.7854 ]
  81. - [ scale, 1, 1, 0.1 ]
  82. right:
  83. type: cylinder
  84. min: -0.26
  85. max: 0.26
  86. closed: true
  87. transform:
  88. - [ scale, 0.8, 1, 0.8 ]
  89. - define: GEAR
  90. value:
  91. add: csg
  92. operation: difference
  93. left:
  94. type: cylinder
  95. min: -0.025
  96. max: 0.025
  97. closed: true
  98. right:
  99. type: group
  100. children:
  101. # center hole
  102. - add: cylinder
  103. min: -0.06
  104. max: 0.06
  105. closed: true
  106. transform:
  107. - [ scale, 0.1, 1, 0.1 ]
  108. # crescents
  109. - add: csg
  110. operation: difference
  111. left:
  112. type: cylinder
  113. min: -0.06
  114. max: 0.06
  115. closed: true
  116. transform:
  117. - [ scale, 0.7, 1, 0.7 ]
  118. right:
  119. type: cube
  120. transform:
  121. - [ scale, 1, 0.1, 0.2 ]
  122. # teeth
  123. - add: NOTCH
  124. - add: NOTCH
  125. transform:
  126. - [ rotate-y, 0.31415 ]
  127. - add: NOTCH
  128. transform:
  129. - [ rotate-y, 0.6283 ]
  130. - add: NOTCH
  131. transform:
  132. - [ rotate-y, 0.94245 ]
  133. - add: NOTCH
  134. transform:
  135. - [ rotate-y, 1.2566 ]
  136. - add: NOTCH
  137. transform:
  138. - [ rotate-y, 1.57075 ]
  139. - add: NOTCH
  140. transform:
  141. - [ rotate-y, 1.8849 ]
  142. - add: NOTCH
  143. transform:
  144. - [ rotate-y, 2.19905 ]
  145. - add: NOTCH
  146. transform:
  147. - [ rotate-y, 2.5132 ]
  148. - add: NOTCH
  149. transform:
  150. - [ rotate-y, 2.82735 ]
  151. - add: NOTCH
  152. transform:
  153. - [ rotate-y, 3.1415 ]
  154. - add: NOTCH
  155. transform:
  156. - [ rotate-y, -0.31415 ]
  157. - add: NOTCH
  158. transform:
  159. - [ rotate-y, -0.6283 ]
  160. - add: NOTCH
  161. transform:
  162. - [ rotate-y, -0.94245 ]
  163. - add: NOTCH
  164. transform:
  165. - [ rotate-y, -1.2566 ]
  166. - add: NOTCH
  167. transform:
  168. - [ rotate-y, -1.57075 ]
  169. - add: NOTCH
  170. transform:
  171. - [ rotate-y, -1.8849 ]
  172. - add: NOTCH
  173. transform:
  174. - [ rotate-y, -2.19905 ]
  175. - add: NOTCH
  176. transform:
  177. - [ rotate-y, -2.5132 ]
  178. - add: NOTCH
  179. transform:
  180. - [ rotate-y, -2.82735 ]
  181. # mechanism: top plate
  182. - add: csg
  183. operation: difference
  184. material: GOLD
  185. transform:
  186. - [ rotate-y, -1 ]
  187. left:
  188. type: cylinder
  189. min: -1.51
  190. max: -1.5
  191. closed: true
  192. right:
  193. type: group
  194. children:
  195. - add: cylinder
  196. min: -1.52
  197. max: -1.49
  198. closed: true
  199. transform:
  200. - [ scale, 0.1, 1, 0.1 ]
  201. - add: csg
  202. operation: difference
  203. left:
  204. type: cylinder
  205. min: -1.52
  206. max: -1.49
  207. closed: true
  208. transform:
  209. - [ scale, 0.75, 1, 0.75 ]
  210. right:
  211. type: cube
  212. transform:
  213. - [ scale, 1, 0.1, 0.2 ]
  214. - [ translate, 0, -1.5, 0 ]
  215. # mechanism: gear
  216. - add: GEAR
  217. material: SILVER
  218. transform:
  219. - [ scale, 0.5, 0.5, 0.5 ]
  220. - [ translate, 0.4, -1.45, -0.4 ]
  221. # mechanism: gear
  222. - add: GEAR
  223. material: SILVER
  224. transform:
  225. - [ rotate-y, 0.8 ]
  226. - [ scale, 0.4, 0.4, 0.4 ]
  227. - [ translate, -0.4, -1.45, 0.2 ]
  228. # sun
  229. - add: group
  230. children:
  231. - add: sphere
  232. shadow: false
  233. material:
  234. color: [1, 1, 0]
  235. ambient: 0.1
  236. diffuse: 0.6
  237. specular: 0 # count on the skybox reflection being the specular highlight
  238. reflective: 0.2
  239. - add: group
  240. material: GOLD
  241. children:
  242. - add: cylinder
  243. min: -4
  244. max: -0.5
  245. transform:
  246. - [ scale, 0.025, 1, 0.025 ]
  247. # base
  248. - add: sphere
  249. transform:
  250. - [ translate, 0, -4, 0 ]
  251. material:
  252. pattern:
  253. type: map
  254. mapping: spherical
  255. uv_pattern:
  256. type: checkers
  257. width: 16
  258. height: 8
  259. colors:
  260. - [ 0, 0, 0 ]
  261. - [ 0.5, 0.5, 0.5 ]
  262. diffuse: 0.6
  263. specular: 0 # count on the skybox reflection being the specular highlight
  264. ambient: 0.1
  265. reflective: 0.2
  266. # table
  267. - add: cube
  268. transform:
  269. - [ scale, 5, 0.1, 5 ]
  270. - [ translate, 0, -4, 0 ]
  271. material:
  272. diffuse: 0.9
  273. ambient: 0.1
  274. specular: 0
  275. pattern:
  276. type: map
  277. mapping: planar
  278. uv_pattern:
  279. type: image
  280. file: res/wood.ppm
  281. transform:
  282. - [ scale, 0.5, 0.5, 0.5 ]
  283. # mechanism: gear-plate between top & mercury
  284. - add: GEAR
  285. material: SILVER
  286. transform:
  287. - [ rotate-y, -0.4 ]
  288. - [ scale, 0.9, 0.9, 0.9 ]
  289. - [ translate, 0, -1.75, 0 ]
  290. # mercury
  291. - add: group
  292. transform:
  293. - [ translate, 2, 0, 0 ]
  294. - [ rotate-y, 0.7 ]
  295. children:
  296. - add: sphere
  297. transform:
  298. - [ scale, 0.25, 0.25, 0.25 ]
  299. material:
  300. pattern:
  301. type: map
  302. mapping: spherical
  303. uv_pattern:
  304. type: image
  305. file: res/mercury-small.ppm
  306. - add: group
  307. material: GOLD
  308. children:
  309. - add: cylinder
  310. min: -2
  311. max: 0
  312. transform:
  313. - [ scale, 0.025, 1, 0.025 ]
  314. - add: sphere
  315. transform:
  316. - [ scale, 0.025, 0.025, 0.025 ]
  317. - [ translate, 0, -2, 0 ]
  318. - add: cylinder
  319. min: 0
  320. max: 2
  321. transform:
  322. - [ scale, 0.025, 1, 0.025 ]
  323. - [ rotate-z, 1.5708 ]
  324. - [ translate, 0, -2, 0 ]
  325. # mechanism: gear-plate between mercury & venus
  326. - add: GEAR
  327. material: SILVER
  328. transform:
  329. - [ rotate-y, 1.3 ]
  330. - [ translate, 0, -2.05, 0 ]
  331. # venus
  332. - add: group
  333. transform:
  334. - [ translate, 3, 0, 0 ]
  335. - [ rotate-y, 0.3 ]
  336. children:
  337. - add: sphere
  338. transform:
  339. - [ scale, 0.25, 0.25, 0.25 ]
  340. material:
  341. color: [ 1, 1, 0.8 ]
  342. - add: group
  343. material: GOLD
  344. children:
  345. - add: cylinder
  346. min: -2.1
  347. max: 0
  348. transform:
  349. - [ scale, 0.025, 1, 0.025 ]
  350. - add: sphere
  351. transform:
  352. - [ scale, 0.025, 0.025, 0.025 ]
  353. - [ translate, 0, -2.1, 0 ]
  354. - add: cylinder
  355. min: 0
  356. max: 3
  357. transform:
  358. - [ scale, 0.025, 1, 0.025 ]
  359. - [ rotate-z, 1.5708 ]
  360. - [ translate, 0, -2.1, 0 ]
  361. # mechanism: gear-plate between venus & earth
  362. - add: GEAR
  363. material: SILVER
  364. transform:
  365. - [ scale, 0.9, 0.9, 0.9 ]
  366. - [ rotate-y, -2.2 ]
  367. - [ translate, 0, -2.15, 0 ]
  368. # earth
  369. - add: group
  370. transform:
  371. - [ translate, 4, 0, 0 ]
  372. - [ rotate-y, 2 ]
  373. children:
  374. - add: sphere
  375. transform:
  376. - [ scale, 0.25, 0.25, 0.25 ]
  377. material:
  378. pattern:
  379. type: map
  380. mapping: spherical
  381. uv_pattern:
  382. type: image
  383. file: res/earthmap-small.ppm
  384. - add: group
  385. material: GOLD
  386. children:
  387. - add: cylinder
  388. min: -2.2
  389. max: 0
  390. transform:
  391. - [ scale, 0.025, 1, 0.025 ]
  392. - add: sphere
  393. transform:
  394. - [ scale, 0.025, 0.025, 0.025 ]
  395. - [ translate, 0, -2.2, 0 ]
  396. - add: cylinder
  397. min: 0
  398. max: 4
  399. transform:
  400. - [ scale, 0.025, 1, 0.025 ]
  401. - [ rotate-z, 1.5708 ]
  402. - [ translate, 0, -2.2, 0 ]
  403. # mechanism: gear-plate between earth & mars
  404. - add: GEAR
  405. material: SILVER
  406. transform:
  407. - [ scale, 0.8, 0.8, 0.8 ]
  408. - [ rotate-y, 1.7 ]
  409. - [ translate, 0, -2.25, 0 ]
  410. # mars
  411. - add: group
  412. transform:
  413. - [ translate, 5, 0, 0 ]
  414. - [ rotate-y, -2 ]
  415. children:
  416. - add: sphere
  417. transform:
  418. - [ scale, 0.25, 0.25, 0.25 ]
  419. material:
  420. pattern:
  421. type: map
  422. mapping: spherical
  423. uv_pattern:
  424. type: image
  425. file: res/mars-small.ppm
  426. - add: group
  427. material: GOLD
  428. children:
  429. - add: cylinder
  430. min: -2.3
  431. max: 0
  432. transform:
  433. - [ scale, 0.025, 1, 0.025 ]
  434. - add: sphere
  435. transform:
  436. - [ scale, 0.025, 0.025, 0.025 ]
  437. - [ translate, 0, -2.3, 0 ]
  438. - add: cylinder
  439. min: 0
  440. max: 5
  441. transform:
  442. - [ scale, 0.025, 1, 0.025 ]
  443. - [ rotate-z, 1.5708 ]
  444. - [ translate, 0, -2.3, 0 ]
  445. # mechanism: gear-plate between mars & jupiter
  446. - add: GEAR
  447. material: SILVER
  448. transform:
  449. - [ rotate-y, -0.9 ]
  450. - [ translate, 0, -2.35, 0 ]
  451. # jupiter
  452. - add: group
  453. transform:
  454. - [ translate, 6.5, 0, 0 ]
  455. - [ rotate-y, -0.75 ]
  456. children:
  457. - add: sphere
  458. transform:
  459. - [ scale, 0.67, 0.67, 0.67 ]
  460. material:
  461. pattern:
  462. type: map
  463. mapping: spherical
  464. uv_pattern:
  465. type: image
  466. file: res/jupitermap-small.ppm
  467. - add: group
  468. material: GOLD
  469. children:
  470. - add: cylinder
  471. min: -2.4
  472. max: 0
  473. transform:
  474. - [ scale, 0.025, 1, 0.025 ]
  475. - add: sphere
  476. transform:
  477. - [ scale, 0.025, 0.025, 0.025 ]
  478. - [ translate, 0, -2.4, 0 ]
  479. - add: cylinder
  480. min: 0
  481. max: 6.5
  482. transform:
  483. - [ scale, 0.025, 1, 0.025 ]
  484. - [ rotate-z, 1.5708 ]
  485. - [ translate, 0, -2.4, 0 ]
  486. # mechanism: gear-plate between jupiter & saturn
  487. - add: GEAR
  488. material: SILVER
  489. transform:
  490. - [ scale, 0.95, 0.95, 0.95 ]
  491. - [ rotate-y, -1.1 ]
  492. - [ translate, 0, -2.45, 0 ]
  493. # saturn
  494. - add: group
  495. transform:
  496. - [ translate, 8, 0, 0 ]
  497. - [ rotate-y, -2.5 ]
  498. children:
  499. - add: sphere
  500. transform:
  501. - [ scale, 0.5, 0.5, 0.5 ]
  502. material:
  503. pattern:
  504. type: map
  505. mapping: spherical
  506. uv_pattern:
  507. type: image
  508. file: res/saturnmap-small.ppm
  509. # rings
  510. - add: csg
  511. operation: difference
  512. transform:
  513. - [ rotate-z, 0.2 ]
  514. material:
  515. pattern:
  516. type: rings
  517. colors:
  518. - [ 1, 1, 0.5 ]
  519. - [ 1, 1, 0 ]
  520. transform:
  521. - [ scale, 0.05, 1, 0.05 ]
  522. left:
  523. type: cylinder
  524. min: -0.01
  525. max: 0.01
  526. closed: true
  527. transform:
  528. - [ scale, 1.2, 1, 1.2 ]
  529. right:
  530. type: cylinder
  531. min: -0.02
  532. max: 0.02
  533. closed: true
  534. transform:
  535. - [ scale, 0.75, 1, 0.75 ]
  536. - add: group
  537. material: GOLD
  538. children:
  539. - add: cylinder
  540. min: -2.5
  541. max: 0
  542. transform:
  543. - [ scale, 0.025, 1, 0.025 ]
  544. - add: sphere
  545. transform:
  546. - [ scale, 0.025, 0.025, 0.025 ]
  547. - [ translate, 0, -2.5, 0 ]
  548. - add: cylinder
  549. min: 0
  550. max: 8
  551. transform:
  552. - [ scale, 0.025, 1, 0.025 ]
  553. - [ rotate-z, 1.5708 ]
  554. - [ translate, 0, -2.5, 0 ]
  555. # mechanism: gear-plate between saturn & uranus
  556. - add: GEAR
  557. material: SILVER
  558. transform:
  559. - [ scale, 0.9, 0.9, 0.9 ]
  560. - [ rotate-y, 1 ]
  561. - [ translate, 0, -2.55, 0 ]
  562. # uranus
  563. - add: group
  564. transform:
  565. - [ translate, 9, 0, 0 ]
  566. - [ rotate-y, -3 ]
  567. children:
  568. - add: sphere
  569. transform:
  570. - [ scale, 0.4, 0.4, 0.4 ]
  571. material:
  572. pattern:
  573. type: map
  574. mapping: spherical
  575. uv_pattern:
  576. type: image
  577. file: res/uranusmap-small.ppm
  578. - add: group
  579. material: GOLD
  580. children:
  581. - add: cylinder
  582. min: -2.6
  583. max: 0
  584. transform:
  585. - [ scale, 0.025, 1, 0.025 ]
  586. - add: sphere
  587. transform:
  588. - [ scale, 0.025, 0.025, 0.025 ]
  589. - [ translate, 0, -2.6, 0 ]
  590. - add: cylinder
  591. min: 0
  592. max: 9
  593. transform:
  594. - [ scale, 0.025, 1, 0.025 ]
  595. - [ rotate-z, 1.5708 ]
  596. - [ translate, 0, -2.6, 0 ]
  597. # mechanism: gear-plate between uranus & neptune
  598. - add: GEAR
  599. material: SILVER
  600. transform:
  601. - [ rotate-y, -1 ]
  602. - [ translate, 0, -2.65, 0 ]
  603. # neptune
  604. - add: group
  605. transform:
  606. - [ translate, 10, 0, 0 ]
  607. - [ rotate-y, -1.25 ]
  608. children:
  609. - add: sphere
  610. transform:
  611. - [ scale, 0.4, 0.4, 0.4 ]
  612. material:
  613. pattern:
  614. type: map
  615. mapping: spherical
  616. uv_pattern:
  617. type: image
  618. file: res/neptunemap-small.ppm
  619. - add: group
  620. material: GOLD
  621. children:
  622. - add: cylinder
  623. min: -2.7
  624. max: 0
  625. transform:
  626. - [ scale, 0.025, 1, 0.025 ]
  627. - add: sphere
  628. transform:
  629. - [ scale, 0.025, 0.025, 0.025 ]
  630. - [ translate, 0, -2.7, 0 ]
  631. - add: cylinder
  632. min: 0
  633. max: 10
  634. transform:
  635. - [ scale, 0.025, 1, 0.025 ]
  636. - [ rotate-z, 1.5708 ]
  637. - [ translate, 0, -2.7, 0 ]
  638. # outer sphere as the surrounding environment
  639. - add: sphere
  640. transform:
  641. - [ scale, 1000, 1000, 1000 ]
  642. material:
  643. pattern:
  644. type: map
  645. mapping: spherical
  646. uv_pattern:
  647. type: image
  648. file: res/artist_workshop.ppm
  649. transform:
  650. - [ rotate-y, -2.7 ]
  651. diffuse: 0
  652. specular: 0
  653. ambient: 1