Witamy, Gość. Zaloguj się lub zarejestruj.

Autor Wątek: Jak zrobić bałwanka i bombki w POV-Rayu  (Przeczytany 11686 razy)

0 Użytkowników i 1 Gość przegląda ten wątek.

Abik

Jak zrobić bałwanka i bombki w POV-Rayu
« dnia: Grudzień 11, 2011, 20:19:21 »
Siemanko! Idzie zimna, święta bożego narodzenia, moje ulubione i fajnie byłoby coś tematycznego związanego z zimą, świętami sobie pierdyknąć. W tym tutorialu skorzystamy z boskiego POV-Raya, aby stworzyć sobie bałwanka i świąteczne bombki.
Nie ma się co śmiać, nie są to wcale takie banalne przykłady i myślę, że sporo się przy ich tworzeniu nauczymy. W planach mam zamiar skupić głównie na nauczeniu was jak opisywać powierzchnie tworzonych obiektów. Wiecie, nakładać tekstury, odbijać światło. Nie było tego w tutorial o podstawach POV-Raya, a jest to jednak temat bardzo ważny. Tak czy siak, czy uda się plan zrealizować to jeszcze nie wiem bo jak zwykle piszę tego tutoriala na spontanie bez większego przygotowania, ale damy radę!
Zakładam, że czytając tego tutoriala, macie już pewne podstawy ( http://burning-brushes.pl/pozostale-tutoriale/podstawy-pov-raya/ ) i nie będę wyjaśniał tych najbardziej podstawowych rzeczy. Zacznijmy.

Część pierwsza - Bałwanek

Zróbmy najpierw może małą analizę obiektu jakim jest bałwanek (aha, jeszcze jedno, jak korzystam z tego słowa, to nie mam na myśli was, przynajmniej nie zawsze).
Taki standardowy bałwan składa się z trzech dużych śnieżnych kuli ułożonych jedna na drugiej, przy czym zazwyczaj te wyższe kule są coraz mniejsze. Dalej potrzebne nam są kawałki węgla (przynajmniej tak to się u mnie robiło), które będą nam służyć za guziki, oczy i usta. Marchewka jako nos i miotła, jako ręka. A i jeszcze jakiś kapelusz.
Nie widzę w tym absolutnie nic trudnego, więc jedziemy. Zaczynamy oczywiście do tego co jest konieczne w każdej scenie czyli od kamery i światła. Niech będzie, że światło padać będzie gdzieś z przodu, a kamera będzie gdzieś trochę nad bałwanem, ale tak żebyśmy patrzyli na niego od przodu.
Kod nasz może wyglądać tak:
#include "colors.inc"

camera{ location <-3,8,-10> look_at<0,0,0>}
light_source{ <0,10,-10> color White }
Ekstra, chociaż to nadal trochę mało, żeby coś zobaczyć. Zanim dodamy jakieś elementy bałwana zróbmy sobie płaszczyznę (plane), tak żeby móc bałwana na czymś postawić. Będzie nasza płaszczyzna prostopadła do osi Y i nie będzie przesunięta, czyli będzie przecinać ją w punkcie 0. Zapisujemy to w następujący sposób:
plane{y, 0 pigment{color White}}i teraz już coś zobaczymy:

Szału nie ma, ale grunt, że mamy grunt (przy okazji, pamiętacie Grunta z Mass Effecta 2? Ale bym sobie znowu pograł)! Teraz możemy dodać sobie pierwszą kulę. Mam nadzieję, że wiecie jak to zrobić. Ważne, żeby pamiętać o środku kuli i promieniu. Chodzi o to, że jeśli kulę umieścimy np. dwie jednostki nad powierzchnią gleby, to promień musi być równy 2, no bo ta kula musi sięgać ziemi, nie może lewitować. Pamiętajcie o tym koniecznie!
Kod pierwszej kuli proponuję taki:
sphere{<0,0,0>,3 pigment{color White} translate<0,3,0>}Zauważcie ten trik. Kulę umieszczamy w punkcie 0,0,0, ale korzystamy z polecenia translate, tak żeby przesunąć ją tam gdzie dokładnie chcemy. Pamiętacie co mówiłem? Ważne, żeby wyrabiać sobie ten nawyk, w przypadku kul nie jest to może szczególnie zauważalne, ale już w przypadku prostopadłościanów, stożków i innych brył to bardzo ułatwia życie. Nasz obraz, wygląda teraz tak:

Chyba, że korzystacie z innych parametrów, do czego szczerze zachęcam :>
Ale co do naszego obrazka, to mi trochę nie pasi ta kamera jednak bo nie zobaczymy głowy bałwana, trochę więc ją obniżmy i podnieśmy punkt, na który patrzymy (look_at), w taki sposób:
camera{ location <-3,4,-10> look_at<0,5,0>}co daje taki efekt:

Teraz jest ok i śmiało możemy dodać kolejne kule. Druga (czyli ta środkowa) musi być trochę mniejsza od pierwszej i znajdować się w przestrzeni trochę wyżej. Na przykład coś takiego:
sphere{<0,0,0>,1.9 pigment{color White} translate<0,7,0>}Dlaczego akurat takie wartości? No jest trochę mniejsza bo 1.9 to mniej niż 3, a z drugiej strony nie jest to dużo mniej więc nasz bałwan nie będzie anorektykiem. Wartość Y = 7 przy przesunięciu jest dużo ciekawsza. No nasza kula pierwsza ma R = 3, czyli teoretycznie jej szczytowy punkt jest na wysokości 6, jeśli do tego dodamy promień naszej nowej kuli, czyli 1.9 to uzyskujemy wartość 7.9, czyli więcej niż zostało w praktyce użyte. Dlaczego? No ja to robię tylko po to, żeby wyglądało to trochę bardziej realnie bo raczej nie uda się ze śniegu ułożyć dwóch kul tak, żeby stykały się idealnie w jednym punkcie, do tego takie mniejsze prześwity między kulami bałwana po prostu wyglądają lepiej, bałwan wygląda jakby chodził na siłkę.
Nasz obrazek teraz wygląda tak, dla jasności:

Wszystko gra. Jak co, to zmieniłem sobie znów kamerę, Y od location ustawiłem na 8. No ale zajmijmy się trzecią kulą. Ona musi być jeszcze trochę mniejsza i jeszcze trochę wyżej:
sphere{<0,0,0>,1.2 pigment{color White} translate<0,9.6,0>}
Trochę mi nie grają te proporcje między kulami, druga jest za mała w stosunku do tej pierwszej, nie ma żadnego problemu żeby to poprawić. Dużych poprawek to nie wymagało, dokładnie kod wszystkich trzech kuli wygląda u mnie tak:

Ekkkkkstra! Taki jeszcze mały detal, wkurza mnie te czarne niebo, zmieńmy je sobie poleceniem background:
background{color<0.2,0.2,0.3>}   Niech będzie takie szarawe na razie.
Zacznijmy teraz robić coś fajnego, dodajmy guziki! Nie wiem czy w dzieciństwie robiliście bałwany. Guziki ja robiłem zawsze z takich małych węgielków, kształtem zbliżonym do kulek. No i też kulki właśnie nam się tu przydadzą. Będą to bardzo małe kulki, ale to co jest bardziej istotne, to żeby stykały się, czy wręcz wchodziły w nasze kule tworzące ciało bałwana, tak jakby były do niego przyczepione. Pierwszy węgielek może wyglądać, np tak (daję wam tutaj cały kod bo łatwo się pogubić w tym momencie, a tego byśmy nie chcieli):
#include "colors.inc"

camera{ location <-3,8,-10> look_at<0,7,0>}
light_source{ <0,10,-10> color White }             

plane{y, 0 pigment{color White}}

background{color<0.2,0.2,0.3>}   

//cialo balwana
sphere{<0,0,0>,3 pigment{color White} translate<0,3,0>}
sphere{<0,0,0>,2.1 pigment{color White} translate<0,7,0>}
sphere{<0,0,0>,1.4 pigment{color White} translate<0,9.8,0>}     
//guziki     
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,4.5,-2.7>}
co po wyrenderowaniu wygląda następująco:

Rozumiecie już teraz na pewno o co chodzi z guzikami? Widać, że to dość małe kulki. Jeśli chodzi o ich umiejscowienie... X zostawiamy na 0, no bo jak najbardziej pasuje nam żeby guziki znajdowały się na środku bałwana. Y warto zwiększyć bo guzików od samej "podłogi" chyba się nie robi. Na ile dokładnie zwiększymy Y zależy od tego odkąd chcemy zacząć umieszczać guziki, nasz wybór. U mnie 4.5 w praktyce oznacza 3/4 wysokości najniższej kuli. Najciekawsza jest wartość Z, bo ona musi być ustawiona tak, żeby węgielek wbijał się w kulę. Zachęcam was do kombinowania tak długo aż uzyskacie oczekiwany efekt. Wraz z nabieraniem większego doświadczenia pojawi się coraz lepsze wyczucie, gdzie powinny się obiekty znajdować. Można by to obliczyć, ale chyba nie jest to aż tak trudne do trafienia za drugim czy tam może nawet czwartym razem, więc kombinujcie, zawsze!
Wiecie już wszystko o naszym guziczku, więc dodajemy kolejne. Jedyne co zmieniamy to Y i Z przesunięcia (translate). Y, bo nasze guziki muszą przecież być coraz wyżej. Z, bo kula na danej wysokość ma punkty o różnym oddaleniu od nas. Popatrzcie sami, tutaj kod wszystkich węgielków:
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,4.5,-2.7>}       
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,5.4,-2>}
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,6.4,-2.1>}
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,7.3,-2.2>}

i wyglądają one tak:

Widzimy od przodu i od boku, żeby była najjaśniejsza jasność, że wszystko gra (u góry na screenach macie parametry kamery). Guziki gotowe, ale to jeszcze nie koniec zabawy z węglem. W taki sam sposób zrobimy oczy i usta. Nie ma tu żadnej filozofii, tyle tylko, że będziemy tym razem musieli również odpowiednio zedytować współrzędną X naszych kulek. Moja propozycja "twarzy" bałwana:
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.5,9.9,-1.3>} //prawe oko
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.5,9.9,-1.3>}  //lewe oko
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.5,9.3,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.3,9.1,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.05,9,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.2,9,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.45,9.1,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.6,9.2,-1.2>} 
No już zaczyna się porządne pisanie co nie? Warto zauważyć, że np. dla oczu X lewego oka jest odwrotnością prawego, a pozostałe parametry mają takie same. Uśmiech tworzymy metodą prób i błędów, zaczynamy od jednej strony i dokładamy kolejne węgielki, nie jest to wcale jakieś czasochłonne. Efekt:

Całkiem seksi ten nasz bałwan. Ale doróbmy mu jeszcze nos. Teoretycznie powinna być to marchewka, w praktyce będzie to stożek. Stożek nie jest może idealną bryłą do imitowania marchewki, ale... ale do naszych potrzeb starczy, o. Ale powoli z tym stożkiem. Najpierw zróbmy sobie normalny zwykły stożek w punkcie 0,0,0, o jakiejś tam wysokości, w taki sposób:
cone{<0,0,0>,0.5,<0,0,-2>,0 pigment{color Orange}}Dość wąski stożek (szeroki nie może być bo zasłoni nam całą twarz), o wysokości 2, albo raczej długości bo zmieniamy mu Z, a nie Y bo to ma być stożek ostry w naszą stronę, że tak powiem. Teraz jakbyśmy to wyrenderowali to i tak go nie zobaczymy bo musimy się nim trochę zająć - przesunąć go w odpowiednie miejsce, np. takim poleceniem:
translate<0,9.4,-1.3>No, ale wyrenderujmy sobie teraz bałwana.

Buehehehe, i tak zasłania nam pół twarzy ten nos. Czyli trzeba pierwszy promień zmienić. No to zmniejszamy, np. na 0.1, no i dokonujemy paru mniejszych zmian, co już wam pokazuję:
cone{<0,0,0>,0.1,<0,0,-1>,0 pigment{color Orange} translate<0,9.6,-1.3>}No i jest:

Sorry za mniejszego screena, ale kryzys robi swoje. No, ale mniejsza o kryzys, zajmijmy się nakryciem głowy naszego bałwananana. Ma to być kapelusz, czyli potrzebne będą dwa walce, jeden bardzo niski, ale rozległy, na ten taki rondelek, i drugi wyższy, ale węższy na "trzon" kapelutka, buehehehe. To jest dość proste, więc jedziemy z tym od razu i mamy np. taki kod:
cylinder{<0,0,0><0,0.05,0>,1.7 pigment{color Black} translate<0,10.9,0>}
cylinder{<0,0,0><0,1,0>,0.8 pigment{color Black} translate<0,10.7,0>}
cylinder{<0,0,0><0,0.3,0>,0.9 pigment{color Red} translate<0,10.9,0>}
Wygląda to tak:

Żeby dodać zalotności naszemu bałwanowi dorobiłem mu ten czerwony... no czerwony coś. Już prawie mamy gotowy model naszego koksa, potrzeba nam jeszcze miotły. I to powiem wam szczerze, jest najwięszy dramat bo nie do końca mam pomysł jak zrobić fajną miotłę (nie ma się co dziwić, to w końcu kobiety są od mioteł, buehehehe... a mężczyźni od bałwanów? :D). Pierwszy element naszej miotły będzie walcem, podłużnym, ale wąskim... mam na myśli kij od miotły. O takim:
cylinder{<0,0,0>,<2,5.6,0>,0.09 pigment{color Brown} translate<1.5,4,0>}Od razu już podaję z przesunięciem, dzięki czemu możemy obserwować poniższy widok:

Dodajmy sobie na końcu kija taki eeee zbiornik, że tak to nazwę, w którym będziemy trzymać wszystkie...hmmm kłaki, czy jak to się tam w miotle nazywa. Zbiornik na kłaki, tiaaaa..... Zbiornik robimy tak:
difference{
  sphere{<0,0,0>,0.3 pigment{color Brown} translate<3.57,9.7,0>}
  cylinder{<0,0,0><0.5,1,0>,0.5  translate<3.5,9.7,0>}
}
Jest to taka półkula prawdę mówiąc. Ja do jej utworzenia korzystam z walca, który odejmuję od kuli (widać przydatne polecenie difference). W efekcie mam coś takiego:

i z tego teraz pójdę kłaki, no i będzie miotła jak ta lala. Jak zrobić kłaki? No myślę, że zrobimy je z bardzo cieniutkich walców, których będzie dość sporo i będą się wyginać w różne strony, trzeba będzie sporo kopiuj - wklej wykonać. Do roboty! Strasznie to żmudne, a o to kod:
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.57,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.4,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.3,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.4,9.7,0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.3,9.7,0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.6,0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.4,9.73,-0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.3,9.73,-0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.7,9.6,-0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.4,9.63,-0.2>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.6,-0.2>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.4,9.6,0.2>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.5,0.2>}
Dałoby się to przyspieszyć, ale musielibyśmy znać pewne programistyczne konstrukcja, o czym pogadamy może kiedy indziej. Nie jest to idealna miotła, ale na pewno jest bardziej miotlana niż jeszcze przed chwilą, efekt naszej pracy:

Warto przy robieniu tej miotły trochę pozmieniać od czasu do czasu kamerę bo z tej perspektywy nie wszystko widać. Ale mam dla was jedną cudowną wiadomość! Model naszego bałwanka uważam za skończony! Dla jasności, umieszczam mój kod (który nie musi być dokładnie taki jak wasz):
#include "colors.inc"

//camera{ location <-3,8,-10> look_at<0,7,0>} //od przodu
//camera{ location <4,8,-10> look_at<0,7,0>} //od boku 
//camera{ location <4,18,2> look_at<0,7,0>}  //od gory
camera{ location <5,8,-10> look_at<0,7,0>}

light_source{ <0,10,-10> color White }         

plane{y, 0 pigment{color White}}

background{color<0.2,0.2,0.3>}   

//cialo balwana
sphere{<0,0,0>,3 pigment{color White} translate<0,3,0>}
sphere{<0,0,0>,2.1 pigment{color White} translate<0,7,0>}
sphere{<0,0,0>,1.4 pigment{color White} translate<0,9.8,0>}     
//guziki     
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,4.5,-2.7>}       
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,5.4,-2>}
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,6.4,-2.1>}
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,7.3,-2.2>}
//twarz
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.5,9.9,-1.3>} //prawe oko
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.5,9.9,-1.3>}  //lewe oko
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.5,9.3,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.3,9.1,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.05,9,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.2,9,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.45,9.1,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.6,9.2,-1.2>}
cone{<0,0,0>,0.1,<0,0,-1>,0 pigment{color Orange} translate<0,9.6,-1.3>}//nos - marchewka 
//kapelusz
cylinder{<0,0,0><0,0.05,0>,1.7 pigment{color Black} translate<0,10.9,0>}
cylinder{<0,0,0><0,1,0>,0.8 pigment{color Black} translate<0,10.7,0>}
cylinder{<0,0,0><0,0.3,0>,0.9 pigment{color Red} translate<0,10.9,0>}
//miotla
cylinder{<0,0,0>,<2,5.6,0>,0.09 pigment{color Brown} translate<1.5,4,0>}
difference{
  sphere{<0,0,0>,0.3 pigment{color Brown} translate<3.57,9.7,0>}
  cylinder{<0,0,0><0.5,1,0>,0.5  translate<3.5,9.7,0>}
}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.57,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.4,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.3,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.4,9.7,0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.3,9.7,0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.6,0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.4,9.73,-0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.3,9.73,-0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.7,9.6,-0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.4,9.63,-0.2>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.6,-0.2>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.4,9.6,0.2>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.5,0.2>}
Co by nie mówić, odwaliliśmy kawał dobrej roboty, możecie być z siebie dumni. Ale obiecałem, że nauczymy się trochę o teksturowaniu co nie? Przydałoby się bo nasz bałwan mimo całego ukrytego w sobie uroku, wygląda jak plastik. Ja lubię plastiki, ale nie każdy musi... więc jak to się robi? Prosto, mamy polecenie texture i jako jego parametr podajemy obrazek, który będzie teksturą. Zacznijmy może najpierw od miotły. Dopiszmy na początku taką jedną linijkę:
#include "textures.inc"Podobna linijka jak w przypadku kolorów, daje nam dostęp do wielu domyślnych tekstur. Znaczna część z nich jest do bani, ale kilka może nam się nam przydać. Np, właśnie dla tej miotły, wywalmy poleceni pigment z jego parametrami i wstawmy textur, ogólnie, koj od miotły w kodzie powinien wyglądać teraz tak:
cylinder{<0,0,0>,<2,5.6,0>,0.09 texture{ Rosewood } translate<1.5,4,0>}Korzystamy z tekstury o nazwie Rosewood, nie jest jakaś szałowa, ale i tak wygląda chyba lepiej niż ten pojedynczy kolorek. Skąd mamy niby wiedzieć jak nazywają się różne tekstury? Hmm, stąd: http://texlib.povray.org/index.html ! :D Dla zbiornika na kłaki też możemy zastosować jakąś teksturę i będziemy mieli śliczną miotłę. Kapelutek i węgielki mogą sobie zostać czarne jak chcą, im nie zaszkodzi. Ale śnieżne kule przydałoby się uczynić bardziej śnieżnymi. Problem w tym, że w POV-Rayowej bibliotece tekstur, nie ma chyba tekstury śniegu. Może uda nam się coś sensownego zrobić w photoshopie. Nie będę opisywać dokładnie jak to w photoshopie zrobić, w skrócie ja skorzystałem z filtru ->Filter->Render->Clouds (->Filtry->Renderowanie->Chmury) i zmniejszyłem krycie tej warstwy (pod nią miałem całą białą). W efekcie uzyskałem coś takiego:

Zrobiłem jeszcze dla naszego plane'a (gruntu naszego) osobną większą teksturę z bardziej zmniejszonym kryciem, ale na podobnej zasadzie. Teraz ważna rzecz! Pliki tekstur zapisujemy w tym samym miejscu gdzie mamy zapisany nasz plik źródłowy, to ułatwia wiele spraw. Jak teraz takie pliki wykorzystać? No wbrew pozorom nie poleceniem texture, tylko starym dobrym pigment w połączeniu z nowym dla nas image_map. Składnia tego polecenia wygląda tak: pigment{ image_map{ typ "nazwa.typ"}}, gdzie typ oznacza tak prawdę mówiąc format czy tam rozszerzenie. Ja nazwałem sobie teksturę tą pierwszą dla kul "snow.png", więc w praktyce używam jej tak:
sphere{<0,0,0>,3 pigment{image_map{png "snow.png"}} translate<0,3,0>}Prościzna no nie? Podobnie zrobić to możemy dla naszego gruntu, tylko tam to się tak ładnie nie ułoży bo plane jest nieskończony teoretycznie, z resztą sami zobaczycie zaraz jak to wygląda, kod:
plane{y, 0  pigment{image_map{png "snow3.png"}}} Efekt:

Plane może nie wygląda specjalnie lepiej, ale śnieg na polu jak nikt po nim nie depta wygląda nawet podobnie, więc nie czepiajmy się szczegółów bo póki co, nie wiem jak zrobić to lepiej. Tekstura na ciele bałwana jest za to całkiem ok. Bałwan gotowy chyba? Ja osobiście poprawiłbym sobie tylko światło bo to tu mi za mocno świeci i daje brzydki cień.

Prawda, że piękny? Hmm, niekoniecznie, ale sam kod tego bałwana jest już na prawdę całkiem niebanalny jak na nasze raczej początki:
#include "colors.inc"   
#include "textures.inc"

camera{ location <-4,4,-10> look_at<0,7,0>} //finalna
light_source{ <-10,20,-40> color White }         
plane{y, 0  pigment{image_map{png "snow3.png"}}}
background{color<0.2,0.2,0.3>}   
   
//cialo balwana                         
sphere{<0,0,0>,3 pigment{image_map{png "snow.png"}} translate<0,3,0>} //pigment{color White}
sphere{<0,0,0>,2.1 pigment{image_map{png "snow.png"}} translate<0,7,0>}
sphere{<0,0,0>,1.4 pigment{image_map{png "snow.png"}} translate<0,9.8,0>}     
//guziki     
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,4.5,-2.7>}       
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,5.4,-2>}
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,6.4,-2.1>}
sphere{<0,0,0>,0.16 pigment{color Black} translate<0,7.3,-2.2>}
//twarz
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.5,9.9,-1.3>} //prawe oko 
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.5,9.9,-1.3>}  //lewe oko
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.5,9.3,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.3,9.1,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<0.05,9,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.2,9,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.45,9.1,-1.2>}
sphere{<0,0,0>,0.12 pigment{color Black} translate<-0.6,9.2,-1.2>}
cone{<0,0,0>,0.1,<0,0,-1>,0 pigment{color Orange} translate<0,9.6,-1.3>}//nos - marchewka 
//kapelusz
cylinder{<0,0,0><0,0.05,0>,1.7 pigment{color Black} translate<0,10.9,0>}
cylinder{<0,0,0><0,1,0>,0.8 pigment{color Black} translate<0,10.7,0>}
cylinder{<0,0,0><0,0.3,0>,0.9 pigment{color Red} translate<0,10.9,0>}
//miotla
cylinder{<0,0,0>,<2,5.6,0>,0.09 texture{ Rosewood } translate<1.5,4,0>}
difference{
  sphere{<0,0,0>,0.3 texture{ Rosewood } translate<3.57,9.7,0>}
  cylinder{<0,0,0><0.5,1,0>,0.5  translate<3.5,9.7,0>}
}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.57,9.7,0>} 
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.4,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.3,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.7,0>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.4,9.7,0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.3,9.7,0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.6,0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.4,9.73,-0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.3,9.73,-0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.01 pigment{color Black} translate<3.7,9.6,-0.1>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.4,9.63,-0.2>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.6,-0.2>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.4,9.6,0.2>}
cylinder{<0,0,0>,<0.3,0.7,0>0.02 pigment{color Black} translate<3.7,9.5,0.2>}
Taki bałwan nadałby się nieźle do jakiegoś postprocessingu w photoshopie, możnaby go trochą podmalować (poprawić tekstury), zrobić ładne niebo, kolorki i uzyskalibyśmy całkiem ciekawą scenę. Jak mi się zache to może coś spróuję i wam pokażę, ale nie obiecuję.
EDIT: Dobra, tak na szybko coś zrobiłem, nie jest to idealne, ale widać, że nasz bałwan ma potencjał:


Część druga - Bombki świąteczne

Jeśli przebrnęliście przez część pierwszą jesteście mega hardymi koksami. Ta część imo jest fajniejsza, mniej roboty, a efekt bardziej "błyskotliwy", że tak to nazwę. No bo w tej części tutoriala nauczymy się nie tyle nakładać jakieś materiały na powierzchnię obiektów, co powodować to, aby nasze obiekty odbijały obrazy, jakoś ładnie światło i takie tam.
Zacznijmy od "szablonu" naszej sceny. Kamera, światło, tło, jakiś plane.
#include "colors.inc"   
#include "textures.inc"
camera{ location <0,4,-10> look_at<0,2,0>}
light_source{ <-10,20,-40> color White }         
plane{y, 0 pigment{color Brown}}
background{color<0.2,0.2,0.3>}
Wszystko tu powinno być dla nas jasne.
Pierwsze co teraz zrobimy to utworzymy sobie kulę. Niech będzie czerwona. Nic specjalnego:
sphere{<0,0,0>,2 pigment{color Red} translate<0,2,0>}Znów nic nowego. Ale mam pomysł, dodajmy sobie jeszcze jedną kulę gdzieś obok. Coś w tym stylu:
sphere{<0,0,0>,2 pigment{color Red} translate<7,2,0>}Ekstra mamy dwie kulki. Już bywało, że mieliśmy ciekawsze rzeczy. Czas zatem na jakieś nowe czary. Jak jesteście bystrzy... kto jest bystry niech podniesie rękę.... huh, jakoś nie widzę, żeby się ktoś zgłaszał... to wpadniecie na pomysł, że jest w POV-Rayu jakieś tam już polecenie do czynienia przedmiotów błyszczącymi. I macie racje! Ale co z tego, skoro nie znacie tego polecenia, bueheheheh. Polecenie to nazywa się finish, po polsku meta :D Ma składnie następującą: finish{reflection R phong P}, gdzie R i P to liczby od 0 do 1. parametr reflection odpowiada otoczenia. Tzn. im większa wartość, tym bardziej zachowuje się jak lustro, a im mniejsza tym mniej. Druga wartość (phong) odpowiada za moc odbijania światła. Domyślnie każdy obiekt ma obie te wartości ustawione na 0. Teraz pokombinujemy z kombinacjami ustawień tych dwóch parametrów dla jednej z kul, przypatrzcie się, a od razu wszystko zczaicie:

Kod do ostatniego z tych czterech przykładów na screenie (w zasadzie tylko do tej kuli), jest następujący:
sphere{<0,0,0>,2 pigment{color Red} finish{reflection 1 phong 1} translate<0,2,0>}
Prawda, że proste? A imo, mimo prostoty, takie błyszczące obiekty wyglądają uroczo. Po co nam takie coś do bombki? No po to żeby stworzyć taką ładną odbijającą otoczenie. Najlepiej to chyba wygląda jak phong wyzerujemy, a reflection ustawimy na maksimum, tak przynajmniej mi się wydaje, wy róbcie co chcecie. Problem w tym, że włączenie błyszczenia się naszej kuli to mało, żeby nazwać ją bombką. Trzeba ją przecież na czymś powiesić na choince. zrobimy to oczywiście na walcu i dwóch torusach. Rzućcie okiem na kod:
cylinder{<0,0,0>,<0,0.4,0>,0.2 pigment{color Gold} finish{reflection 1 phong 0} translate<0,3.8,0>}
torus{0.15, 0.02 pigment{color White} rotate<90,0,0> translate<0,4.2,0>}
torus{0.4, 0.02 pigment{color White} rotate<0,0,20> translate<-0.4,4.1,0>}
No i mamy ekstra zaczep! Bombka gotowa. Jak wywalimy tamtą drugą kulę i zostawimy tylko naszą bombkę to efekt jest następujący:

Całość kodu prezentuje się tak:
#include "colors.inc"   
#include "textures.inc"
 camera{ location <-8,8,-10> look_at<0,2,0>}
light_source{ <-10,20,-40> color White }         
plane{y, 0 pigment{color Brown}}
background{color<0.2,0.2,0.3>} 
//bombka
sphere{<0,0,0>,2 pigment{color Red} finish{reflection 1 phong 0} translate<0,2,0>}
cylinder{<0,0,0>,<0,0.4,0>,0.2 pigment{color Gold} finish{reflection 1 phong 0} translate<0,3.8,0>}
torus{0.15, 0.02 pigment{color White} rotate<90,0,0> translate<0,4.2,0>}
torus{0.4, 0.02 pigment{color White} rotate<0,0,20> translate<-0.4,4.1,0>}
Po doświadczeniu z bałwanem to raczej kaszka z mleczkiem. No... to by było tyle na dziś.

 Czas na napisy końcowe, włączcie sobie np. to: http://www.youtube.com/watch?v=RF0HhrwIwp0&ob=av2n (ja słuchałem tego bez przerwy przez całe 8 godzin podczas pisania tutoriala, więc co jak co, ale na napisy końcowe tutaj się nadaje) i doczytajcie to zakończenie.
Chociaż, że nie nauczyliśmy się jakoś specjalnie dużo, bo praktycznie tylko konfigurowania powierzchni naszych obiektów, to jest to dość przydatne i konieczne do opanowania POV-Raya w bardziej zaawansowany sposób, przy okazji przećwiczyliśmy to co najważniejsze, czyli modelowanie, myślę, że trochę się też pobawiliśmy, a jeśli nie, no to na zabawę musicie się już skusić sami. Jako, że czas powoli najwyższy, a i tematyka tutka sprzyjająca, to chciałbym skorzystać z okazji i życzyć wszystkim czytelnikom wesołych świąt, nie tylko przejedzonych, ale może takich, w których nauczycie się czegoś nowego, np. robić bombki w POV-Rayu! ;D
Do zobaczenia w następnym tutorialu.

TUTORIAL WYKONANY TYLKO I WYŁĄCZNIE DLA BURNING-BRUSHES.PL
« Ostatnia zmiana: Grudzień 28, 2011, 18:03:31 wysłana przez Abik »