<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-3069641072656922618</id><updated>2011-08-20T11:33:26.559+02:00</updated><category term='Warsztat'/><category term='algorytmy'/><category term='scripting'/><category term='inne'/><category term='gameplay'/><category term='proceduralny'/><category term='IGK'/><category term='toolset'/><category term='osiągnięcia'/><category term='strona'/><category term='efekty'/><category term='debugowanie'/><category term='nGENE'/><category term='fotografia'/><category term='O mnie'/><category term='WMag'/><category term='gry'/><category term='agile'/><category term='Ruby'/><category term='częste błędy'/><category term='prototypowanie'/><category term='nurkowanie'/><category term='projekty'/><category term='artykuł'/><category term='narzędzia'/><category term='branża'/><category term='dokumentacja'/><category term='.NET'/><category term='humor'/><title type='text'>Wojciech Toman's devlog (Polish)</title><subtitle type='html'>Programowanie gier i silników 3D, agile development i nurkowanie</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default?start-index=101&amp;max-results=100'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>104</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-2527128553560630147</id><published>2009-09-23T12:54:00.000+02:00</published><updated>2009-09-23T12:54:13.448+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='strona'/><title type='text'>Strona tylko po angielsku - http://wtomandev.blogspot.com</title><content type='html'>Niestety podjąłem decyzję. Zaprzestaję prowadzenia bloga w języku polskim. Wynika to z kilku rzeczy:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;większość rzeczy, które opisuję jest związana pośrednio/bezpośrednio z nGENEm, a większość tych, którzy próbują z niego korzystać jest z zagranicy,&lt;/li&gt;&lt;li&gt;tłumaczenie postów zajmuje cenny czas (np. od ostatniego posta tutaj napisałem 2 na angielskiej wersji bloga, a dziś pewnie napiszę jeszcze 1), który wolę wykorzystać np. na poprawianie bugów,&lt;/li&gt;&lt;li&gt;jakakolwiek zmiana w strukturze, szablonie strony musi być wykonywana w dwóch miejscach (o czym zwykle zapominam).&lt;/li&gt;&lt;/ul&gt;&lt;b&gt;Blog w angielskiej wersji dostępny jest pod adresem: &lt;a href="http://wtomandev.blogspot.com/"&gt;http://wtomandev.blogspot.com&lt;/a&gt; .&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Liczę, że czytelnicy mojego bloga przerzucą się na angielską wersję, zwłaszcza że dla programistów nie powinno mieć większego znaczenia czy czytają teksty napisane po polsku, czy po angielsku.&lt;br /&gt;&lt;br /&gt;Pozdrawiam i liczę na zrozumienie :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-2527128553560630147?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/2527128553560630147/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/strona-tylko-po-angielsku.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2527128553560630147'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2527128553560630147'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/strona-tylko-po-angielsku.html' title='Strona tylko po angielsku - http://wtomandev.blogspot.com'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1881235794150877476</id><published>2009-09-20T10:41:00.005+02:00</published><updated>2009-09-20T11:21:37.005+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='algorytmy'/><category scheme='http://www.blogger.com/atom/ns#' term='strona'/><title type='text'>Kodowanie Huffmana</title><content type='html'>Algorytm kodowania Huffmana to kolejna metoda, którą stosuję w &lt;a href="http://ngene.wikidot.com/"&gt;nGENE Tech&lt;/a&gt; do kompresji plików zasobów (podobno w kodowaniu arytmetycznym, które daje lepsze wyniki łatwo nadziać się na jakiś patent). Wykorzystuję ją jako ostatni krok kompresji, zaraz po wykonaniu na danych wejściowych opisywanego ostatnio &lt;a href="http://wojtektoman.blogspot.com/2009/09/run-length-encoding.html"&gt;Run-Length Encoding&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Algorytm tu opisywany opiera się na częstotliwości występowania poszczególnych znaków w bloku danych.&lt;br /&gt;&lt;br /&gt;Powiedzmy, że mamy jakiś ciąg znaków, w którym częstotliwości poszczególnych znaków przedstawiają się jak poniżej (dokładna postać ciągu jest nieistotna gdyż algorytm nie uwzględnia ich kolejności):&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;a: 10&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;b: 2&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;c: 21&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;d: 44&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;e: 78&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;f: 1&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jednocześnie nie występuje jakikolwiek inny znak.&lt;br /&gt;&lt;br /&gt;Normalnie każdy z tych znaków byłby reprezentowany przy pomocy 1 bajtu (8 bitów). Ale łatwo zauważyć, że można by je reprezentować za pomocą binarnych kodów o różnej długości (&gt;= 1 bit). Im częściej występuje dany znak, tym jego kod powinien być krótszy dzięki czemu wszystkie jego wystąpienia zajmą dużo mniej miejsca, co jest równoważne wyższemu stopniowi kompresji, np. znak 'e' (najczęściej występujący w przykładzie powyżej) mógłby być reprezentowany przez '1' tj. pojedynczy bit. Oznacza to, że wszystkie jego wystąpienia zajęłyby 78 bitów ~ 10 bajtów zamiast standardowych 78 bajtów!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Jak znaleźć kody dla znaków&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ale jak znaleźć kody dla każdego znaku (najlepiej, optymalne)? Tutaj do gry wchodzi algorytm Huffmana. Jeśli znamy już częstotliwości wszystkich znaków musimy zbudować specjalne drzewo binarne, które w prosty sposób pozwoli nam na ich znalezienie. Zanim przejdę do jego omawiania o to jak będzie ono wyglądało dla danych z wcześniejszego przykładu:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SrSfLVE5kdI/AAAAAAAAB2U/I1fXO1sDhlc/s1600-h/huffman.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 165px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SrSfLVE5kdI/AAAAAAAAB2U/I1fXO1sDhlc/s200/huffman.jpg" alt="" id="BLOGGER_PHOTO_ID_5383102471599657426" border="0" /&gt;&lt;/a&gt;Mając drzewo w takiej postaci znalezienie kodów jest trywialne. Zwróćmy uwagę, że w liściach znajdują się poszczególne znaki z naszego alfabetu (są tam też podane ich częstotliwości). Jeśli chcemy znaleźć kod dla danego znaku, dla którego znamy już częstotliwość występowania, zaczynając w korzeniu z kodem "" idziemy w dół dodając do kodu '0' jeśli obieramy lewą krawędź i '1' jeśli prawą aż dotrzemy do docelowego znaku.&lt;br /&gt;&lt;br /&gt;Dla przykładu dla znaku 'f' kod jest następujący: '00000' (uwaga! to nie jest 0!!!) ponieważ 5 razy obieramy lewą krawędź, dla 'c' - '001', dla 'd' - '01', a dla znaku 'e' - '1'. Jak widać im częściej dany znak występuje, tym krótszy ma kod (co chcieliśmy osiągnąć).&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Budowanie drzewa kodów Huffmana&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Budowanie drzewa kodów jest dosyć prostą sprawą. Mając listę elementów ('lista' jest tu użyta raczej w dowolny sposób. Zwykle wykorzystywaną strukturą jest bowiem kopiec), wybieramy w każdej iteracji algorytmu dwa o najmniejszych częstotliwościach występowania po czym łączymy je w drzewo w taki sposób, że stają się one liśćmi, a ich rodzic-korzeń ma częstotliwość będącą sumą ich częstotliwości występowania. W pierwszej iteracji łączymy w ten sposób znaki 'f' oraz 'b' (o częstotliwościach odpowiednio 1 i 2) i wpisujemy 3 jako częstotliwość ich rodzica.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SrShxtLoq2I/AAAAAAAAB2c/zmDVnfMIl4Q/s1600-h/huffman2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 128px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SrShxtLoq2I/AAAAAAAAB2c/zmDVnfMIl4Q/s200/huffman2.jpg" alt="" id="BLOGGER_PHOTO_ID_5383105329928645474" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;To drzewo z powrotem wstawiamy na kopiec, przywracamy jego właściwości i wybieramy kolejne dwa elementy. Tym razem będzie to właśnie '3' i '10' (co odpowiada znakowi 'a'). Postępujemy tak dotąd aż liczba elementów kopca nie wyniesie 1. Gdy tak się stanie - znaleźliśmy drzewo kodów.&lt;br /&gt;&lt;br /&gt;Mając to drzewo, kompresja (kodowanie) jest bardzo proste. Przechodząc przez kolejne znaki ciągu wejściowego musimy po prostu wyszukać odpowiadający im kod, i wypisać go na wyjście. Oczywiście należy pamiętać, żeby wypisywać bity, a nie całe bajty, co można zrobić np. tak jak pokazano w poniższym pseudokodzie:&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;unsigned char curr = 0;&lt;br /&gt;usigned int currByte = 0;&lt;br /&gt;usingned int bits = 0;&lt;br /&gt;while(!data.eof())&lt;br /&gt;{&lt;br /&gt;// First get next character from the input&lt;br /&gt;  curr = data.getNextCharacter();&lt;br /&gt;// Look up its code in the table&lt;br /&gt;  const char* code = huffmanCodes[curr];&lt;br /&gt;&lt;br /&gt;  usingned char c = 0;&lt;br /&gt;  while(code++)&lt;br /&gt;  {&lt;br /&gt;    c = code[i];&lt;br /&gt;    currByte &lt;&lt;= 1;&lt;br /&gt;// Write one in the least significant bit&lt;br /&gt;    if(c == '1')&lt;br /&gt;      currByte |= 1;&lt;br /&gt;    ++bits;&lt;br /&gt;// When whole byte has been filled write it to the output&lt;br /&gt;    if(bits == 8)&lt;br /&gt;    {&lt;br /&gt;      result.write((char*)&amp;amp;currByte, 1);&lt;br /&gt;      bits = 0;&lt;br /&gt;      currByte = 0;&lt;br /&gt;    }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Oczywiście należy też zadbać o ewentualne wolne bity pod koniec, ale to już pomijam.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:130%;"&gt;Dekompresja danych&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Jak zdekodować dane skompresowane za pomocą tego algorytmu? Aby było to możliwe musimy na wyjście zapisać dodatkowe dane, które pozwolą nam na rekonstrukcję drzewa (nie jest możliwe znalezienie częstotliwości w oparciu o skompresowane dane :) ). Mianowicie musimy zapisać drzewo kodów. Dla każdego węzła rozpoczynając od korzenia zapisujemy takie dane:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;0 - jeśli jest to wewnętrzny węzeł (1 bit),&lt;/li&gt;&lt;li&gt;1 + znak - jeśli jest to liść drzewa (9 bits). Znak to oczywiście znak, z którym dany kod jest powiązany, np. dla kodu '1' w naszym przypadku będzie to 'e'.&lt;/li&gt;&lt;/ul&gt;Oczywiście oznacza to pewne dodatkowe dane, ale w większości przypadków jest to niemal pomijalne. Za to dzięki temu rekonstrukcja drzewa jest trywialna, a tym samym dekodowanie znaków również. Wczytujemy dane bit po bicie i rozpoczynając w korzeniu idziemy w lewo jeśli wartość bitu wynosi 0 i w prawo jeśli 1, aż nie znajdziemy się w liściu, co oznacza, że powinniśmy wypisać znak w nim się znajdujący i znów zacząć od korzenia, bo kolejny bit należy już do innego znaku. Oczywiście kody są jednoznaczne, np. dla naszego przykładu kod:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;111001101&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;zostanie odkodowany jako:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;eeeced&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;Z innych rzeczy, zarejestrowałem się na &lt;span style="font-weight: bold;"&gt;Twitterze&lt;/span&gt; na fali jego popularności i dodałem odpowiedni widget do tej strony.&lt;span style="font-family:courier new;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1881235794150877476?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1881235794150877476/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/kodowanie-huffmana.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1881235794150877476'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1881235794150877476'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/kodowanie-huffmana.html' title='Kodowanie Huffmana'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fbfW7HvrHa4/SrSfLVE5kdI/AAAAAAAAB2U/I1fXO1sDhlc/s72-c/huffman.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-8903192829519721881</id><published>2009-09-15T10:09:00.003+02:00</published><updated>2009-09-15T10:49:06.810+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='algorytmy'/><title type='text'>Run-Length Encoding</title><content type='html'>W tym wpisie opiszę algorytm RLE (&lt;span style="font-style: italic;"&gt;Run-Length Encoding&lt;/span&gt;), który jest jednym z najprostszych algorytmów do bezstratnej kompresji danych i często używany jest jako jeden z kroków w kompresji (inne mogą uwzględniać np. przekształcenie Borrowsa-Wheelera czy Move-to-Front, kodowanie arytmetyczne itd.). Istota działania algorytmu jest banalnie prosta. Przechodząc przez blok danych zlicza liczbę takich samych znaków występujących obok siebie i zapisuje ją (wraz ze znakiem, którego dotyczy) na wyjściu.&lt;br /&gt;&lt;br /&gt;W swej najprostszej postaci dla ciągu znaków:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AAAAFFFBAAAAACCDCBBBBBBBB&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Algorytm zwraca:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;4A3F1B5A2C1D1C8B&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ponieważ najpierw w ciągu wejściowym występują 4 litery A, 3F, 1 B, 5 A itd. Widzimy, że algorytm faktycznie dokonuje kompresji. Ale teraz weźmy ciąg znaków:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;ABABABABABABABABAB&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Dla niego na wyjściu otrzymujemy:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;1A1B1A1B1A1B1A1B1A1B1A1B1A1B1A1B1A1B&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I po kompresji - wyjście jest dwa razy dłuższe niż ciąg wejściowy!&lt;br /&gt;&lt;br /&gt;Trzeba trochę zmienić algorytm. Lepszym rozwiązaniem jest sprawdzanie przy przechodzeniu przez blok czy obok siebie występują dwa identyczne znaki. Jeśli tak zapisujemy oba znaki na wejściu i zliczamy liczbę takich znaków za nimi. Może być to dowolna wartość, również 0. Jednak dla poprzedniego przykładu gwarantuje to, że po wykonaniu algorytmu uzyskany ciąg będzie miał taką samą długość jak wejściowy (choć nie rozwiązuje problemu dla ciągu postaci &lt;span style="font-family:courier new;"&gt;AABBAABB..&lt;span style="font-family:webdings;"&gt;&lt;/span&gt;).&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Natomiast dla ciągu:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AAAAFFFBAAAAACCDCBBBBBBBB&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Zwraca:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;AA2AFF1BAA3CCDCBB2&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Nieco gorzej niż poprzednio, ale nadal jest to kompresja. Ponadto przekształcenia takie jak BWT  (&lt;span style="font-style: italic;"&gt;Burrows-Wheeler Transform&lt;/span&gt;) sprawiają, że dane lepiej podlegają kompresji Run-Length Encoding. Ale to przekształcenie wraz z innymi opiszę nieco później.&lt;br /&gt;&lt;br /&gt;Ale po co w ogóle zajmuję się takimi algorytmami (dotychczas pisałem głównie o graficznych)? Cóż kończę właśnie implementację wirtualnego systemu plików (VFS) dla &lt;a href="http://ngene.wikidot.com/"&gt;nGENE Tech&lt;/a&gt;, więc były mi one potrzebne by mieć możliwość kompresji archiwum.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EDIT:&lt;/span&gt;&lt;br /&gt;Aha... i jeszcze jedna sprawa. Być może jest to jeden z ostatnich wpisów w języku polskim. Od pewnego czasu prowadzę też &lt;a href="http://wtomandev.blogspot.com"&gt;anglojęzyczną wersję bloga&lt;/a&gt; i niestety prowadzenie dwóch blogów jest nieco uciążliwe (2x więcej pisania :) ).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-8903192829519721881?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/8903192829519721881/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/run-length-encoding.html#comment-form' title='Komentarze (5)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8903192829519721881'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8903192829519721881'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/run-length-encoding.html' title='Run-Length Encoding'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-5983540815658327520</id><published>2009-09-11T18:33:00.001+02:00</published><updated>2009-09-11T18:38:55.452+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Light-shafty update</title><content type='html'>Niedawno była notka o light-shaftach. Wówczas prezentowany filmik zawierał jednak denerwujący artefakt... jeśli komuś podobało się wtedy niech obejrzy teraz (powinno być DUŻO lepiej). Po komentarzu Rega, zmieniłem model testowy :)&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/8wP_Crjz2H0&amp;amp;hl=pl&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/8wP_Crjz2H0&amp;amp;hl=pl&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-5983540815658327520?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/5983540815658327520/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/light-shafty-update.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5983540815658327520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5983540815658327520'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/light-shafty-update.html' title='Light-shafty update'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-4520132436935862706</id><published>2009-09-10T20:26:00.004+02:00</published><updated>2009-09-10T20:29:11.200+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>nGENE Update</title><content type='html'>Tym razem będą tylko obrazki... sporo poprawek, zachęcam do ściągania aktualnego kodu z repozytorium SVN :) Do ideału ciągle daleko, ale uwierzcie... poprawiłem tyle rzeczy w ostatnich tygodniach, że sam w to niemal nie wierzę :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SqlFRvgw6XI/AAAAAAAAB10/y3HLtfvNpiE/s1600-h/nGENE_0288.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SqlFRvgw6XI/AAAAAAAAB10/y3HLtfvNpiE/s200/nGENE_0288.jpg" alt="" id="BLOGGER_PHOTO_ID_5379907400984750450" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SqlFNaXkpAI/AAAAAAAAB1s/hvScyTuE_Ms/s1600-h/nGENE_0290.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SqlFNaXkpAI/AAAAAAAAB1s/hvScyTuE_Ms/s200/nGENE_0290.jpg" alt="" id="BLOGGER_PHOTO_ID_5379907326589576194" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SqlFCH3uvgI/AAAAAAAAB1k/avls_nOLuK4/s1600-h/nGENE_0292.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SqlFCH3uvgI/AAAAAAAAB1k/avls_nOLuK4/s200/nGENE_0292.jpg" alt="" id="BLOGGER_PHOTO_ID_5379907132645621250" border="0" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SqlE-fHNjRI/AAAAAAAAB1c/zoLwUno5P80/s1600-h/nGENE_0299.jpg"&gt;&lt;img style="cursor: pointer; width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SqlE-fHNjRI/AAAAAAAAB1c/zoLwUno5P80/s200/nGENE_0299.jpg" alt="" id="BLOGGER_PHOTO_ID_5379907070165093650" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-4520132436935862706?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/4520132436935862706/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/ngene-update.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4520132436935862706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4520132436935862706'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/ngene-update.html' title='nGENE Update'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/SqlFRvgw6XI/AAAAAAAAB10/y3HLtfvNpiE/s72-c/nGENE_0288.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1598793661675404614</id><published>2009-09-06T22:37:00.003+02:00</published><updated>2009-09-06T22:52:55.509+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Renderowanie trawy</title><content type='html'>Jak wszyscy wiemy renderowanie trawy nie jest łatwym zadaniem. Nawet zastosowanie najbardziej popularnej techniki tj. renderingu trawy jako billboardy mierzymy się z godnym przeciwnikiem - olbrzymim spadkiem wydajności jeśli chcemy trawy wyrenderować naprawdę dużo.&lt;br /&gt;&lt;br /&gt;Są dwie rzeczy, które pomagają ten problem rozwiązać:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;pierwsza jest w miarę naturalna. Batchujemy billboardy o tej samej teksturze i renderujemy razem. Często dobrym pomysłem jest zrobienie takich batchy jak rozmiar kratek terenu (bo pewnie na nim przyjdzie nam trawę umieścić). Wówczas jeśli kratka jest ukryta, to paczka źdźbeł trawy również.&lt;/li&gt;&lt;li&gt;nie używanie alpha blendingu. Zamiast tego stosujemy alpha testing + dissolving. Dissolving pomoże nam nadrobić niedostatki testu alfa. Polega to w uproszczeniu na tym, że wartość alfa mnożymy przez wartość pobraną z tekstury tego typu (losowe wartości, ale na tyle gładkie, żeby efekt był przyjemny dla oka):&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SqQbGRd2m_I/AAAAAAAAB0Y/5cPTwjocvpA/s1600-h/dissolve.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 200px; height: 200px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SqQbGRd2m_I/AAAAAAAAB0Y/5cPTwjocvpA/s200/dissolve.jpg" alt="" id="BLOGGER_PHOTO_ID_5378453649568996338" border="0" /&gt;&lt;/a&gt;Dodatkowo jeśli stosujemy takie batche jak napisałem wcześniej warto zadbać o to, aby wartość referencyjna dla alpha testu była zmienna pomiędzy nimi w taki sposób, aby te będące dalej od kamery zanikały (inaczej uzyskamy bardzo niefajny efekt :) ).&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;W nGENE'ie wygląda to aktualnie tak:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SqQZpoxkSdI/AAAAAAAAB0Q/xq1azGr0L58/s1600-h/nGENE_0275.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SqQZpoxkSdI/AAAAAAAAB0Q/xq1azGr0L58/s320/nGENE_0275.jpg" alt="" id="BLOGGER_PHOTO_ID_5378452058097863122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Dodatkowo aby rozwiązać problem z prawidłowym oświetleniem trawy ustawiam normalną dla billboardów na normalną terenu w punkcie umieszczenia danego źdźbła. Wygląda to całkiem ok.&lt;br /&gt;&lt;br /&gt;Nadal nienajlepiej, ale nie dysponuję teksturami trawy wyższej jakości :) Za to w powyższej scenie jest ich naprawdę sporo. Jeśli w ogóle chodzi o nGENE poprawiłem w ostatnim czasie całą masę rzeczy i usterek. Od mniejszych, po większe czy nawet dosyć poważne błędy. Od jutra kontynuuję przerwaną implementację animacji szkieletowej (przerwaną zgłoszeniami błędów):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SqQcIL2wqnI/AAAAAAAAB0g/pCNHxGsx9FI/s1600-h/nGENE_0278.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SqQcIL2wqnI/AAAAAAAAB0g/pCNHxGsx9FI/s320/nGENE_0278.jpg" alt="" id="BLOGGER_PHOTO_ID_5378454781934217842" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1598793661675404614?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1598793661675404614/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/renderowanie-trawy.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1598793661675404614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1598793661675404614'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/renderowanie-trawy.html' title='Renderowanie trawy'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/SqQbGRd2m_I/AAAAAAAAB0Y/5cPTwjocvpA/s72-c/dissolve.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3577357838615554136</id><published>2009-09-02T11:45:00.006+02:00</published><updated>2009-09-02T12:47:09.979+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>Zdjęcia: makro, HDR, light graffiti</title><content type='html'>&lt;p&gt;Ostatni weekend spędziłem pod znakiem fotografii, daleko od komputera i programowania nGENE'u (ale dzięki temu teraz mam dużo energii i zapału :) i aktualnie kończę wrappować jointy z PhysXa, poprawiać GUI i różne bugi). Postanowiłem przećwiczyć kilka technik, o których dużo ostatnio czytałem, ale albo nie miałem okazji wcześniej ich przećwiczyć, albo poprzednie próby było średnio udane. Mam tu na myśli:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;light graffiti,&lt;/li&gt;&lt;li&gt;makro fotografia,&lt;/li&gt;&lt;li&gt;HDR.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Miałem też zamiar znów porobić &lt;a href="http://wojtektoman.blogspot.com/2009/07/dadaj-nocne-zdjecia.html"&gt;zdjęcia nocne&lt;/a&gt;, ale warunki były mocno niesprzyjające (duże zachmurzenie, deszcz, mało naturalnego światła).&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Light graffiti&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Light graffiti to ciekawa technika polegająca na tym, że w nocy (lub w bardzo ciemnym pomieszczeniu) stajemy naprzeciw obiektywu ubrani na czarno ze słabą latarką w dłoni. Czas naświetlania ustawiamy na dosyć długi (kilka sekund powinno wystarczyć), ISO na ok. 100 i jak najmniejszą przesłonę (oczywiście zależy to od warunków i mocy naszej latarki, ale chodzi o to, żeby mieć chwilę czasu na rysowanie) po czym rozpoczynamy "malowanie" światłem. A możemy narysować, napisać co tylko chcemy... Ja się np. podpisałem:&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/Sp5I4wuOyAI/AAAAAAAAByw/a5gEVJRig5M/s1600-h/podpis.JPG"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 134px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/Sp5I4wuOyAI/AAAAAAAAByw/a5gEVJRig5M/s200/podpis.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5376815145115633666" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Oczywiście gdyby było jakieś tło byłoby dużo lepiej. Miały być gwiazdy, ale musiałbym dać jakiś potwornie długi czas ekspozycji przy zastanych warunkach, więc zrezygnowałem z tego pomysłu.  Tutaj obraz jest w 1 płaszczyźnie, ale spokojnie można się pokusić o rysowanie w 3-wymiarach (wstęgi i inne cuda).&lt;/p&gt;&lt;p&gt;Jedyne o czym należy pamiętać to to, że obraz finalny będzie w lustrzanym odbiciu. Rozwiązania są dwa. Albo rysować w lustrzanym odbiciu, albo odwrócić zdjęcie w programie graficznym. Wbrew pozorom to pierwsze też jest po chwili treningu wykonalne :)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Makro fotografia&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Następnego dnia zgodnie z prognozami pojawiły się opady deszczu. Ponieważ wiedziałem, że gwarantuje to ciekawe zdjęcia makro z niecierpliwością czekałem na koniec opadów. I doczekałem się. Poniżej pokaz slajdów z Picasy:&lt;/p&gt;&lt;p&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&amp;amp;hl=pl&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Ftomanw%2Falbumid%2F5376801539963714833%3Falt%3Drss%26kind%3Dphoto%26hl%3Dpl" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;p&gt;Do zrobienia zdjęć użyłem filtra, soczewki +10 dioptrii, ale teraz poważnie zastanawiam się nad zakupem odpowiedniego obiektywu, bo zabawa jest przednia. Obserwowanie makro świata jest fascynujące, aż trudno uwierzyć jak wiele szczegółów umyka naszej uwadze.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;HDR&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Robienie zdjęć HDR już &lt;a href="http://wojtektoman.blogspot.com/2008/05/pierwsze-prby-z-hdr.html"&gt;kiedyś opisywałem&lt;/a&gt;. Tutaj ostatnie osiągnięcia w tej dziedzinie (również pokaz slajdów):&lt;/p&gt;&lt;p&gt;&lt;embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="400" height="267" flashvars="host=picasaweb.google.com&amp;amp;hl=pl&amp;amp;feat=flashalbum&amp;amp;RGB=0x000000&amp;amp;feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Ftomanw%2Falbumid%2F5376804705863238113%3Falt%3Drss%26kind%3Dphoto%26hl%3Dpl" pluginspage="http://www.macromedia.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;p&gt;W skrócie zdjęcia robione z wykorzystaniem mechanizmu exposure bracketing (w przypadku mojego Canona EOS 400D oznacza to serię 3 zdjęć), czyli automatyczne zmienianie ustawień ekspozycji pomiędzy kolejnymi zdjęciami. Część zdjęć wykonana ze statywu, część z ręki. Zdjęcia nie są naturalne, ale po obejrzeniu iluś setek zdjeć HDR w internecie stwierdziłem, że mało kto się o to stara, a tak przynajmniej można osiągnąć ciekawe efekty.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3577357838615554136?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3577357838615554136/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/zdjeciaa-makro-hdr-light-graffiti.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3577357838615554136'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3577357838615554136'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/09/zdjeciaa-makro-hdr-light-graffiti.html' title='Zdjęcia: makro, HDR, light graffiti'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/Sp5I4wuOyAI/AAAAAAAAByw/a5gEVJRig5M/s72-c/podpis.JPG' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-7467780390406949468</id><published>2009-08-27T20:40:00.002+02:00</published><updated>2009-08-27T21:05:03.385+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Renderowanie light-shaftów</title><content type='html'>&lt;p&gt;Zrobiłem sobie chwilę przerwy w pracach nad animacją i usuwaniem bugów na zaprogramowanie light-shaftów. Efekt jest o tyle fajny, że jest stosunkowo prosty a jednocześnie pozwala na łatwe zbudowanie atmosfery tajemniczości czy grozy.&lt;/p&gt;&lt;p&gt;Technika, którą wykorzystuję to technika zaproponowana przez Jasona Mitchella w ShaderXach. Stara, prosta, ale w większości przypadków wystarczająca.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Light-shafty to po polsku promienie światła :) chodzi jednak o to, że są one widoczne gołym okiem, a to za sprawą cząsteczek w powietrzu (np. kurz), które odbijają i rozpraszają światło.&lt;/p&gt;&lt;p&gt;Ponieważ jest to efekt wolumetryczny, należy skorzystać do jego wyrenderowania z jednego ze sposobów renderingu tego typu efektów. Możliwości jest kilka, stosunkowo często wykorzystywana to rozbicie objętości na kilka (-naście, -dziesiąt) równoległych do siebie płaszczyzn, na które później nanoszone są różne tekstury z użyciem rzutowania. Oczywiście od liczby tych płaszczyzn zależy jakość oraz wydajność całego efektu. Płaszczyzny te, w tym przypadku renderowane są prostopadle do wektora patrzenia w taki sposób, aby wypełniały całą bryłę otaczającą stożka światła.&lt;/p&gt;&lt;p&gt;Najpierw tworzona jest kostka wierzchołków o wymiarach 1 x 1 x 1 (a dokładniej grupa płaszczyzn o wymiarach 1 x 1 w odległości 1 / (liczba_płaszczyzn - 1) od siebie). Następnie w vertex shaderze wierzchołki są przemieszczane w odpowiednie miejsce w następujący sposób:&lt;/p&gt;&lt;p&gt;&lt;span&gt;&lt;/p&gt;&lt;pre name="code" class="Cpp"&gt;float4 stretchedMaxBounds = float4(maxBounds, 0.0f);&lt;br /&gt;float4 pos = float4(minBounds, 0.0f) * IN.position +&lt;br /&gt;(stretchedMaxBounds * (1.0f - IN.position));&lt;/pre&gt;&lt;/span&gt;co sprawia, że wypełniają całą bryłę otaczającą stożka światła. W powyższym kodzie: minBounds i maxBounds opisują prostopadłościan otaczający stożek światła w przestrzeni widoku.&lt;p&gt;W pixel shaderze wykonywany jest cały scattering. Zanik światła to oczywiście standardowe 1 / (odległość * odległość).&lt;/p&gt;&lt;p&gt;Ponieważ na tym etapie light-shafty wyglądałyby nieco nienaturalnie w dalszej kolejności dodamy kilka ulepszeń:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Gobo/cookie - wzór nakładany na wszystkie płaszczyzny,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Animowany szum - sprawi, że uzyskamy efekt poruszającego się powietrza,&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cień - nałożenie shadow mapy sprawi, że light-shaft nie będzie widoczny w zacienionym miejscu.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Aha... polecam też stosować płaszczyzny przycinania, ponieważ w przeciwnym razie pixel shader będzie uruchamiany dla pikseli, które i tak powinny zostać odrzucone, bo leżą poza stożkiem światła. Najlepiej wykorzystać w tym celu płaszczyzny opisujące stożek światła.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Gobo, cookie&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Jest to nic innego jak wzór nakładany na wszystkie płaszczyzny. Tam gdzie mamy kolor biały rysujemy piksele. Tam gdzie czarny - odrzucamy. W ten sposób można light-shaftowi nadać konkretny kształt i wygląd zamiast ograniczać się do zwykłego przekroju koła.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Przykładowe "ciasteczko":&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SpbEE9P3oGI/AAAAAAAABtI/tlgMxCoUMX8/s1600-h/gobo1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SpbEE9P3oGI/AAAAAAAABtI/tlgMxCoUMX8/s200/gobo1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5374698794752909410" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Animowany szum&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Animowany szum sprawi, że uzyskamy efekt poruszającego się powietrza. Wystarczy nałożyć jakąś teksturę szumu i wykorzystać zmieniające się w czasie współrzędne tekstury.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Cień&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Wykorzystujemy shadow mapę wyrenderowaną dla jakiegoś światła. Następnie w pixel shaderze sprawdzamy czy dany piksel należący do płaszczyzny light-shafta jest dalej niż odpowiadający mu w shadow mapie. Jeśli jest większy tzn., że znajduje się on w cieniu, więc odrzucamy go.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;A o to przykład działania z nGENE'a:&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/LzT6w-e2JTo&amp;amp;hl=pl&amp;amp;fs=1&amp;amp;"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/LzT6w-e2JTo&amp;amp;hl=pl&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;Jest jeszcze sporo niedoróbek i błędów, ale są proste do usunięcia, a chciałem jakoś zobrazować swój wywód. Na początku cookie jest włączone, od mniej więcej połowy - wyłączone.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-7467780390406949468?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/7467780390406949468/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/08/renderowanie-light-shaftow.html#comment-form' title='Komentarze (5)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7467780390406949468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7467780390406949468'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/08/renderowanie-light-shaftow.html' title='Renderowanie light-shaftów'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fbfW7HvrHa4/SpbEE9P3oGI/AAAAAAAABtI/tlgMxCoUMX8/s72-c/gobo1.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3693929536138694676</id><published>2009-07-31T09:22:00.002+02:00</published><updated>2009-07-31T09:37:42.756+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>Przyszłość nGENE</title><content type='html'>W ostatnim czasie mam dużo przemyśleń na temat dalszej przyszłości nGENE'a a raczej celów jakie powinienm realizować. Poniżej wnioski z tych przemyśleń:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;To czego nGENE'owi brakuje to gra na nim oparta. Ponieważ ciężko oczekiwać, że ktoś zaryzykuje jej stworzenie bez dowodu, że jest to możliwe postanowiłem sam coś takiego napisać. Nie będzie to nic skomplikowanego, ale będzie miało pewne elementy gameplayu. Dodatkową zaletą takiego podejścia będzie to, że postawię się w roli developera, więc będę miał lepszy wgląd w to co jest w nGENE'ie złe. Decyzja jakiego gatunku gra to będzie jeszcze nie zapadła. Prawdopodobnie jednak albo prosta gra wyścigowa, albo fps.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Aktualny status nGENE jest niezbyt dogodny dla programistów. Dlatego postanowiłem zmienić ten stan rzeczy. Wkrótce (prawdopodobnie za 2 tygodnie) update'y do repozytorium SVN staną się dużo częstsze, a jednocześnie zacznę korzystać w repo z branchy/tagów tak, żeby Ci którzy nie chcą ściągali tylko stabilną, przetestowaną wersję. Wkrótce pojawi się też wersja z wyższym numerkiem niż 0.1 (bo zmian od jej czasu jest tyle, że głupio taki numer utrzymywać).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Aktualnie pracuję nad systemem animacji i jest to dla mnie priorytet. Powinien być gotowy ze wszystkimi bajerami do końca września.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Zajmę się też ostatecznie problemem nie działania nGENE'a na niektórych lepszych GPU. Byłbym wdzięczny za wszystkie wskazówki, które mogłyby pomóc w rozwiązaniu tego problemu.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Pozostaje jednak jeszcze jeden problem, na który ciężko znaleźć mi dobre rozwiązanie. Chcę żeby nGENE był darmowy, wraz ze wszystkimi komponentami, shaderami, itd. Jednak powoduje to kilka komplikacji:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Muszę pracować gdzieś indziej, a przez to nie jestem w stanie na bieżąco rozwiązywać wszystkich problemów czy poświęcić tyle czasu ile należy na dalszy rozwój silnika.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Jest dużo ciężej zbudować zespół, mało kto chce się czymś takim zajmować za darmo.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Jak mówiłem wielokrotnie nie chcę nGENE sprzedawać, zresztą nie wierzę by w aktualnej wersji znalazł zbyt wielu nabywców. Rozważam jednak system dotacji. Stąd moje pytanie, czy ktoś z Was ma jakieś doświadczenie z nimi, czy w ogóle opłaca się to brać pod uwagę? Jak wygląda np. kwestia podatków (znalazłem sporne opinie na ten temat)?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3693929536138694676?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3693929536138694676/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/07/przyszosc-ngene.html#comment-form' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3693929536138694676'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3693929536138694676'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/07/przyszosc-ngene.html' title='Przyszłość nGENE'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-2405332275317316469</id><published>2009-07-14T16:52:00.002+02:00</published><updated>2009-07-14T16:58:46.114+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>Dadaj, nocne zdjęcia</title><content type='html'>&lt;p&gt;Ostatnio nieco mniej pracuję nad nGENEm. Wkrótce sytuacja powinna ulec zmianie i moje ambitne plany na te wakacje nie powinny czuć się zagrożone.&lt;/p&gt;&lt;p&gt;Ale nie o nGENE'ie będzie tym razem, lecz o robieniu nocnych zdjęć. Na ten temat pisałem już w zeszłym roku &lt;a href="http://wojtektoman.blogspot.com/2008/09/nocne-zdjcia.html"&gt;w tym wpisie&lt;/a&gt;. Album na picasie można zobaczyć pod tym adresem:&lt;/p&gt;&lt;p&gt;&lt;a href="http://picasaweb.google.com/tomanw/DadajNightPhotos#"&gt;http://picasaweb.google.com/tomanw/DadajNightPhotos#&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Przykładowe zdjęcia z niego:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SlyaA2Y8zGI/AAAAAAAABbU/ZS0xUZFXOn4/s1600-h/IMG_2912.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SlyaA2Y8zGI/AAAAAAAABbU/ZS0xUZFXOn4/s320/IMG_2912.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5358326996054887522" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SlyZ6dijp1I/AAAAAAAABbM/GRL8nj7IMEY/s1600-h/IMG_2901.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SlyZ6dijp1I/AAAAAAAABbM/GRL8nj7IMEY/s320/IMG_2901.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5358326886305081170" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SlyZz8prdOI/AAAAAAAABbE/9SAtcwbzv_A/s1600-h/IMG_2892.JPG"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 320px; height: 214px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SlyZz8prdOI/AAAAAAAABbE/9SAtcwbzv_A/s320/IMG_2892.JPG" border="0" alt="" id="BLOGGER_PHOTO_ID_5358326774397367522" /&gt;&lt;/a&gt;&lt;p&gt;Choć może w pierwszej chwili ciężko w to uwierzyć wszystkie zdjęcia były naprawdę robione w środku nocy (pomiędzy 0 a 2 AM). Zresztą na części z nich widać gwiazdy. To że kolory są tak żywe zawdzięczam dość mocnemu światłu księżyca i kilkuminutowym ekspozycjom.&lt;/p&gt;&lt;p&gt;Robienie zdjęć w nocy jest o tyle fajne, że rezultaty są w pewien sposób surrealistyczne, a często mniej przewidywalne. Również kolory są bardziej plastyczne.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-2405332275317316469?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/2405332275317316469/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/07/dadaj-nocne-zdjecia.html#comment-form' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2405332275317316469'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2405332275317316469'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/07/dadaj-nocne-zdjecia.html' title='Dadaj, nocne zdjęcia'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/SlyaA2Y8zGI/AAAAAAAABbU/ZS0xUZFXOn4/s72-c/IMG_2912.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1614446729335045929</id><published>2009-06-13T19:29:00.001+02:00</published><updated>2009-06-13T20:47:17.309+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='toolset'/><title type='text'>nGENE Tech Toolset download</title><content type='html'>&lt;p&gt;Udało mi się skończyć prostą wersję edytora. Poniżej filmik ją prezentujący (od ostatniego ubyło głównie bugów :) ):&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;embed src="http://www.youtube.com/v/f_CZcj4LMpo&amp;amp;hl=pl&amp;amp;fs=1&amp;amp;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;p&gt;Download dostępny jest &lt;a href="http://www.mediafire.com/?yzohmggnyil"&gt;tutaj&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1614446729335045929?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1614446729335045929/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/06/ngene-tech-toolset-download.html#comment-form' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1614446729335045929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1614446729335045929'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/06/ngene-tech-toolset-download.html' title='nGENE Tech Toolset download'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6601179172124634717</id><published>2009-06-05T09:43:00.003+02:00</published><updated>2009-06-05T09:51:44.213+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='artykuł'/><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='nurkowanie'/><title type='text'>Artykuł na gd.net</title><content type='html'>Wczoraj wieczorem w serwisie &lt;a href="http://www.gamedev.net/reference/programming/features/ppWaterRender/"&gt;gamedev.net&lt;/a&gt; pojawiła się angielska wersja mojego artykułu dotyczącego renderingu wody w przestrzeni ekranu. Od polskiej różni się wbrew pozorom dosyć znacząco: zarówną formą jak i nie zawiera kilku wpadek, których nie udało mi się uniknąć w oryginale. A do tego są obrazki :)&lt;br /&gt;&lt;br /&gt;Obiecywałem udostępnienie edytora na przełomie maja i czerwca. Niestety znów przekładam termin. Zaliczenia na uczelni/projekty nie pozwalają mi skończyć kilku istotnych rzeczy.&lt;br /&gt;&lt;br /&gt;Jeśli chodzi o nurkowanie. Mój rozwój w tej dziedzinie nabiera w ostatnim czasie tempa. Po pierwszym nurkowaniu jaskiniowym, w ostatni weekend udało mi się ukończyć kursy Advanced Nitrox i Deco Procedures w TDI. Kursy zacząłem już pod koniec marca, ale że nie wszystko szło na początku ok, kurs się trochę przeciągnął. Pragnę w tym miejscu podziękować gorąco Czarkowi Abramowskiemu i &lt;a href="http://www.subbaltica.pl/"&gt;Andrzejowi Górnickiemu&lt;/a&gt; za poprowadzenie kursu i wszystkie niezliczone symulowane sytuacje awaryjne.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6601179172124634717?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6601179172124634717/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/06/artyku-na-gdnet.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6601179172124634717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6601179172124634717'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/06/artyku-na-gdnet.html' title='Artykuł na gd.net'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-4228001441499380072</id><published>2009-05-25T11:22:00.000+02:00</published><updated>2009-05-25T11:23:15.556+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nurkowanie'/><title type='text'>Pierwsze starcie z jaskiniami</title><content type='html'>&lt;p&gt;Zalane jaskinie - dla jednych bajka, dla innych sama nazwa wystarczy by pozostawać od nich możliwie daleko. W miniony weekend było mi dane zobaczyć z czym to się je, a wszystko za sprawą koleżanki, która w odpowiedzi na pytanie o kurs jaskiniowy zaklepała mi miejsce na tzw. warsztaty jaskiniowe. Cóż - trudno. Jak się powiedziało A należy powiedzieć i B :)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Piątek&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Ostatnie gorączkowe przygotowania, żeby sprzęt był jak najbardziej bezpieczny dla mnie i innych (kask, latarki, kołowrotki itp.). Przypomnienie sobie wszystkich podstawowych procedur. Olbrzymi stres, ale też i mobilizacja. W końcu jutro i w niedzielę zmierzę się z czymś dotychczas praktycznie mi nieznanym - z nurkowaniem w przestrzeniach zamkniętych (czyli takich, w których droga do wyjścia jest zastawiona przez sufit i trzeba znaleźć wyjście często płynąc kilkaset metrów). Odkąd zacząłem nurkować niespełna 4 lata temu o tym marzyłem, pociągało mnie to, fascynowało, ale teraz gdy stoję przed szansą, żeby spróbować odczuwam niepokój. Czy już jestem na to gotowy? W końcu robiony przeze mnie inny kurs (wstęp do nurkowań technicznych) nie wygląda póki co najlepiej...&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Sobota&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Po nieprzespanej nocy docieramy do Krakowa na 9.00. Przez kolejnych kilka godzin ćwiczymy na sucho (na powierzchni): rozkładanie poręczówki, podróż wzdłuż niej bez widoczności (na oczach tzw. czarna maska - gumowa opaska, dzięki której nic nie widać), wycinanie się z poręczówki (również bez widoczności). Na powierzchni jest to trudne - pod wodą będzie tylko gorzej. Dalej konfiguracja sprzętu wg szkoły francuskiej (minimalistyczna, brak butli na plecach jedynie 2 małe butle boczne). I wejście do wody spróbować tego w praktyce.&lt;/p&gt;&lt;p&gt;Pierwsze nurkowanie w słynnym Zakrzówku jest przy ograniczonej widoczności (max. 1 metr - wiele ludzi, w tym kursów więc woda jest mocno zmącona). Próbujemy poręczować, idzie ciężko w takich warunkach, więc zrzucamy kołowrotki na dno i idziemy popływać w innej części akwenu. Znajdujemy platformę. Pomiędzy nią a dnem jest niewielki prześwit (bo ja wiem 0.5 metra, może mniej, może ciut więcej - strach wprowadza przekłamania :) ). Mamy pod nią przepłynąć. Luzik... do czasu. Wpłynąłem, dopływam do końca i lipa - nie przecisnę się. Dobra spróbuję się wycofać. Nie da się. Gdzieś się zahaczyłem. Lekki stresik, ale to tylko platforma - uspakajam się i z pomocą instruktora wychodzę. W drugą stronę przechodzę już bez problemu. Błędem było złe ułożenie butli. Jak to wszystko szybko wychodzi.&lt;/p&gt;&lt;p&gt;Kolejne nurkowanie to poręczowanie + wycinanie się z poręczówki. Kamienie poręczuje mi się nad wyraz trudno (zwłaszcza gdy robi się to pierwszy raz w życiu - tzn. w ogóle poręczuje, bo wcześniej praktycznie tego nie robiłem). Wycinanie też poszło nie najlepiej. Nie przygotowałem kołowrotka i walczyłem z nim pod wodą. W końcu jakoś tam się wyciąłem, ale trwało to potwornie długo. Ogólnie dużo błędów i refleksja - jak mało umiem.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Niedziela&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Dziś mamy atakować prawdziwą "jaskinię" - zalany fort w całości wykuty w skale. Samochody zatrzymują się przy zakładzie, a dalej z buta. I nie byłoby problemu, gdyby nie sprzęt, który swoje waży i teren po jakim przyszło nam iść też nie jest najprostszy - 500 metrów: najpierw ścieżka (luz), później było gorzej - przez podmokły las, pełen komarów, lekkich wzniesień, wysokich krzaków itd.&lt;/p&gt;&lt;p&gt;Doszliśmy jednak szczęśliwie na miejsce. Jak się okazało najtrudniejsze dopiero przed nami :) przejście (a mówiąc precyzyjnie - przeczołganie się) bardzo niskim suchym korytarzem do wody. Tu już można było stanąć wyprostowanym i nawet 2 osoby mogły się minąć (z trudem ale jednak)! Woda była krystalicznie czysta, a light-shafty z naszych latarek przypominały stare filmy (zresztą super efekt - dużo lepszy niż w jakiejkolwiek grze :) ), których akcja rozgrywała się w kopalniach. Ostatnie sprawdzenie sprzętu i jazda na dół (tj. na jakiej 1.5 - 2 metry)! Pierwsze wrażenie - woda kryształ (przynajmniej na razie). Widać wszystko co pozostaje w zasięgu latarek na naszych kaskach. Wypas. Płyniemy wzdłuż poręczówki cały czas uważając by się w nią nie zaplątać. Wpływamy do bocznego korytarza i tu zaczyna się prawdziwa jazda. W drodze powrotnej widoczność wynosi 0 cm! Co z tego, że wiem że mam wyciągniętą przed siebie rękę skoro jej nie widzę. Przykładam ją do maski - z trudem rozróżniam poszczególne palce. Kurczowo trzymam poręczówkę - wiem, że z jej pomocą trafię do domu. Raz na jakiś czas pojawiają się skrzyżowania. Na każdym z nich umieszczony jest specjalny znacznik wskazujący kierunek do wyjścia - działa to niezwykle kojąco.&lt;/p&gt;&lt;p&gt;I tak (z krótkimi przerwami) nurkowanie wygląda już do końca. Co pewien czas do głowy przychodzą różne niepokojące myśli, ale w końcu poznaję korytarz w którym rozpoczęliśmy nurkowanie. Dopływam do jego końca... ufff powietrze :) Potem tylko wyczołgać się korytarzem wejściowym. Podróż w stronę samochodów jest nieco łatwiejsza - naładowany adrenaliną nie czuję ciężaru sprzętu, ani upału.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Wniosek&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Wiem, że nic nie wiem. Żeby tak nurkować bardzo wiele się muszę nauczyć. Może to zająć lata, a być może nigdy nie dojdę do poziomu, żeby robić to bezpiecznie. Te warsztaty pokazały pewną możliwość w nurkowaniu, ale umiejętności mogą przyjść tylko jeśli będzie się je trenować setki razy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-4228001441499380072?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/4228001441499380072/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/05/pierwsze-starcie-z-jaskiniami.html#comment-form' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4228001441499380072'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4228001441499380072'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/05/pierwsze-starcie-z-jaskiniami.html' title='Pierwsze starcie z jaskiniami'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-2580236949380667276</id><published>2009-05-12T15:24:00.003+02:00</published><updated>2009-05-14T22:48:26.470+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><category scheme='http://www.blogger.com/atom/ns#' term='proceduralny'/><title type='text'>Proceduralny teren - zrzucanie cząsteczek</title><content type='html'>&lt;p&gt;Programując samemu silnik nGENE często mam problem ze znalezieniem/stworzeniem assetów do użycia w demkach czy nawet przykładach/tutorialach. Rozwiązaniem jest poniekąd podejście proceduralne, tyle że ja nie jestem jakoś strasznie w tym mocny (wychodzi brak tła scenowego :) ). Jednak implementując nGENE Tech Toolset stwierdziłem, że fajnie byłoby dać użytkownikom możliwość prostego utworzenia height-map. Chwila pisania, poprawiania i udało się z grubsza zaimplementować algorytm upuszczania cząsteczek (wg Hayesa nie Schankela).&lt;/p&gt;&lt;p&gt;Idea jest prosta. Na płaszczyznę zrzucamy cząsteczkę i dopóki nie znajdzie się w stabilnym położeniu przesuwamy ją w dół. Stabilność oznacza tu, że żaden z jej sąsiadów nie znajduje się niżej niż ona. Problemem jest wybór miejsc, z których cząsteczki zrzucać. Podejście Schankela (losowość całkowita :) ) kończyło się tym, że algorytm nadawał się praktycznie tylko do wizualizacji terenów wulkanicznych. Sugestie Hayesa dają więcej możliwości.&lt;/p&gt;&lt;p&gt;Po pierwsze standardowo przy testowaniu warunku stabilności sprawdzane były tylko najbliższe otoczenia cząsteczki (sąsiedzi). Jednak dużo lepiej jest gdy możemy też sprawdzać cząsteczki bardziej odległe, np. gdy będziemy przeszukiwać do odległości 2 jednostek, to nawet jeśli sąsiedzi są na tym samym poziomie co cząsteczka to i tak musimy jeszcze sprawdzić, czy cząsteczki odległe o 2 jednostki nie są niżej. Jeśli tak - cząsteczka jest przesuwana w dół o tę odległość. Jeśli ten parametr będzie stały, to teren będzie tym łagodniejszy im większa jego wartość. Jeśli natomiast będzie losowy, to uzyskamy coś na kształt erozji. I dobrze :)&lt;/p&gt;&lt;p&gt;Kolejny parametr tzw. erosion_threshold to warunek, którego będziemy używali do określenia czy cząsteczka jest niżej. Jeśli ma wartość standardową (zależnie od implementacji 0 lub 1) to cząsteczka jest w niestabilnym położeniu, gdy którakolwiek z przeszukiwanych jest o 1 jednostkę niżej. Jeśli ustawimy go na 2 to o 2 cząsteczki, jeśli na 3 to o 3, ... Im wyższa jest ta wartość tym wyższe będą uzyskane formy terenu. Oczywiście i tu random okaże się pomocny, żeby jednocześnie mieć pionowe skały, ale i łagodniejsze przejścia (przydatne dla gór).&lt;/p&gt;&lt;p&gt;Jak mówiłem zamiast losowo wybierać miejsca do zrzucania cząsteczek, lepiej robić to z głową dzięki czemu możliwe jest uzyskanie różnych formacji. Poniżej opisuję kilka z nich.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Wulkan&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SglukL_8kyI/AAAAAAAAA6I/Rg2tCKSiKxU/s1600-h/volcano.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 146px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SglukL_8kyI/AAAAAAAAA6I/Rg2tCKSiKxU/s200/volcano.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5334916801572410146" /&gt;&lt;/a&gt;Pierwszym krokiem jest określenie położenia stożka wulkanu. Następnie liczby strumieni lawy, ich długości i kierunku. W rzeczywistości lawa podobnie jak woda formuje strumienie, którymi spływa ze szczytu góry w dół. Ponieważ czasem zmienia kierunek w trakcie, do kierunku będziemy dodawać losową wartość.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;pre name="code"&gt;&lt;br /&gt;For każdy ze strumieni&lt;br /&gt;  Rozpocznij u stożka&lt;br /&gt;    While aktualna długość strumienia &amp;lt; długości docelowej&lt;br /&gt;      Idź zgodnie z kierunkiem strumienia i zmień go losowo&lt;br /&gt;        Zrzuć cząsteczkę&lt;br /&gt;        Przesuwaj cząsteczkę w dół dopóki niestabilna&lt;br /&gt;        Zmień wysokość w docelowym punkcie&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Aby osiągnąć wulkan o odpowiedniej charakterystyce powtórz kilkukrotnie powyższy proces.&lt;/p&gt;&lt;p&gt;Tworzenie krateru jest jeszcze prostsze. Wystarczy, znając wysokość na której się zaczyna h, odbić aktualną pozycję względem h.&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:130%;"&gt;&lt;strong&gt;Pasmo górskie&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/Sglutu5BexI/AAAAAAAAA6Q/2wMz66N3Ly4/s1600-h/mountains.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 118px;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/Sglutu5BexI/AAAAAAAAA6Q/2wMz66N3Ly4/s200/mountains.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5334916965557435154" /&gt;&lt;/a&gt;&lt;p&gt;Pasma górskie są piękne: strome ściany, szczyty doliny, erozja. Aby je utworzyć Hayes zaproponował dodatkowy krok w fazie preprocessingu - utworzenie 2-wymiarowego brownian tree. A robi się to w sposób prosty (w takiej nieco brute force-owej formie):&lt;/p&gt;&lt;pre name="code"&gt;&lt;br /&gt;Wyczyść tablicę na 0 &lt;br /&gt;Wybierz losowy punkt z tablicy i ustaw go na 1 (będzie to ziarnem)&lt;br /&gt;i = 0&lt;br /&gt;While i &amp;lt; liczba iteracji &lt;br /&gt;  Wybierz losowy punkt z tablicy &lt;br /&gt;  found = false &lt;br /&gt;  while found = false &lt;br /&gt;    Przesuń się po tablicy w losowym kierunku &lt;br /&gt;    if aktualna pozycja sąsiaduje z elementem ustawionym na 1 &lt;br /&gt;      found = true &lt;br /&gt;  Ustaw wartość dla aktualnej pozycji na 1&lt;br /&gt;&lt;/pre&gt;&lt;p&gt;Przykładowe drzewo znajduje się poniżej (odwróciłem kolory, żeby było czytelniej):&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SgllUb5eKHI/AAAAAAAAA54/O6QJNGR5GVg/s1600-h/tree.bmp"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SgllUb5eKHI/AAAAAAAAA54/O6QJNGR5GVg/s200/tree.bmp" border="0" alt="" id="BLOGGER_PHOTO_ID_5334906635357661298" /&gt;&lt;/a&gt;&lt;p&gt;Wyniku używamy przy tworzeniu gór. Dla każdej z pozycji, dla której wartość w tablicy wynosi 1 zrzucamy cząsteczkę. Powtarzamy kilka razy i mamy ładne góry!&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;span style="font-size:130%;"&gt;Klify, kaniony&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/Sglu1dtJTII/AAAAAAAAA6Y/0E3sA88j-D4/s1600-h/cliff.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 118px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/Sglu1dtJTII/AAAAAAAAA6Y/0E3sA88j-D4/s200/cliff.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5334917098383166594" /&gt;&lt;/a&gt;&lt;p&gt;&lt;span style="font-size:100%;"&gt;Tworzymy je tak samo jak pasma górskie. Jedyna różnica jest taka, że na końcu odwracamy wszystkie kolory.&lt;/span&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-2580236949380667276?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/2580236949380667276/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/05/proceduralne-zrzucanie-czasteczek.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2580236949380667276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2580236949380667276'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/05/proceduralne-zrzucanie-czasteczek.html' title='Proceduralny teren - zrzucanie cząsteczek'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fbfW7HvrHa4/SglukL_8kyI/AAAAAAAAA6I/Rg2tCKSiKxU/s72-c/volcano.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-4900731480674315600</id><published>2009-05-08T16:10:00.004+02:00</published><updated>2009-05-08T17:30:37.372+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>nGENE - 100k LOC, czy gra jest warta świeczki</title><content type='html'>&lt;p&gt;Z okazji, że w końcu udało mi się w nGENE-ie przekroczyć magiczną barierę 100 tys. linii kodu postanowiłem napisać okolicznościową notkę. Będzie ona o tym czy na pewno warto pakować się w programowanie silników. Chciałbym także zauważyć, że 100k LOC jak na silnik to raczej mało, niemniej trzeba pamiętać, że kodzę go w przerwach między pracą, studiami a nurkowaniem ;)&lt;/p&gt;&lt;p&gt;Okazuje się, że programowanie silników jest dziś niezwykle popularne, niemal każdy chce mieć swój framework (nawet jeśli obejmuje on tylko ładowanie obrazków 2D to już jest dumnie nazywany silnikiem) o wspaniałych feature'ach i wpadającej w ucho nazwie. Wielu osobom wydaje się, że skoro jest to modne, to jest to również coś prostego, co każdy programista gier umieć powinien. Jednak w rzeczywistości jest to zajęcie trudne, niewdzięczne i niezwykle pracochłonne. Mało który domorosły silnik zostanie zauważony, nawet jeśli będzie Open-Source (jak to ktoś na gamedev.net skomentował moje screeny - "mało kto idzie dalej, niż spojrzenie na screeny").&lt;/p&gt;&lt;p&gt;O to więc mały bilans zysków i strat.&lt;/p&gt;&lt;p&gt;Co zyskujemy:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;uczymy się nowych umiejętności, poznajemy algorytmy i techniki stosowane przez programistów w profesjonalnych silnikach (różne "Perełki" są tu bardzo pomocne :) ).&lt;/li&gt;&lt;li&gt;mamy możliwość stworzyć coś zupełnie od zera, zakodować wspaniałe efekty - jest to szczególnie pomocne gdy istniejący silnik jest czarną skrzynką i dopisać coś samemu jest trudno (a z takich silników też korzystałem)&lt;/li&gt;&lt;li&gt;satysfakcja, satysfakcja i jeszcze raz satysfakcja!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;A oto, co tracimy:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;nie mamy zwykle czasu na pisanie gier (przynajmniej jakichś bardziej ambitnych niż jakieś proste sample do silnika), bo inaczej będziemy musieli zrezygnować z implementacji jakiegoś super-wypasionego-algorytmu-zarządzania-pamięcią&lt;/li&gt;&lt;li&gt;szansa, że w przyszłości dostaniemy pracę jako programista silnika 3D jest dużo mniejsza niż na posadzie gameplayowca. Wynika to z kilku powodów. Po pierwsze większość firm woli kupić gotowe i sprawdzone komercyjnie rozwiązanie niż stracić kilka lat na rozwój swojego. Po drugie istniejące silniki zwykle nie są przepisywane od nowa lecz od wielu lat rozwijane (co jest powodem, że część kodu w nich to antyki), więc wielu elementów naszej wiedzy pewnie nigdy nie będziemy mieli szansy użyć.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Argument, że dzięki temu możemy przetestować jakieś efekty, shadery czy inne techniki też jest absurdalny. Poza całą masą silników (np. do darmowego Ogre'a istnieje i SSAO, i deferred shading i paging) istnieją takie narzędzia jak FX Composer, które pozwalają nam małym kosztem stworzyć nowy efekt i zobaczyć jak on się prezentuje.&lt;/li&gt;&lt;li&gt;W domu choćbyśmy się nie wiem jak starali, i tak nie napiszemy silnika dorównującego możliwościami CryEngine'owi 2. Ba! Nawet się do niego nie zbliżymy. Już nawet nie wspominając o tym, że legalnymi metodami nie napiszemy silnika prawdziwie cross-platformowego tj. działającego i na PC i na PS3, i na XBoxie (XNA to mimo wszystko znaczne uproszczenie).&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Czy zatem jestem przeciwny pisaniu silników? Poniekąd tak, sam czasem żałuję, że wybrałem taką drogę a nie inną. Ale teraz nie chcę się już dać przekwalifować - zbyt wiele czasu na to straciłem. Oczywiście lubię to co robię, wystarczającym argumentem jest dla mnie ta wspomniana satysfakcja. Zresztą nGENE powoli przestaje być silnikiem anonimowym, więc jest za późno na zmianę decyzji - byłaby to oznaka słabości ;)&lt;/p&gt;&lt;p&gt;A następnym razem napiszę coś o proceduralnym generowaniu różnych formacji terenu.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-4900731480674315600?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/4900731480674315600/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/05/ngene-100k-loc-czy-gra-jest-warta.html#comment-form' title='Komentarze (8)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4900731480674315600'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4900731480674315600'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/05/ngene-100k-loc-czy-gra-jest-warta.html' title='nGENE - 100k LOC, czy gra jest warta świeczki'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-88091417996327360</id><published>2009-04-24T14:12:00.001+02:00</published><updated>2009-04-24T14:20:13.076+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='toolset'/><title type='text'>nGENE Tech Toolset - co tam słychać?</title><content type='html'>&lt;p&gt;Edytor do silnika nGENE Tech miał być dostępny najpierw pod koniec marca, później kwietnia. Wygląda jednak na to, że znów będę musiał przesunąć datę jego wypuszczenia, ale mam nadzieję, że to czekanie się opłaci. Chcę bowiem, żeby już pierwsza jego wersja pozwalała na jak najwięcej, a nie tylko ładnie wyglądała.&lt;/p&gt;&lt;p&gt;Na pocieszenie filmik z aktualnej wersji. Jak zawsze zachęcam do zgłaszania uwag:&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/WFPgZEcw1TU&amp;amp;hl=pl&amp;amp;fs=1"&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;embed src="http://www.youtube.com/v/WFPgZEcw1TU&amp;amp;hl=pl&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-88091417996327360?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/88091417996327360/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/04/ngene-tech-toolset-co-tam-sychac.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/88091417996327360'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/88091417996327360'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/04/ngene-tech-toolset-co-tam-sychac.html' title='nGENE Tech Toolset - co tam słychać?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-5841194628388652799</id><published>2009-04-11T17:18:00.003+02:00</published><updated>2009-04-11T17:29:26.374+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='Warsztat'/><title type='text'>Już miesiąc jako moderator...</title><content type='html'>&lt;p&gt;Już miesiąc minął (no dobra minie jutro, ale jutro nie będę pisał) od momentu gdy zostałem mianowany moderatorem forum &lt;a href="http://forum.gamedev.pl/"&gt;Gamedev.pl&lt;/a&gt;. To tak jabky ktoś nie wiedział ;) Pierwszy raz jest mi dane moderować tak duży serwis i po tym miesiącu mogę stwierdzić, że nie jest to wcale takie łatwe i przyjemne jak niektórym się wydaje:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Jest to dosyć absorbujące. Trzeba wiedzieć co się dzieje na forum i w miarę możliwości reagować. Nie zawsze użytkownicy zgłaszają niepożądane treści lub przejawy lamerstwa, a nawet jeśli, czasami jest już za późno - wątek zdążył się już przeistoczyć w małą prywatną wojnę. Interwencja powinna mieć miejsce możliwie jak najwcześniej, tak więc bez czytania wielu tematów (niektórych z mojego punktu widzenia nudnych) się nie obejdzie.&lt;/li&gt;&lt;li&gt;Nawet jeśli ktoś zgłosi naruszenie regulaminu, to nie zawsze oczywistym jest co z wątkiem/wiadomością zrobić. Czasem przejawy lamerstwa lub nieprzestrzegania elementarnych zasad kultury nie pozostawiają żadnych wątpliwości, ale czasem jest dużo ciężej nacisnąć przycisk 'Lock' czy 'Move Topic'. Dotyczy to szczególnie osób początkujących, bo z jednej strony nie zawsze przestrzegają one regulaminu, ale z drugiej nie każde pytanie o podstawy programowania musi być przejawem lamerstwa. Różnica jest taka, że jeśli ktoś umie sformułować pytanie i z szacunkiem traktuje pozostałych użytkowników to ja nie mam serca skazywać jego tematów na potępienie ;)&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-5841194628388652799?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/5841194628388652799/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/04/juz-miesiac-jako-moderator.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5841194628388652799'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5841194628388652799'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/04/juz-miesiac-jako-moderator.html' title='Już miesiąc jako moderator...'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1306066915618712370</id><published>2009-04-01T19:39:00.001+02:00</published><updated>2009-04-01T19:45:33.222+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>Tech Demo - download</title><content type='html'>Zgodnie z obietnicą umieściłem w internecie demo - Tropical Island. Można je pobrać &lt;a href="http://www.mediafire.com/file/muom2wz1y3z/nGENE_Tropical.exe"&gt;tutaj&lt;/a&gt;. Ma jedną podstawową wadę - niską wydajność (no i kilka bugów różnej maści). Mimo że ostatnio dużo profiluję i optymalizuję, to zdecydowałem się wrzucić starszą wersję z jednego prostego powodu - jest w niej mniej artefaktów graficznych. Ostra optymalizacja ma niestety to do siebie, że traci się trochę na jakości, więc zanim udostępnię bardziej wydajne binarki, to muszę jeszcze poszukać kompromisu pomiędzy jakością a prędkością działania. Natomiast na pewno wkrótce się one pojawią.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1306066915618712370?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1306066915618712370/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/04/tech-demo-download.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1306066915618712370'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1306066915618712370'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/04/tech-demo-download.html' title='Tech Demo - download'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-5391470161211176182</id><published>2009-03-27T12:31:00.002+01:00</published><updated>2009-03-27T12:39:47.008+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='artykuł'/><category scheme='http://www.blogger.com/atom/ns#' term='IGK'/><title type='text'>Materiały z IGK'2009 i nowy artykuł</title><content type='html'>&lt;p&gt;Reg wrzucił materiały z mojej prezentacji, z tegorocznego IGK, dotyczącej wody na &lt;a href="http://www.gamedev.pl/articles.php?x=view&amp;amp;id=307"&gt;Gamedev.pl&lt;/a&gt;, tak że nie będę ich tutaj dublował. Zachęcam do czytania, implementacji i wprowadzania usprawnień w podstawowej technice mojego autorstwa :) Wkrótce powinna też się pojawić wersja w .pdf, na której brak niektórzy już narzekają. Demko zgodnie z wcześniejszymi obietnicami będzie dostępne 1. kwietnia (BTW ostatnio mocno profiluję więc wydajność z dnia na dzień rośnie). Aha, wbrew obiegowej opinii na kilku serwisach - to nie jest żart (dowiedziałem się przy okazji, że Royal Air Force też powstało 1. kwietnia) ;)&lt;/p&gt;&lt;p&gt;Kilka dni temu dobiegła końca ankieta, w której prosiłem Was o wybór tematu artykułu, który chcielibyście przeczytać. Ku mojej radości padło na techniki animacji postaci. Prawdopodobnie opublikuję to jako serię kilku artykułów, jako że jest to bardzo szeroka i dosyć trudna dziedzina. Na pierwszy ogień pójdzie oczywiście animacja szkieletowa, później będą zagadnienia bardziej zaawansowane (jak blending, ragdoll, IK itd.).&lt;/p&gt;&lt;p&gt;Prawdopodobnie w przeciągu tygodnia napiszę też jakiś krótszy artykuł na temat profilowania gier za pomocą takich narzędzi jak AMD CodeAnalyst, PIX i PerfHUD, bo myślę, że może się to komuś przydać.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-5391470161211176182?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/5391470161211176182/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/materiay-z-igk2009-i-nowy-artyku.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5391470161211176182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5391470161211176182'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/materiay-z-igk2009-i-nowy-artyku.html' title='Materiały z IGK&apos;2009 i nowy artykuł'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-2957423101198992264</id><published>2009-03-22T13:50:00.006+01:00</published><updated>2009-03-24T15:42:52.688+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IGK'/><title type='text'>IGK'2009 - przemyślenia po konferencji</title><content type='html'>&lt;p&gt;Tegoroczna, już 6-ta, edycja konferencji IGK już się zakończyła. Przynajmniej dla mnie, bo chłopaki jeszcze biorą udział w compo. Ja zrezygnowałem ze startowania, bo aktualnie siedzenie w nocy i wymyślanie różnych rzeczy nie sprawia mi już takiej frajdy. Kodzenie w moim przypadku przypada na godziny 10.00 - 22.00 :) Fajnie było się ze wszystkimi spotkać i pogadać trochę o programowaniu gier, zwłaszcza że od zeszłego roku dużo więcej osób pracuje w branży gier.&lt;/p&gt;&lt;p&gt;Czas więc na małe podsumowanie tego co widziałem.&lt;/p&gt;&lt;p&gt;Organizacyjnie było całkiem nieźle. Jedyna wpadka to brak autokaru przez 30 min. podczas pierwszego dnia konferencji, ale później nie było już z tym problemów. Zresztą nieuczciwe byłoby zrzucanie tego w całości na organizatorów.&lt;/p&gt;&lt;p&gt;Jedzenie bardzo dobre :)&lt;/p&gt;&lt;p&gt;Sponsorzy dopisali, co może cieszyć: &lt;a href="http://www.thefarm51.com/"&gt;Farm 51&lt;/a&gt;, &lt;a href="http://www.seventhtear.com/"&gt;Seventhtear&lt;/a&gt;, &lt;a href="http://www.techland.pl/en/devcorporate.htm"&gt;Techland&lt;/a&gt; (fajnie że są jak zawsze) i zdaje się, że Mobica (była wymieniona podczas konferencji, brakuje jednak informacji na stronie konferencji).&lt;/p&gt;&lt;p&gt;Referaty. Poziom niestety niższy niż w roku ubiegłym, choć trafiło się na szczęście kilka perełek. Ogólnie było bardzo różnie dlatego powiem kilka słów o każdym z nich:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Projekt i implementacja trójwymiarowej gry zręcznościowej na telefon komórkowy. - przedstawiciele Akademii Podlaskiej opisali proces tworzenia gry na komórki. Może referat nie był profesjonalny merytorycznie. Ale po pierwsze autorzy byli świadomi braków w swojej wiedzy (a jest to lepsze niż udawanie, że się wszystko wie), a poza tym co dużo ważniejsze napisali kompletną, działającą grę, a to jest bardzo fajne. Gratuluję im tego i życzę, żeby był to początek przygody z programowaniem gier!&lt;/li&gt;&lt;li&gt;Projektowanie i implementacja silnika fizyki - wg mnie zdecydowanie najlepszy referat w trakcie konferencji! Seventhtear zaprezentował ogólnie jak powinien wyglądać silnik fizyki, opowiedział o typowych problemach w implementacji. Naprawdę bardzo fajne, zwłaszcza jeśli wcześniej nie miało się wielkiej styczności z implementacją silników fizyki, które (tu w pełni zgadzam się z autorem) są równie ważne i ciekawe co renderery. Poza tym fajnie było w końcu poznać człowieka, który poniekąd zachęcił mnie do próbowania dostania się do Metropolis Software (przypominam jednak, że ostatecznie tam nie pracuję).&lt;/li&gt;&lt;li&gt;Przegląd technik sztucznej inteligencji stosowanych w grach komputerowych. - temat niestety bardzo ogólny! W 40 minut ciężko powiedzieć tutaj coś sensownego, na każdą z omawianych technik można poświęcić wiele godzin. Szkoda zatem, że autor nie skupił się na konkretnym zagadnieniu.&lt;/li&gt;&lt;li&gt;Kopalnia pomysłów - wzorce dla projektowania gier komputerowych. - przyznam, że tutaj nie bardzo zrozumiałem intencję autorów. Referat w mojej opinii trochę zbyt chaotyczny, a i również do formy przekazu mam pewne zastrzeżenia.&lt;/li&gt;&lt;li&gt;Inżynieria oprogramowania w grach komputerowych w praktyce. - przyznam, że temat ten mnie bardzo zawiódł. Po Koshmaarze (Playlogic Games) oczekiwałem czegoś innego. Owszem było to ciekawe, ale z samą inżynierią nie miało wiele wspólnego. Spodziewałem się raczej czegoś o testach czy metodykach. A tak nie miałem, o czym z nim podyskutować (jakby było o Agile mogłoby być ciekawie :) ). Ponadto Koshmaar sorry, ale dlaczego slajdy były po angielsku?! Jesteśmy w Polsce, konferencja jest po polsku. Nawet mimo że znam ten język dość dobrze, za to ode mnie WIELKI minus.&lt;/li&gt;&lt;li&gt;Rola języków skryptowych w technologii gier. - języki skryptowe z punktu widzenia graczy. Całkiem przyjemny referat, mimo że wygłoszony przez laików w programowaniu. Udowodniło to jednak, że podstaw skryptowania może nauczyć się każdy. Trochę błędów było, ale większość można wybaczyć.&lt;/li&gt;&lt;li&gt;Rendering planet w czasie rzeczywistym. - kolejny referat, po którym wiele sobie obiecywałem. I wyszło bardzo fajnie. Co prawda znów zbyt ogólnie, bo o takim megatexturingu można wygłosić osobny referat, a zabrakło np. informacji o renderingu chmur czy atmosfery, ale i tak jeden z lepszych referatów tegorocznej edycji. Demka niestety zabrakło (te 100GB tekstur :) ).&lt;/li&gt;&lt;li&gt;Rendering realistycznej wody jako efekt post-process - a... to moje. Chyba się podobało, choć przez ograniczony obiadem czas nie powiedziałem tyle co bym chciał. Braki zostaną uzupełnione i w tekście referatu (jest dużo dłuższy) oraz w "reżyserskiej" wersji prezentacji.&lt;/li&gt;&lt;li&gt;NecroVisioN - ewolucja renderera i mechaniki gry. - firmowa prezentacja firmy Farm 51 dotycząca ich najnowszej gry. Powiem tak - po tej prezentacji zdecydowałem, że muszę w grę zagrać, bo wyszła naprawdę fajnie. Sama prezentacja, wygłoszona przez Wojciecha Pazdura (jeśli ktoś tego pana nie kojarzy, to jest on jednym z twórców Painkillera), prezentowała wysoki poziom merytoryczny. Pazdur nie bał się opowiadać o problemach z pierwotną wersją renderera, a nawet zdradził kilka cennych informacji dotyczących aktualnie używanej wersji. Powiem tak - deferred shading mają zaimplementowany praktycznie tak samo jak ja :) Fajne jest też to, że Farma jest bardzo często obecna na konferencji i odsłania zawsze trochę kart. Po prostu super sprawa!!!&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;EDIT: Jedna rzecz mi się odnośnie referatów nie podobała - niektóre pytania. Jeśli ktoś widział, że autor nie jest super zaawansowany, to po co pytania, na które na pewno nie będzie znał odpowiedzi? Po to żeby pytający pokazał jaki to on jest Pro, że jest lepszy od autora?! A może po to by ośmieszyć autora i wzbudzić uznanie sali. Sorry, ale takie zachowanie jest infantylne i żałosne. Pokazuje też, że nie każdy umie docenić wysiłek jaki trzeba włożyć w przygotowanie referatu.&lt;/p&gt;&lt;p&gt;I to ogólnie tyle. Po referacie dotyczącym Necrovision zabraliśmy się z kilkoma kolegami do domów. Tak więc moja relacja jest niepełna, bo był jeszcze konkurs wiedzy IT (sorry Reg, żałuję, że nie mogłem być obecny, ale zmęczenie było zbyt duże), wybór referatu oraz Compo.&lt;/p&gt;&lt;p&gt;Tak czy inaczej - do zobaczenia za rok!&lt;/p&gt;&lt;p&gt;EDIT2: materiały z konferencji (prezentacja, demko) pojawią się wkrótce.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-2957423101198992264?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/2957423101198992264/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/igk2009-przemyslenia-po-konferencji.html#comment-form' title='Komentarze (6)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2957423101198992264'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2957423101198992264'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/igk2009-przemyslenia-po-konferencji.html' title='IGK&apos;2009 - przemyślenia po konferencji'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-4811871378408759519</id><published>2009-03-18T14:57:00.003+01:00</published><updated>2009-03-18T15:03:41.995+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>nGENE - tech demo</title><content type='html'>&lt;p&gt;Tech demo z nGENE Tech miało być pokazane na IGK'2009 w ramach mojego referatu. Tak mówiłem od pewnego czasu. Nie będzie. Stwierdziłem, że wolę na nim pokazać krótki filmik prezentujący tylko wodę i jej różne aspekty. Natomiast tech demo będzie udostępnione osobno. Wynika to z faktu, że nie chcę żeby ludzie stwierdzili, że się przechwalam czymś co nijak ma się do referatu, bo sam tak bym pomyślał.&lt;/p&gt;&lt;p&gt;Tech demo do ściągnięcia będzie 1. kwietnia. Wynika to z faktu, że na pewno będzie udostępniane wraz z instalatorem, żeby uniknąć aktualnych problemów z różnicami między wersjami .dll-ek. Chcę zresztą wprowadzić jeszcze drobne optymalizacje w kodzie.&lt;/p&gt;&lt;p&gt;Na zachętę już teraz pokazuję "trailer":&lt;/p&gt;&lt;object width="425" height="344"&gt;&lt;p&gt;&lt;embed src="http://www.youtube.com/v/qevGm_8wMJk&amp;amp;hl=pl&amp;amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/p&gt;&lt;/object&gt;&lt;p&gt;HD dostępne &lt;a href="http://www.sendspace.com/file/p847f0"&gt;do ściągnięcia tutaj&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-4811871378408759519?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/4811871378408759519/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/ngene-tech-demo.html#comment-form' title='Komentarze (8)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4811871378408759519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4811871378408759519'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/ngene-tech-demo.html' title='nGENE - tech demo'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1897093803137499704</id><published>2009-03-16T19:38:00.009+01:00</published><updated>2009-03-17T11:55:01.370+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><category scheme='http://www.blogger.com/atom/ns#' term='debugowanie'/><title type='text'>Reference rasterizer - co to takiego?</title><content type='html'>&lt;p&gt;Jest w DirectXie coś takiego co nosi nazwę reference rasterizera (wczoraj musiałem po dłuższej przerwie z niego skorzystać). Mimo że nie jest to z pozoru nic szczególnie przyjemnego ani potrzebnego, to warto wiedzieć co to takiego i jak z tego skorzystać, bo czasem okaże się to ostatnią deską ratunku w sytuacji, gdy nasze efekty graficzne nie działają a wedle naszego mniemania i okna "Output" z debuggera - powinny. Zwykle jest tak, że u nas wszystko jest w porządku, ale problemy pojawiają się na innych komputerach. A to jakieś artefakty, a to pusty ekran. Możliwości jest całkiem sporo.&lt;/p&gt;&lt;p&gt;Ale do rzeczy. Reference rasterizer w skrócie pozwala na symulowanie referencyjnego urządzenia, czyli oderwanego całkowicie od producenta, wersji sterowników itp. Urządzenia, które spełnia wymogi danej wersji DirectXa. Jest to zatem swego rodzaju wzorzec. Działa sobie toto w całości na CPU więc nie należy oczekiwać zawrotnej wartości FPS (prędkość renderingu mogłaby momentami rywalizować z raytracerem działającym na CPU na jednordzeniowym procesorze; przy czym raytracer mógłby wygrać :) ).&lt;/p&gt;&lt;p&gt;Jeśli grafika prawidłowo wyświetla się na reference rasterizerze, to praktycznie na 100% będzie działała prawidłowo na wszystkich kartach o takiej konfiguracji. Na szczęście, bo pozwala to wyeliminować potencjalne błędy. Dzięki temu aktualnie usuwanie pewnego buga na kartach AMD-ATI nie stanowi dla mnie wielkiego problemu (sam mam GeForce'a). Bez tego musiałbym zgadywać tylko po objawach, co byłoby mniej efektywne i skuteczne. A że w logach wszystko jest ok, to nie ma innego wyboru.&lt;/p&gt;&lt;p&gt;Ale jak skorzystać z dobrodziejstw "Refa"?&lt;/p&gt;&lt;p&gt;Nic prostszego. W momencie tworzenia urządzenia w DirectXie w polu DeviceType należy podać D3DDEVTYPE_REF (zamiast D3DDEVTYPE_HAL). Wywołanie wygląda więc mniej więcej tak:&lt;/p&gt;&lt;p&gt;pD3D-&gt;CreateDevice(..., D3DDEVTYPE_REF, ..., ..., ..., ...);&lt;/p&gt;&lt;p&gt;Gdy już mamy ustawione odpowiednie urządzenie możemy uruchomić program w PIXie (swoją drogą w PIXie też istnieje możliwość wymuszenia przełączenia urządzenia w tryb referencyjny). Jednak jako, że nasze aplikacje będą działały raczej wolno to odpadają w zasadzie podstawowe zdefiniowane w PIXie Countery (i dobrze bo są potwornie ograniczone). Jeśli chcemy tylko zobaczyć jak nasza aplikacja wygląda to wystarczy zdefiniować dwa triggery. Ja np. zdefiniowałem sobie takie:&lt;br /&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/Sb9_5sL0fbI/AAAAAAAAA3M/KuxU9o0qfIw/s1600-h/pix.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 154px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/Sb9_5sL0fbI/AAAAAAAAA3M/KuxU9o0qfIw/s320/pix.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5314106714410483122" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Pierwszy (uruchamiany w klatce nr 1) zbiera wszystkie dane, drugi (wywoływany w 2. klatce) zamyka aplikację (inaczej nie byłem jej w stanie zamknąć). Oczywiście często trzeba będzie to skonfigurować inaczej, ale mi było potrzebne akurat coś takiego.&lt;/p&gt;&lt;p&gt;BTW znów mam Screen Tygodnia na &lt;a href="http://www.gamedev.pl/"&gt;gamedev.pl&lt;/a&gt;. Policzyłem z ciekawości jedną rzecz i okazało się, że od 11.01.2009 jest to już 7. Screen Tygodnia dla moich screenów! Całkiem satysfakcjonujący wynik jak na fakt, że od tego czasu minęło 2.5 miesiąca ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1897093803137499704?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1897093803137499704/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/reference-rasterizer-co-to-takiego.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1897093803137499704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1897093803137499704'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/reference-rasterizer-co-to-takiego.html' title='Reference rasterizer - co to takiego?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fbfW7HvrHa4/Sb9_5sL0fbI/AAAAAAAAA3M/KuxU9o0qfIw/s72-c/pix.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1633471394697747644</id><published>2009-03-15T19:59:00.003+01:00</published><updated>2009-03-15T20:21:54.803+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='gry'/><title type='text'>Czy gry są sztuką?</title><content type='html'>&lt;p&gt;Pytanie w tytule jest aktualne. Opinia publiczna ciągle nie uznała gier za sztukę tak na 100% (dla wielu ciągle jest to tylko zabawa i nic więcej...). Środowisko twórców gier dopomina się o to co jakiś czas (choć nie wszyscy są tu zgodni).&lt;/p&gt;&lt;p&gt;Czy gry wideo powinny być traktowane jako sztuka? Moim zdaniem - tak. O to garść powodów, które wg mnie za tym przemawiają:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Kino już od wielu lat uznawane jest za sztukę, a arcydzieł wśród filmów jest naprawdę niewiele, większość to kiczowate produkcje o płytkiej fabule i przeciętnej grze aktorskiej. Z grami jest podobnie, nie każda gra jest dziełem ze wszech miar, niemniej perły też się zdarzają. Jednocześnie głębia doznań oferowanych przez gry jest dużo większa. W niejednym tytule gracz po kilkudziesięciu godzinach grania zaczyna się utożsamiać ze swoim cyfrowym alter ego, przeżywa jego klęski, cieszy się jego sukcesami, odczuwa strach, litość, współczucie. Pojawia się tu zatem coś na miarę katharsis. Tym którzy nie pamiętają już lekcji polskiego przypomnę, że katharsis było formą duchowego oczyszczenia, które towarzyszyć miało oglądaniu przedstawień teatralnych w starożytnej Grecji.&lt;/li&gt;&lt;li&gt;Niejednokrotnie fabuła prezentowana w grach może się równać z książkami. Całkowicie liniowe i przewidywalne fabuły to czasy minione bezpowrotnie. Dziś gry takie jak np. The Witcher czy Mass Effect stawiają przed graczem trudne wybory moralne, które zadecydują nie tylko o jego losach, ale o losach otoczenia, w którym się porusza. Liczne zwroty akcji jeszcze bardziej pomagają w budowie emocji.&lt;/li&gt;&lt;li&gt;Dalej - muzyka. Ona sama w sobie jest sztuką. Utwory takich artystów jak Jeremy Soul rozbrzmiewają w uszach jeszcze przez wiele godzin po zakończeniu rozgrywki. A że muzyka ta jest integralną częścią gry i stanowi do niej podkład...&lt;/li&gt;&lt;li&gt;Warstwa wizualna - niektóre modele/tekstury to arcydzieła same w sobie. Ale na grafikę w grze mają również wydatny wpływ programiści. Utworzenie efektów to jedno, ale utworzenie ich w taki sposób, żeby to stanowiło spójną całość i żeby wyglądało tak jak wynika z mętnych wyjaśnień designera to wcale nie taka łatwa sprawa. Zresztą nie wszystko opiera się na wzorach matematycznych, całkach i innych tablicach. Aby uzyskać piękny obraz nie opłaca się naśladować rzeczywistości, bo prawda jest taka, że jest ona bardzo szara i często nieciekawa. Obraz trzeba podrasować niczym grafik zdjęcie modelki w Photoshopie. A do tego potrzeba już jakiejś formy talentu.&lt;/li&gt;&lt;li&gt;Przede wszystkim jednak gry to zbiór wielu elementów, połączenie wielu gałęzi sztuki. Czy zatem sprawiedliwie jest odmawiać im samym takiego tytułu?&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Na koniec taki screen malarski z nGENE'a:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/Sb1VQ1iZL7I/AAAAAAAAA3E/zdCwCA6fPY0/s1600-h/nGENE_0223.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/Sb1VQ1iZL7I/AAAAAAAAA3E/zdCwCA6fPY0/s320/nGENE_0223.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5313496883104657330" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1633471394697747644?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1633471394697747644/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/czy-gry-sa-sztuka.html#comment-form' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1633471394697747644'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1633471394697747644'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/czy-gry-sa-sztuka.html' title='Czy gry są sztuką?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fbfW7HvrHa4/Sb1VQ1iZL7I/AAAAAAAAA3E/zdCwCA6fPY0/s72-c/nGENE_0223.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1093605035545276020</id><published>2009-03-11T00:01:00.002+01:00</published><updated>2009-03-11T00:15:50.203+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='IGK'/><title type='text'>IGK'2009 - agenda</title><content type='html'>&lt;p&gt;Organizatorzy konferencji IGK udostępnili dziś &lt;a href="http://igk.ap.siedlce.pl/strona/6/Agenda.html"&gt;agendę&lt;/a&gt;. Moje odczucia nt. tematów, które w tym roku zostaną wygłoszone są nieco mieszane. Z jednej strony jest kilka mnie interesujących, czyli dotyczących silnika i technologii (silnik fizyki, rendering planet, Necrovision), a z drugiej wiele jest takich, które jakoś mnie nie specjalnie pociągają. Cóż nie jest to oczywiście SIGGRAPH i nie samą grafiką człowiek żyje, więc to zrozumiałe. Z drugiej strony w zeszłym roku było zagadnień silnikowych więcej - stąd pewnie niedosyt. &lt;/p&gt;&lt;p&gt;Szkoda też, że z roku na rok coraz mniej Warsztatowych wyjadaczy decyduje się opowiedzieć nam o czymś ciekawym. Brak referatów stałych bywalców takich jak Reg, mINA czy Krzysiek K. A że są to ludzie, którzy siedzą w branży więc ich głos byłby tu szczególnie cenny. Nie tylko z powodu merytorycznego, ale również podnosiłby prestiż konferencji (tak - chcę was zmotywować na przyszły rok :) ).&lt;/p&gt;&lt;p&gt;A tak to musi zabrać głos taki amator jak ja ;) I to do tego tuż przed przerwą obiadową (szykujcie się na brak obiadu w tym roku, bo o wodzie to mogę godzinami rozprawiać).&lt;/p&gt;&lt;p&gt;Z innej beczki. Po raz kolejny mój screen jest screenem tygodnia. Filmik, już to mogę powiedzieć został przyjęty dość ciepło. Co prawda są pewne zastrzeżenia (choć nie ze wszystkimi się zgadzam), ale ogólnie jest chyba na tak ;) To dobrze, bo przed IGK chyba nie zdążyłbym już kompletnie zmienić algorytmu renderowania wody. Ot był to taki ostatni sprawdzian.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1093605035545276020?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1093605035545276020/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/igk2009-agenda.html#comment-form' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1093605035545276020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1093605035545276020'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/igk2009-agenda.html' title='IGK&apos;2009 - agenda'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-8811678932656799996</id><published>2009-03-09T19:56:00.011+01:00</published><updated>2009-03-09T20:54:43.992+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>nGENE - update</title><content type='html'>&lt;p&gt;Co prawda przed tegorocznym IGK miałem nie dokonywać żadnych update-ów do publicznego repozytorium SVN, jednak kilka bugów zmusiło mnie żeby zmienić zdanie. Lista zmian jest naprawdę duża, niemal wszystkie są bezpośrednio lub pośrednio powiązane z demem nad którym pracuję, ale prawda jest taka, że wiele rzeczy uległo zmianie. Aktualna wersja to również 5 przykładów (oprócz 6 tutoriali):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;FurryBunny - było wcześniej&lt;/li&gt;&lt;li&gt;Tornado - pokazuje sposób użycia pól siłowych&lt;/li&gt;&lt;li&gt;NPR - pokazuje rendering z inną kamerą + NPR&lt;/li&gt;&lt;li&gt;SSAO - mówi wszystko&lt;/li&gt;&lt;li&gt;SwayingPalm - ta palma, do której filmik jakiś czas temu wrzuciłem&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Wkrótce pojawi się też największe demo tj. VolcanicIsland.&lt;/p&gt;&lt;p&gt;Do tego czasu pokażę prostą scenę zawierającą wodę w ruchu. Wiele osób pytało jak to działa w ruchu, chciało to zobaczyć, więc taki szybki filmik z edytora (edytora na nim nie widać poza bounding boxem używanym do prezentacji zaznaczonych obiektów). Scena jest zmodyfikowaną sceną, którą prezentowałem do połowy ubiegłego roku. Aha i sorry za te zbyt ciemne obiekty - mają nieprawidłowo ustawione parametry materiału, więc silnik traktuje je jakby były baaardzo ciemne :)&lt;/p&gt;&lt;p&gt;Woda jest nieco mętna, pora dnia - 3 godziny po świcie. Patrzeć tylko na wodę reszta jak mówiłem jest mocno testowa :)&lt;/p&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/JjAXlUSBtD4&amp;hl=pl&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/JjAXlUSBtD4&amp;hl=pl&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;p&gt;Ponieważ z niezrozumiałych powodów jakość filmu na YouTube jest katastrofalnie niska wrzucam &lt;a href="http://www.sendspace.com/file/5ermpb"&gt;też film w wyższej jakości&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-8811678932656799996?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/8811678932656799996/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/ngene-update.html#comment-form' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8811678932656799996'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8811678932656799996'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/ngene-update.html' title='nGENE - update'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1323718759542651329</id><published>2009-03-05T11:26:00.003+01:00</published><updated>2009-03-05T11:41:25.175+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='nurkowanie'/><title type='text'>SWA i petycja</title><content type='html'>&lt;p&gt;Nurkujesz, żeglujesz, uprawiasz surfing, lubisz poszaleć na skuterze wodnym albo po prostu lubisz wypoczynek nad wodą? Od niedawna na polskiej scenie sportów wodnych istnieje stowarzyszenie &lt;a href="http://www.swa.org.pl/"&gt;SWA (Safe Water Association)&lt;/a&gt;, promujące bezpieczeństwo nad i pod wodą. Jako jego członek i osoba obecna przy jego narodzinach zachęcam wszystkich do zapoznania się z jego działalnością.&lt;br /&gt;&lt;/p&gt;Na początek proponujemy zmiany w szkoleniu żeglarzy ponieważ standardowe szkolenie nie obejmuje procedur postępowania w przypadku bliskości nurków do jednostki pływającej (ba! nie ma często nawet słowa o znaczeniu nurkowych flag). List otwarty oraz petycję na ten temat można znaleźć &lt;a href="http://www.swa.org.pl/petycje"&gt;pod tym adresem&lt;/a&gt;. Może wydawać się to drobnostką, ale uwierzcie mi - duży odsetek wypadków śmiertelnych w nurkowaniu jest spowodowany przez uderzenie głową nurka w przepływającą zbyt blisko jednostkę... Zbyt duży.&lt;br /&gt;&lt;p&gt;&lt;/p&gt;Ponadto w ubiegłym tygodniu w ramach SWA wraz z grupką przyjaciół przeszkoliliśmy się w zakresie udzielania pierwszej pomocy przedmedycznej (EFR) oraz tlenowej (DAN Oxygen Provider i DAN Advanced Oxygen Provider). Kurs zrealizowany został przez &lt;a href="http://shark.net.pl/"&gt;Centrum Nurkowe Crazy Shark&lt;/a&gt; i jest godny polecenia nawet dla osób nienurkujących. Mimo że jest to jedna z tych umiejętności, która ma się nadzieję nigdy nie będzie potrzebna, naprawdę powinno się ją nabyć.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1323718759542651329?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1323718759542651329/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/swa-i-petycja.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1323718759542651329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1323718759542651329'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/swa-i-petycja.html' title='SWA i petycja'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1561867469742091546</id><published>2009-03-03T14:10:00.002+01:00</published><updated>2009-03-03T14:14:56.902+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='artykuł'/><category scheme='http://www.blogger.com/atom/ns#' term='strona'/><title type='text'>Zmiany na stronie i ankieta</title><content type='html'>&lt;p&gt;Trochę podrasowałem stronę (oczywiście w zakresie w jakim na bloggerze jest to możliwe). Z widocznych rzeczy, nawigacja powinna być nieco łatwiejsza dzięki udostępnieniu chmury tagów.&lt;/p&gt;&lt;p&gt;Dodałem również ankietę nt. tematu artykułu, który chcielibyście przeczytać (jeśli ktoś ma inne propozycje, to zachęcam do ich zgłaszania). Tematy do wyboru są dosyć zaawansowane, ale wszystkie mają zastosowanie w programowaniu gier (no może poza ray-tracerem - ich epoka jeszcze nie nadeszła, ale myślę, że za 5 lat będą tym czym dzisiaj jest deferred shading, czyli czymś więcej niż tylko buzz-wordem).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1561867469742091546?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1561867469742091546/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/zmiany-na-stronie-i-ankieta.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1561867469742091546'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1561867469742091546'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/03/zmiany-na-stronie-i-ankieta.html' title='Zmiany na stronie i ankieta'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-7121012425385634560</id><published>2009-02-28T14:01:00.007+01:00</published><updated>2009-03-02T13:26:49.041+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='gry'/><title type='text'>Drakensang i Nebula</title><content type='html'>&lt;p&gt;W ostatnim czasie bez reszty pochłonęła mnie gra o nazwie Drakensang (nie licząc przerw na pisanie tech dema silnika i dopisywaniu różnych bugów do silnika :) ). Jest to cRPG naszych zachodnich sąsiadów, dla którego wyraźną inspiracją nie są gry takie jak ostatnie hity gatunku czyli The Witcher, Mass Effect, Fallout 3 czy Gothic 3. Jest to heroic fantasy cRPG w klasycznym wydaniu nawiązujący do takich gier jak Baldur's Gate czy Icewind Dale. Mamy więc sporą drużynę (4 osoby), sterowanie myszą, wiele umiejętności, czarów, mikstur, przeciwników, przedmiotów i dosłownie dziesiątki questów! Nie są to questy o rozmachu tych znanych z Fallouta 3, ale wiele radości daje zabijanie szczurów w piwnicy, czy polowanie na czarownice po stronie Inkwizycji.&lt;/p&gt;&lt;p&gt;Gra okazała się na tyle dużym sukcesem w Niemczech (zgarnia tam wszystkie możliwe nagrody), że choć premiera wersji angielskiej ma mieć miejsce dopiero wkrótce (polska już jakiś czas temu miała miejsce) to już zapowiedziano jej drugą część (prequel). Grę gorąco polecam!&lt;/p&gt;&lt;p&gt;Ale nie byłbym sobą gdybym na grę patrzył tylko jako na źródło rozrywki. Chwila przeczesywania różnych stron zaprowadziła mnie m.in. &lt;a href="http://flohofwoe.blogspot.com/"&gt;tutaj&lt;/a&gt; oraz &lt;a href="http://sourceforge.net/projects/nebuladevice"&gt;tutaj&lt;/a&gt;. Okazuje się bowiem, że autorzy gry, firma Radon Labs, udostępnia swój engine Nebula napędzający m.in. Drakensanga na zasadzie Open-Source. I to nie tylko wersję 2 (właśnie na niej działa Drakensang), ale również najnowszą odsłonę oznaczoną numerem 3. A że jest to engine całkiem porządny i wydajny niech świadczy fakt, że gra o której tu piszę działa płynnie na bardzo wielu słabszych konfiguracjach, a mimo to wygląda naprawdę przyjemnie (ma taki fantasowy klimat). &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-7121012425385634560?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/7121012425385634560/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/drakensang-i-nebula.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7121012425385634560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7121012425385634560'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/drakensang-i-nebula.html' title='Drakensang i Nebula'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1883327199605891940</id><published>2009-02-25T14:25:00.003+01:00</published><updated>2009-03-02T13:02:35.341+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='artykuł'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Deferred shading a pakowanie</title><content type='html'>&lt;p&gt;Tę notkę bardziej można potraktować jako update do mojego zeszłorocznego &lt;a href="http://www.gamedev.pl/articles.php?x=view&amp;amp;id=297"&gt;referatu z IGK dotyczącego deferred shadingu&lt;/a&gt; niż pełnoprawny wpis, ale co tam.&lt;/p&gt;&lt;p&gt;Podobnie jak inni autorzy zajmujący się tym zagadnieniem w ubiegłym roku wychwalałem w referacie zalety pakowania danych przed umieszczeniem ich w G-Buforze. Jednak w przeciągu roku deferred shading pojawił się w bardzo wielu silnikach, karty graficzne znacznie się rozwinęły i okazało się, że pakowania już się prawie nie stosuje (albo w bardzo ograniczonym wymiarze)! DirectX 9.0 pozwala przy wykorzystaniu MRT na zastosowanie 4, DirectX 10.0 już 8 render targetów. Miejsca na dane jest więc wystarczająco dużo, nawet w przypadku tej starszej wersji DirectXa. Tak naprawdę w 90% przypadków będziemy chcieli w buforze przechować tylko pozycję (3 składowe), wektor normalny (3 składowe), dane o specularze (2 składowe), indeks materiału (1 składowa) i kolor (4 składowe). Daje to w sumie 13 pól. Tak więc jeśli korzystamy z zestawu 4 4-kanałowych tekstur, to mamy jeszcze wolne miejsce na dodatkowe ustawienia.&lt;/p&gt;&lt;p&gt;Co to daje? Poza zaoszczędzeniem kilku instrukcji shaderów wymaganych do pakowania i rozpakowywania danych, przede wszystkim nie ma strat jakości (mówię o buforze zmienno-przecinkowym, w którym na jeden RT przypadają 64 bity - bo aktualnie jest to najmodniejsza konfiguracja). A te były szczególnie wyraźne w przypadku niektórych metod pakowania wektorów normalnych i wektorów położenia, o czym zresztą już kiedyś wspominałem. Niby niedokładności były nieznaczące, ale potrafiły się objawiać od czasu do czasu w postaci artefaktów.&lt;/p&gt;&lt;p&gt;Kolejna sprawa. Cienie. O nich tylko napomknąłem. W przypadku deferred shadingu zwykle używa się tradycyjnego podejścia, to jest shadow mappingu. Dla świateł kierunkowych często nie są jednak wykorzystywane jakieś skomplikowane techniki , lecz tradycyjny rendering z rzutem ortogonalnym, bez żadnych dodatków! Dla świateł kierunkowych, które z punktu widzenia deferred shadingu są globalne stosuje się jednak większą shadow mapę (zwykle od 1024x1024 do 2048x2048), dzięki czemu cienie wyglądają całkiem przyzwoicie. Do tego rozmycie cieni i efekt zadowoli większość graczy. Bardzo fajny opis można znaleźć w GPU Gems 3, w rozdziale opisującym deferred shading w grze Tabula Rasa.&lt;/p&gt;&lt;p&gt;Ponadto znów mój screen został screenem tygodnia na gamedev.pl :) jest to dla mnie bardzo miłe. Również pozytywne komentarze, choć niektóre nieco na wyrost działają motywująco.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;I ważna uwaga na koniec:&lt;/strong&gt; chętnie napisałbym jakiś artykuł. Aktualnie nie mam jednak pomysłu na jaki temat. Jeśli ktoś ma jakiś pomysł jestem otwarty na sugestie (czy to dotyczące implementacji jakiejś techniki graficznej, czy czegoś dotyczącego silników, projektowania, inżynierii itd.).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1883327199605891940?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1883327199605891940/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/deferred-shading-pakowanie.html#comment-form' title='Komentarze (8)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1883327199605891940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1883327199605891940'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/deferred-shading-pakowanie.html' title='Deferred shading a pakowanie'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3449813685019984255</id><published>2009-02-23T15:33:00.008+01:00</published><updated>2009-02-23T15:37:34.709+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>nGENE - Update</title><content type='html'>&lt;p&gt;Po napisaniu poprzedniego shadera zacząłem wrzucać roślinność do dema:&lt;/p&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SaK0mOwOQ0I/AAAAAAAAA1A/IWEcTdjtAMk/s1600-h/nGENE_0186.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SaK0mOwOQ0I/AAAAAAAAA1A/IWEcTdjtAMk/s200/nGENE_0186.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5306001879884251970" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SaK0PQp_cRI/AAAAAAAAA04/9DpxkZx-lhw/s1600-h/nGENE_0188.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SaK0PQp_cRI/AAAAAAAAA04/9DpxkZx-lhw/s200/nGENE_0188.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5306001485257994514" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3449813685019984255?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3449813685019984255/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/ngene-update.html#comment-form' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3449813685019984255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3449813685019984255'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/ngene-update.html' title='nGENE - Update'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fbfW7HvrHa4/SaK0mOwOQ0I/AAAAAAAAA1A/IWEcTdjtAMk/s72-c/nGENE_0186.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-9026754872599993916</id><published>2009-02-20T20:03:00.011+01:00</published><updated>2009-03-02T13:03:09.040+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Animacja roślin</title><content type='html'>&lt;p&gt;Rośliny są coraz częstszym składnikiem gier. O ile kiedyś drzewa wystarczyło wyrenderować jako billboardy, dziś takie rozwiązanie będzie uznane za archaiczne. Współcześnie istnieje nawet możliwość wyrenderowania gęstej dżungli (instancing + impostory + paging działa cuda), gdzie każde drzewo, paproć to osobny model. Jednak, aby rośliny wyglądały w miarę naturalnie nie tylko muszą być pokryte realistycznie wyglądającym materiałem, ale również poruszać się na wietrze, tzn. animować się.&lt;/p&gt;&lt;p&gt;Zaawansowane rozwiązanie tego zagadnienia, użyte w Crysisie, opisane jest szczegółowo w GPU Gems 3. Jednak okazuje się, że niezłe rezultaty da się osiągnąć dużo mniejszym nakładem pracy, i to tę technikę pokrótce opiszę w tej notce.&lt;/p&gt;&lt;p&gt;Najważniejsze w animacji roślin jest to, że wyższe partie roślin chwieją się bardziej od tych położonych niżej. Wynika to oczywiście z kierunku, w którym następuje przyrost rośliny. Najwyżej położone części rośliny są najmłodsze, najcieńsze i tym samym najbardziej giętkie.&lt;/p&gt;&lt;p&gt;Tym samym animacja będzie wyglądała tak:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;float amplitude = IN.position.y * windStrength;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;float3 wave = float3(sin(time + IN.position.x), 0.0f, cos(time + IN.position.z));&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;float3 pos = IN.position + amplitude * wave;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Co tu się dzieje? W pierwszym wierszu uwzględniamy wspomniany wcześniej fakt, i wyliczamy amplitudę wygięcia dla aktualnej siły wiatru. W kolejnym wierszu wyliczamy modyfikator pozycji. Animacja będzie następowała tylko w osiach x i z. time to oczywiście parametr wejściowy określający czas. Natomiast dodanie do niego odpowiednio IN.position.x i IN.position.z zapewnia pewien chaos, a tym samym większy realizm (jednocześnie zapewniając, że zaburzenia dla blisko leżących wierzchołków będą niewielkie). Dzięki temu wierzchołki będą się poruszały nieco inaczej. Ostatni wiersz to wyliczenie ostatecznej pozycji wierzchołków. Oczywiście potem należy przemnożyć wynik przez odpowiednie macierze.&lt;/p&gt;&lt;p&gt;Jako że obraz wart jest więcej niż 1000 słów, króciutki filmik sporządzony na szybko:&lt;/p&gt;&lt;object height="364" width="445"&gt;&lt;embed src="http://www.youtube.com/v/BS2Ct-yLcW8&amp;amp;hl=en&amp;amp;fs=1&amp;amp;rel=0&amp;amp;border=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="445" height="364"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;p&gt;Mimo że shader w HLSLu ma zaledwie kilka linijek, znacząco ożywił demo, nad którym pracuję. Może nie jest to szczyt technologii, ale aktualnie nic bardziej zaawansowanego nie jest mi potrzebne.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-9026754872599993916?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/9026754872599993916/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/animacja-roslin.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/9026754872599993916'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/9026754872599993916'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/animacja-roslin.html' title='Animacja roślin'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-663959404458519780</id><published>2009-02-16T13:59:00.004+01:00</published><updated>2009-03-02T13:03:28.516+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>NPR a PR</title><content type='html'>&lt;p&gt;SceNtriC swoim &lt;a href="http://pseudodev.blogspot.com/2009/02/sceny-naturalne.html"&gt;ostatnim wpisem&lt;/a&gt; sprowokował mnie do napisania tej notki. Pisze on w swym wpisie o "scenach naturalnych", czyli photorealistic rendering (rendering fotorealistyczny). Ja napiszę o czymś zupełnie przeciwnym, czyli o NPR (non-photorealistic rendering), czyli renderingu stylizowanym. Do tej kategorii zalicza się wiele znanych efektów takich jak cel shading (efekt kreskówki) czy water color filter (efekt farby olejnej). Poniżej przykład z tego drugiego zrobiony na szybko:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SZlmuQLauXI/AAAAAAAAA0Y/d7BnmRZY5Ww/s1600-h/nGENE_0177.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SZlmuQLauXI/AAAAAAAAA0Y/d7BnmRZY5Ww/s320/nGENE_0177.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5303382981008341362" /&gt;&lt;/a&gt;&lt;p&gt;Może screen piękny nie jest, ale pokazuje ideę. Stylizowanie obrazu ma jedną wielką zaletę - obraz starzeje się bardzo wolno. To co widzimy dziś w Crysisie wydaje się nam niesamowite i ultra realistyczne. Jednak za kilka lat, wraz z postępem technologicznym, gry będą wyglądały dużo ładniej. Za 10 lat pewnie nikt w Crysisa nie zagra, bo będzie miał beznadziejną grafikę.&lt;/p&gt;&lt;p&gt;Natomiast sceny wyrenderowane z wykorzystaniem NPR jak powiedziałem, starzeją się wolno. Jeśli uzyskamy efekt farby olejnej, to będzie on tak samo aktualny za kilka ładnych lat. Jest to szczególnie istotne w przypadku gier, w które gracze mają grać latami. Dobrym przykładem są tu więc MMOG. Praktycznie większość korzysta z grafiki stylizowanej (w pewnym stopniu), np. tej z WoWa z pewnością fotorealistyczną nazwać nie można, ale dzięki temu gra po tych kilku latach bytności na rynku wygląda znośnie.&lt;/p&gt;&lt;p&gt;Ponadto w przypadku NPR często można stosować tekstury i modele o niższej szczegółowości, ponieważ końcowy obraz i tak maskuje niedostatki wejściowego. Dzięki temu często znika problem ilości zasobów i gra może działać nawet na słabszym sprzęcie. Ponadto aby zachować spójność warstwy wizualnej, często cała grafika jest utrzymana w tym tonie - modele i tekstury są przerysowane, karykaturalne.&lt;/p&gt;&lt;p&gt;Jednocześnie stosując NPR wcale nie musimy się ograniczać. Są to zwykłe efekty post-process tak więc możliwe jest stosowanie wszystkich innych technik, np. HDR czy SSAO. Wszystko zależy tylko od tego jaki efekt chcemy osiągnąć.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-663959404458519780?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/663959404458519780/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/npr-pr.html#comment-form' title='Komentarze (5)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/663959404458519780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/663959404458519780'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/npr-pr.html' title='NPR a PR'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fbfW7HvrHa4/SZlmuQLauXI/AAAAAAAAA0Y/d7BnmRZY5Ww/s72-c/nGENE_0177.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6186792645019467166</id><published>2009-02-11T20:06:00.000+01:00</published><updated>2009-02-11T20:06:33.808+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='prototypowanie'/><title type='text'>Czy clicki są złe?</title><content type='html'>Ostatnio na Warsztacie (zarówno na forum jak i w samym serwisie) wybuchła kolejna bezsensowna "wojna". Tym razem poszło o to, czy dla tzw. klików (polska nazwa pochodzi pewnie od pierwszego, czyli Click'n'Play) i projektów w nich robionych, jest na Warsztacie miejsce. Padały różne argumenty, niektóre absurdalne, inne niosące ze sobą więcej treści. Sprawa nieco na szczęście przycichła, więc mogę się wypowiedzieć co na ten temat ogólnie myślę.&lt;br /&gt;Uważam, że clicki są o tyle dobre, że pozwalają większemu gronu osób spróbować sił w tworzeniu gier. Na Warsztacie często zapomina się wg mnie o jednym. O tym, że nie każdy musi być programistą gier. Clicki, w których nie trzeba się martwić o takie aspekty jak prawidłowe zarządzanie pamięcią czy optymalizacje SSE, są więc doskonałym narzędziem dla designerów, którzy dzięki nim mogą szybko sprawdzić swoje pomysły. A bez dobrego pomysłu nasze gry będą tak naprawdę niczym, większymi techdemami naszych wypasionych frameworków. Wg mnie chorym byłoby wymagać od projektantów gier umiejętności w programowaniu. Jest to zbyt artystyczna dziedzina, aby zmuszać tych ludzi do technicznego myślenia. Co prawda nie raz i nie dwa, niektóre pomysły projektantom trzeba wyperswadować jako nierealne do zrealizowania na aktualnym sprzęcie, ale równie często są oni w stanie wymyśleć rzeczy, których ograniczający się często do fantasy RPG programista wymyślić nie zdoła. Ponadto widziałem już w życiu projekty (np. design doci) zrobione przez projektantów o programistycznych ambicjach - nigdy więcej... Ani nie był to dobry projekt, ani nie miał za wiele wspólnego z "prawdziwym" programowaniem.&lt;br /&gt;Oczywiście można powiedzieć, że jest wiele innych sposobów prototypowania gier, choćby przygotowanie prostej gry karcianej albo planszowej. Jednak dopiero zobaczenie niektórych pomysłów na ekranie monitora pozwoli ocenić na ile były one trafione. Oczekiwanie na doprowadzenie silnika przez zespół programistów do stanu używalności jest demotywujące. Bo trwa zbyt długo. Wykorzystanie do prototypowania XNA mija się z celem, bo część przydatnych funkcji jest mocno zabugowana (i developerzy XNA tego nie ukrywają na forach). Są oczywiście komercyjne narzędzia, ale początkujący zwykle nie mają ochoty płacić za nie setek dolarów.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6186792645019467166?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6186792645019467166/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/czy-clicki-sa-ze.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6186792645019467166'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6186792645019467166'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/czy-clicki-sa-ze.html' title='Czy clicki są złe?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3251974203365482593</id><published>2009-02-09T11:29:00.015+01:00</published><updated>2009-02-09T13:27:51.668+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Modele nieba</title><content type='html'>&lt;p&gt;Swego czasu opisywałem dwa modele dziennego nieba autorstwa Preethama i Hoffmana. Od tamtego czasu niewiele się zmieniło, istniejące modele nie zostały jakoś dramatycznie usprawnione, nie pojawiły się żadne nowe innowacyjne. Dużą popularnością cieszy się aktualnie model Nishity, prosty i tani obliczeniowo (w porównaniu z wyżej wymienionymi) ale dający niezłe wyniki.  Na nim też bazuje wiele innych (zdaje się, że i Preetham odwoływał się do jego prac). Dla nocnego modelu nieba najlepsze wyniki daje chyba model Shirleya (który notabene jest jednym z współtwórców modelu Preethama).&lt;/p&gt;&lt;p&gt;Ja ciągle zostaję przy modelu Preethama, który choć drogi obliczeniowo daje wg mnie i wielu innych programistów i grafików najładniejsze wyniki osiągalne w czasie rzeczywistym. Jednocześnie ma kilka wad, w tym jedną poważną, która dopóki nie wykorzystywałem HDR zbyt mi nie przeszkadzała. Jest nią bardzo słabe słońce, które w tym modelu jest tylko nieco jaśniejszym od nieba kołem (dla pewnych położeń słońca ciężko je w ogóle zlokalizować). W modelu Hoffmana słońce jest dużo jaśniejsze od reszty nieba (wręcz ta różnica jest zbyt duża). Po przeskalowaniu wynik powinien więc być dużo ładniejszy.&lt;/p&gt;&lt;p&gt;Na szczęście stosunkowo łatwo to obejść. Pamiętać należy jedynie o tym, że model Preethama jest w sumie funkcją położenia słońca na niebie (w zasadzie to kątów, ale do jednego to się sprowadza). Skoro tak, znamy kąt między kierunkiem światła a normalną nieboskłonu, gamma. Próbowałem wielu rozwiązań. Najlepsze słońce uzyskałem w następujący sposób:&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:courier new;"&gt;float sunGlow = sunBrightness * skyLuminance;&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;sunGlow = lerp(1.0, sunGlow, 1 / gamma);&lt;/span&gt;,&lt;/p&gt;&lt;p&gt;gdzie:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;sunBrightness - jasność słońca&lt;/li&gt;&lt;li&gt;skyLuminance - jasność nieba w danym punkcie&lt;/li&gt;&lt;li&gt;gamma - kąt między normalną nieba a wektorem światła&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Następnie ów sunGlow wykorzystuję jako dane wejściowe do HDR. O to jak to wygląda w praktyce (kilka screenów dla tej samej pory dnia i różnych ustawień słońca i atmosfery):&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SZAglt54zHI/AAAAAAAAAzQ/taYIOJqJv8I/s1600-h/nGENE_0176.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SZAglt54zHI/AAAAAAAAAzQ/taYIOJqJv8I/s200/nGENE_0176.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5300772593764715634" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SZAgidjM-WI/AAAAAAAAAzI/ETaC_vDn9k4/s1600-h/nGENE_0171.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SZAgidjM-WI/AAAAAAAAAzI/ETaC_vDn9k4/s200/nGENE_0171.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5300772537834994018" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SZAgep78qwI/AAAAAAAAAzA/zRQPJvjb04k/s1600-h/nGENE_0170.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SZAgep78qwI/AAAAAAAAAzA/zRQPJvjb04k/s200/nGENE_0170.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5300772472440531714" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SZAgZqpzPqI/AAAAAAAAAy4/i4TYw9nqhug/s1600-h/nGENE_0169.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SZAgZqpzPqI/AAAAAAAAAy4/i4TYw9nqhug/s200/nGENE_0169.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5300772386733506210" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;I na koniec jeszcze screen z dema silnika, nad którym pracuję. Dodatkowo nieco stuningowane chmury (poprawniejszy zanik na horyzoncie i scattering) i woda:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SZAhNFEhUNI/AAAAAAAAAzg/gv3lNDxOaNU/s1600-h/nGENE_0167.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 240px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SZAhNFEhUNI/AAAAAAAAAzg/gv3lNDxOaNU/s320/nGENE_0167.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5300773269998227666" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3251974203365482593?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3251974203365482593/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/modele-nieba.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3251974203365482593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3251974203365482593'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/02/modele-nieba.html' title='Modele nieba'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fbfW7HvrHa4/SZAglt54zHI/AAAAAAAAAzQ/taYIOJqJv8I/s72-c/nGENE_0176.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-7679114222944220102</id><published>2009-01-30T11:08:00.013+01:00</published><updated>2009-01-31T21:11:38.519+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>nGENE - małe podsumowanie</title><content type='html'>Nad swoim frameworkiem pracuję już przeszło 2 lata. Z tego tytułu małe podsumowanie. Na pokazanie pierwszych screenów zdecydowałem się dopiero rok temu i teraz mogę z całą stanowczością powiedzieć, że się ich wstydzę. Wówczas dało się już pisać proste efekty (i w gruncie rzeczy tylko takie). Niby moja wiedza od tamtego czasu jakoś potwornie nie wzrosła, ale jakość pierwszych obrazków była słaba. Choć z dnia na dzień nie widzę jakichś wielkich postępów, to gdy spojrzę czasem na te starsze screeny i na screeny sprzed zaledwie kilku dni, widzę że napisałem sporo fajnych efektów. Powiem więcej - ciężko mi uwierzyć, że jest to jeden i ten sam silnik. Zresztą, żeby nie było, że mówię coś dziwnego dwa screeny. Jeden ma ok. roku, drugi kilka dni:&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SYSsyfj9gYI/AAAAAAAAAyY/PoidYlbWwWI/s1600-h/nGENE_0163.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 125px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SYSsyfj9gYI/AAAAAAAAAyY/PoidYlbWwWI/s200/nGENE_0163.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5297549045160313218" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SYSstkm0D6I/AAAAAAAAAyQ/DVa7rqi0Et4/s1600-h/nGENE_0001.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 141px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SYSstkm0D6I/AAAAAAAAAyQ/DVa7rqi0Et4/s200/nGENE_0001.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5297548960615108514" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;p&gt;Cieszę się, że mimo tak drastycznych zmian w kwestii wyglądu, przyjęte pierwotnie założenia nie blokują i nie ograniczają mnie w żaden sposób. Podjąłem kilka trafnych decyzji, w tym zastosowanie deferred shadingu, który gdy podejmowałem tę decyzję nie był jeszcze taki modny (dziś jest prawie wszędzie). Żałuję jedynie, że nie myślałem wtedy o nastawieniu na procesory wielordzeniowe... niestety duża część kodu będzie musiała zostać zrefaktoryzowana, aby naprawdę wspierać wielowątkowość, a nie od przypadku do przypadku traktować pozostałe procesory jako koprocesory ułatwiające policzenie bardziej skomplikowanych rzeczy.&lt;/p&gt;&lt;p&gt;W ostatnich dniach dodałem HDR, co powinienem zrobić wcześniej, ale nie mogłem znaleźć motywacji do zaimplementowania czegoś, co ma chyba u siebie każdy. Takie to mało odkrywcze :) Mówiąc inaczej - HDR nie pasował mi do końca do koncepcji systemu materiałów. Na szczęście jakoś udało się to rozwiązać. I dobrze, bo dopiero teraz używany przeze mnie model Preethama, nabrał rumieńców. Wschody i zachody Słońca po prostu rządzą! No i zwiększyłem też wydajność. Jakieś 2x razy dla większości aplikacji. Ale to dopiero początek optymalizacji. Zacząłem też na dobre pisać renderer pod DX10.1. W końcu.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Jednocześnie to, że idę w dobrym kierunku zdają się potwierdzać notowania moich screenów, które wykazują tendencję zwyżkową. Nie tylko trzy tygodnie z rzędu moje screeny zdobyły tytuł screena tygodnia na gamedev.pl, ale cieszą się zainteresowaniem również w innych, anglojęzycznych serwisach.&lt;/p&gt;&lt;p&gt;Na koniec kilka słów o edytorze. Dotychczas nie był mi potrzebny i stale odsuwałem zadania z nim związane na później. Jednak jako, że chcę zrobić demo, które posłuży mi jako proof of concept na tegorocznym IGK, zmotywowałem się i piszę go dosyć intensywnie. Chcę żeby był maksymalnie prosty w użyciu, tak aby każdy w przeciągu maksymalnie kilkudziesięciu minut mógł stworzyć świetnie wyglądającą mapę. Edytor będzie WYSIWYG tak więc będzie prezentował dokładnie to co się zobaczy w gotowej aplikacji i będzie pozwalał na interakcje ze światem 3D. Mam też przewidziane coś dla prawdziwych laików, ale o tym jak to zrobię ;) &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-7679114222944220102?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/7679114222944220102/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/01/ngene-mae-podsumowanie.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7679114222944220102'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7679114222944220102'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/01/ngene-mae-podsumowanie.html' title='nGENE - małe podsumowanie'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fbfW7HvrHa4/SYSsyfj9gYI/AAAAAAAAAyY/PoidYlbWwWI/s72-c/nGENE_0163.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-7386298981547831902</id><published>2009-01-22T15:09:00.004+01:00</published><updated>2009-01-22T15:13:06.464+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='narzędzia'/><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>nGENE Tech Toolset coraz bliżej</title><content type='html'>&lt;p&gt;Jednym z podstawowych założeń wersji 0.2 mojego silnika jest udostępnienie edytora typu WYSIWYG, który ułatwiłby znacznie tworzenie świata. Oto jak się aktualnie prezentuje. Pracy jeszcze sporo, ale powoli, powoli nabiera kształtu. Jednocześnie chciałbym zaznaczyć, że będzie to jedyna część SDK, której kod źródłowy nie zostanie przeze mnie udostępniony:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SXh-h0XSTQI/AAAAAAAAAyI/IQO8ykj1N50/s1600-h/nGENE_0162.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 125px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SXh-h0XSTQI/AAAAAAAAAyI/IQO8ykj1N50/s200/nGENE_0162.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5294120481431112962" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-7386298981547831902?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/7386298981547831902/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/01/ngene-tech-toolset-coraz-bliej.html#comment-form' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7386298981547831902'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7386298981547831902'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/01/ngene-tech-toolset-coraz-bliej.html' title='nGENE Tech Toolset coraz bliżej'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fbfW7HvrHa4/SXh-h0XSTQI/AAAAAAAAAyI/IQO8ykj1N50/s72-c/nGENE_0162.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-7351207438965135222</id><published>2009-01-14T11:41:00.010+01:00</published><updated>2009-01-20T20:41:06.658+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='częste błędy'/><title type='text'>"To nie mój błąd"</title><content type='html'>&lt;p&gt;Dalszy ciąg wpisu nt. "czego nie należy zakładać przy programowaniu".&lt;/p&gt;&lt;p&gt;Bardzo często programiści przyjmują pewne proste i niestety błędne założenie. Kod nie działa, błędu na pierwszy rzut oka nie widać (a nawet w wyniku kilkugodzinnej sesji debugowania), więc wniosek jest prosty - błąd popełnił ktoś inny. Do tej kategorii zaliczają się następujące błędy w myśleniu:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;program się nie kompiluje - błąd kompilatora lub środowiska&lt;/li&gt;&lt;li&gt;program działał poprawnie, ale po zainstalowaniu sterowników zaczęły się pojawiać artefakty - błąd w sterownikach karty graficznej&lt;/li&gt;&lt;li&gt;program w pewnych przypadkach kończy się blue screenem - błąd w systemie (w końcu to Windows, na Linuxie na pewno program działałby poprawnie)&lt;/li&gt;&lt;li&gt;po użyciu biblioteki pojawiają się dziwne błędy lub wyjątki - błąd w bibliotece&lt;/li&gt;&lt;li&gt;program przestał działać po aktualizacji wersji roboczej z SVNa - błąd w wersji w repozytorium&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Co w takim myśleniu jest niepoprawne? Ano na tym, że w 99% przypadków to my jesteśmy autorami błędu, który powoduje dziwne zachowanie programu. Jest to podkreślane w wielu książkach dotyczących programowania, kursach a mimo to programiści zdają się o tym notorycznie zapominać.&lt;/p&gt;&lt;p&gt;Niestety takie myślenie nie jest domeną początkujących, również tym trochę bardziej zaawansowanym zdarza się tak myśleć, tyle że ci bardziej zaawansowani z większym prawdopodobieństwem faktycznie znaleźli błąd leżący poza granicami ich kodu. Ale o tym za chwilę.&lt;/p&gt;&lt;p&gt;Poniżej kilka błędów z mojego życiorysu, a mam się czym chwalić jeśli chodzi o błędy ;) . Zarówno obrazujących to, że nie miałem racji jak i przykłady leżące poza granicami pisanej przeze mnie aplikacji:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;ponad 2 lata temu gdy zacząłem łączyć nGENE z PhysXem okazało się, że gdy dojdzie do kolizji pomiędzy static meshem a jakimkolwiek innym aktorem, program się wysypuje. Pierwsza myśl: static mesh jest przeze mnie wypełniany niepoprawnymi danymi. Niestety okazało się, że wszystko jest jak być powinno. Wówczas zacząłem podejrzewać Ageię, że coś popsuła w kodzie. Na szczęście ciężko mi było w to uwierzyć i w końcu znalazłem swój błąd - polegał on na tym, że kiedyś namieszałem trochę w nagłówkach z makrami i część kodu była niewidoczna (albo był widoczny ten, który działał nieco inaczej), o czym niestety zapomniałem.&lt;/li&gt;&lt;li&gt;Pewnego dnia po aktualizacji sterowników GeForce'a zauważyłem, że część render targetów zawiera dziwne dane. Tak jakby nie były czyszczone. Spędziłem wiele godzin szukając przyczyny błędu. Zacząłem podejrzewać nVidię, zwłaszcza że jak się okazało inni też mieli podobny problem z tą wersją sterowników. Już chciałem odpuścić, ale jednak okazało się że błąd był mój - nie należy lekceważyć pewnych warningów DirectXa, jakkolwiek bez znaczenia by się one nie wydawały.&lt;/li&gt;&lt;li&gt;Swego czasu korzystając z wczesnej wersji silnika Unigine, zauważyłem że odbicia są zawsze nieprawidłowe (a potrzebowaliśmy ich do zrobienia wody). Konkretnie zawierały zdecydowanie za mało geometrii (tak jakby kamera przy ich renderowaniu była skierowana w złą stronę, albo clipping plane był nieprawidłowy). Upewniwszy się, że błąd nie leży po mojej stronie napisałem maila do Unigine Corp. z prośbą o poprawienie tej usterki, i drugiego, i trzeciego... Upierali się, że to nie oni są winni. Jednak w końcu go poprawili. Ale wody już nie zdążyliśmy zrealizować&lt;/li&gt;&lt;li&gt;Innym razem już jako programista Ruby on Rails chciałem wykorzystać aplikację znaną jako Beast (forum napisane w Rails). Niestety działy się momentami dziwne rzeczy, aplikacja zwracała błędy w zasadzie bez powodu. Analiza kodu biblioteki zdradziła fakt, że pewne klasy są niezdefiniowane! Mail do autora biblioteki i po kilku dniach problem został rozwiązany.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Podsumowując. Nigdy nie należy zakładać, że błąd pochodzi z kodu kogoś innego, bo sprawia to, że nie analizujemy swojego kodu w należyty sposób. Stajemy się bardziej leniwi, a to może doprowadzić do obniżenia jakości naszego kodu i wprowadzenia dodatkowych błędów. Dopiero po dogłębnej analizie możemy dojść do takiego wniosku. Wówczas nie należy zwlekać i zgłosić błąd autorom tego kodu. Jeśli rzeczywiście on istnieje prawdopodobnie zostanie poprawiony, bo autorom na pewno będzie zależało na tym by ich produkt był jak najlepszy.&lt;/p&gt;&lt;p&gt;A poniżej drobny update z wody. Już jest w repozytorium SVN:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SXYhVq9hrPI/AAAAAAAAAyA/wcwt0TVgsSg/s1600-h/nGENE_0154.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SXYhVq9hrPI/AAAAAAAAAyA/wcwt0TVgsSg/s200/nGENE_0154.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5293455068213914866" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SXYhSGB-Y6I/AAAAAAAAAx4/n_FqfDpfqYQ/s1600-h/nGENE_0159.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SXYhSGB-Y6I/AAAAAAAAAx4/n_FqfDpfqYQ/s200/nGENE_0159.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5293455006760854434" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SXYg_z7RwQI/AAAAAAAAAxo/l9Kx0rCxkDA/s1600-h/nGENE_0158.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SXYg_z7RwQI/AAAAAAAAAxo/l9Kx0rCxkDA/s200/nGENE_0158.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5293454692663279874" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SXYg7IECHCI/AAAAAAAAAxg/iBmJr9B9J-Q/s1600-h/nGENE_0155.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SXYg7IECHCI/AAAAAAAAAxg/iBmJr9B9J-Q/s200/nGENE_0155.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5293454612169366562" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-7351207438965135222?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/7351207438965135222/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/01/to-nie-mj-bd.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7351207438965135222'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7351207438965135222'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/01/to-nie-mj-bd.html' title='&quot;To nie mój błąd&quot;'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fbfW7HvrHa4/SXYhVq9hrPI/AAAAAAAAAyA/wcwt0TVgsSg/s72-c/nGENE_0154.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3368703139823140582</id><published>2009-01-11T20:28:00.010+01:00</published><updated>2009-01-11T21:40:55.150+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Woda raz jeszcze</title><content type='html'>&lt;p&gt;Jakiś czas temu (a dokładniej w pierwszej połowie listopada) pisałem, że zacząłem dodawać do nGENE'a efekt wody. W międzyczasie wiele nie robiłem (o tym było ostatnio), ale przez ostatnie kilkanaście dni ostro przysiadłem do roboty i powstało sporo kodu. Nie dość, że poprawiłem wiele błędów, dopisałem sporo przydatnych funkcji, to ponadto jestem bliski skończenia efektu, o którym mówiłem.&lt;/p&gt;&lt;p&gt;O to efekt:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SWpKfGV5PmI/AAAAAAAAAwg/4U8zzZBwLqo/s1600-h/nGENE_0144.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SWpKfGV5PmI/AAAAAAAAAwg/4U8zzZBwLqo/s200/nGENE_0144.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5290122610438913634" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SWpKXC0TbMI/AAAAAAAAAwY/CtzUIXCNvbA/s1600-h/nGENE_0133.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SWpKXC0TbMI/AAAAAAAAAwY/CtzUIXCNvbA/s200/nGENE_0133.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5290122472053763266" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SWpKR5DQVjI/AAAAAAAAAwQ/tQEQ2jOXzv0/s1600-h/nGENE_0108.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SWpKR5DQVjI/AAAAAAAAAwQ/tQEQ2jOXzv0/s200/nGENE_0108.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5290122383532774962" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SWpKLPyvRyI/AAAAAAAAAwI/_NrgFZ26jHk/s1600-h/nGENE_0102.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SWpKLPyvRyI/AAAAAAAAAwI/_NrgFZ26jHk/s200/nGENE_0102.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5290122269378430754" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SWpKFDhn4jI/AAAAAAAAAwA/Uow09XTDMhY/s1600-h/nGENE_0096.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SWpKFDhn4jI/AAAAAAAAAwA/Uow09XTDMhY/s200/nGENE_0096.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5290122163006202418" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SWpKAnmvN2I/AAAAAAAAAv4/ryWvVhPSfu8/s1600-h/nGENE_0151.jpg"&gt;&lt;img style="cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SWpKAnmvN2I/AAAAAAAAAv4/ryWvVhPSfu8/s200/nGENE_0151.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5290122086791984994" /&gt;&lt;/a&gt;&lt;p&gt;Wg mnie wyszło całkiem dobrze. Przede wszystkim jestem zadowolony z elastyczności tego rozwiązania, możliwe jest stworzenie całkiem sporo różnych rodzajów akwenów: od jezior aż po lekko pofalowane morza. Na kolor wody ma wpływ wiele czynników, co powinno być lepiej widać na screenach. Część z nich była "robiona" na płytszej wodzie. Najbardziej w tej chwili można się przyczepić do siły odbicia, ale za to screeny są bardziej widowiskowe.&lt;/p&gt;&lt;p&gt;Nie będę jednak ukrywał, że potrzeba tu poświęcenia trochę czasu, aby osiągnąć pożądany efekt (chodzi mi o dobór wszystkich parametrów), ale wszystko powinno się dać zrobić.&lt;/p&gt;&lt;p&gt;Następnie w kolejności jest dokończenie HDR i animacja (wreszcie!), a woda i poprawki w przeciągu kilku dni znajdą się na &lt;a href="http://svn2.assembla.com/svn/ngene/"&gt;SVNie&lt;/a&gt; (swoją drogą ostatnio był spory commit, który poprawiał wiele usterek).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3368703139823140582?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3368703139823140582/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2009/01/woda-raz-jeszcze.html#comment-form' title='Komentarze (4)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3368703139823140582'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3368703139823140582'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2009/01/woda-raz-jeszcze.html' title='Woda raz jeszcze'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/SWpKfGV5PmI/AAAAAAAAAwg/4U8zzZBwLqo/s72-c/nGENE_0144.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-4284799643777437122</id><published>2008-12-19T16:12:00.004+01:00</published><updated>2009-01-14T11:41:02.232+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='częste błędy'/><title type='text'>"Mój program jest wolny od błędów"</title><content type='html'>&lt;p&gt;Czy zdarzyło wam się słyszeć (lub czytać) od jakichś programistów, całych zespołów, ich szefów, że tworzone przez nich oprogramowanie jest całkowicie pozbawione błędów? Pewnie tak. Czy to możliwe, żeby z programu wyeliminować WSZYSTKIE bugi? Oczywiście nie. Choć fajnie by było i należy zawsze dążyć do ograniczenia ich liczby (nawet systemy krytyczne nie są od nich wolne) - dla wygody użytkowników, a czasem również np. bezpieczeństwa danych.&lt;/p&gt;&lt;p&gt;Piszę o tym dlatego, że zauważyłem, iż część programistów stosując unit-testy lub inne metody testowania oprogramowania nabywa błędnego przeświadczenia, że dzięki temu uchronią się przed każdym bugiem w przyszłości i wyeliminują te, które w programie już są. Po pierwsze takie założenie możnaby przyjąć tylko przy dobrze napisanych testach (a różnie z tym bywa - niektóre są zakodzone conajmniej niechlujnie). Po drugie - nie jesteśmy w stanie przewidzieć wszystkich możliwych sytuacji interakcji użytkownika z aplikacją, ani całej specyfiki środowiska uruchomieniowego naszego programu. Do tego jeśli stosujemy intensywny refaktoring nowe bugi będą pojawiać się z olbrzymią częstotliwością.&lt;/p&gt;&lt;p&gt;Ostatnio rozbawił mnie kolega, który stwierdził, że u niego w jakimś programie nie było ani jednego buga. To, że zespół nie potrafi ich wylistować na bug-liście świadczy tylko o zaistnieniu jednej z kilku sytuacji:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;zespół jest bardzo niedoświadczony, a tym samym szukanie błędów sprawia mu trudności&lt;/li&gt;&lt;li&gt;zespołowi brakuje odwagi, umiejętności samokrytyki - często sprawdza zachowanie aplikacji tylko dla typowych danych, i udaje że wpisanie w polu nazwisko "1454" jest tylko błędem użytkownika&lt;/li&gt;&lt;li&gt;programiści są po prostu słabi, a tym samym nie powinno się ich dopuszczać do wykonywania tej pracy&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Ktoś mógłby zapytać: jaki jest zatem stosowania testów jak i tak stoimy w punkcie, w którym wiemy, że są w naszym kodzie błędy. Otóż po to, żeby wyłapać jak najwięcej błędów, a tym samym dać sobie szansę na ich wyeliminowanie.&lt;/p&gt;&lt;p&gt;Podsumowując: NIGDY NIE WOLNO przyjmować, że w naszym programie nie ma błędów, nawet jeśli wszystko na to wskazuje. Prędzej czy później ktoś je znajdzie. A jeśli nie... cóż oznacza to tylko, że nikt z naszej aplikacji nie korzysta.&lt;/p&gt;&lt;p&gt;Z innej beczki - dawno nic nie pisałem, gdyż nie miałem zbyt dużo czasu ani ochoty na programowanie. Pisanie silnika zatrzymało się na etapie kodzenia efektu wody. Próby znalezienia sobie tematu do napisania gierki spełzły na niczym. Poddałem się na razie co do poszukiwań pracy w GD (mam nadzieję, że po studiach inżynierskich się uda). Do silnika zamierzam coś dopisać w święta. Może uda mi się również znaleźć jakiś sensowny pomysł na projekt własnej gry.&lt;/p&gt;&lt;p&gt;Przy okazji chciałbym pogratulować chłopakom od &lt;a href="http://corethegame.com/"&gt;C.O.R.E.-a&lt;/a&gt;. Wedle publicznie dostępnych informacji gra ma wkrótce wreszcie trafić do sprzedaży!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-4284799643777437122?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/4284799643777437122/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/12/mj-program-jest-wolny-od-bdw.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4284799643777437122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4284799643777437122'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/12/mj-program-jest-wolny-od-bdw.html' title='&quot;Mój program jest wolny od błędów&quot;'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3696714464637776703</id><published>2008-11-12T14:20:00.008+01:00</published><updated>2008-11-12T15:05:20.216+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Woda - pierwsze przymiarki</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SRrYMkHeGXI/AAAAAAAAArk/JPPBg3H25og/s1600-h/nGENE_0093.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 150px;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SRrYMkHeGXI/AAAAAAAAArk/JPPBg3H25og/s200/nGENE_0093.jpg" alt="" id="BLOGGER_PHOTO_ID_5267760424528255346" border="0" /&gt;&lt;/a&gt;Jakiś czas temu zacząłem prace nad wodą do swojego frameworka. Ot tak w ramach odpoczynku od nudniejszych koderskich zadań. Rozpoczynając owe prace postawiłem sobie tylko jeden cel - zrobić ją tak realistyczną jak tylko się da (a jak wiemy nie istnieje nawet dotychczas prawidłowy model matematyczny ją opisujący...). Większość programistów 3D zapomina bowiem o kilku rzeczach:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;z głębokością występuje zanik koloru. Dla każdej składowej szybkość zaniku jest inna! Najszybciej zanika składowa czerwona, później zielona, a najwolniej niebieska.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;światło przechodząc przez powierzchnię wody tworzy lightshafty&lt;/li&gt;&lt;li&gt;na kolor wody wpływ ma skład wody, obecność w niej różnorodnego mułu, tzw. kwitnienie wody (kwitnienie wody - oznacza kwitnienie glonów i innych roślin w okresie wiosenno - letnim) itd.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Choć na razie nie spełniłem sam jeszcze tych punktów to jestem zdeterminowany, aby to zrobić.&lt;/p&gt;&lt;p&gt;Co więcej wodę realizuję w dosyć nietypowy sposób. Aby moje rozważania łatwiej zrozumieć, przypomnę że używam domyślnie deferred renderingu, a zatem mam łatwy dostęp do danych na temat głębokości i pozycji sceny (dane te trzymam w G-Bufferze) na każdym etapie poza wypełnianiem G-Buffera.&lt;/p&gt;&lt;p&gt;Ok. Tradycyjnie istnieją dwie techniki renderingu wody:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;technika dla mórz i oceanów - którą ewentualnie można by podzielić na: środek oceanu i wybrzeże, ale tego nie zrobię. W tej technice zwykle wykorzystuje się prostokątną siatkę o dużej gęstości wierzchołków. Dzięki ich przekształcaniu w oparciu o różne modele matematyczne można uzyskać piękne i realistyczne fale.&lt;/li&gt;&lt;li&gt;technika dla jezior - tu pomija się geometrię. Na płaszczyznę nakładana jest scrollowana normal mapa. Do tego dokłada się odbicie, refrakcję oraz specular.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Technika, którą ja stosuję różni się tym od wymienionych, że jest wykonywana w CAŁOŚCI jako efekt post-process, a nie jak można by przypuszczać w fazie geometrii. Mając położenie każdego z widocznych z punktu położenia obserwatora pikseli mogę z łatwością stwierdzić, czy punkt ten jest pod, czy nad wodą. Jednocześnie mogę łatwo stwierdzić jak głęboko pod powierzchnią się znajduje. Ale to jeszcze nic. Wykorzystując height-mapę przeprowadzam coś na kształt paralax mappingu. Z tą różnicą, że efekt jest dużo lepszy, gdyż fale faktycznie mogą przysłaniać geometrię (po wyliczeniu wysokości fali znów sprawdzam czy punkt, który analizuję nie jest pod wodą), a nawet jakby się uprzeć wchodzić z nią w pewną ograniczoną interakcję.&lt;/p&gt;&lt;p&gt;Mimo że do końcowego efektu jeszcze długa droga, to wstępnie jestem całkiem zadowolony. Udało mi się nawet stworzyć refrakcję w oparciu o zawartość G-Buffera. Odbicie też, choć mam tu jeszcze jeden problem. I nie chodzi mi wcale o oczywistą nieprawidłowość odbić, przy wykorzystaniu G-Buffera. Takie drobne błędy i tak w większości przypadków łatwo jest zamaskować.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3696714464637776703?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3696714464637776703/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/11/woda-pierwsze-przymiarki.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3696714464637776703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3696714464637776703'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/11/woda-pierwsze-przymiarki.html' title='Woda - pierwsze przymiarki'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fbfW7HvrHa4/SRrYMkHeGXI/AAAAAAAAArk/JPPBg3H25og/s72-c/nGENE_0093.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-2990591515325103910</id><published>2008-11-11T10:30:00.007+01:00</published><updated>2008-11-11T11:11:34.033+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gameplay'/><title type='text'>Nieprzewidywalność jest zła</title><content type='html'>&lt;p&gt;Trafiłem ostatnio na interesujący wpis na &lt;a href="http://threespeech.com/blog/2008/11/intelligent-design-where-is-ai-going-part-five-unpredictability/" target="_blank"&gt;tej stronie&lt;/a&gt; . Porusza on ciekawe zagadnienie. Mianowicie czy nieprzewidywalność w grach osiągana za pomocą nieoskryptowanej AI (np. sieci neuronowych czy algorytmów genetycznych, albo innej formy świadomości/pamięci/uczenia się) jest dobra? Konkluzją z wypowiedzi 4 specjalistów jest, że nie. Przynajmniej nie w czystej postaci. Według niektórych rozwiązaniem jest połączenie metod "nieprzewidywalnych" ze skryptami tam gdzie są one potrzebne.&lt;/p&gt;Pytanie jest na tyle ciekawe, że sam postanowiłem powiedzieć, co na ten temat myślę. Dawniej, gdy zaczynałem swoją przygodę z programowaniem gier celem było dla mnie osiągnięcie jak największej nieliniowości rozgrywki i autonomii oraz nieprzewidywalności agentów AI. Czyż nie wspaniale byłoby grać za każdym razem w kompletnie inny sposób, kończyć grę na dziesiątki różnych sposobów, za każdym razem obserwować unikalne zachowania powstałe w oparciu o obserwacje poczynań gracza i uczenie się jego taktyki? Tak - wtedy myślałem, że jest to wspaniałe. I uważam, że z punktu widzenia zaawansowania technologicznego jest to nadal wspaniałe i na swój sposób pociągające.&lt;br /&gt;&lt;p&gt;Niestety. Gracze nie są osobami, które zwykle doceniają stopień zaawansowania naszych algorytmów, lecz to jak dużą przyjemność daje im gra.&lt;/p&gt;A prawda jest tak, że jeśli AI będzie zbyt inteligentna stanie się powodem frustracji. Gra powinna być wyzwaniem, ale nie jest to równoważne temu, że ma być piekielnie trudna lub niemal niemożliwa do ukończenia. Powiedzmy, że agenci AI w grze FPS znają dokładnie topografię terenu gdzieś w Indonezji, a do tego bacznie obserwują taktykę gracza (śledzą go), ucząc się w jaki sposób walczy (np. analizując swoje i gracza błędy). Na tej podstawie AI może określić idealne miejsca na zastawienie śmiertelnej pułapki, albo sposób na wyeliminowanie WSZYSTKICH swoich potknięć. Gra wówczas będzie polegała na metodzie save &amp;amp; load, bo agenci AI będą od pewnego momentu nie do pokonania. Kilka kroków - headshot. Load - agenci teraz zachowują się nieco inaczej. Jeden krok - headshot. Load - od razu headshot. Znowu load - kilka kroków... quicksave i znów headshot. Taka sytuacja może mieć miejsce nawet jeśli AI będzie trochę niecelne, czy będzie popełniało inne ludzkie błędy.&lt;br /&gt;&lt;p&gt;Do tego jak nieprzewidywalnością sterować, żeby osiągnąć zamierzony efekt fabularny? Cóż - nie da się. Agenci AI mogą stwierdzić, że bardziej cenią swoje życie niż postępowanie w sposób przewidziany przez designera. Niech pewna postać w grze RPG posiada ważny przedmiot pod kątem głównego wątku. Jeśli tę postać zranimy, może stwierdzić, że nie zamierza ryzykować i zacznie uciekać przez całą planszę. Pewnie kiedyś gracz ją dopadnie, ale zmarnowanie nawet kilku minut na bezsensowną pogoń nie jest najlepszym sposobem na wykorzystanie czasu. Kolejnym problemem związanym z fabułą jest to, że jeśli gra za każdym razem będzie wyglądała inaczej to jak zbudować napięcie? Jak dbać o zwroty akcji, jeśli dialogi/rozwiązania questów za każdym razem mogą dać inny skutek w zależności od całej dotychczasowej rozgrywki i widzimisię agenta?&lt;/p&gt;Ponadto jak nieprzewidywalną grę testować? Jeśli mamy rzeczywiście do czynienia z dużą nieprzewidywalnością to co nam da przetestowanie kilku scenariuszy? Co jeśli w większości przypadków gry nie będzie się dało po prostu ukończyć, bo NPC z którym na końcu mamy porozmawiać zginie zabity przez swoich kompanów, którzy uznają, że współpracuje z graczem, który ma chaotyczny zły charakter?&lt;br /&gt;&lt;p&gt;Jednak, że by nie było, że jestem całkowicie temu przeciwny - uważam, że kontrolowana nieprzewidywalność (np. w ograniczonym stopniu dla postaci nieistotnych pod względem fabularnym - ale też np. nie dla kupców - głupio byłoby gdyby po okradzeniu jednego z nich, żaden nie chciał nam sprzedać swoich przedmiotów) może podnieść jakość rozgrywki. Jednak jest to temat na inny wpis.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-2990591515325103910?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/2990591515325103910/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/11/nieprzewidywalno-jest-za.html#comment-form' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2990591515325103910'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2990591515325103910'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/11/nieprzewidywalno-jest-za.html' title='Nieprzewidywalność jest zła'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6435009203348505421</id><published>2008-11-01T16:11:00.012+01:00</published><updated>2008-11-11T10:29:22.650+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Futro i poprawki we frameworku</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SQxyBs_VYXI/AAAAAAAAArU/eX2qRmD0fyw/s1600-h/nGENE_0092.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SQxyBs_VYXI/AAAAAAAAArU/eX2qRmD0fyw/s200/nGENE_0092.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5263707438071505266" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Ostatnio nie pisałem nic o progresie w swoim frameworku. Prawda jest taka, że nie bardzo mam się czym pochwalić, bo skupiam się na poprawieniu bugów/ulepszaniu tego co jest już zrobione. Roboty z tym jest cała masa. Do tego dochodzi konieczność napisania różnych klas pomocniczych.&lt;/p&gt;&lt;p&gt;Niemniej potrzebowałem do pewnych zastosowań shadera futra (dosyć prostego, więc olałem "finsy", czyli dodatkowe trójkąty na wszystkich krawędziach). Toteż prezentuję wynik tych prac. Model królika jest bardzo stary, ma coś nie tak z UV-kami, ale prezentuje mniej więcej działanie techniki. Do tego widać miękkie cienie (też pisane na szybko jako proof-of-concept i światło reflektorowe, którego brak w wersji 0.1 był karygodnym błędem).&lt;/p&gt;&lt;p&gt;Technika tworzenia futra stosowana powszechnie (dobra powszechnie jak powszechnie...) to shells and fins texturing. Mimo że jest dobrze znana i lubiana opiszę ją, bo może uchował się ktoś, kto jej nie zna. Opiera się ona na bardziej złożonej obliczeniowo technice wolumetrycznej. W niej futro reprezentowane jest jako tekstura 3D, której każdy poziom głębokości zawiera dane o kolorze i przezroczystości futra oraz o oświetleniu. Następnie futro tworzy się wykorzystując ray marching. Jak można się domyśleć jest to raczej kosztowne obliczeniowo. Shells and fins texturing jest pewnym uproszczeniem.&lt;/p&gt;&lt;p&gt;Shells to kolejne warstwy futra tworzone poprzez wytłaczanie pozycji wierzchołków wzdłuż ich normalnych o odległość będącą ułamkiem długości futra (im mniejszy ułamek na każdą "skorupkę" tym lepszy efekt i niższa wydajność; liczba ułamków = liczba skorupek). Na każdą skorupkę nakładana jest 2-wymiarowa tekstura. Włosy są tam gdzie alpha jest większa od 0. Skorupki renderujemy z włączynym alpha blendingiem.&lt;/p&gt;&lt;p&gt;Wszystko działa dobrze dopóki na futro patrzymy z góry (tzn. kąt między kątem patrzenia a normalną wierzchołka jest niewielki) albo z daleka. Gdy patrzymy z boku efekt jest koszmarny, chyba że użyjemy dużo skorupek (choć od pewnego momentu nic zdaje się szczególnie nie pomagać). Widać bowiem poszczególne warstwy futra. Przykład na obrazku poniżej:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SQyGeWlXQnI/AAAAAAAAArc/8TF6cDdZylY/s1600-h/bad_fur.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SQyGeWlXQnI/AAAAAAAAArc/8TF6cDdZylY/s200/bad_fur.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5263729920505758322" /&gt;&lt;/a&gt;&lt;p&gt;I tu do gry wchodzą finsy, czyli po polsku - żeberka. Jak powiedziałem są to po prostu dodatkowe trójkąty na każdej krawędzi (leżące prostopadle do powierzchni). Żeby miało to ręce i nogi, na każdą krawędź muszą przypadać 2 trójkąty tworzące czworokąt. Żeberka mają własną teksturę, ukazującą futro z boku. Następnie w shaderze możemy zadbać o to, żeby były one widoczne tylko przy odpowiednich kątach.&lt;/p&gt;&lt;p&gt;Jeśli wpadniemy na głupi pomysł renderowania wielu futrzaków (powiedzmy animowane stado wilków) na scenie, to musimy konieczne zadbać o jakiś LOD, aby samo futro nie zabiło nam wydajności. Tu wielkiego problemu nie ma, bo odległe obiekty mogą być renderowane bez użycia finsów i z małą liczbą skorupek. Ostatecznie powyżej pewnej odległości od obserwatora futra i tak nie będzie widać, więc spokojnie będzie można użyć jednej tekstury - diffuse.&lt;/p&gt;&lt;p&gt;Technika ta nie nadaje się do tworzenia włosów. Można ją stosować jedynie do krótkiego futra bądź np. krótkiej trawy (zdaje się, że tak jest to zrobione w Fifie 09, bo właśnie momentami widać poszczególne warstwy :) ).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6435009203348505421?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6435009203348505421/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/11/futro-i-poprawki-we-frameworku.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6435009203348505421'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6435009203348505421'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/11/futro-i-poprawki-we-frameworku.html' title='Futro i poprawki we frameworku'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/SQxyBs_VYXI/AAAAAAAAArU/eX2qRmD0fyw/s72-c/nGENE_0092.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-2159039784350521361</id><published>2008-10-29T17:07:00.002+01:00</published><updated>2008-10-29T17:26:44.372+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><title type='text'>Prawie się udało...</title><content type='html'>&lt;p&gt;Osoby śledzące mojego bloga pewnie wiedzą, że poszukiwałem w ostatnim czasie pracy w polskim gamedevie (mimo pewnych głosów, że nie warto). Wygląda na to, że więcej niż osiągnąłem na razie nie zdziałam. Czas zatem na małe podsumowanie.&lt;/p&gt;&lt;p&gt;Rozmowa w CDPR, o czym wspominałem, delikatnie (bardzo delikatnie...) mówiąc wyszła fatalnie w moim wykonaniu. Złożyło się na to kilka czynników, ale głupio się tłumaczyć z tak prostych błędów jakie popełniłem, więc tego nie zrobię.&lt;/p&gt;&lt;p&gt;Jakiś czas temu wziąłem też udział w rekrutacji do Metropolis (notabene chciałem ją rozpocząć wcześniej, ale jakoś się to przeciągnęło). Tu poszło już dużo lepiej. Rozmowę jakoś przebrnąłem, otrzymane zadanie testowe jakoś zrobiłem (mimo że było z zakresu AI, czyli nie tego w czym teoretycznie jestem najmocniejszy i w czym z pewnością mam spore braki). Moje rozwiązanie zostało przyjęte... i nie będę pracował w Metropolis... A wszystko przez to, że mam fatalnie ułożony plan na uczelni (mówię o laborkach, bo na wykłady i tak nie chodzę), co sprawia, że nie mam możliwości wyrobienia niezbędnego minimum w tygodniu.&lt;/p&gt;&lt;p&gt;Szczerze mówiąc nie wiem, która sytuacja jest gorsza. Czy pierwsza, czy druga. Rekrutacja do Metropolis na pewno pozwoliła mi uwierzyć, że nie jest ze mną tak źle jak to wyglądało po spotkaniu z ludźmi z CDPR (a naprawdę miałem poważne wątpliwości co do swojego stanu wiedzy i umiejętności) i z tego powodu była potrzebna. Natomiast jeśli skończyłaby się tak jak w CDPR mógłbym tylko powiedzieć - trudno, muszę jeszcze sporo popracować...&lt;/p&gt;&lt;p&gt;Jako że nie mam ochoty rezygnować ze studiów wychodzi na to, że poważniejszą pracą będę mógł się zająć dopiero po ich zakończeniu. Liczę, że poniżej aktualnego swojego poziomu w tym czasie nie zejdę. A do tego czasu (chyba, że uda mi się jeszcze coś wykombinować w najbliższych miesiącach/tygodniach na co po cichu liczę) pozostaje mi rozwijanie swojego frameworka i swoich umiejętności. Co prawda jest to momentami nieco nużące (co innego robić grę w doświadczonym zespole, a co innego klepać sobie bez końca swój silniczek), ale innej opcji nie widzę.&lt;/p&gt;&lt;p&gt;Tak bywa - po prostu pech.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-2159039784350521361?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/2159039784350521361/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/prawie-si-udao.html#comment-form' title='Komentarze (7)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2159039784350521361'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2159039784350521361'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/prawie-si-udao.html' title='Prawie się udało...'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1942511100154097440</id><published>2008-10-20T12:45:00.003+02:00</published><updated>2008-10-21T13:35:46.579+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gry'/><title type='text'>Wysyp symulacji piłki nożnej</title><content type='html'>&lt;p&gt;Jako że jestem zagorzałym kibicem piłkarskim cieszę się, że symulacji piłki nożnej wychodzi coraz więcej a jakość tych gier stale rośnie. W tym roku mamy do czynienia z:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Fifa 09&lt;/li&gt;&lt;li&gt;PES 2009&lt;/li&gt;&lt;li&gt;Football Superstars - pierwsze piłkarskie MMO (do tego w pełni darmowe)! Niestety aktualna wersja nie uruchamia się na moim komputerze, więc jeszcze muszę trochę poczekać na oficjalny release.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Z serią Fifa jestem od początku tej serii, więc postanowiłem znów dać jej szansę. Pamiętam te dwuwymiarowe Fifa Soccer 94 i 95, i rywalizację z kolegami kto szybciej strzeli bramkę. Mój rekord to 2. sekunda meczu :). Później przeskok w 3D w Fifa 96, a później zakres zmian z części na część był coraz mniejszy, grywalność na przemian spadała i rosła. Fifa 2008 była pierwszą (nie licząc Euro), którą pominąłem - oceny i recenzje były bardzo niepochlebne, a zmiany w stosunku do 2007 były chyba nawet na niekorzyść.&lt;/p&gt;&lt;p&gt;Jednak niedawno pojawiła się rzeczona Fifa 09 i od niedawna ją w wolnym czasie męczę (gram na PC, czyli w tą "gorszą wersję"). Mimo, że gra nie wygląda najlepiej (ach te trybuny w postaci tekstur w niskiej rozdzielczości) gra się w nią nad wyraz przyjemnie. Dzięki nowemu sposobowi sterowania (mysz + klawiatura) w końcu można wypracować akcje i bramki znane z prawdziwych meczów piłkarskich. Idea jest prosta - wskaźnik myszy jest celownikiem. Wszystkie podania i strzały idą w kierunku przez niego wskazywanym (oczywiście czy tak faktycznie będzie zależy od umiejętności strzelca i warunków na murawie). Na początku ciężko jest się przestawić, ale po krótkim czasie docenia się ten nowy sposób sterowania.&lt;/p&gt;&lt;p&gt;Dużą zaletą Fifa od zawsze była masa licencji. Mamy dostępnych bodaj 30 różnych lig, reprezentacje, kilkadziesiąt stadionów i całą masę oficjalnych piłek! Najlepsi piłkarze są odwzorowani w sposób niemal realistyczny.&lt;/p&gt;&lt;p&gt;To co podoba mi się od dawna w Fifa to błędy arbitrów. Niezbyt częste, ale jednak się zdarzają (zwykle w najmniej dogodnym momencie), czyli np. uznanie bramki ze spalonego :)&lt;/p&gt;&lt;p&gt;Ogólnie długo można by pisać. Ale krótko - w mojej ocenie Fifa 09 jest najlepszą częścią dostępną na PC-ty i czymś co umila mi oczekiwanie na Football Superstars (ciekawe czy będzie ono grywalne?).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1942511100154097440?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1942511100154097440/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/wysyp-symulacji-piki-nonej.html#comment-form' title='Komentarze (3)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1942511100154097440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1942511100154097440'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/wysyp-symulacji-piki-nonej.html' title='Wysyp symulacji piłki nożnej'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1753439028101947060</id><published>2008-10-11T13:39:00.001+02:00</published><updated>2009-03-02T14:58:11.975+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='strona'/><title type='text'>Mała katastrofa</title><content type='html'>&lt;p&gt;Wczoraj przez swoją nieuwagę wykasowałem wszystkie newsy ze swojej poprzedniej strony. Stwierdziłem, że PHP w moich rękach nie jest zbyt bezpieczny, więc przeniosłem się na Bloggera - tu jest mniejsza szansa, że coś popsuję.&lt;/p&gt;&lt;p&gt;Choć udało mi się odzyskać wszystkie posty, komentarze niestety przepadły :/ Natomiast resztę contentu zacznę przenosić w wolnej chwili.&lt;/p&gt;&lt;p&gt;Morał: &lt;em&gt;nie korzystać z narzędzi, których się nie zna&lt;/em&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1753439028101947060?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1753439028101947060/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/maa-katastrofa.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1753439028101947060'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1753439028101947060'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/maa-katastrofa.html' title='Mała katastrofa'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-5732031896847545282</id><published>2008-10-06T17:17:00.001+02:00</published><updated>2008-10-10T19:19:38.538+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nurkowanie'/><title type='text'>Dlaczego nurkujemy?</title><content type='html'>&lt;p&gt;Gdy rozmawiam z ludźmi, którzy nie mają bladego pojęcia o nurkowaniu zwykle pojawia się jedno z dwóch pytań: "na ile starcza butla?" oraz "dlaczego nurkujesz?". Oba pytania są z pozoru proste, ale w praktyce odpowiedzieć na nie jest niezwykle trudno. Na pierwsze poprawnej odpowiedzi nie ma - zależy ona od wielu czynników, jak profil nurkowania (w skrócie - głębokość osiągnięta w każdym momencie nurkowania), samopoczucie w danym dniu, siła prądu i dziesiątki innych. Żeby zbyt nie komplikować wielu nurków odpowiada - na ok. godzinę (co jest prawdziwe tylko dla pewnego podzbioru nurkowań). Drugie też nie należy do najłatwiejszych pytań, ale mimo to postaram się na nie odpowiedzieć.&lt;/p&gt;&lt;p&gt;Nurków generalnie podzieliłbym na 3 kategorie:&lt;ul&gt;&lt;li&gt;nurkujących dla szpanu&lt;/li&gt;&lt;li&gt;nurkujących po to by coś zobaczyć (czy to rafę, czy wrak)&lt;/li&gt;&lt;li&gt;nurkujących by pokonać samego siebie, swoje ograniczenia (wcale niekoniecznie rekord świata wynoszący 318/330 metrów - w zależności który uznamy za jedyny słuszny)&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Pierwszą grupą nie będę się zajmował, bo wg mnie nie jest to esencją nurkowania :) - mimo, że "każdy nurek był w poprzednim wcieleniu pawiem, musi imponować" (cytat z pamięci z magazynu "Nurkowanie"). Jak widać jednak z powyższej listy motywacja dla nurków jest bardzo różna i nie sposób odpowiedzieć za wszystkich jednocześnie. Dlatego odpowiem za siebie.&lt;/p&gt;&lt;p&gt;Dla mnie nurkowanie jest swego rodzaju spełnieniem marzeń o eksploracji, sięganiu tam, gdzie niewielu mogło sięgnąć. Jest zaspokojeniem tej ludzkiej ciekawości, która jednym kazała opływać ziemię, a innym próbować latać. Widzimy świat, w świecie, niezbadany, pełny stworzeń niespotykanych nigdzie indziej, nic nie robiących sobie z naszej obecności. Możemy dotknąć żywej historii nurkując na wrakach. Pełna swoboda ruchów niespotykana nigdzie indziej (no może poza przestrzenią kosmiczną - nie na darmo astronauci NASA trenują też pod wodą), niesamowita cisza i spokój pozwalające na chwilę oderwać się od zgiełku dzisiejszego życia, od rozdzwonionych telefonów komórkowych, czy szumu samochodów na ulicach miast.&lt;/p&gt;&lt;p&gt;To dlatego właśnie nurkuję...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-5732031896847545282?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/5732031896847545282/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/dlaczego-nurkujemy.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5732031896847545282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5732031896847545282'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/dlaczego-nurkujemy.html' title='Dlaczego nurkujemy?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6600484484521185537</id><published>2008-09-26T17:21:00.005+02:00</published><updated>2008-10-11T11:07:27.214+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>Nocne zdjęcia</title><content type='html'>&lt;p&gt;Ok. pół roku temu przeczytałem bardzo fajny artykuł na temat robienia zdjęć nocą w warunkach braku sztucznego oświetlenia. Długi czas naświetlania w warunkach prawie kompletnej ciemności sprawia, że uzyskane fotografie mają nieco surrealistyczny (a niektóre wręcz apokaliptyczny) wygląd. Barwy są obce niczym nie z tego świata. Tak jak z artami nVidii czy ATI, po których przeczytaniu od razu chcę zaimplementować omawiane techniki, tak i tu napadła mnie chęć posiedzenia w nocy i "popstrykania" zdjęć. Na okazję przyszło mi trochę czekać, ale gdy już się pojawiła, postanowiłem ją wykorzystać.&lt;/p&gt;&lt;p&gt;Pierwsza noc spędzona samotnie w ciemnościach, gdy wokół słychać było tylko ruch jakichś małych zwierząt, nie była zbyt owocna. Zdjęcia były albo fatalnie wykadrowane, albo kompletnie niedoświetlone. Później było już trochę lepiej. Zrobiłem kilka ładnych zdjęć (jak na moje możliwości), choć niestety przez spore ustawienie ISO, na co lepszych monitorach widać szum (natomiast na dużych telewizorach zdjęcia oglądało mi się bardzo miło).&lt;/p&gt;&lt;p&gt;Oto kilka z nich:&lt;/p&gt;&lt;p&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/T46PWQUQPiYVi98TmcCBLA"&gt;&lt;img src="http://lh5.ggpht.com/tomanw/SNygXkKag5I/AAAAAAAAAVw/IO1mwgh7TDY/s144/IMG_1664.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/2uzbOleEckVvq2QpX7_m7A"&gt;&lt;img src="http://lh4.ggpht.com/tomanw/SNyggZOqOCI/AAAAAAAAAYk/Oc3B19gcLCo/s144/IMG_1769.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/gWXBE88Oas7OCsDl5D7K3g"&gt;&lt;img src="http://lh3.ggpht.com/tomanw/SNygkqmwSVI/AAAAAAAAAa4/rj6oRJUYglE/s144/IMG_1786.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;table style="width:auto;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;a href="http://picasaweb.google.com/lh/photo/b-YW8lRrdO1oaP2_kPzbUw"&gt;&lt;img src="http://lh3.ggpht.com/tomanw/SNygsWxFvxI/AAAAAAAAAdQ/X8eYHq9Dg7w/s144/IMG_1808.JPG" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td style="font-family:arial,sans-serif; font-size:11px; text-align:right"&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;p&gt;Jakby ktoś chciał zobaczyć więcej, to są dostępne w moim albumie &lt;a href="http://picasaweb.google.pl/tomanw/2008072527NocneZdjCia?authkey=YZWRrjBdEbI#" target="_blank"&gt;na Picasie&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Jeszcze małe sprostowanie: jednak zostałem zaproszony na rozmowę do firmy z gd, ale szczerze mówiąc wolę o tej rozmowie jak najszybciej zapomnieć. Ogólnie mówiąc - zawaliłem na całej linii.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6600484484521185537?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6600484484521185537/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/09/nocne-zdjcia.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6600484484521185537'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6600484484521185537'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/09/nocne-zdjcia.html' title='Nocne zdjęcia'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/tomanw/SNygXkKag5I/AAAAAAAAAVw/IO1mwgh7TDY/s72-c/IMG_1664.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1338369881552843925</id><published>2008-09-22T17:35:00.001+02:00</published><updated>2008-10-11T13:32:34.302+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Scripting - w czym?</title><content type='html'>&lt;p&gt;Od kilku dobrych lat jednym z trendów w tworzeniu gier jest rozdzielenie logiki od danych poprzez zastosowanie języków skryptowych. W części gier stosuje się je do opisania parametrów broni czy pojazdów (proste skrypty typu: "klucz : wartość"), w innych wykorzystuje się języki podobne funkcjonalnością i składnią do C/C++ czy Javy i opisuje się przy ich pomocy cały świat gry (a przede wszystkim AI, questy itd.). Wielu twórców oprogramowania tworzy własne języki (np. Unigine, który system skryptów ma akurat dosyć fajny i rozbudowany), inni stawiają na sprawdzane rozwiązania i wykorzystują modną Lua, Pythona czy np. AngelScripta (czy jeden z innych 100 języków...).&lt;/p&gt;&lt;p&gt;Ja zdecydowałem się pójść tą drugą drogą. Nie dlatego, że brak mi ambicji stworzenia własnego języka skryptowego. Jest to bowiem z pewnością niezwykle ciekawe przedsięwzięcie, ale na tyle wymagające i pracochłonne, że mógłbym sobie spokojnie odpuścić silnik :) i wykorzystać to jako temat przyszłej pracy magisterskiej ;) . W nGENE zdecywałem się na użycie domyślnie dwóch języków skryptowych: Lua i... Ruby. Dlatego dwóch, że Ruby ma być bardziej dodatkiem, swoistą ciekawostką pokazującą, że i do tego ten język się nadaje. Jego elastyczność i piękna składnia powinny przemawiać do każdego. Dla mnie jest to absolutny numer wśród istniejących języków oprogramowania, a dzięki istniejącym już kompilatorom do kodu maszynowego zyskuje tylko na wartości. Z ciekawostek dodam, że ostatnio znalazłem &lt;a href="http://ogrerb.rubyforge.org/" target="_blank"&gt;Ogre.rb&lt;/a&gt; - port Ogre'a dla Ruby'ego :) Żaden inny język nie jest tak "self-commenting" jak Ruby właśnie: "5.times {|message| print message}". Takie coś będzie jasne nawet dla nieprogramującego designera :) Embedding Ruby'ego w C++ jest niestety nieco trudniejszy niż Lua, bo liczba istniejących i działających bibliotek jest mniejsza (niby jest odpowiednik LuaBind [Rice], ale podobno w VS może być z nim pewien problem).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1338369881552843925?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1338369881552843925/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/09/scripting-w-czym.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1338369881552843925'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1338369881552843925'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/09/scripting-w-czym.html' title='Scripting - w czym?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6216295331773704562</id><published>2008-09-19T17:36:00.001+02:00</published><updated>2008-10-11T13:32:51.761+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><title type='text'>Powrót nieudany...</title><content type='html'>&lt;del&gt;&lt;p&gt;Mogę to już chyba powiedzieć bez obaw, że zaraz sytuacja się zmieni. W ostatnich miesiącach podejmowałem kilka prób ponownego dostania się do pracy w gamedevie (i nie tylko, ale to nie to jest tematem tego wpisu). Do jakiejś większej firmy. Dlaczego? Dlatego, że robienie gier amatorsko już mnie nie bawi, wiem że większość tego typu projektów upada, więc nie potrafię w sobie znaleźć wystarczająco dużo motywacji. Niestety bezskutecznie. Próbowałem zarówno dostać się do pracy w polskich firmach (kompletny brak odzewu po wysłaniu zgłoszenia) jak i jednej zagranicznej. Paradoksalnie to właśnie do tej pracy za granicą miałem największe szanse, mimo że aplikowałem na stanowisko starszego programisty (!!!)... I to nie sam z siebie, lecz zostałem znaleziony przez firmę zajmującą się rekrutacją. Po wstępnej rozmowie z głównym programistą szanse tylko wzrosły, aby po teście kompetencji spaść do zera. Test był w gruncie rzeczy prosty i mogę powiedzieć, że go zawaliłem. Cóż - bywa. W każdym bądź razie nauczka na przyszłość: nigdy więcej rozmów o pracy/testów zaraz po trudnym/głębokim nurkowaniu ;) A najlepiej jakichkolwiek poważnych rozmów. Ogólnie szkoda, bo gość był zafascynowany Agile i może udałoby się je tam wprowadzić :P&lt;/p&gt;&lt;p&gt;W polsce bardzo chciałbym pracować, ale zdaję sobie doskonale sprawę, że przekreśla mnie w większości firm to, że studiuję dziennie*, a zatem na pracę nie mógłbym poświęcić tych 40h tygodniowo. Co w naszych warunkach (czy ogólnie warunkach panujących w GD) jest niekorzystne. Przy notorycznym braku odpowiednich ludzi nieobecność kogokolwiek może wstrzymać prace (bo autor kodu coś np. namotał i dzięki temu wszystko się elegancko wysypuje ;) a nie ma nikogo kto wie jak to dokładnie działa - oczywiście przesadzam :) ). Zresztą mam wrażenie, że na polskim rynku konkurencja jest wyższa. Firmy statystycznie zatrudniają mniej ludzi niż firmy zagraniczne (porównanie creditsów robi swoje...), a zatem o dobrą pracę trudniej. Trzeba mieć bardzo wysokie umiejętności - moje są pewnie gdzieś tak na średnim poziomie. Do scenowców, którzy budowali polski gamedev jest mi nadal bardzo daleko.&lt;/p&gt;&lt;p&gt;Pozostaje mi tylko mieć nadzieję, że dostać do GD uda mi się za kilka lat...&lt;/p&gt;&lt;p&gt;* Jest to chyba jakiś polski paradoks. I to ogólnie nie tylko w GD, ale całego rynku pracy. Mimo że jeszcze kilka lat temu mówiło się, że studia zaoczne są gorsze z perspektywy pracodawcy, to teraz gdy wiele młodych osób chce pracować okazuje się że jest inaczej.&lt;/p&gt;&lt;/del&gt;&lt;p&gt;&lt;b&gt;EDITED: świat jest piękny, bo jest nieprzewidywalny. Nawet jeśli nie w GD, to wiele wskazuje na to, że będę robił to co lubię (czyli tematy około silnikowo-niskopoziomowo-graficzne ;) ).&lt;/b&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6216295331773704562?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6216295331773704562/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/09/powrt-nieudany.html#comment-form' title='Komentarze (2)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6216295331773704562'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6216295331773704562'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/09/powrt-nieudany.html' title='Powrót nieudany...'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-5347639806031126137</id><published>2008-09-17T17:38:00.001+02:00</published><updated>2008-10-11T13:33:01.481+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Extreme Programming - zło w czystej postaci?</title><content type='html'>&lt;p&gt;Być może wiele osób zastanawia się, co ten tytuł ma znaczyć? Przecież od dłuższego czasu przy każdej możliwej okazji wychwalam zalety tej metody Agile, a tu nagle poddaję to wszystko w wątpliwość. Za każdym razem zachęcam do jej stosowania twierdząc, że idealnie nadaje się do gamedevu.&lt;/p&gt;&lt;p&gt;Na stosujących XP czeka jednak jedna "mała" pułapka, o której dotychczas nie wspominałem, a której konsekwencje mogą być katastrofalne. Otóż stosując XP należy stosować je albo w całości... albo wcale. W praktyce stosowanie XP przez programistów (szczególnie początkujących/niedoświadczonych) wygląda często tak, że wybierają jedynie te elementy XP, które sprawią, że będą mieli mniej pracy (np. ograniczenie dokumentacji czy brak planowania) bądź koszty pracy będą niższe. Jednocześnie zapominają o tym, że pozostałe praktyki (jak np. unit-testing czy częsty refaktoring) są powodem, dla którego planowania nie trzeba prowadzić, że są one pewnego rodzaju zabezpieczeniem. Programowanie ekstremalne to bowiem łańcuch, w którym stosowanie jednej praktyki jest uzależnione od stosowania innej. Wyjęcie któregokolwiek z ogniw powoduje, że całość przestaje byś spójna, tym samym bezpieczna. W ten sposób XP przestaje pełnić swoją rolę...&lt;/p&gt;&lt;p&gt;Więcej na ten temat w dosyć starym, ale bardzo ciekawym artykule autorstwa &lt;a href="http://www.softwarereality.com/lifecycle/xp/case_against_xp.jsp" target="_blank"&gt;Matta Stephensa&lt;/a&gt;. A dla tych, którzy chcą spróbować Agile, a brakuje im samodyscypliny potrzebnej do stosowania XP zawsze pozostaje Scrum. Innym, choć trudniejszym, rozwiązaniem jest opracowanie swojej wersji XP, która nie będzie miała wszystkich elementów określonych przez jej autorów, ale pozostałe będą tak zmodyfikowane, że wszystko nadal będzie działać.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-5347639806031126137?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/5347639806031126137/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/09/extreme-programming-zo-w-czystej.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5347639806031126137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5347639806031126137'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/09/extreme-programming-zo-w-czystej.html' title='Extreme Programming - zło w czystej postaci?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6989672054139887265</id><published>2008-08-29T17:39:00.008+02:00</published><updated>2008-10-11T13:33:13.080+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>Garść screenów z demka</title><content type='html'>&lt;p&gt;Część osób miała już pewnie przyjemność obejrzeć filmik z poprzedniej notki, a pozostałych zachęcam do oglądania i komentarzy (co jest źle, co poprawić itd.). Trochę się pokręciłem wczoraj po tej testowej mapce i zrzuciłem kilka screenów. To co mnie niezmiernie cieszy to fakt, że jeden z nich w zaledwie dobę uzyskał status najlepszego screena na &lt;a href="http://www.gamedev.pl/screens.php?x=view&amp;amp;id=1998" target="_blank"&gt;Gamedev.pl&lt;/a&gt;. Niby nic takiego, a jednak cieszy i motywuje do dalszej pracy. Cieszy mnie to tym bardziej, że podobny status mój inny screen osiągnął chyba kilkanaście miesięcy temu (a może to już więcej upłynęło?), gdy projektów było dużo mniej.&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SO938RwDarI/AAAAAAAAAhA/H6jzVm1R-FA/s1600-h/nGENE_0083.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SO938RwDarI/AAAAAAAAAhA/H6jzVm1R-FA/s200/nGENE_0083.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255551167605467826" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SO933nemocI/AAAAAAAAAg4/jCItATlR2_U/s1600-h/nGENE_0073.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SO933nemocI/AAAAAAAAAg4/jCItATlR2_U/s200/nGENE_0073.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255551087538512322" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SO93wXD8RnI/AAAAAAAAAgw/PXWCn4aRoR4/s1600-h/nGENE_0072.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SO93wXD8RnI/AAAAAAAAAgw/PXWCn4aRoR4/s200/nGENE_0072.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255550962872632946" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SO93r-lgOXI/AAAAAAAAAgo/OLlPM4QLiOw/s1600-h/nGENE_0068.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SO93r-lgOXI/AAAAAAAAAgo/OLlPM4QLiOw/s200/nGENE_0068.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255550887583037810" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SO93oNqCYUI/AAAAAAAAAgg/FAMY1UvNbWs/s1600-h/nGENE_0065.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SO93oNqCYUI/AAAAAAAAAgg/FAMY1UvNbWs/s200/nGENE_0065.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255550822909108546" /&gt;&lt;/a&gt; &lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SO93jZ6WFCI/AAAAAAAAAgY/et1dNKWZ5B4/s1600-h/nGENE_0063.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SO93jZ6WFCI/AAAAAAAAAgY/et1dNKWZ5B4/s200/nGENE_0063.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255550740299387938" /&gt;&lt;/a&gt;&lt;p&gt;Więcej oczywiście w galerii. Jednocześnie jest to na razie koniec wrzucania screenów, gdyż teraz zabieram się za wersję 0.2 silnika, a konkretnie GUI. Czekam też na opublikowanie mojego posta na gamedev.net dzięki czemu mam nadzieję dotrzeć do szerszego grona (na kilkadziesiąt ściągnięć silnika jedynie kilka osób wypowiedziało się na jego temat :/).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6989672054139887265?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6989672054139887265/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/gar-screenw-z-demka.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6989672054139887265'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6989672054139887265'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/gar-screenw-z-demka.html' title='Garść screenów z demka'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/SO938RwDarI/AAAAAAAAAhA/H6jzVm1R-FA/s72-c/nGENE_0083.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3005122708867293023</id><published>2008-08-27T17:47:00.001+02:00</published><updated>2008-10-11T13:33:22.832+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>Proste demko</title><content type='html'>&lt;p&gt;Dziś w ramach odpoczynku przygotowałem taki o to filmik z mojego silnika. Pokazuje on kilka jego cech. Modele są to darmowe modele znalezione w sieci, więc scena jest raczej pustawa, nudnawa i niespójna. Ot i filmik na YouTubie:&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="350"&gt; &lt;param name="movie" value="http://www.youtube.com/v/EVv6gdofRe8"&gt;  &lt;embed src="http://www.youtube.com/v/EVv6gdofRe8" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;  &lt;/object&gt;&lt;/p&gt;&lt;p&gt;Film w lepszej jakości można znaleźć &lt;a href="http://www.sendspace.com/file/xtul1d" target="_blank"&gt;tutaj&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3005122708867293023?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3005122708867293023/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/proste-demko.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3005122708867293023'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3005122708867293023'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/proste-demko.html' title='Proste demko'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-392139210537727007</id><published>2008-08-26T17:49:00.001+02:00</published><updated>2008-10-11T13:33:31.932+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Pair programming</title><content type='html'>&lt;p&gt;Pair programming, czyli po polsku programowanie w parach jest jedną z najbardziej rozpoznawalnych cech programowania ekstremalnego. Ba, część osób je z tym błędnie utożsamia. Jednocześnie jest to ta właściwość XP, którą chyba najłatwiej wykorzystać w gamedevie. W telegraficznym skrócie polega ona na tym, że nad fragmentem kodu pracuje jednocześnie dwóch programistów siedząc przy jednym biurku. Podejścia do tego są różne: jeden myśli drugi zapisuje to jako kod (co pewien czas role się zmieniają), jeden pisze kod ale obaj nad nim dyskutują, jeden pisze kod a drugi testy, itd. Zyski z pair programmingu mogą być różne, np.:&lt;ul&gt;&lt;li&gt;wyższa jakość kodu - jeśli nad jego fragmentem skupia się dwóch programistów, to wyłapują oni więcej błędów. Ponadto gdy programuje się z kimś czuje się swego rodzaju presję (zwłaszcza, gdy jest to teoretycznie osoba o wyższych umiejętnościach), która nie pozwala pisać brzydkiego kodu.&lt;/li&gt;&lt;li&gt;szybsze uczenie się - w wielu firmach po przyjściu do pracy programista dostaje dokumentację i kod do przejrzenia i ma się wszystkiego nauczyć sam. Oczywiście - uda się to, ale chwilę potrwa. Programując w parach nauka jest dużo szybsza.&lt;/li&gt;&lt;li&gt;wyższy poziom koncentracji - gdy pisze się w pojedynkę niejednokrotnie błahostka potrafi wytrącić człowieka z transu (ktoś przejdzie obok naszego biurka, komuś coś upadnie, ktoś się odezwie tuż obok), a tym samym obniżyć poziom jego koncentacji akurat w momencie gdy był bliski znalezienia rozwiązania na palący problem. Gdy programistów jest dwóch szansa na taką dekoncentację obu jednocześnie jest mniejsza.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Zaraz ktoś powie, że to się nie nadaje do gamedevu, że bez sensu, że takie rzeczy to do oprogramowania dla banków*... A jednak. Kiedyś w pewnym stopniu wykorzystywałem to. Zresztą nie tak dawno temu odbyłem miłą konwersację z głównym programistą pewnej sporej firmy z gamedevu z zachodniej Europy. W trakcie jej trwania okazało się, że podobnie jak ja jest on zwolennikiem Agile. Powodem, dla którego nie wprowadza on XP nie było wg niego to, że się on nie nadaje jak wiele osób twierdzi, lecz to, że programiści się go boją, bo wydaje im się, że będą się musieli dużo nauczyć! Co jest w ogóle zabawne i paradoksalne zważywszy na fakt ile przeciętnie programista poświęca czasu na samorozwój. Ja również uważam, że programiści boją się XP, a szczególnie pair programmingu. Czasem mam wrażenie, że programiści z gamedevu uważając się za niewiadomo-jakich-wymiataczy są przekonani, że ONI błędu na pewno nie popełnią, a tym samym nie potrzebują nikogo patrzącego w ich monitor... A później co pół godziny gra wywala się do Windowsa...&lt;/p&gt;&lt;p&gt;* Agile nigdy nie został stworzony dla dużych zespołów tworzących oprogramowanie wysokiego ryzyka. Wiele osób tak uważa, ale w praktyce metodyki lekkie (powinni powiesić autora tego tłumaczenia!) sprawdzają się w zespołach liczących kilku do kilkunastu developerów, gdyż umożliwiają pewną spontaniczność tworzenia oprogramowania!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-392139210537727007?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/392139210537727007/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/pair-programming.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/392139210537727007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/392139210537727007'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/pair-programming.html' title='Pair programming'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-5065851327222807829</id><published>2008-08-25T17:53:00.001+02:00</published><updated>2008-10-11T13:33:41.564+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nurkowanie'/><title type='text'>100...</title><content type='html'>&lt;p&gt;Tytuł nie jest bynajmniej związany z systemem binarnym jak można by się spodziewać po programiście. Oznacza on liczbę nurkowań, którą wczoraj po wielu bojach udało mi się osiągnąć :) 2 dosyć łatwe i płytkie nurkowania, które wczoraj wykonaliśmy miały miejsce w wyrobisku żwiru koło Łowicza (ach ta widoczność na poziomie 0.5 metra i chłód mimo pływania w suchym skafandrze :) ). Pierwsza 100 jest dla każdego nurka niezwykle istotna (podobnie jak pierwsze 50 m, które to z kolei zrobiłem na początku lipca na wraku Franceski w Chorwacji). Jest to jakieś podsumowanie wysiłku włożonego w kursy (jestem nurkiem ze średnim stopniem i 4 specjalizacjami) i niemałych przecież funduszy wyłożonych na sprzęt i wyjazdy. Jednocześnie jest to ciągle początek długiej drogi w karierze nurka (ci bardziej doświadczeni mają nawet po kilka tysięcy nurkowań...). Ba, ja ciągle nie uważam się za pełnoprawnego nurka! Myślę, że do tego "poziomu" dochodzi się latami... Cóż kolejny cel to również 100... ale tym razem metrów :)&lt;/p&gt;&lt;p&gt;A z innych rzeczy, silnik nie okazał się póki co wielkim sukcesem, ale dzięki opinii i pomocy kilku osób (pozdrawiam!) udało się go uruchomić na systemie XP (choć jeszcze nie u wszystkich...). Wkrótce powinienem też opublikować dane o nim na zagranicznych serwisach (gamedev.net i devmaster.net). Zresztą takiej sytuacji trochę się spodziewałem, bo póki co silnik nie może być konkurencją dla popularnego na Warsztacie silnika Esenthel, czy niestety nierozwijanego już silnika autorstwa Rega (który jest kompletny).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-5065851327222807829?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/5065851327222807829/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/100.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5065851327222807829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5065851327222807829'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/100.html' title='100...'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6295594102028294861</id><published>2008-08-22T17:56:00.002+02:00</published><updated>2008-10-11T13:33:50.003+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>Download jest dostępny!</title><content type='html'>&lt;p&gt;Yes, yes, yes! - mógłbym zakrzyknąć. Wykonałem pierwszy mały kroczek na długiej drodze pracy nad swoim silnikiem. Aktualną wersję (0.1) można ściągnąć ze strony &lt;a href="http://ngene.wikidot.com/download" target="_blank"&gt;http://ngene.wikidot.com/download&lt;/a&gt;. Paczka jest całkiem spora (ok. 80 MB), ale zawiera pełny kod źródłowy, wszystkie shadery i bibliotekę materiałów która trochę waży. Na tejże stronie znajduje się też m.in. ogół informacji o frameworku.&lt;/p&gt;&lt;p&gt;&lt;b&gt;Uwaga: obecna wersja może zawierać błędy i jest bardzo niewydajna. Ponadto wiele materiałów wymaga sprzętu wspierającego conajmniej SM 3.0. Większość znanych usterek i zwiększenie wydajności jest celem wersji 0.2.&lt;/b&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6295594102028294861?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6295594102028294861/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/download-jest-dostpny.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6295594102028294861'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6295594102028294861'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/download-jest-dostpny.html' title='Download jest dostępny!'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-7586761933490964500</id><published>2008-08-19T17:57:00.002+02:00</published><updated>2008-10-11T13:34:06.407+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='dokumentacja'/><title type='text'>Pisanie dokumentacji jest trudne!</title><content type='html'>&lt;p&gt;Pisanie dokumentacji to coś, czego bardzo, bardzo nie lubię. Wbrew pozorom jest to bardzo trudna rzecz i trzeba mieć do tego niezwykły talent. Wydawać by się mogło, że skoro jest się autorem kodu to zna się go na wylot i napisanie kilku stron tekstu nie powinno sprawiać problemów. W reczywistości przez tą dogłębną znajomość źródeł ciężko jest postawić się w sytuacji osoby, która nie miała z nim jeszcze styczności, z użytkownikiem. Ciężko jest poczuć się jak "początkujący" i wytłumaczyć dlaczego różne kwestie są rozwiązane tak, a nie inaczej. Jednocześnie dokumentacja nie powinna zawierać wiele więcej poza suchymi faktami, dzięki czemu będzie konkretna, a tym samym znalezienie w niej szukanych informacji będzie łatwiejsze. Powinna też pokazywać rozwiązania typowych problemów (co znowu wymaga przemyślenia co nimi będzie).&lt;/p&gt;&lt;p&gt;Dla mnie ideałem pod wieloma względami jest dokumentacja DirectX SDK. Jest napisana tak, że znalezienie szukanych informacji to kwestia chwili. Zawiera wiele przykładów, tutoriali, tak że i początkujący łatwo mogą zacząć przygodę z DirectXem.&lt;/p&gt;&lt;p&gt;Ja tego poziomu nie osiągnę pewnie nigdy, ale cóż - staram się aby dokumentacja nGENE SDK była jak najbardziej pomocna. Oczywiście nie będzie ona na początku kompletna (nie licząc tej wygenerowanej przez DoxyGena), ale będę ją w miarę upływu czasu uzupełniał.&lt;/p&gt;&lt;p&gt;Cieszy mnie też niezmiernie fakt, że w końcu po długim czasie moje 2 screeny spotkały się z dosyć dobrym przyjęciem na Gamedev.pl, co może oznaczać, że obrany przeze mnie kierunek rozwoju silnika był dobry. Na pewno działa to też mobilizująco.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-7586761933490964500?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/7586761933490964500/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/pisanie-dokumentacji-jest-trudne.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7586761933490964500'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7586761933490964500'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/pisanie-dokumentacji-jest-trudne.html' title='Pisanie dokumentacji jest trudne!'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6309202747227115892</id><published>2008-08-17T18:00:00.001+02:00</published><updated>2008-10-11T13:34:17.170+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>nGENE 0.1 - ostateczna data publikacji</title><content type='html'>&lt;p&gt;W poprzedniej notce napisałem, że nie podałem dotychczas daty publikacji. Teraz to naprawiam: 31.08.2008. Prawdopodobnie sporo wcześniej, ale nie chcę zapeszać. Muszę napisać, bowiem trochę dokumentacji. Kodu już od kilku dni nie dotykam, bo zrobiłem niemal tyle co zaplanowałem. Jedyne czego nie udało mi się zaimplementować to GUI (jest bardzo szczątkowe). Będzie to jednak pierwszy feature, nad którym będę pracował w ramach wersji 0.2.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6309202747227115892?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6309202747227115892/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/ngene-01-ostateczna-data-publikacji.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6309202747227115892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6309202747227115892'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/ngene-01-ostateczna-data-publikacji.html' title='nGENE 0.1 - ostateczna data publikacji'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-733378638530113636</id><published>2008-08-14T18:05:00.007+02:00</published><updated>2008-10-11T13:34:27.061+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>nGENE - kolejny krok</title><content type='html'>&lt;p&gt;Żeby nie było, że jest znowu pewne opóźnienie z publikacją silnika (ale precyzyjnej daty przecież nie podałem, hehe) zamieszczam na zachętę kolejne obrazki. Pokazują one:&lt;ul&gt;&lt;li&gt;poprawione chmury oraz lekko podrasowany teren,&lt;/li&gt;&lt;li&gt;jeden z wielu prostych efektów post-process (sepia)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SO9-r78roPI/AAAAAAAAAhg/1M76CGRLezA/s1600-h/nGENE_0050.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SO9-r78roPI/AAAAAAAAAhg/1M76CGRLezA/s200/nGENE_0050.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255558583456342258" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SO9-o9IE39I/AAAAAAAAAhY/3dTndYqnxi0/s1600-h/nGENE_0047.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SO9-o9IE39I/AAAAAAAAAhY/3dTndYqnxi0/s200/nGENE_0047.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255558532232962002" /&gt;&lt;/a&gt;&lt;p style="clear:both"&gt;Na screenach nie ma jeszcze cieni (bo są na tyle proste, że nie ma się czym chwalić...). Pracuję też nad demem (trochę za sugestią Rega), które pokaże przynajmniej część feature-ów.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-733378638530113636?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/733378638530113636/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/ngene-kolejny-krok.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/733378638530113636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/733378638530113636'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/ngene-kolejny-krok.html' title='nGENE - kolejny krok'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fbfW7HvrHa4/SO9-r78roPI/AAAAAAAAAhg/1M76CGRLezA/s72-c/nGENE_0050.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-8702920690888230997</id><published>2008-08-13T18:12:00.001+02:00</published><updated>2008-10-11T13:34:35.501+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Deferred shading - pakowanie danych jest złe?</title><content type='html'>&lt;p&gt;Stosując deferred shading powszechną taktyką jest tzw. pakowanie danych, czyli umieszczanie kilku atrybutów zajmujących więcej niż jedno pole (tak jak np. pozycja czy wektory normalne aż trzy - x, y, z) w mniejszej ich liczbie. W przypadku pozycji bardzo często wystarczy tylko 1 współrzędna! Tak duże spakowanie uzyskuje się poprzez zapisanie w buforze geometrii długości wektora położenia umieszczonego w przestrzeni widoku.&lt;/p&gt;&lt;p&gt;Tak to miałem rozwiązane również u siebie. Do wczoraj. Boleśnie się bowiem przekonałem, co nie jest odkryciem, że taka kompresja połączona z interpolacją wektora obserwatora w pixel-shaderze musi generować pewne minimalne niedokładności. Zwykle są one niezauważalne. Zwykle. Wczoraj bowiem potrzebowałem pewnej precyzji i okazało się, że to rozwiązanie nie wystarcza. Należy być więc tego świadomym.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-8702920690888230997?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/8702920690888230997/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/deferred-shading-pakowanie-danych-jest.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8702920690888230997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8702920690888230997'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/08/deferred-shading-pakowanie-danych-jest.html' title='Deferred shading - pakowanie danych jest złe?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3889627053180844024</id><published>2008-07-30T18:16:00.002+02:00</published><updated>2008-10-11T13:34:50.176+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Co tam u mnie?</title><content type='html'>&lt;p&gt;W ostatnim czasie skupiam się na przygotowaniach do "wypuszczenia" swojego silnika (trochę to trwa...) - poprawiam bugi, wprowadzam drobne optymalizacje (na większe przyjdzie czas w kolejnej wersji), zaczynam pisać tutoriale, pracuję nad GUI. Przygotowuję też wiki, która będzie zawierała istotne informacje na jego temat. Trochę tego jest. Prawdopodobnie wypuszczę jakąś wersję za kilka, kilkanaście dni. Poniżej kilka screenów z aktualnej wersji (więcej w galerii):&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SO-ARLC1CVI/AAAAAAAAAhw/CfkBkf4Fe-I/s1600-h/nGENE_0044.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SO-ARLC1CVI/AAAAAAAAAhw/CfkBkf4Fe-I/s200/nGENE_0044.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255560322675444050" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SO-AM2lhfOI/AAAAAAAAAho/pGnH-xTeamg/s1600-h/nGENE_0046.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SO-AM2lhfOI/AAAAAAAAAho/pGnH-xTeamg/s200/nGENE_0046.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255560248464342242" /&gt;&lt;/a&gt;&lt;p&gt;Ponadto wziąłem się za pisanie kursu dot. programowania gier, tłumaczę na angielski swoje artykuły zgodnie z sugestią pewnego głównego programisty, rozpocząłem pisanie małej gierki na komórki w ramach relaksu ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3889627053180844024?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3889627053180844024/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/07/co-tam-u-mnie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3889627053180844024'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3889627053180844024'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/07/co-tam-u-mnie.html' title='Co tam u mnie?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fbfW7HvrHa4/SO-ARLC1CVI/AAAAAAAAAhw/CfkBkf4Fe-I/s72-c/nGENE_0044.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3349270661646337388</id><published>2008-07-25T11:26:00.004+02:00</published><updated>2008-10-11T13:35:03.107+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gry'/><category scheme='http://www.blogger.com/atom/ns#' term='Warsztat'/><title type='text'>Projekt amatorski = Projekt bez szans?</title><content type='html'>&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.matrixgames.com/images/3dbox/170x220/WW2RTV-3dBox-170x220.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://www.matrixgames.com/images/3dbox/170x220/WW2RTV-3dBox-170x220.gif" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Panuje dziś powszechne przekonanie, że gry mogą być tworzone tylko przez profesjonalne studia developerskie, że amatorzy mogą próbować zrobić tylko coś do swojego portfolio, bo i tak niemal na pewno tego nie ukończą. A nawet jeśli ukończą, to żaden wydawca ani gracz nie zainteresują się tym tytułem, że zginie w czeluściach portali oferujących gry Freeware bądź Shareware. Cóż może wynika to z faktu, że jakieś 50% amatorskich produkcji to cRPG bądź MMORPG...?&lt;/p&gt;&lt;p&gt;Są jednak wyjątki od tej reguły, a najnowszym z nich jest &lt;a href="http://worldwar2.pl/" target="_blank"&gt;World War 2&lt;/a&gt;, gra tworzona przez ten sam zespół co Bitter Glory (od pewnego czasu już beze mnie). World War 2 Road To Victory (bo tak brzmi jej pełny tytuł) jest klasyczną do bólu strategią turową osadzoną w realiach II WŚ. Grą reprezentującą wymierający dzisiaj niestety gatunek, i dlatego też może odnieść jakiś sukces. Gra nie dość, że została ukończona, to trafiła na sklepowe półki! Nabyć ją można w &lt;a href="http://www.digitalriver.com/dr/v2/ec_Main.Entry17c?SID=50505&amp;amp;SP=10023&amp;amp;CID=0&amp;amp;PID=969916&amp;amp;PN=1&amp;amp;V1=969916&amp;amp;CUR=978&amp;amp;DSP=&amp;amp;PGRP=0&amp;amp;ABCODE=&amp;amp;CACHE_ID=0" target="_blank"&gt;Matrix Games&lt;/a&gt; oraz &lt;a href="http://www.gamersgate.com/index.php?page=product&amp;amp;what=view&amp;amp;sku=DD-WW2RTV&amp;amp;cat=strategy" target="_blank"&gt;GamersGate&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Więcej o tym "precedensie" można poczytać w &lt;a href="http://forum.gamedev.pl/index.php/topic,7556.0.html" target="_blank"&gt;odpowiednim wątku&lt;/a&gt; na forum Warsztatu.&lt;/p&gt;&lt;p&gt;Moje gratulacje chłopaki! Mam nadzieję, że wkrótce i Bitter Glory będzie można kupić, a także że coraz więcej amatorskich zespołów ukończy swe produkcje.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3349270661646337388?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3349270661646337388/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/07/projekt-amatorski-projekt-bez-szans.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3349270661646337388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3349270661646337388'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/07/projekt-amatorski-projekt-bez-szans.html' title='Projekt amatorski = Projekt bez szans?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6388986949737278777</id><published>2008-07-09T11:35:00.001+02:00</published><updated>2008-10-11T13:35:14.920+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gry'/><title type='text'>C.O.R.E. - trailer</title><content type='html'>&lt;p&gt;Piszę o tym ze sporym poślizgiem (z drugiej strony - lepiej późno niż wcale), ale gra C.O.R.E. doczekała się wreszcie &lt;a href="http://www.gametrailers.com/player/35682.html" target="_blank"&gt;oficjalnego trailera&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;&lt;object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" id="gtembed" width="480" height="392"&gt; &lt;param name="allowScriptAccess" value="sameDomain"&gt;  &lt;param name="allowFullScreen" value="true"&gt; &lt;param name="movie" value="http://www.gametrailers.com/remote_wrap.php?mid=35682"&gt; &lt;param name="quality" value="high"&gt; &lt;embed src="http://www.gametrailers.com/remote_wrap.php?mid=35682" swliveconnect="true" name="gtembed" align="middle" allowscriptaccess="sameDomain" allowfullscreen="true" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="480" height="392"&gt;&lt;/embed&gt; &lt;/object&gt;&lt;/p&gt;&lt;p&gt;Według mnie prezentuje się całkiem nieźle zważywszy na możliwości konsoli DS.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6388986949737278777?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6388986949737278777/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/07/core-trailer.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6388986949737278777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6388986949737278777'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/07/core-trailer.html' title='C.O.R.E. - trailer'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1332143424182447659</id><published>2008-07-07T11:40:00.000+02:00</published><updated>2008-10-11T11:41:16.115+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nurkowanie'/><title type='text'>Jestem już płetwonurkiem P2!!!</title><content type='html'>&lt;p&gt;Przez ponad miesiąc nic tu nie napisałem. Dziś też nie będzie jeszcze o programowaniu, na które mam ostatnio mniej czasu (niedawna sesja, praca). Chcę się tylko pochwalić, że od kilku dni legitymuję się uprawnieniami płetwonurka P2 (CMAS 2 Stars Diver). Pozwala mi to m.in. na nurkowanie na głębokość 40 metrów z użyciem powietrza. Jednak przez zakres kursu spoczywa na mnie większa odpowiedzialność za mniej doświadczonych ludzi, z którymi schodził będę pod wodę. Płetwonurek P2 musi umieć pomóc partnerom w opałach, zaplanować im nurkowanie i ten plan zrealizować.&lt;/p&gt;&lt;p&gt;Sam kurs odbyłem w Chorwacji na wyspie Murter. Organizatorem kursu była &lt;a href="http://www.moana.pl/" target="_blank"&gt;Moana (baza Nautilusa)&lt;/a&gt; i muszę powiedzieć, że poziom oferowanych przez nich usług stoi na bardzo dobrym poziomie. Muszę przyznać, że miałem spore obawy, czy w tak doskonałych warunkach (ciepła i przejrzysta woda) kurs ma jakikolwiek sens. Instruktorzy Moany udowodnili, że kurs da się rzetelnie poprowadzić bez względu na klimat. Jeszcze raz dzięki!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1332143424182447659?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1332143424182447659/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/07/jestem-ju-petwonurkiem-p2.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1332143424182447659'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1332143424182447659'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/07/jestem-ju-petwonurkiem-p2.html' title='Jestem już płetwonurkiem P2!!!'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-7374372983447823909</id><published>2008-05-13T11:41:00.004+02:00</published><updated>2008-10-11T11:48:18.572+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Chmury - jak z 2D zrobić 2.5D?</title><content type='html'>&lt;p&gt;W dniu wczorajszym obiecałem, że powiem kilka słów o tym jak uzyskać takie chmury jak mi się udało. Nie są może one rewelacyjne, ale moim zdaniem i tak wyglądają całkiem nieźle. Nie są płaskie, dają pewne drobne wrażenie głębi, a jednocześnie nie są wolumetryczne.&lt;/p&gt;&lt;p&gt;Kluczem jak łatwo się domyśleć jest wykorzystanie 2-wymiarowego szumu Perlina, który pozwala nam na wygenerowania podstawowej struktury chmur. Oczywiście robimy to w tradycyjny sposób zgodnie z tym co napisał &lt;a href="http://www.noisemachine.com/talk1/" target="_blank"&gt; Ken Perlin w swojej prezentacji&lt;/a&gt;, czyli sumujemy pewną liczbę oktaw szumu z odpowiednimi wagami i częstotliwościami. Im więcej oktaw, tym lepiej. Przynajmniej do pewnego momentu, bo potem okazuje się, że choć wydajność zaczyna nam spadać, tak jakość obrazu w zasadzie nie ulega zmianie.&lt;/p&gt;&lt;p&gt;Niemniej stosowanie szumu Perlina bez jakiejkolwiek obróbki ma jedną podstawową wadę, która dla wielu zastosowań może być dyskwalifikująca - uzyskane chmury są kompletnie płaskie! Nijak oddać za ich pomocą chmur burzowych, czy ogólnie, czegokolwiek poza najdelikatniejszymi obłokami. Na dowód obrazek:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB18kftiXI/AAAAAAAAAh8/EPvopt0SNLc/s1600-h/clouds.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB18kftiXI/AAAAAAAAAh8/EPvopt0SNLc/s200/clouds.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255830448590653810" /&gt;&lt;/a&gt;&lt;p&gt;Swego czasu, aby to obejść do tekstury uzyskanej za pomocą szumu Perlina dodawałem (ale dokładnie w jaki sposób - nie pamiętam) wartości kolorów z tekstury będącej zdjęciem prawdziwej chmury, co w pewien sposób pozwalało mi symulować różne typy chmur. Nawet jakoś tam działało.&lt;/p&gt;&lt;p&gt;Na szczęście istnieją lepsze sposoby, które pozwalają nam także na uwzględnienie rozchodzenia się światła w chmurze, a tym samym jej oświetlenie. W rzeczywistości chmura jest skupiskiem wody w różnej postaci (od ciekłej po stałą). Promień światła przechodząc przez każdą z kropel odbija się i rozprasza pod najróżniejszymi kątami, trafia do innej kropli, odbija się, trafia do innej kropli, itd. Promieni jest dużo, kropel jest dużo, więc widać, że nie będzie się tego dało zrobić poprzez implementację stanu faktycznego. Dokonamy bardzo zgrubnego przybliżenia tego scatteringu. Spójrzmy na poniższy rysunek:&lt;/p&gt;&lt;p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB2Ggt6anI/AAAAAAAAAiE/fh_dUQTtpBk/s1600-h/cloud_sketch.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB2Ggt6anI/AAAAAAAAAiE/fh_dUQTtpBk/s200/cloud_sketch.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255830619375168114" /&gt;&lt;/a&gt;&lt;p&gt;Idąc od punktu, w którym umieszczone jest Słońce w kierunku dolnego punktu na chmurze (punkt P) sprawdzamy, czy w danym momencie promień znajduje się wewnątrz chmury (oczywiście przesuwamy się w pętli o jakąś ustaloną jednostkę w każdej iteracji). Zatem nie uwzględniamy faktycznych zjawisk zachodzących w chmurze, a jedynie uwzględniamy jej gęstość w danym punkcie, co pozwala nam oszacować ile światła przejdzie dalej. Aby to uczynić sprawdzamy czy aktualna współrzędna y wektora położenia, jest większa od wartości zapisanej w teksturze wygenerowanej za pomocą szumu Perlina (ale o tym jeszcze za chwilę). Jeśli tak to dodajemy pewną wartość do aktualnej wartości oświetlenia (scatteringu). Wartość ta powinna być pomnożona przez aktualną gęstość chmury (odczytaną z tekstury) dla nieco lepszego efektu. Po dojściu do dolnego punktu promień bezpowrotnie opuszcza chmurę (w uproszczeniu), a tym samym na pewno nic nie wpłynie już na jej kolor. Po zebraniu wszystkich próbek musimy jeszcze jakoś zamienić zebrane dane o oświetleniu na rzeczywisty scattering. Ja robię to za pomocą następującej linii kodu: scattering = 1.0f / exp(scattering * 0.4f);&lt;/p&gt;&lt;p&gt;Jak widać takie podejście jest podobne do wielu efektów operujących na mapie wysokości. W rzeczywistości aproksymujemy w ten sposób jakąś całkę. Jeszcze jedna sprawa, aby uniknąć problemów z aliasingiem ta mapa wysokości (tekstura chmur z szumem Perlina, na której operujemy) powinna składać się tylko z kilku pierwszych oktaw. U mnie jest to 4. Ale zaraz... 4 oktawy to trochę mało i efekt będzie mierny... Zgadza się, dlatego te 4 oktawy należy np. zapisać do render targeta a po ich przetworzeniu dodać do nich pozostałe. I gotowe - do tego wystarczy dodać kolor nieba i mamy fajne chmury.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-7374372983447823909?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/7374372983447823909/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/05/chmury-jak-z-2d-zrobi-25d.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7374372983447823909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7374372983447823909'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/05/chmury-jak-z-2d-zrobi-25d.html' title='Chmury - jak z 2D zrobić 2.5D?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB18kftiXI/AAAAAAAAAh8/EPvopt0SNLc/s72-c/clouds.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-8816573019669052483</id><published>2008-05-12T11:49:00.005+02:00</published><updated>2008-10-11T13:35:33.414+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Dynamiczne chmury</title><content type='html'>&lt;p&gt;&lt;/p&gt;&lt;p&gt;Dziś skończyłem pisać dynamiczne chmury w oparciu o artykuł z Game Programming Gems 5 oraz o swoje inne z tym doświadczenia. Jutro postaram się wyjaśnić jak coś takiego osiągnąć (a da się jeszcze lepiej), dziś nie mam na to czasu. Poniżej film oraz garść screenów:&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/H1zmo-cn3aU&amp;amp;hl=en"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/H1zmo-cn3aU&amp;amp;hl=en" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;a href="http://www.blogger.com/images/nGENE/nGENE_0036.jpg" target="_blank" style="padding-left:0px;" rel="lightbox[perlin]"&gt;&lt;/a&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB3j_-ZLQI/AAAAAAAAAic/VD3Im6PX04w/s1600-h/nGENE_0035.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB3j_-ZLQI/AAAAAAAAAic/VD3Im6PX04w/s200/nGENE_0035.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255832225493626114" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB3e9CgVgI/AAAAAAAAAiU/Yvd3ChE9VaQ/s1600-h/nGENE_0034.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB3e9CgVgI/AAAAAAAAAiU/Yvd3ChE9VaQ/s200/nGENE_0034.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255832138806220290" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SPB3UFDVZFI/AAAAAAAAAiM/EwU5OKI_M3k/s1600-h/nGENE_0031.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SPB3UFDVZFI/AAAAAAAAAiM/EwU5OKI_M3k/s200/nGENE_0031.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255831951978619986" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-8816573019669052483?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/8816573019669052483/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/05/dynamiczne-chmury.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8816573019669052483'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8816573019669052483'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/05/dynamiczne-chmury.html' title='Dynamiczne chmury'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB3j_-ZLQI/AAAAAAAAAic/VD3Im6PX04w/s72-c/nGENE_0035.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-605175984295755696</id><published>2008-05-11T11:54:00.004+02:00</published><updated>2008-10-11T11:59:59.942+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='fotografia'/><title type='text'>Pierwsze próby z HDR</title><content type='html'>&lt;p&gt;Zaraz, zaraz... uważam się za człowieka mającego pojęcie o grafice komputerowej i dopiero teraz podjąłem próby wykorzystania tej powszechnej dziś techniki?! I tak, i nie. Nie, bo nie chodzi o programowanie grafiki. Tak, bo poświęciłem kilka godzin wczoraj i dziś na przygotowanie zdjęć z wykorzystaniem właśnie HDR.&lt;/p&gt;&lt;p&gt;O tym, że jest to możliwe pisał też jakiś czas temu &lt;a href="http://regedit.gamedev.pl/news_1134.html" target="_blank"&gt;Reg na swoim blogu&lt;/a&gt;. Pokazał on też w skrócie proces tworzenia tego zdjęcia i przedstawił darmowy programik, z którego sam skorzystałem - &lt;a href="http://qtpfsgui.sourceforge.net/" target="_blank"&gt;Qtpfsgui&lt;/a&gt;. Program jest bardzo fajny, pozwala na stworzenie zdjęcia HDR i jego tone-mapping do LDR w bardzo prosty i przejrzysty nawet dla laików sposób. Większość efektów da się osiągnąć zmieniając kilka wartości za pomocą pasków, ale jeśli ktoś wie, co robi ma dużo większe pole manewru - z definiowaniem swoich profili włącznie.&lt;/p&gt;&lt;p&gt;Aby ze zdjęcia można zrobić wersję HDR trzeba tak naprawdę przygotować serię zdjęć różniących się między sobą czasem ekspozycji i pokazujących dokładnie to samo (bez statywu praktycznie nie da razy). Później wystarczy je wczytać, trochę poczekać, od czasu do czasu coś kliknąć i otrzymać rezultat... Poniżej to co ja zrobiłem przez ten weekend:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB46tBOtEI/AAAAAAAAAi8/gseSb9ZF6gQ/s1600-h/dadaj_1.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB46tBOtEI/AAAAAAAAAi8/gseSb9ZF6gQ/s200/dadaj_1.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255833715053868098" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB4zHwDG3I/AAAAAAAAAi0/I4Hhee-8XFk/s1600-h/dadaj_5.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB4zHwDG3I/AAAAAAAAAi0/I4Hhee-8XFk/s200/dadaj_5.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255833584790608754" /&gt;&lt;/a&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB4qwvcmNI/AAAAAAAAAis/2uURPUyDpWY/s1600-h/dadaj_6.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB4qwvcmNI/AAAAAAAAAis/2uURPUyDpWY/s200/dadaj_6.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255833441175115986" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-605175984295755696?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/605175984295755696/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/05/pierwsze-prby-z-hdr.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/605175984295755696'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/605175984295755696'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/05/pierwsze-prby-z-hdr.html' title='Pierwsze próby z HDR'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB46tBOtEI/AAAAAAAAAi8/gseSb9ZF6gQ/s72-c/dadaj_1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-1953211287676353903</id><published>2008-05-05T12:01:00.000+02:00</published><updated>2008-10-11T12:02:49.620+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Brak refaktoringu, refaktoring, a refaktoring pusty</title><content type='html'>&lt;p&gt;Natkn&amp;#261;&amp;#322;em si&amp;#281; dzi&amp;#347; na ca&amp;#322;kiem interesuj&amp;#261;c&amp;#261; (cho&amp;#263; dosy&amp;#263; star&amp;#261;) notk&amp;#281; na pewnym blogu. Niestety teraz nie mog&amp;#281; ustali&amp;#263; jego adresu. Ot&amp;#243;&amp;#380; jej autor, zwolennik agile development, wprowadzi&amp;#322; poj&amp;#281;cie &lt;i&gt;null refactoring&lt;/i&gt;. Z braku lepszego odpowiednika nazwa&amp;#322;em go w&amp;#322;a&amp;#347;nie tytu&amp;#322;owym &lt;i&gt;refaktoringiem pustym&lt;/i&gt;.&lt;/p&gt;&lt;p&gt;C&amp;#243;&amp;#380; to jest za tw&amp;#243;r? Ano jest to refaktoring, kt&amp;#243;ry nie wprowadza &amp;#380;adnych zmian w kodzie. Brzmi dziwnie? W pierwszej chwili - by&amp;#263; mo&amp;#380;e tak. Ale po chwili zastanowienia nie powinno to wydawa&amp;#263; si&amp;#281; ju&amp;#380; a&amp;#380; tak g&amp;#322;upie.&lt;/p&gt;&lt;p&gt;Chodzi bowiem o to, &amp;#380;e Agile (szczeg&amp;#243;lnie programowanie ekstremalne) zaleca refaktoring zawsze wtedy, gdy jest to &lt;b&gt;KONIECZNE&lt;/b&gt;. Podkre&amp;#347;lam s&amp;#322;owo konieczne - nie ma potrzeby przerabiania kodu, kt&amp;#243;ry jest dobry. Ale co je&amp;#347;li nie wiemy czy kod jest dobry i czy wymaga refaktoryzacji? Teoretycznie powinni&amp;#347;my to wiedzie&amp;#263; zawsze, ale teoria nie cz&amp;#281;sto w 100% pokrywa si&amp;#281; z praktyk&amp;#261;. W rzeczywisto&amp;#347;ci cz&amp;#281;sto mamy do czynienia np. z sytuacj&amp;#261;, &amp;#380;e mamy nieczytelny kod, ale za to niesamowicie wydajny. Z jednej strony wskazane by&amp;#322;oby jego przepisanie ze wzgl&amp;#281;du na czytelno&amp;#347;&amp;#263;, ale czy wydajno&amp;#347;&amp;#263; na tym nie ucierpi? Prawdopodobnie tak. Dlatego programi&amp;#347;ci przed dokonaniem refaktoryzacji powinni si&amp;#281; zastanowi&amp;#263;, czy rzeczywi&amp;#347;cie jest ona niezb&amp;#281;dna, wzi&amp;#261;&amp;#263; pod uwag&amp;#281; wszelkie za i przeciw (przy czym nie mog&amp;#261; to by&amp;#263; rzeczy typu: "lepiej nie b&amp;#281;d&amp;#281; dotyka&amp;#263; tego kodu... na razie dzia&amp;#322;a", czy "nie rozumiem tego kodu i nie mam ochoty si&amp;#281; w niego zag&amp;#322;&amp;#281;bia&amp;#263;"). Je&amp;#347;li po takim skomplikowanym procesie my&amp;#347;lowym oka&amp;#380;e si&amp;#281;, &amp;#380;e refaktoring w chwili obecnej jest zb&amp;#281;dny, to mamy w&amp;#322;a&amp;#347;nie do czynienia z refaktoringiem pustym. Od kompletnego braku refaktoringu r&amp;#243;&amp;#380;ni si&amp;#281; on tym, &amp;#380;e dog&amp;#322;&amp;#281;bnie przeanalizowali&amp;#347;my kod pod ka&amp;#380;dym k&amp;#261;tem i powa&amp;#380;nie rozwa&amp;#380;ali&amp;#347;my jego refaktoring.&lt;/p&gt;&lt;p&gt;Dla wielu os&amp;#243;b to pewnie rzeczy oczywiste, ale dla wielu nie. Zwykle w&amp;#347;r&amp;#243;d programist&amp;#243;w mamy wed&amp;#322;ug mnie dwa typy:&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;tych, co refaktoryzuj&amp;#261; wszystko, nawet "na si&amp;#322;&amp;#281;"&lt;/li&gt;&lt;li&gt;tych co nie refaktoryzuj&amp;#261; wcale swojego kodu&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Pami&amp;#281;tajmy, wi&amp;#281;c &amp;#380;e optymalne podej&amp;#347;cie jak zawsze le&amp;#380;y pomi&amp;#281;dzy dwoma skrajno&amp;#347;ciami.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-1953211287676353903?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/1953211287676353903/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/05/brak-refaktoringu-refaktoring.html#comment-form' title='Komentarze (1)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1953211287676353903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/1953211287676353903'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/05/brak-refaktoringu-refaktoring.html' title='Brak refaktoringu, refaktoring, a refaktoring pusty'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-8813128190715821532</id><published>2008-04-13T12:03:00.003+02:00</published><updated>2008-10-11T12:13:13.754+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branża'/><title type='text'>Materiały z IGK'2008</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB7_pI9vOI/AAAAAAAAAjE/SAd5hzN6_lM/s1600-h/pres_cover.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB7_pI9vOI/AAAAAAAAAjE/SAd5hzN6_lM/s200/pres_cover.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255837098446798050" /&gt;&lt;/a&gt;Być może komuś się to przyda. Jest to moja prezentacja z IGK'2008 dotycząca deferred shadingu:&lt;p&gt;&lt;a href="http://www.sendspace.com/file/b0jyjh"&gt;w formacie Power Pointa 2007&lt;/a&gt; lub &lt;a href="http://www.sendspace.com/file/skep0o"&gt;dla starszych wersji Power Pointa&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Gorąco polecam tę technikę :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-8813128190715821532?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/8813128190715821532/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/04/materiay-z-igk2008.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8813128190715821532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8813128190715821532'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/04/materiay-z-igk2008.html' title='Materiały z IGK&apos;2008'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB7_pI9vOI/AAAAAAAAAjE/SAd5hzN6_lM/s72-c/pres_cover.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-4823319924860065092</id><published>2008-04-07T12:13:00.003+02:00</published><updated>2008-10-11T12:17:25.787+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>SSAO - wersja 0.99</title><content type='html'>Zainspirowany referatami Charibo i Krzyśka K. wygłoszonymi podczas tegorocznego IGK postanowiłem raz jeszcze przyjrzeć się shaderowi odpowiedzialnemu za ten efekt i wyeliminować coś co denerwowało mnie od dawna. Udało się. Poniżej kilka screenów z poprawionej wersji:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB86Pw_XGI/AAAAAAAAAjc/QsoaWI45irI/s1600-h/nGENE_0030.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB86Pw_XGI/AAAAAAAAAjc/QsoaWI45irI/s200/nGENE_0030.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255838105247636578" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB83qt5SPI/AAAAAAAAAjU/Y1uBaZWLfFk/s1600-h/nGENE_0028.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB83qt5SPI/AAAAAAAAAjU/Y1uBaZWLfFk/s200/nGENE_0028.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255838060942805234" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-4823319924860065092?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/4823319924860065092/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/04/ssao-wersja-099.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4823319924860065092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4823319924860065092'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/04/ssao-wersja-099.html' title='SSAO - wersja 0.99'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB86Pw_XGI/AAAAAAAAAjc/QsoaWI45irI/s72-c/nGENE_0030.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-7443139464569528039</id><published>2008-04-06T12:18:00.001+02:00</published><updated>2008-10-11T12:19:32.223+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branża'/><category scheme='http://www.blogger.com/atom/ns#' term='IGK'/><title type='text'>IGK 2008 - już po</title><content type='html'>&lt;p&gt;Tegoroczna edycja konferencji IGK zapowiadała się szczególnie ciekawie. W końcu to już 5., a zatem jubileuoszowa edycja tej imprezy. Tematy referatów prezentowały się nader ciekawie, co tylko podkręcało atmosferę. Trochę niepokoił fakt, że w agendzie poza CD Projekt Red, nie była wymieniona żadna firma z branży. I nie bez przyczyny. CDPR było bowiem jedyną w tym roku firmą, która na imprezie się zaprezentowała z prezentacją. Nie było ani Microsoftu, ani innych firm z naszego podwórka. Co prawda wśród uczestników byli ludzie i z The Farm 51, Techlandu i NoWay Studio (a no i z nowo powstającego studia Intoxicate Nicolas Games, które jest kontynuacją Intoxicate Interactive i będzie odpowiadać za Afterfalla), ale to jakby nie to samo.&lt;/p&gt;&lt;p&gt;Na szczęcie i bez firm daliśmy radę (choć liczę że za rok będzie inaczej). Większość referatów prezentowała, bowiem dosyć wysoki poziom merytoryczny, można się było dowiedzieć z nich wielu ciekawych rzeczy. Według mnie poziom referatów w tym roku był nawet na wyższym poziomie niż w roku ubiegłym. Było co prawda trochę wpadek merytorycznych (jednostka normal-mapująca rozpaliła wyobraźnię słuchaczy), ale ich liczba była stosunkowo niewysoka. Jestem też w miarę zadowolony ze swojego referatu, choć oczywiście jest nadal kilka rzeczy, które muszę poprawić. Liczę tylko, że wystrzegłem się poważniejszych błędów merytorycznych, no i że prezentacja się na coś komuś przyda. Co do swojego referatu udało mi się zamienić kilka zdań z panem Wojciechem Pazdurem z The Farm 51.&lt;/p&gt;&lt;p&gt;Prezentacja człowieka z Wiedźmina i jego kompanów, też wbrew moim obawom była dosyć ciekawa. O ile nie dowiedziałem się z niej niczego nowego, to podobał mi się jej styl. Nie było wcale aż tak dużo chwalenia się (jedynie kilka ogólnie znanych filmików :) ) i ogólnie fajnie.&lt;/p&gt;&lt;p&gt;Innowacją w tym roku był quiz zorganizowany przez Rega w sobotę wieczorem na wzór Programmers Challange z konferencji GDC. Uczestnicy (Charibo, Koshmar, Ayufan, Artpoz oraz kolega którego nicka niestety nie pamiętam) odpowiadali kolejno na testowe pytania dotyczące programowania (od języków programowania, przez programowanie współbieżne, a na grafice 3D kończąc). Mieli też 2 koła ratunkowe (pytanie do publiczności i pół na pół, które jak się okazało miało w przygotowanej aplikacji dosyć ciekawy feature nieco ułatwiający znalezienie tej poprawnej odpowiedzi :) ). Konkurs rozbawił wszystkich do łez również za sprawą niektórych dosyć humorystycznych odpowiedzi (np. pyt: "Logo jakiej firmy znajduje się na okładce książek z serii GPU Gems?" odp: Coca-cola). Ogólnie mówiąc: dzięki Reg! Szkoda tylko, że to nie orgranizatorzy wychodzą z inicjatywami mającymi na celu ożywić tę imprezę.&lt;/p&gt;&lt;p&gt;Później tego samego dnia odbyło się jeszcze głosowanie nad tematem na compo (wygrał temat: &lt;b&gt;EDITED: "Kanały - raj pod ziemią"&lt;/b&gt;) i wyprawa do pokojów, gdzie każdy zespół przez większą część nocy prowadził wytężone prace projektowe swojej produkcji.&lt;/p&gt;&lt;p&gt;Niedziela to tradycyjnie compo właśnie. Niestety ja w tym roku nie wziąłem udziału, czego bardzo żałuję. Mam nadzieję, że powstały fajne gierki, które wkrótce będzie można ściągnąć.&lt;/p&gt;&lt;p&gt;Do zobaczenia za rok!&lt;/p&gt;&lt;p&gt;Mam tylko nadzieję, że firm następnym razem będzie więcej. Może poszukajmy też za granicami naszego państwa?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-7443139464569528039?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/7443139464569528039/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/04/igk-2008-ju-po.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7443139464569528039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7443139464569528039'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/04/igk-2008-ju-po.html' title='IGK 2008 - już po'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3862888867508170208</id><published>2008-03-31T12:20:00.000+02:00</published><updated>2008-10-11T12:20:54.440+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branża'/><category scheme='http://www.blogger.com/atom/ns#' term='IGK'/><title type='text'>IGK - wreszcie jest agenda</title><content type='html'>&lt;p&gt;To co w tym roku zrobili organizatorzy konferencji IGK'2008 można nazwać komedią. Agenda nie była znana do wczoraj, a konferencja zaczyna się już w najbliższy piątek. O ile dla słuchaczy nie ma to aż tak wielkiego znaczenia, tak dla prelegentów już ma olbrzymie - dylemat: robić prezentację, czy nie? Sam o zaakceptowaniu swojego referatu nt. deferred shadingu dowiedziałem się dopiero wczoraj późnym wieczorem... Na szczęście zaryzykowałem i wszystkie potrzebne materiały przygotowałem nieco wcześniej, ale wiem, że niektórzy koledzy nie są jeszcze w pełni gotowi. Szczególnie ciekawie zapowiadają się referaty o optymalizacji pixel shaderów, efektach wolumetrycznych, mechanice płynów, SSAO. Jak widać w tym roku imprezę zdominują silnikowcy (hurra!). Szkoda tylko, że z ekipy Wiedźmina długi referat wygłosi projektant, a nie programista. Może się mylę, ale mam złe przeczucie (poparte innym wykładem człowieka z CDPR odpowiedzialnego za produkcję), że potraktuje to całkowicie od podstaw, z perspektywy graczy.&lt;/p&gt;&lt;p&gt;Niemniej agenda jest dostępna pod następującym &lt;a href="http://igk.ap.siedlce.pl/strona/6/Agenda.html" target="_blank"&gt;adresem&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3862888867508170208?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3862888867508170208/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/03/igk-wreszcie-jest-agenda.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3862888867508170208'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3862888867508170208'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/03/igk-wreszcie-jest-agenda.html' title='IGK - wreszcie jest agenda'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-4304973127710597964</id><published>2008-03-29T12:22:00.002+01:00</published><updated>2008-10-11T12:23:59.122+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branża'/><category scheme='http://www.blogger.com/atom/ns#' term='WMag'/><title type='text'>WMag - ciekawa inicjatywa?</title><content type='html'>&lt;p&gt;Przez ostatnie kilka tygodni nie zaglądałem praktycznie na forum gamedev.pl. A tam dzieje się całkiem sporo. Jednym z ciekawszych tematów jest ten dotyczący &lt;a href="http://forum.gamedev.pl/index.php/topic,6286.0.html" target="_blank"&gt;WMaga&lt;/a&gt; - ciekawej inicjatywy autorstwa k_b polegającej na stworzeniu elektronicznego magazynu powiązanego z Warsztatem. Pomysł jest o tyle ciekawy, że po pierwsze podnosi prestiż naszego community, a po drugie dla osób które nie przeglądają go regularnie jest to potencjalnie doskonałe źródło newsów.&lt;/p&gt;&lt;p&gt;Pierwszy numer opisuje Bitter Glory (co prawda dość lakonicznie i do technicznego opisu miałbym pewne zastrzeżenia), Chocritter (never heard of), prezentuje garść nowych screenów (choć myślę, że ostatnio pojawiły się lepsze) i rozmowę z Regiem.&lt;/p&gt;&lt;p&gt;Wszystko fajnie? Nie bardzo. Pierwszy numer zderzył się z pewną krytyką. Według mnie zasłużoną. Na nieprzychylne słowa szczególnie zasługuje słaby layout, marnej jakości screeny (te z projektów Rega są tak niskiej jakości, że na niektórych nie bardzo wiadomo co jest pokazane). Objętość też mogłaby być nieco większa (zwłaszcza, że stron z tekstem jest raptem 5, z czego 1 to wstęp). Ale nie od razu Kraków zbudowano. Liczę, że k_b nie porzuci tej inicjatywy i dostarczy nam kolejne numery, które będą dużo lepsze.&lt;/p&gt;&lt;p&gt;Na koniec link do &lt;a href="http://www.gamedev.pl/wmag.php"&gt;WMaga&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-4304973127710597964?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/4304973127710597964/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/03/wmag-ciekawa-inicjatywa.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4304973127710597964'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4304973127710597964'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/03/wmag-ciekawa-inicjatywa.html' title='WMag - ciekawa inicjatywa?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-8177621889974652451</id><published>2008-03-03T12:24:00.000+01:00</published><updated>2008-10-11T12:25:36.077+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branża'/><category scheme='http://www.blogger.com/atom/ns#' term='Warsztat'/><title type='text'>Wspomnienia - Warsztat</title><content type='html'>&lt;p&gt;Swego czasu (rok 2001), gdy dostęp do globalnej sieci w tym kraju nie był zbyt powszechny istniało czasopismo o odkrywczej i wiele mówiącej nazwie "Internet". Tam w jednym z numerów (4/2001, z którego to płytkę dziś "odkopałem") znalazłem zrzucony obraz serwisu, który na swój sposób wychował mnie jako programistę gier: Warsztat (ówczesna oficjalna nazwa to Game Design PL, teraz - gamedev.pl). Sam wówczas dopiero stawiałem pierwsze kroki w programowaniu gier (i w programowaniu w ogóle), niemniej ten serwis zmotywował mnie w jakimś stopniu do dalszej nauki. Oficjalnie należę do community od bodaj 2002 lub 2003 roku (z pewnymi przerwami) - wcześniej tylko czytałem.&lt;/p&gt;&lt;p&gt;Charakterystyczny layout, artykuły dla początkujących i zaawansowanych (a wśród nich te odpowiadające na ponadczasowe pytanie: w czym pisać? jaki język wybrać?), recenzje książek, projekty użytkowników (robiły wrażenie), dział "ludzie", no i wreszcie proste forum... Tak... to były czasy ;) Taki styl na Game Design PL utrzymał się jeszcze przez kilka lat.&lt;/p&gt;&lt;p&gt;Patrząc na Warsztat wtedy i Warsztat teraz, widać jak ogromny postęp dokonał się przez te lata. Zarówno dzięki autorom serwisu, jak i naszemu community. Dzisiejsze community to już nie tylko zapaleńcy, ale także spora grupa zawodowych game developerów, łącznie z naprawdę doświadczonymi i zasłużonymi dla polskiego gamedevu (i niektórymi równie kontrowersyjnymi). Ponadto osobiście uważam, że w ostatnim czasie pojawiło się bardzo dużo uzdolnionych ludzi (niektórych projektów na stronie serwisu nie możnaby się wstydzić nawet na gamedev.net).&lt;/p&gt;&lt;p&gt;Niemniej jakby ktoś był zainteresowany to mogę, ten obraz gdzieś wrzucić (choć przypuszczam, że autorzy serwisu będą mieli nawet późniejsze wersje, w których było już więcej ciekawych rzeczy).&lt;/p&gt;&lt;p&gt;Z innej beczki: ciekawi mnie też rozpiętość opinii na temat wrzucanych przeze mnie tu i ówdzie screenów. Rozrzut opinii jest od pozytywnych po skrajnie negatywne. I nie jest to jednorazowe - poza jednym moim starym screenem (z 2006 roku) jest to w zasadzie normalne zjawisko. Szkoda tylko, że ci co ostro krytykują rzadko podają argumenty przez co nie bardzo wiem, co mam zmieniać na przyszłość.&lt;/p&gt;&lt;p&gt;To tyle... wracam do pracy nad silnikiem ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-8177621889974652451?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/8177621889974652451/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/03/wspomnienia-warsztat.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8177621889974652451'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8177621889974652451'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/03/wspomnienia-warsztat.html' title='Wspomnienia - Warsztat'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-5978147627915189742</id><published>2008-02-24T12:26:00.002+01:00</published><updated>2008-10-11T12:28:09.216+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Niebo - wyniki</title><content type='html'>&lt;p&gt;Poniżej prezentuję wyniki jakie udało mi się osiągnąć wykorzystując omawiane ostatnio modele oświetlenia.&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB_j9iBSqI/AAAAAAAAAj0/bHLQezwMmeo/s1600-h/nGENE_0018.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB_j9iBSqI/AAAAAAAAAj0/bHLQezwMmeo/s200/nGENE_0018.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255841020930771618" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB_giz55xI/AAAAAAAAAjs/WST9V0DY-dc/s1600-h/nGENE_0017.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB_giz55xI/AAAAAAAAAjs/WST9V0DY-dc/s200/nGENE_0017.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255840962218419986" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB_dhaZehI/AAAAAAAAAjk/mVPsuVqMMYo/s1600-h/nGENE_0016.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SPB_dhaZehI/AAAAAAAAAjk/mVPsuVqMMYo/s200/nGENE_0016.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255840910303394322" /&gt;&lt;/a&gt;&lt;p&gt;Teraz biorę na warsztat chmury, później roślinność i w końcu clip-mapping. Jednocześnie biorę się solidnie za optymalizację silnika.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-5978147627915189742?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/5978147627915189742/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/02/niebo-wyniki.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5978147627915189742'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5978147627915189742'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/02/niebo-wyniki.html' title='Niebo - wyniki'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fbfW7HvrHa4/SPB_j9iBSqI/AAAAAAAAAj0/bHLQezwMmeo/s72-c/nGENE_0018.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-5743419063666033371</id><published>2008-02-20T12:28:00.001+01:00</published><updated>2008-10-11T12:30:11.737+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Renderowanie nieba</title><content type='html'>&lt;p&gt;Renderowanie nieba i światła rozchodzącego się w atmosferze jest sztuką samą w sobie. Aby realistycznie odwzorować niebo potrzeba uwzględnić dziesiątki najróżniejszych czynników (w tym jak zawsze wszędobylskie cząsteczki, pyły które wszytko komplikują i sprawiają, że światło rozchodzi się nieco inaczej, co doskonale można zaobserwować na przykładzie horyzontu). W związku z tym większość istniejących modeli ma jedynie zastosowanie naukowe. Istnieje jednak kilka takich, które można stosowaś w grach komputerowych, wśród nich dwa szczególnie istotne:&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;Preethama&lt;/li&gt;&lt;li&gt;Hoffmana&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Oba niepozbawione wad (albo mniej eufemistycznie mówiąc - pełne wad). Pierwszy pozwala na uzyskanie w miarę przekonywującego nieba (nielicząc np. wczesnej fazy zachodu słońca, która wygląda nieco sztucznie), ale już kompletnie nie radzi sobie z fenomenem określanym jako &lt;i&gt;aerial perspective&lt;/i&gt; (wbrew pozorom bardzo złożone zjawisko; dla znających angielski, czym to jest - haze, taka jakby mgła, zmiana barwy odległych obiektów). Model Hoffmana z kolei daje bardzo dobre aerial perspective natomiast praktycznie nie nadaje się do renderingu nieba (dużą jego część zajmuje jakaś gwiazda-nadolbrzym... to chyba miało być Słońce?). Cóż rozwiązaniem jest oczywiście połączenie obu tych technik.&lt;/p&gt;&lt;p&gt;Ja jednak zastanawiam się czy gra jest w ogóle warta świeczki. Dość dawno temu zaimplementowałem "scattering" nieba w sposób bazujący że tak powiem jedynie na doświadczeniu. Wykorzystując fotografie nieba i terenu stworzyłem 2-wymiarowa tablicę przeglądową zawierającą kolory nieba (na ich podstawie liczyłem z kolei haze) dla różnych pór dnia i punktów nieba (zenit, horyzont i pośrednie). Nie jest to rozwiązanie idealne (ba! jest od niego dalekie), ale jego koszt był praktycznie zerowy (modyfikacja współrzędnych uv co klatkę to naprawdę niewiele). Porównując to z omawianymi wcześniej modelami, wydaje się, że jest to ciekawa alternatywa (w aerial perspective modelu Preethama przekroczyłem liczbę rejestrów dla modelu SM 3.0)...&lt;/p&gt;&lt;p&gt;Ostatnio mam trochę więcej czasu, więc wprowadzam poprawki w silniku przygotowując go tym samym do upublicznienia. Jeszcze trochę ich zostało, ale jest na pewno bliżej niż dalej.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-5743419063666033371?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/5743419063666033371/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/02/renderowanie-nieba.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5743419063666033371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5743419063666033371'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/02/renderowanie-nieba.html' title='Renderowanie nieba'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3676661191340127856</id><published>2008-01-31T12:30:00.000+01:00</published><updated>2008-10-11T12:32:04.091+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branża'/><category scheme='http://www.blogger.com/atom/ns#' term='gry'/><title type='text'>Game Developers Choice Awards a The Witcher</title><content type='html'>&lt;p&gt;Dziś oddałem swój głos w plebiscycie Game Developers Choice Awards organizowanym już po raz 8 przez serwis poświęcony branży - &lt;a href="http://www.gamasutra.com/" target="_blank"&gt;Gamasutra&lt;/a&gt;. Według autorów tego plebiscytu jest to jedna z najbardziej prestiżowych nagród dla twórców gier...&lt;/p&gt;&lt;p&gt;Ale nie o tym chciałem tak naprawdę pisać. Jako że nie śledziłem wcześniej nominacji zaskoczyła mnie tylko 1 nominacja dla naszego produktu eksportowego, czyli Wiedźmina. Został on nominowany "jedynie" w kategorii Debiut Roku, choć moim skromnym zdaniem zasługuje na nominację jeszcze w kilku innych kategoriach (zwłaszcza Best Writing i Best Game Design, a może również Game of the Year. Czyżby ocenzurowana wersja była aż tak mniej ciekawa ;) ?).&lt;/p&gt;&lt;p&gt;Czy BioShock, Call of Duty 4 czy Mass Effect są rzeczywiście tak dużo lepsze od The Witchera (wszystkie zgarnęły po kilka nominacji - BioShock aż 5)? Nie wydaje mi się. Nawet osławiony Crysis wypadł na tym tle dość blado ("jedynie" 2 nominacje - choć on zasługuje według mnie jeszcze tylko na GOTY). Wszystkie te nominacje dziwią tym bardziej, że plebiscyty graczy w różnych kategoriach wyglądają często jednak inaczej. Czyżby developerzy oceniali gry pod zupełnie innym kątem?&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3676661191340127856?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3676661191340127856/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/01/game-developers-choice-awards-the.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3676661191340127856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3676661191340127856'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/01/game-developers-choice-awards-the.html' title='Game Developers Choice Awards a The Witcher'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6599290869173017051</id><published>2008-01-30T12:43:00.000+01:00</published><updated>2008-10-11T12:44:30.843+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gry'/><title type='text'>C.O.R.E. - klasyczny FPS na Nintendo DS</title><content type='html'>Dziś, po raz pierwszy od dłuższegu czasu odwiedziłem stronę gry &lt;a href="http://www.corethegame.com/" target="_blank"&gt;C.O.R.E.&lt;/a&gt; przeznaczonej na platformę Nintendo DS. Stronka prezentuje się ciekiawie, w tle leci miła dla uszu muzyka, a po screenach widać, że chłopaki wycisnęli z tej niepozornej konsolki więcej niż to możliwe (a w momencie gdy odchodziłem z NoWay Studio gra już wyciskała z konsolki siódme poty). Tak trzymać! Liczę, że gra w końcu ukaże się na półkach i odniesie komercyjny sukces (choć Mario i tego typu "hitów" chyba nie przebije ;) ). Nintendo DS jest ciekawą platformą, na której tego typu gier z pewnością brakuje (podobnie sprawa wygląda ze strategiami i klasycznymi cRPGami).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6599290869173017051?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6599290869173017051/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/01/core-klasyczny-fps-na-nintendo-ds.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6599290869173017051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6599290869173017051'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/01/core-klasyczny-fps-na-nintendo-ds.html' title='C.O.R.E. - klasyczny FPS na Nintendo DS'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3632477700139660468</id><published>2008-01-15T12:46:00.000+01:00</published><updated>2008-10-11T12:47:21.711+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>OpenSource a silnik</title><content type='html'>&lt;p&gt;Coraz poważniej biorę pod uwagę opublikowanie aktualnej wersji mojego frameworka na jakiejś otwartej licencji. Na razie raczej ciżko będzie zmodzić na tym jakąkolwiek grę, bo:&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;zgodnie z zasadą "make it work, make it right, make it fast" optymalizacją się prawie wcale na razie nie przejmuję (czyż Programowanie Ekstremalne nie jest wspaniałe?) :) Dotyczy to zarówno kodu shaderów jak i niektórych rozwiązań w samym silniku. Niemniej chyba w końcu będę musiał do tego przysiąść, bo scenka z kilkoma efektami post-process (w ten sposób są też rozwiązane cząsteczki) i deferred shadingiem potrafi się czasem przycinać nawet na moim nie takim złym sprzęcie (GeForce 8800 GTS, Core 2 DUO 2.33 Ghz i 4GB RAMu).&lt;/li&gt;&lt;li&gt;część rzeczy jest zrobiona na zasadzie wytrychów (co sobie skrzętnie odnotowuję w kodzie). Dość powiedzieć, że rzeczy rozwiązanych inaczej niż docelowo jest w silniku zaznaczonych ponad 100.&lt;/li&gt;&lt;li&gt;w zasadzie na razie skupiłem się na rendererze (jest jeszcze zalążek fizyki opartej o PhysXa) pomijając takie drobiazgi jak dźwięk, obsługa wejścia (jest tylko klawiatura), gui, sieć, skrypty itd.&lt;/li&gt;&lt;/ul&gt;&lt;/p&gt;&lt;p&gt;Z drugiej strony opublikowanie tak wcześnie release'a byłoby w zgodzie z zasadą "make small releases" będącą częścią Extreme Programming. Liczę, że pozwoliłoby mi to na zyskanie pewnego feedbacku ze strony community, co z kolei przyczyniłoby się do polepszenia jakości przyszłych release'ów (chyba tak to się odmieniało Xion?). Dla tych, których ta wiadomość choć trochę ucieszyła jest też trochę gorsza - framework wspiera jedynie karty z minimum SM 3.0 :) (mówiłem już o braku optymalizacji?). Cóż prawda jest taka, że pisząc sobie samemu i to w przerwach miedzy pracą a studiami (albo na odwrót) wielu rzeczy po prostu nie ma czasu zrobić. Najgorsze jest to, że wiele jest dokładnie zaprojektowanych i czeka na lepsze czasy...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3632477700139660468?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3632477700139660468/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/01/opensource-silnik.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3632477700139660468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3632477700139660468'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/01/opensource-silnik.html' title='OpenSource a silnik'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-4507334962874746708</id><published>2008-01-12T12:47:00.001+01:00</published><updated>2008-10-11T12:49:17.234+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='humor'/><title type='text'>Agile - na wesoło</title><content type='html'>&lt;p&gt;Czym jest Agile mam nadzieję wszyscy wiedzą z moich wywodów (arty i wypowiedzi na Warsztacie), to że jestem jego entuzjastą też jest wiadome. Chciałbym znów coś o tym napisać, tym razem jednak na wesoło. W związku z tym kilka linków, które szczególnie mi się podobają:&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=LYlhCGng5Mk" target="_blank"&gt;Developer Abuse&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.infoq.com/articles/agileadvert-winners-2007" target="_blank"&gt;AgileAdvert Video Winners 2007 (szczególnie polecam argumentację szefa High Moon Studios ;) )&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://www.youtube.com/watch?v=6s3mdDYzaKI" target="_blank"&gt;The Traditional Way&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;a href="http://nonsensopedia.wikia.com/wiki/Programowanie_ekstremalne" target="_blank"&gt;Definicja programowania ekstremalnego&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Oczywiście powyższe przerysowują nieco faktyczny stan, jednak nie można im odmówić, że sporo o Agile mówią.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-4507334962874746708?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/4507334962874746708/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/01/agile-na-wesoo.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4507334962874746708'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4507334962874746708'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/01/agile-na-wesoo.html' title='Agile - na wesoło'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-2621749039883297105</id><published>2007-12-27T12:49:00.000+01:00</published><updated>2008-10-11T12:50:31.510+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Teksturowanie terenu</title><content type='html'>&lt;p&gt;Technik teksturowania terenu jest całe zatrzęsienie, ale większość jest odmianą jednej z następujących (lub ich kombinacji):&lt;/p&gt;&lt;p&gt;&lt;ul&gt;&lt;li&gt;diffuse + detail texture - stara i odchodząca dziś w zapomnienie technika polegająca na tym, że cały teren (lub jego fragment) był pokrywany jedną dużą teksturą z pliku graficznego. Aby dobrze to wyglądało tekstura musiałaby mieć olbrzymią rozdzielczość (dużo większą niż było to ówcześnie możliwe). W związku z tym stosowało się teksturę detalu, która była niczym innym jak teksturą szumu.&lt;/li&gt;&lt;li&gt;texture splatting - bardzo popularna w ostatnich kilku latach technika polegająca na tym, że fragmenty terenu pokrywamy jednocześnie kilkoma teksturami, a poziom wymieszania między nimi ustalamy poprzez stosowanie alpha map.&lt;/li&gt;&lt;li&gt;teksturowanie proceduralne - technika o olbrzymim potencjale, coraz częściej stosowana. Przykładowo dla terenu ustalamy kilka tekstur: skał, piasku i trawy. Występowanie danej tekstury można przykładowo uzależnić od wspórzędnej y wierzchołków, od stromizny zbocza, poziomu zerodowania itd. Praktycznie bez ingerencji człowieka (poza doborem parametrów wejściowych) możemy otrzymać zapierający dech w piersiach teren.&lt;/li&gt;&lt;li&gt;clip-mapping - technika autorstwa ludzi z Silicon Graphics, spopularyzowana ostatnio przez Johna Carmacka pod nazwą mega texturing (Quake Wars i Rage). Pozwala na stosowanie wirtualnych tekstur, przez co możliwe jest stosowanie tekstur o rozdzielczości 30k x 30k pikseli, a nawet większych. Sama w sobie jest dość prosta (dla mnie to nic innego jak ewolucja texture atlasów i mip-mappingu), przy czym manualne stworzenie tak wielkich tekstur wydaje się być dość pracochłonne i poza zasięgiem zwykłych śmiertelników. Dlatego najlepiej stosować ją w połączeniu z teksturowaniem proceduralnym (tak zrobił sam Carmack w Tech5). Problemem jest tu na pewno kompresja. Bez niej możemy skończyć z jedną mapą ważącą kilka GB.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;Mi osobiście odpowiada tandem clip-mapping + teksturowanie proceduralne i to tę technikę zamierzam zaimplementować w swoim silniku. Uważam, że stosowanie wytartych już technik (do niedawna byłem zwolennikiem texture-splattingu + teksturowanie proceduralne) jest dziś bez sensu, skoro i tak zakładam, że silnik skończę dopiero za kilka lat.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-2621749039883297105?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/2621749039883297105/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/12/teksturowanie-terenu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2621749039883297105'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2621749039883297105'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/12/teksturowanie-terenu.html' title='Teksturowanie terenu'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-8091999730832543819</id><published>2007-12-23T12:50:00.000+01:00</published><updated>2008-10-11T12:51:55.209+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>Potęga .NET</title><content type='html'>&lt;p&gt;Przez długi czas dzielnie broniłem się przed stosowaniem technologii .NET uważając, że poza C++ niewiele mi potrzeba (zwłaszcza, że .NET demonem prędkości nie jest). Jednak gdy przyszło do pisania poważniejszych narzędzi okienkowych (choćby ostatnio edytor do silnika), stwierdziłem, że średnio nadaje się on do tego celu i zacząłem szukać innego rozwiązania. Tym sposobem zapoznałem się z .NET właśnie. I jestem bardzo zadowolony. Mimo, że połączenie kodu natywnego (.dll z silnika) z zarządzanym (sam edytor) niekoniecznie się Visualowi podoba, wszystko działa bardzo fajnie, a proces tworzenia jest dużo szybszy niż przy użyciu tylko czystego C/C++. Polecam.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-8091999730832543819?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/8091999730832543819/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/12/potga-net.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8091999730832543819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8091999730832543819'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/12/potga-net.html' title='Potęga .NET'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3952878264546492823</id><published>2007-12-01T12:52:00.000+01:00</published><updated>2008-10-11T12:53:08.786+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><title type='text'>nGENE - krótki film</title><content type='html'>&lt;p&gt;Dwa wpisy jednego dnia?! Niemożliwe? A jednak ;) Wrzucam króciutki film z mojego silnika. Widać na nim nadal sporo bugów, ale że i tak byłem zmuszony taki filmik wyprodukować więc go upubliczniam:&lt;/p&gt;&lt;p&gt;&lt;object width="425" height="350"&gt;&lt;param name="movie" value="http://www.youtube.com/v/hu8Bb2Z-zQo"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/hu8Bb2Z-zQo" type="application/x-shockwave-flash" width="425" height="350"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3952878264546492823?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3952878264546492823/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/12/ngene-krtki-film.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3952878264546492823'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3952878264546492823'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/12/ngene-krtki-film.html' title='nGENE - krótki film'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6590575403993190269</id><published>2007-12-01T11:53:00.001+01:00</published><updated>2008-10-11T12:55:47.095+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='artykuł'/><title type='text'>Artykuł o testowaniu - w końcu!</title><content type='html'>Upłynęło sporo czasu od momentu, w którym obiecałem napisać artykuł o testowaniu (dokładnie o unit-testach). W końcu jednak udało mi się go skończyć - jest dostępny &lt;a href="http://www.sendspace.com/file/ycje70"&gt;tutaj&lt;/a&gt;. Mam nadzieję, że jego treść wynagrodzi długi czas oczekiwania (przy okazji dziękuję wszystkim, którzy mnie o ten artykuł nękali - zmotywowaliście mnie do jego ukończenia).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6590575403993190269?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6590575403993190269/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/12/artyku-o-testowaniu-w-kocu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6590575403993190269'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6590575403993190269'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/12/artyku-o-testowaniu-w-kocu.html' title='Artykuł o testowaniu - w końcu!'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3838419004978229787</id><published>2007-11-18T12:56:00.000+01:00</published><updated>2008-10-11T12:57:47.323+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nurkowanie'/><title type='text'>Nowe uprawnienia</title><content type='html'>&lt;p&gt;Co prawda wpis w żaden sposób nie związany z programowaniem... ale co tam ;)&lt;/p&gt;&lt;p&gt;Jestem nienormalny... normalny człowiek przecież nie wstaje w weekend o 5 rano, nie bierze ze sobą 30 kg oprzyrządowania i nie jedzie z tym nad jezioro na nurkowanie (temperatura wody i powietrza są zbliżone - i bardzo niskie...). Wykonaliśmy 2 nurkowania i mogę się pochwalić nowymi uprawnieniami: od dziś mogę nurkować z wykorzystaniem Nitroxu (zwyczajowo mieszanina tlenu i azotu o frakcji tego pierwszego powyżej 0.21) oraz suchego skafandra.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3838419004978229787?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3838419004978229787/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/11/nowe-uprawnienia.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3838419004978229787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3838419004978229787'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/11/nowe-uprawnienia.html' title='Nowe uprawnienia'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-437336336712203174</id><published>2007-11-02T12:57:00.000+01:00</published><updated>2008-10-11T12:59:51.213+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gry'/><title type='text'>Bitter Glory</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bitterglory.com/images/image00.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px;" src="http://bitterglory.com/images/image00.jpg" border="0" alt="" /&gt;&lt;/a&gt;Jakiś czas temu zastanawiałem się jak długo wytrzymam bez wykonywania projektu jakiejkolwiek gry (silnik jest jednak czymś zupełnie odmiennym, choćby ze względu na czas realizacji, który niebezpiecznie zmierza do nieskończoności). Moje wątpliwości zostały ostatnio rozwiane. Anraz (szef projektu &lt;a href="http://www.bitterglory.com/" target="_blank"&gt;Bitter Glory&lt;/a&gt;) zaproponował mi współpracę, na którą przystałem. W związku z tym w najbliższych dniach przejmę obowiązki głównego programisty tego projektu. Projekt ten jest dla mnie o tyle ważny, że będzie kolejnym dużym przedsięwzięciem (po Kemi-Ambaron, Afterfallu i C.O.R.E.), a także reprezentuje jeden z moich ulubionych gatunków gier. Tym razem zamierzam jednak doprowadzić kod do pomyślnego końca (którym będzie opublikowanie gry - nieistotne jest na razie dla mnie w jakiej formie).&lt;p&gt;Zatem do zobaczenia na polach bitew II Wojny Światowej!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-437336336712203174?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/437336336712203174/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/11/bitter-glory.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/437336336712203174'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/437336336712203174'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/11/bitter-glory.html' title='Bitter Glory'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-2997296863634895847</id><published>2007-10-11T13:18:00.000+02:00</published><updated>2008-10-11T13:20:50.623+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><title type='text'>Zmęczenie</title><content type='html'>&lt;p&gt;Niestety w ostatnim czasie zaczął się kolejny rok akademicki (jeszcze tylko 4.5 - na mojej uczelni nauka trwa o semestr dłużej), więc wszystkie moje prace uległy znacznemu spowolnieniu: artykuł o testowaniu jest gotowy w mniej więcej 75% (w zasadzie został jeden rozdział i całkiem liczne poprawki), do silnika dopisałem trochę efektów (wczoraj wziąłem się za Parallax Occlusion Mapping), wprowadziłem w nim wiele poprawek oraz wymyśliłem jak zrobić bez-szwowe przejścia pomiędzy różnymi typami sceny (np. indoor czy outdoor, choć akurat u mnie takie pojęcia nie funkcjonują). Jeśli do tego dodać prace nad Imagine Cup i pracę zawodową... cóż przydałoby się żeby doba miała tak z 48 godzin...&lt;/p&gt;&lt;p&gt;Swoją drogą ostatnio coraz częściej odczuwam pewne zmęczenie programowaniem, często nie sprawia mi to już takiej radości jak to było np. 7 lat temu, gdy pisałem jakieś banalne aplikacje (kalkulator ;) ), ale było to formą niezobowiązującej zabawy. Może po tylu latach spędzonych z kodem jest to normalny objaw (nie wiem jak mają inni), ale jest to jednak z mojej perspektywy dość niepokojące.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_fbfW7HvrHa4/SPCL5ULzrkI/AAAAAAAAAj8/1mOEj5ISvZM/s1600-h/nGENE_0005.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_fbfW7HvrHa4/SPCL5ULzrkI/AAAAAAAAAj8/1mOEj5ISvZM/s200/nGENE_0005.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255854581928406594" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-2997296863634895847?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/2997296863634895847/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/10/zmczenie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2997296863634895847'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2997296863634895847'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/10/zmczenie.html' title='Zmęczenie'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_fbfW7HvrHa4/SPCL5ULzrkI/AAAAAAAAAj8/1mOEj5ISvZM/s72-c/nGENE_0005.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-5718069846978106527</id><published>2007-09-29T13:21:00.001+02:00</published><updated>2008-10-11T13:24:51.806+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Walka o dym</title><content type='html'>&lt;p&gt;Coraz bardziej się przekonuję, że od ustawiania parametrów efektów wolę je programować. Około dwa dni walczyłem z ustawieniem parametrów swojego particle systemu, żeby osiągnąć coś co choć trochę przypominałoby dym + ogień (albo odwrotnie). A to dawałem za dużą prędkość cząsteczek, a to za małą. A to za duże przyśpieszenie na jednej z osi, czy zbyt mały spawn rate... Poniżej prezentuję efekty tych zmagań. Gdyby ktoś chciał mnie zapytać czy jestem zadowolony z rezultatów odpowiedziałbym - nie. Na szczęście jeszcze tech dema nie robię, więc efekty nie muszą być powalające. Ponadto w oczy rzuca się kompletny brak oświetlenia na cząsteczkach (dopiero niedługo wezmę się za ich scattering). Nie mówiąc o tym, że widać iż "scenę" przygotowywał niezbyt uzdolniony artystycznie (i bez poczucia estetyki) programista :) Ale żeby nie było, że ten PS jest beznadziejny - nie jest. Pozwala na bardzo wiele (przez przypadek w trakcie walki z dymem stworzyłem wolumetryczne chmury, które całkiem nieźle wyglądały). Choć do jego skończenia nadal potrzebuję kilku dni (ale to już głównie prace wykończeniowe).&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_fbfW7HvrHa4/SPCMuLGN5fI/AAAAAAAAAkM/p2k4O5otr2Y/s1600-h/nGENE_0002.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_fbfW7HvrHa4/SPCMuLGN5fI/AAAAAAAAAkM/p2k4O5otr2Y/s200/nGENE_0002.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255855490022106610" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fbfW7HvrHa4/SPCMrN6OwcI/AAAAAAAAAkE/d5DM2bYZ-3I/s1600-h/nGENE_0001.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fbfW7HvrHa4/SPCMrN6OwcI/AAAAAAAAAkE/d5DM2bYZ-3I/s200/nGENE_0001.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255855439237530050" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-5718069846978106527?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/5718069846978106527/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/09/walka-o-dym.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5718069846978106527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5718069846978106527'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/09/walka-o-dym.html' title='Walka o dym'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_fbfW7HvrHa4/SPCMuLGN5fI/AAAAAAAAAkM/p2k4O5otr2Y/s72-c/nGENE_0002.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-8387202140988432092</id><published>2007-09-14T13:25:00.000+02:00</published><updated>2008-10-11T13:26:04.146+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='artykuł'/><category scheme='http://www.blogger.com/atom/ns#' term='gry'/><title type='text'>Soft Particles</title><content type='html'>&lt;p&gt;W ostatnim czasie zrobiłem sobie ponad tygodniową przerwę w kodzeniu mego silniczka. W tym czasie szukałem inspiracji w innych grach, głównie GTA: San Andreas - genialna gierka, mimo nienajlepszej dziś grafiki potrafi przykuć na wiele godzin dziennie.&lt;/p&gt;&lt;p&gt;Dziś powróciłem jednak do programowania i kontynuuję pracę nad systemem cząsteczek. Zdecydowałem się na użycie soft particles (później zamierzam napisać jeszcze soft mega-particles) i powoli zbliżam się do końca tego zadania. Denerwujących przekłamań na krawędziach obiektów sceny już nie ma - pozostaje jedynie danie użytkownikowi większej kontroli nad zachowaniem się cząsteczek (np. siły, obrót).&lt;/p&gt;&lt;p&gt;Dla zainteresowanych - art o testowaniu powstaje, staram się jakoś pogodzić wszystkie sugestie (podstawy i bardziej zaawansowane rzeczy). Mam nadzieję że ta hybryda będzie do strawienia.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-8387202140988432092?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/8387202140988432092/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/09/soft-particles.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8387202140988432092'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8387202140988432092'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/09/soft-particles.html' title='Soft Particles'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-8444093461675657627</id><published>2007-08-20T13:26:00.000+02:00</published><updated>2008-10-11T13:27:45.706+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Testy, testy i jeszcze raz testy</title><content type='html'>&lt;p&gt;W ostatnich dniach do swojego mozolnie powstającego silnika dopisałem masę unit-testów. Choć ich stosowaniu ku mojemu zdumieniu są przeciwni nawet &lt;a href="http://forum.gamedev.pl/index.php/topic,4233.15.html" target="_blank"&gt;uznani specjaliści naszej branży&lt;/a&gt;, to nie potrafię zrozumieć - dlaczego? Testy pozwalają na eliminację potencjalnych bugów w bardzo wczesnym stadium. Tym samym czas przeznaczony na ich napisanie zwróci się z nawiązką w fazie alfa czy beta-testów - pozwoli zaoszczędzić czas wielu osób, które zamiast szukać przyczyny często błahego problemu, będą mogły zająć się szlifowaniem elementów gameplayu czy silnika. Sam dzięki testom wyeliminowałem kilka błędów, które choć teoretycznie nie należały do najbardziej druzgocących, z pewnością przyczyniłyby się do powstania trudno wytłumaczalnych artefaktów.&lt;/p&gt;&lt;p&gt;Ponadto za namową kolegi zdecydowałem się wziąć udział w Imagine Cup 2008 w drużynie startującej w kategorii Software Design. A co - trzeba próbować nowych wyzwań ;)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-8444093461675657627?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/8444093461675657627/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/08/testy-testy-i-jeszcze-raz-testy.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8444093461675657627'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/8444093461675657627'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/08/testy-testy-i-jeszcze-raz-testy.html' title='Testy, testy i jeszcze raz testy'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-2247858891400653255</id><published>2007-08-04T13:28:00.000+02:00</published><updated>2008-10-11T13:29:06.149+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Deferred shading - problematyczny?</title><content type='html'>W ostatnim czasie implementowałem w swoim silniku deferred shading (albo lighting, jeśli ktoś woli taką nazwę, albo rendering :) ). Do wczoraj byłem święcie przekonany, że jest to powszechnie stosowana technika, jednak &lt;a href="http://forum.gamedev.pl/index.php/topic,4184.0.html" target="_blank"&gt;wątek&lt;/a&gt; zachwiał moją wiarę w tę tezę. Prawda, że momentami może być problematyczny (zasobożerność, fill-rate bound, problematyczny AA), jednak nadal sądzę, że oferuje on dużo dobrego jeśli tylko dać mu szansę (wydajność i jakość oświetlenia, nie burzy fazy post-processingu). Swoją drogą coraz częciej podejrzewam, że Reg celowo rozpoczyna takie tematy, byle podnieść poziom dyskusji na forum ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-2247858891400653255?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/2247858891400653255/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/08/deferred-shading-problematyczny.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2247858891400653255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2247858891400653255'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/08/deferred-shading-problematyczny.html' title='Deferred shading - problematyczny?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-173119852200036779</id><published>2007-07-20T13:29:00.000+02:00</published><updated>2008-10-11T13:30:25.003+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><title type='text'>Magia refaktoringu...</title><content type='html'>Każdy chyba programista wie, że w niektórych sytuacjach refaktoring jest konieczny. Mimo to bardzo wiele osób boi się go jak ognia, wykorzystując każdą sytuację, aby go nie wykonać. Po co zmieniać kod, który działa? Nieważne jak (a może tylko dla pewnych określonych danych?), ale działa... A dzięki refaktoringowi nasz kod nie dość, że staje się bardziej czytelny, to z dużym prawdopodobieństwem usuniemy z niego przynajmniej część bugów. Ja jakiś czas temu tego typu obaw się wyzbyłem, dzięki czemu pewien fragment swojego silnika refaktoryzuję 3. raz w ciągu kilku ostatnich tygodni. Cóż - patrząc na road-mapę będę to przerabiać jeszcze conajmniej 2 razy ;)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-173119852200036779?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/173119852200036779/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/07/magia-refaktoringu.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/173119852200036779'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/173119852200036779'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/07/magia-refaktoringu.html' title='Magia refaktoringu...'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-6726240769964230062</id><published>2007-07-19T17:12:00.001+02:00</published><updated>2008-10-11T13:38:38.446+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nGENE'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><title type='text'>Engine</title><content type='html'>&lt;p&gt;Tworzona przeze mnie w ostatnich miesiącach biblioteka powoli nabiera cech, które wkrótce pozwolą ją nazwać pełnoprawnym enginem (liczę, że jeszcze w tym roku ;) )... nie, nie rendererem - jest to znacznie więcej. Screenów oczywiście jeszcze brak (bo kogo obchodzi kilka testowych brył z przypisanymi pierwszymi lepszymi teksturami?) i pewnie szybko się to nie zmieni.&lt;/p&gt;&lt;p&gt;W ostatnich tygodniach podjąłem pracę w webdevie (programuję w Ruby on Rails) i muszę przyznać, że spodobało mi się to na tyle, że czasem zapominam sobie pokodzić grafiki. No, ale język (Ruby) i framework (Rails) sprawiają, że development jest niezwykle prosty, efektywny, a przez to przyjemny. Dużo przyjemniejszy niż w C++, który pozostaje coraz bardziej w tyle za nowoczesnymi językami programowania, co ta praca mi uzmysłowiła.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-6726240769964230062?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/6726240769964230062/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/07/engine.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6726240769964230062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/6726240769964230062'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/07/engine.html' title='Engine'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-9023546500542436314</id><published>2007-06-18T17:11:00.001+02:00</published><updated>2008-10-11T13:38:26.319+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='inne'/><category scheme='http://www.blogger.com/atom/ns#' term='Warsztat'/><title type='text'>Pracowite wakacje</title><content type='html'>&lt;p&gt;Tegoroczne wakacje zapowiadają się na jeszcze bardziej pracowite niż zeszłoroczne, kiedy to ostro pracowałem nad Afterfallem i designem swego nowego silnika. W tym roku poza regularną pracą mam zamiar dalej pracować nad implementacją swojego engine'a. Do tego dochodzi całowakacyjne &lt;a href="http://www.gamedev.pl/compo/" target="_blank"&gt;Compo&lt;/a&gt; - niekomercyjny konkurs dla programistów gier skupionych wokół &lt;a href="http://www.gamedev.pl/" target="_blank"&gt;Warsztatu&lt;/a&gt;. Konkurs startuje już na dniach, a ja ciągle nie mogę się zdecydować jaki projekt wykonam. Mam nadzieję, że wybiorę ten właściwy.&lt;/p&gt;&lt;p&gt;Ostatnio zacząłem też pisać kolejny tekst. Ten jako pierwszy będzie dotyczył tego, co lubię najbardziej - programowania grafiki. Omówię w nim technikę znaną jako shell and fin texturing powszechnie wykorzystywaną do tworzenia futra, ale którą z powodzeniem można też wykorzystać np. do stworzenia realistycznie wyglądającej trawy.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-9023546500542436314?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/9023546500542436314/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/06/pracowite-wakacje.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/9023546500542436314'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/9023546500542436314'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/06/pracowite-wakacje.html' title='Pracowite wakacje'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-4035245762624143876</id><published>2007-06-10T17:09:00.001+02:00</published><updated>2008-10-11T13:38:11.436+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='agile'/><category scheme='http://www.blogger.com/atom/ns#' term='artykuł'/><title type='text'>Artykuł o programowaniu ekstremalnym</title><content type='html'>&lt;p&gt;Czym jest programowanie ekstremalne, jakie płyną z niego korzyści i jak je stosować przeczytasz w finalnej wersji mojego &lt;a href="http://www.sendspace.com/file/n3m040"&gt;artykułu&lt;/a&gt; dotyczącego tej metodologii.&lt;/p&gt;&lt;p&gt;Ponadto sesja, więc czasu na kodzenie zbyt wiele nie mam, ale wkrótce sobie odbiję.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-4035245762624143876?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/4035245762624143876/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/06/artyku-o-programowaniu-ekstremalnym.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4035245762624143876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/4035245762624143876'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/06/artyku-o-programowaniu-ekstremalnym.html' title='Artykuł o programowaniu ekstremalnym'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-5416476881599765797</id><published>2007-06-02T17:07:00.001+02:00</published><updated>2008-10-11T13:37:41.130+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='branża'/><title type='text'>Koniec z gamedevem?</title><content type='html'>&lt;p&gt;Ten tydzień przyniósł dość zasadniczą zmianę w moim życiu i karierze programistycznej. Wraz z 1. czerwca przestałem pracować jako programista gier w QubicGames (a raczej w formowanym podstudiu o nieco odmiennej nazwie). Co więcej był to mój świadomy wybór, umotywowany powodami, których tu nie ma na razie sensu zdradzać. Wiem, że dla wielu osób praca w branży to już cel sam w sobie. Tym bardziej dziwić może je moje postępowanie.&lt;/p&gt;&lt;p&gt;Moje odejście z firmy nie oznacza oczywiście, że zrywam z gamedevem całkowicie. Nie. Nadal z pewnością będę pisał jakieś amatorskie gry i rozwijał swój silnik z zamysłem powrotu do branży w tej czy innej roli w przyszłości.&lt;/p&gt;&lt;p&gt;Z tego miejsca chciałbym również podziękować za wspópracę całej ekipie QC, w tym przede wszystkim osobom, z którymi pracowałem od roku - najpierw nad Afterfallem, a później w QubicGames właśnie. Była to fajna zabawa i liczę, że kiedyś jeszcze się w branży zetkniemy (ale mam nadzieję, że nie będę wówczas gameplayowcem ;) ).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-5416476881599765797?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/5416476881599765797/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/06/koniec-z-gamedevem.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5416476881599765797'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/5416476881599765797'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/06/koniec-z-gamedevem.html' title='Koniec z gamedevem?'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-7233022689778965628</id><published>2007-05-26T16:59:00.001+02:00</published><updated>2008-10-11T13:37:30.851+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='efekty'/><title type='text'>Depth of Field</title><content type='html'>&lt;p&gt;Ostatnio wiele czynników sprawiło, że nie miałem zbyt wiele czasu na zajmowanie się stroną, a nawet na programowanie swego silnika (nie mówiąc o dokończeniu arta). Nie oznacza to jednak, że przez te dni nie powstało nic nowego - biblioteka materiałów i obsługa shaderów w silniku są już niemal ukończone.&lt;/p&gt;&lt;p&gt;Ponadto w ostatnich dniach napisałem efekt, do którego zakodowania przymierzałem się od dawna - Depth of Field. Prosty, a zwiększa wrażenia wizualne i skupia uwagę na konkretnym elemencie sceny. Piękno mojej implementacji polega na tym, że jest wykonywana całkowicie jako efekt post-process (w odróżnieniu od większości implementacji wykonujących ten efekt per object/surface), dzięki czemu jego wydajność jest bardzo duża. Poniżej załączam screen:&lt;/p&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/SO9vKdybRmI/AAAAAAAAAfg/FlOydcd1zhI/s1600-h/DoF.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/SO9vKdybRmI/AAAAAAAAAfg/FlOydcd1zhI/s200/DoF.jpg" border="0" alt="" id="BLOGGER_PHOTO_ID_5255541515750164066" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-7233022689778965628?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/7233022689778965628/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/depth-of-field.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7233022689778965628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7233022689778965628'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/10/depth-of-field.html' title='Depth of Field'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/SO9vKdybRmI/AAAAAAAAAfg/FlOydcd1zhI/s72-c/DoF.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-9031807214833250747</id><published>2007-05-04T16:55:00.002+02:00</published><updated>2009-03-02T14:58:46.985+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='artykuł'/><category scheme='http://www.blogger.com/atom/ns#' term='strona'/><title type='text'>Dalsze poprawki i nowy artykuł</title><content type='html'>&lt;p&gt;W dalszym ciągu pracuję w ostatnich dniach nad kodem strony. Jako, że niezbyt się na tym znam, idzie średnio. Grunt, że jakoś działa ;)&lt;/p&gt;&lt;p&gt;W wolnej chwili zacząłem też pisać nowy artykuł, dotyczący programowania ekstremalnego. Jego wstępną wersję można znaleźć &lt;a href="http://www.sendspace.com/file/n3m040"&gt;tutaj&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Jednak największym osiągnieciem tego długiego weekendu jest dodanie serializacji obiektów do tworzonego przeze mnie silnika, a także rozpoczęcie prac nad edytorem typu WYSIWYG do niego.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-9031807214833250747?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/9031807214833250747/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/05/dalsze-poprawki-i-nowy-artyku.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/9031807214833250747'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/9031807214833250747'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/05/dalsze-poprawki-i-nowy-artyku.html' title='Dalsze poprawki i nowy artykuł'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-7246827248040754878</id><published>2007-04-22T16:53:00.003+02:00</published><updated>2009-03-02T14:57:18.515+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='strona'/><title type='text'>Poprawki</title><content type='html'>W kodzie strony poprawiłem sporo mniejszych bugów. Ponadto poprawiłem kilka rzeczy na stronie, które podniosły jej estetykę.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-7246827248040754878?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/7246827248040754878/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2007/04/poprawki.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7246827248040754878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/7246827248040754878'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2007/04/poprawki.html' title='Poprawki'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-3971643367975508614</id><published>2007-04-18T16:47:00.002+02:00</published><updated>2009-03-02T14:59:06.582+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='strona'/><title type='text'>Start mojej strony</title><content type='html'>&lt;p&gt;Po wielu nieudanych próbach... w końcu jest - moja strona domowa. Na razie nie ma tu wiele materiałów, ale postaram się sukcesywnie zwiększać ich liczbę. Ponadto wiele rzeczy wymaga poprawienia.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-3971643367975508614?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/3971643367975508614/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2008/04/start-mojej-strony.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3971643367975508614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/3971643367975508614'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2008/04/start-mojej-strony.html' title='Start mojej strony'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-3069641072656922618.post-2697189580562812895</id><published>2001-01-01T20:24:00.012+01:00</published><updated>2009-06-01T13:12:55.544+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='nurkowanie'/><title type='text'>Nurkowanie</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fbfW7HvrHa4/ShqX76VCdeI/AAAAAAAAA70/6lxO1D--Q-k/s1600-h/JA.JPG"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 300px; height: 400px;" src="http://2.bp.blogspot.com/_fbfW7HvrHa4/ShqX76VCdeI/AAAAAAAAA70/6lxO1D--Q-k/s400/JA.JPG" alt="" id="BLOGGER_PHOTO_ID_5339747363726718434" border="0" /&gt;&lt;/a&gt;Moja przygoda z nurkowaniem rozpoczęła się niespełna 4 lata temu, ale więcej nurkować zacząłem dopiero w ostatnich dwóch latach (zasługa w tym bardzo fajnej ekipy).&lt;br /&gt;&lt;p&gt;Trochę danych:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Organizacja macierzysta: KDP CMAS/TDI&lt;/li&gt;&lt;li&gt;Aktualne uprawnienia:&lt;/li&gt;&lt;li&gt;Advanced Nitrox TDI&lt;/li&gt;&lt;li&gt;Decompression Procedures TDI&lt;br /&gt;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;KDP CMAS P2 (odpowiednik AOWD + Deep + Rescue + Nawigacja z innych federacji)&lt;/li&gt;&lt;li&gt;PL1 - płetwonurek podlodowy&lt;/li&gt;&lt;li&gt;PN1 - płetwonurek nitroksowy&lt;/li&gt;&lt;li&gt;WM1 - płetwonurek wrakowy&lt;/li&gt;&lt;li&gt;SS1 - płetwonurek uprawniony do nurkowań w suchych skafandrach&lt;/li&gt;&lt;li&gt;Ratownik EFR (pierwszej i dalszej pomocy przedmedycznej)&lt;/li&gt;&lt;li&gt;Zaawansowany ratownik tlenowy DAN&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Ulubione miejsce nurkowe: Bałtyk&lt;/li&gt;&lt;li&gt;Ulubione nurkowisko: wrak Thistlegorm, Egipt&lt;/li&gt;&lt;li&gt;Ulubiona forma nurkowania: nurkowania wrakowe&lt;/li&gt;&lt;li&gt;Wykonanych nurkowań: ok. 130&lt;/li&gt;&lt;li&gt;Członek &lt;a href="http://swa.org.pl/index.php"&gt;Safe Water Association&lt;/a&gt; (SWA)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;O zdjęciu: zdjęcie wykonane po skończonym nurkowaniu w zalanym forcie w pobliżu Krakowa w ramach warsztatów jaskiniowych wg szkoły francuskiej, które prowadzone były przez Michała "Majkiego" Winka z XDiversTeam&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Aktualnie staram się podnieść swoje kwalifikacje nurkowe nieco powyżej standardów typowo rekreacyjnych. Zobaczymy jak to wyjdzie :)&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/3069641072656922618-2697189580562812895?l=wojtektoman.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://wojtektoman.blogspot.com/feeds/2697189580562812895/comments/default' title='Komentarze do posta'/><link rel='replies' type='text/html' href='http://wojtektoman.blogspot.com/2001/01/nurkowanie.html#comment-form' title='Komentarze (0)'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2697189580562812895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/3069641072656922618/posts/default/2697189580562812895'/><link rel='alternate' type='text/html' href='http://wojtektoman.blogspot.com/2001/01/nurkowanie.html' title='Nurkowanie'/><author><name>Wojtek</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='29' height='32' src='http://4.bp.blogspot.com/_fbfW7HvrHa4/SsdMvzPvV0I/AAAAAAAAB3w/QYGKYLVCRt4/S220/me.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_fbfW7HvrHa4/ShqX76VCdeI/AAAAAAAAA70/6lxO1D--Q-k/s72-c/JA.JPG' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
