home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1997 #3 / amigamamagazinepolishissue03-1 / ma_1995 / 07 / ami24 < prev    next >
Text File  |  1997-04-15  |  9KB  |  196 lines

  1.  
  2. Jak ulepszyê procedurë?
  3. -----------------------
  4.  
  5. CIENIOWANIE: PROSTE METODY
  6.  
  7. <lead>Dzisiaj, zgodnie z tytuîem odcinka, zajmiemy sië metodami
  8. cieniowania grafiki wektorowej. Temat ten postanowiîem rozbiê na
  9. dwie czëôci. Teraz wiëc omówië tylko mniej skomplikowane
  10. oôwietlanie prostych bryî oraz rozkîadanie sië ôwiatîa na
  11. nieruchomych obiektach, by dopiero za miesiâc poîâczyê wszystko w
  12. caîoôê. Oprócz tego, zgodnie z obietnicâ, na poczâtku dodajë parë
  13. sîów na temat fraktalowych krajobrazów.
  14.  
  15. <a>Miklesz/Damage
  16.  
  17. <txt>W poprzednim artykule wspomniaîem o moûliwoôci wykonania
  18. bocznych przechyîów kamery podczas lotu nad górami. Od razu
  19. zaznaczam, ûe metoda, którâ podam, pozwala jedynie na uzyskanie
  20. niewielkiego odchylenia od pionu, gdyû nie opiera sië na
  21. rotowaniu caîego obrazu (co spowolniîoby naszâ procedurë), lecz
  22. na pewnej sztuczce.
  23.  
  24. Wyobraúmy sobie, ûe mamy juû wygenerowany krajobraz, który skîada
  25. sië (na przykîad) z 160 punktów w osi X i 128 w Y. Teraz, aby
  26. uzyskaê efekt pseudoprzechyîu, zaczynamy powoli przesuwaê pionowe
  27. paski tak, ûe te, leûâce z lewej, powëdrujâ o np. 10 punktów w
  28. gorë, ôrodkowe nie zmieniâ wîaôciwie swojego poîoûenia, a
  29. mieszczâce sië przy prawej krawëdzi ekranu przesunâ sië o 10
  30. punktów w dóî.
  31.  
  32. Co otrzymamy? Z prostokâta powstanie równolegîobok, którego dwa
  33. boki sâ pionowe, natomiast dwa kolejne, lekko przekrzywione w
  34. stosunku osi X. Kiedy zdamy sobie sprawë, ûe figurë të wypeînia
  35. obraz, uôwiadomimy sobie, ûe sprawiaê on moûe wraûenie lekko
  36. obróconego w osi X. Sztuczkë të zastosowaîem w demie "Noxzema" i,
  37. jak sîyszaîem, niewiele osób sië zorientowaîo, ûe przechyîy sâ
  38. oszukiwane, a wiëc sië opîaca. Musimy jedynie zdaê sobie sprawë z
  39. tego, ûe im bardziej rozciâgamy nasz obraz, tym bardziej jest on
  40. deformowany!
  41.  
  42. Teraz jeszcze przepis na ruchome chmury. Co bëdzie nam potrzebne?
  43. Obraz chmur o rozmiarach równych rozmiarom mapy (np. 512 x 512
  44. pikseli) i trochë kodu. A jak to wykonaê? Otóû, nim narysujemy
  45. nasz krajobraz, korzystajâc z tablicy perspektywy X-Z, zaczynamy
  46. wypeîniaê chmurami górnâ poîówkë ekranu. Po prostu traktujemy
  47. obîoki jako "równinë" (zawsze o zerowej wysokoôci, która jednak
  48. nanoszona od góry, stworzy "sufit"). W ramach optymalizacji
  49. polecam przygotowaê specjalnâ, odrëbnâ, tablicë dla chmur, która
  50. pozwoli nam przyspieszyê rysowanie.
  51.  
  52. <sr>Patterny
  53.  
  54. <txt>Nareszcie mogë przejôê do tematu dnia, czyli cieniowania.
  55. Proponujë omówiê tu poszczególne metody, opierajâc sië na
  56. konkretnych przykîadach z dem. Na poczâtek cieniowanie
  57. "bezczasowe", to znaczy opierajâce sië jedynie na umiejëtnym
  58. podîoûeniu "patternu" z rozkîadem ôwiatîa. Przypatrzcie sië
  59. obiektowi numer 1. Pochodzi on z dema "Nexus 7" grupy Andromeda.
  60. Zastosowano tutaj bardzo starâ, choê wciâû efektownâ technikë
  61. podkîadania 'patternu" z oôwietleniem. Metoda ta jest
  62. nastëpujâca. Najpierw narysowano zwykîym programem graficznym
  63. rozkîad ôwiatîa, jaki powstaîby na sferze. "Ûarówka" zostaîa
  64. nieznacznie przesuniëta w stronë prawego górnego rogu. Z tak
  65. narysowanego patternu, korzystajâc z moûliwoôci operowania na
  66. osobnych mapach bitowych, wycinane sâ tylko te fragmenty, w
  67. których wystëpujâ wektorowe "równoleûniki". Trzeba tutaj
  68. zauwaûyê, ûe wszystkie te operacje nie zabierajâ nam cennego
  69. czasu ekranowego, gdyû przeprowadzane sâ jedynie poprzez operacje
  70. na bitach obrazu (które sâ dokonywane juû hardware'owo) oraz
  71. odpowiednie ustawianie palety. Jedynym powaûnym obciâûeniem
  72. procesora i innych ukîadów specjalizowanych Amigi, jest rysowanie
  73. kolejnych klatek wektorówki (co jednak nie powinno nam zajâê
  74. wiëcej niû 1 ramkë). Aby dokîadniej zrozumieê operacje, jakie sâ
  75. przeprowadzane przy îâczeniu patternu z obiektem, radzë sobie
  76. stworzyê (choêby na kartce) schematycznâ tablicë map bitowych.
  77. Wtedy wszystko wyglâda znacznie przejrzyôciej. Nie podajë tutaj
  78. gotowego przepisu, gdyû w zaleûnoôci od tego, ile kolorów liczyê
  79. sobie bëdzie pattern, wektor i ewentualnie (ruchome bâdú to
  80. statyczne) podkîady, sytuacja bëdzie sië zmieniaê.
  81.  
  82. <sr>Fade na Copperze
  83.  
  84. <txt>Teraz spójrzcie, proszë, na obrazek numer 2. Cieniowany,
  85. dziurawy szeôcianik pochodzi z dema "Noxzema" grupy Damage.
  86. Zastosowaîem tu jednâ z najprostszych chyba technik cieniowania.
  87. Zauwaûmy, ûe kiedy obiekt obraca sië jedynie w osi Y, to bardzo
  88. efektowny rozkîad ôwiatîa na górnej i dolnej ôciance moûemy
  89. uzyskaê, poprzez zmienianie (za pomocâ Coppera) co jednâ
  90. linië----------------?------------------- ekranu, koloru, jakim
  91. jest wypeîniony face. Dwudziestoczterobitowa paleta pozwoli
  92. uzyskaê elegancki cieï na "podîodze" i "suficie", który nie
  93. zabiera nam cennego czasu ekranowego!
  94.  
  95. <sr>Cieniowanie nieruchomych obiektów
  96.  
  97. <txt>Wyobraúmy sobie, ûe chcemy oôwietliê nieruchomy obiekt.
  98. Jedynie "ûarówka" bëdzie zmieniaê swoje poîoûenie. W tym celu
  99. musimy wygenerowaê sobie (za pomocâ programu do raytracingu)
  100. naszâ figurë w taki sposób, aby punkty coraz bardziej oddalone od
  101. obserwatora stawaîy sië coraz ciemniejsze. Jak to zrobiê? To juû
  102. nie moja dziaîka, musicie trochë pomëczyê swojego grafika 3D.
  103. Zastanówmy sië, jakâ interpretacjë ma nasz wygenerowany obiekt.
  104. Otóû moûemy uznaê, ûe jest to pîaskorzeúba, której punkty
  105. najbliûsze kamery majâ kolor 255, a najdalsze 001. Dlaczego 001,
  106. a nie 000? Poniewaû za punkt o kolorze 000 uznawaê bëdziemy punkt
  107. oddalony od obserwatora o odlegîoôê plus nieskoïczonoôê. Takie
  108. uproszczenie pozwoli nam uniknâê obliczania, i tak zawsze
  109. wygaszonych, punktów tîa obiektu. Oczywiôcie, jeûeli nasza figura
  110. pokrywa w caîoôci powierzchnië ekranu, musimy rozpatrywaê punkty
  111. 000 jako miejsca oddalone o skoïczonâ odlegîoôê. Przykîadowe,
  112. wygenerowane w podany przeze mnie sposób, obiekty znajdziecie na
  113. obrazkach numer 3 i 5. Kiedy mamy juû dane wejôciowe, czas
  114. przystâpiê do oôwietlania. Jako natëûenie ôwiatîa w punkcie
  115. przyjmiemy odlegîoôê od "ûarówki". Wynosi ona (z trójwymiarowego
  116. Równania Pitagorasa):
  117.  
  118. <l>D=(X^2+Y^2+Z^2)^(1/2)
  119.  
  120. <txt>Îatwo moûna zauwaûyê, ûe w wypadku obrazka o rozmiarach np.
  121. 128 x 128 x 128 (ta trzecia wartoôê to oczywiôcie "gîëbokoôê")
  122. maksymalnâ odlegîoôciâ jest D=221.7025 (w przybliûeniu D=222).
  123. Naleûy wiëc tak dobraê ustawienie jasnoôci punktów, aby przy D=0
  124. byîa ona najwiëksza i malaîa wraz z tym, jak sië oddalamy. W
  125. praktyce okazuje sië, ûe bardziej efektowne jest caîkowite
  126. wygaszenie juû w poîowie maksymalnej odlegîoôci, czyli dla
  127. D=110.85125 (W przybliûeniu D=111). Dalej rysujemy juû jedynie
  128. czarne (ew. bardzo ciemne) punkty. Jak wiëc bëdzie wyglâdaî peîny
  129. algorytm? Pierwszâ rzeczâ, jakâ musimy zrobiê, jest...
  130. przygotowanie paru tablic! Zaczynamy od przetablicowania
  131. wszystkich, jaôniejszych od 000, punktów obrazka. Dla kaûdego z
  132. nich zapisujemy koordynaty X, Y, oraz Z^2 (tak, tak, podnosimy Z
  133. do kwadratu). Warto teû sobie zapisaê, ile punktów
  134. przetablicowaliômy, gdyû tyle samo trzeba bëdzie póúniej
  135. narysowaê. Drugâ tablicâ jest zestawienie wszystkich potëg liczb
  136. od -128 do +128. Oprócz tego musimy sobie przeliczyê pierwiastki
  137. wszystkich liczb od 0 do (128^2) x 3.
  138.  
  139. Drobna uwaga, warto juû wyliczone pierwiastki, przemnoûyê przez
  140. wspóîczynnik zwiëkszajâcy lub zmniejszajâcy zasiëg rozkîadu
  141. ôwiatîa na powierzchni obiektu. Oznacza to, ûe jeôli chcemy
  142. uzyskaê caîkowite wygaszenie w odlegîoôci D=111, a mamy do
  143. dyspozycji 16 odcieni, to na kaûdy jeden, przypadaê bëdzie mniej
  144. wiëcej siedem kolejnych wartoôci D, co musimy uwzglëdniê przy
  145. sporzâdzaniu tablicy. Kiedy juû jesteômy przygotowani, zaczynamy
  146. rysowaê obiekt. Ustalamy X i Y úródîa ôwiatîa. Nastëpnie
  147. obliczamy odlegîoôê w obu osiach od kaûdego z punktów. Dla
  148. uproszczenia zakîadamy, ûe "ûarówka" porusza sië tuû nad
  149. obiektem, czyli odlegîoôê "w gîâb" wynosi zawsze Z. Z
  150. matematycznego punktu widzenia:
  151.  
  152. <l>D=((Xp-Xû)^2+(Yp-Yû)^2+(Zp-Zû)^2)^(1/2)
  153.  
  154. <txt>A poniewaû:
  155.  
  156. <l>Zû=0
  157.  
  158. <txt>to:
  159.  
  160. <l>D=((Xp-Xû)^2+(Yp-Yû)^2+(Zp)^2)^(1/2)
  161.  
  162. <txt>Dla wyjaônienia: indeks "û" to ûarówka, a "p" to punkt.
  163. Przypominam, ûe zarówno podnoszenie do kwadratu, jak i
  164. pierwiastkowanie rozwiâzujemy za pomocâ tablic. Pozostaje nam
  165. teraz jedynie zapisaê wyliczony punkt i zabraê sië do nastëpnego.
  166. W wypadku, kiedy chcemy uzyskaê dwa úródîa ôwiatîa, moûemy na
  167. ekranie 256-kolorowym, dolne 4 bity koloru przeznaczyê na
  168. pierwszâ "ûarówkë", a górne 4, na drugâ.
  169.  
  170. <sr>Ilustracje
  171.  
  172. <txt>Pozostaîo mi chyba jedynie omówiê pozostaîe ilustracje. To,
  173. co widzicie pod numerkiem 3, to obiekt przykîadowy: "Lamp"
  174. autorstwa Bednara z grupy Damage, przedstawiony w formie "im
  175. jaôniejszy punkt, tym bliûej". Na podstawie tak wygenerowanego
  176. obrazka, po oôwietleniu dwoma úródîami ôwiatîa, moûemy otrzymaê
  177. efekt widoczny na ilustracji nr 4 (dla niedowiarków: to, co
  178. widzicie, jest zgranym ekranem dziaîajâcego kodu...). Podobnie ma
  179. sië sprawa z obrazkiem piâtym i szóstym. Mam nadziejë, ûe Kefir z
  180. grupy Public Image Limited Of Union (koder dema "Zoombie") nie
  181. obrazi sië na mnie za wykorzystanie w tym artykule jego danych
  182. úródîowych (obiektu "Porshe"). Ostatna ilustracja to obiekt,
  183. pochodzâcy z dema "Psychedelic" grupy Virtual Dreams Of
  184. FairLight. Nie jestem w stanie w stu procentach stwierdziê, czy
  185. oôwietlenie zostaîo wykonane przedstawionym przeze mnie
  186. algorytmem "but it looks familiar..."
  187.  
  188. <sr>Sîowo na niedzielë
  189.  
  190. <txt>W nastëpnym odcinku, jak juû wspominaîem, zajmiemy sië
  191. bardziej wyrafinowanymi metodami oôwietlania i cieniowania. Do
  192. zobaczenia... Úle... Do usîyszenia...  Teû nie... Do
  193. "przeczytania" za miesiâc!
  194.  
  195.  
  196.