Entries for tag "rendering", ordered from most recent. Entry count: 187.
# Swobodne drzewo ósemkowe
Tue
07
Aug 2007
Technik podziału przestrzeni jest wiele. Ostatecznie chyba zdecyduję się na drzewo ósemkowe (Octree) + Frustum Culling + Occlusion Query. To powinno wystarczyć do względnie szybkiego działania i być proste do napisania - dużo prostsze niż portale, które planowałem wcześniej.
W "Perełkach programowania gier", tom 1, znajduje się artykuł poświęcony swobodnym drzewom ósemkowym. To dobry sposób na pozbycie się problemu "lepkich płaszczyzn" i tym samym polepszenie działania całej techniki. Polega na rozszerzeniu obszarów obejmowanych przez poszczególne węzły drzewa tak, że nachodzą na siebie. To nachodzenie nie stanowi problemu, a dzięki niemu obiekty przecinające środek węzła mają szanse trafić w całości do jego podwęzłów.
Moją uwagę zwrócił w artykule jeden szczegół. Nie rozumiem otóż, po co zwiększać obszar w kierunku wystającym poza obszar węzła nadrzędnego? Przecież obiekty, które do niego trafiły i tak zawierają się w obszarze węzła nadrzędnego. Dlatego ja zrobiłem to trochę inaczej. Czyżbym się gdzieś pomylił w swoim myśleniu?

Comments | #rendering #algorithms Share
# Układanie map
Mon
06
Aug 2007
Każdy, kto planuje wyświetlać mapy Indoor (wnętrza budynków czy jaskiń) staje przed decyzją, jak układać te mapy. Przeszukując fora można dojść do wniosku, że problem jest powszechny. Z tego, co udało mi się ustalić, wyjścia są takie:
# Czy może być w pełni dynamiczne oświetlenie Indoor?
Fri
03
Aug 2007
Doszedłem ostatnio do wniosku, że implementacja oświetlenia nie jest taka prosta, jak się spodziewałem. Do przestrzeni otwartych (Outdoor) jedno światło kierunkowe wystarczy, ale nie bardzo wyobrażam sobie, jak można oświetlić wraz z cieniami mapę Indoor - w której jest przecież zawsze wiele świateł - dynamicznie i żeby to nadal działało ze znośną predkością. Nawet jeśli nie dynamicznie (wcale mi na tym nie zależy), to jak? Nie interesowałem się dotychczas dokładnie Lightmapami. Kto może pomóc i udzielić jakiejś odpowiedzi, zapraszam do mojego wątku na forum.
# Inna grafika
Mon
30
Jul 2007
Czasami myślę sobie, że programowanie renderowania grafiki innej niż tradycyjne wyświetlanie geometrii mapy Indoor czy siatki terenu Outdoor z animowanymi postaciami i skyboksem nieba - na przykład kosmicznej jak w grze Eve Online czy jakiejś zupełnie odjechanej, jak w filmie Tron, też byłoby ciekawe, a przy tym dużo prostsze. Cóż... na coś trzeba się zdecydować.
Comments | #graphics #rendering Share
# Szum perlina
Sat
28
Jul 2007
Fajnie mieć pod ręką proste funkcje takie jak:
float PerlinNoise3(float x, float y, float z);
generujące szum wynaleziony przez Kena Perlina. Wygląda na to, że tak naprawdę formalnie szum perlina to ciągła funkcja pseudolosowa jednej lub wielu zmiennych o "częstotliwości" równej np. 1, a to co nazywamy zazwyczaj szumem perlina - ta funkcja używana m.in. do generowania chmur albo mapy wysokości terenu, posiadająca oktawy - nazywa się Fractional Brownian Motion. Mniejsza o nazwy - ja od dzisiaj w swojej bibliotece mam obie :) Mowa oczywiście o bibliotece CommonLib.

Comments | #rendering #math Share
# Renderowanie ducha
Sat
28
Jul 2007
Przeglądając różne teksty nie mogę oprzeć się pokusie czytania o różnych ciekawych rzeczach, które akurat napotkam. Dzięki jednej z nich wiem już, jak renderować duchy :) Pomocny jest tu tzw. Fresnel Term - prosty wzór, którego jednak nie nauczają razem ze wzorami Lamberta, Phonga czy Blinna na oświetlenie Diffuse i Specular. Chodzi o "podświetlanie" powierzchni tym bardziej, im bardziej są zwrócone prostopadle do kamery. Załatwia to oczywiście iloczyn skalarny z wektorem normalnym. Ten wzór nadaje się jako dodatek do normalnego oświetlenia, ale można go też wykorzystać tak jak tutaj - wyłączyć Backface Culling i zapis do Z-bufora, ustawić addytywny alfa-blending i oto jest skodzony na szybko duch słonia:
# Kwestia shaderów
Fri
27
Jul 2007
W kwestii shaderów używanych do rysowania wszelkich obiektów (na czele ze zwykłymi, nieprzezroczystymi powierzchniami o określonych parametrach materiału) można wymyślić trzy rozwiązania różniące się trudnością:
1. Sposób najprostszy to stały, napisany wcześniej zestaw shaderów. Każdy z nich byłby uniwersalny w jakimś zakresie. Dostępny w nowych kartach Static Branching i Dynamic Branching pozwalają włączać i wyłączać poszczególne fragmenty, aczkolwiek mnie i tak szkoda byłoby marnować instrukcje na sprawdzanie warunku zamiast wygenerować osobny shader bez danego fragmentu.
2. Metoda subtraktywna: Można napisać jeden albo kilka wielkich shaderów posiadających wszystkie potrzebne możliwości, w których źródle znajdą się warunki typu if (MAKRO == 1) albo też #if (MAKRO == 1). Taki kod będzie kompilowany na żądanie z odpowiednimi makrami preprocesora jako konkretny shader. Tak mam zrobione obecnie.
3. Metoda addytywna, najtrudniejsza: Przed kompilacją składać kod shadera z fragmentów w postaci definiowanych jakoś w tekstowy albo graficzny sposób bloczków, których wyjścia jednych łączy się z wejściami innych.
Nie wiem, który sposób będzie najlepszy.
# Bezszwowe tekstury i High Pass Filter
Mon
23
Jul 2007
Nauka robienia bezszwowych tekstur - dwa ważne kroki. Pierwszy to transformacja Offset, którą w GIMP-ie znajdziesz w menu Layer > Transform > Offset. Dzięki niej można pracować nad złączeniem na krawędziach, a potem wrócić do początkowego przesunięcia.
Drugi to filtr górnoprzepustowy - High Pass Filter. Co on robi? Świetny artykuł na jego temat jest tu: The Power of the High Pass Filter. GIMP nie ma tego filtru, ale jego efekt można zrobić tak: