Azarien
2017-06-17 23:38

Kupiłem na GOG-u Unreala (pierwszą część z 1998 roku).
Zaintrygowało mnie charakterystyczne filtrowanie tekstur w trybie renderingu software'owego. Programowo robiło się raczej tylko nearest-neighbour, czyli pikselozę, a tu jakiś dithering.

Pogóglałem cóż to jest za algorytm, znalazłem posta jednego z twórców gry. Napisałem shader dla OpenGL który symuluje ten efekt.

Gdyby kogoś interesowało... ;-)

uniform sampler2D uTexture;
uniform vec2 uTexelSize;
uniform vec2 uUnrealCoords[4];
 
void main()
{
    vec2 m = mod(gl_FragCoord.xy - 0.5, 2.0);
    int idx = int(m.x + 2.0 * m.y);
    gl_FragColor = texture2D(uTexture, gl_TexCoord[0].xy + uUnrealCoords[idx] * uTexelSize);
}

gdzie:

  • uTexelSize jest odwrotnością rozmiaru tekstury {1.0 / w, 1.0 / h}

  • uUnrealCoords wynosi

    {{0.25f, 0.00f}, {0.50f, 0.75f}, {0.75f, 0.50f}, {0.00f, 0.25f}}
  • tekstura ma MIN_FILTER i MAG_FILTER na GL_NEAREST.

Działa pod OpenGL 2.1.

karolinaa

It's good algorithm! Good and it suprised me!

vpiotr

Ale konkretnie o jaki efekt chodzi?

grzesiek51114

Właśnie to mnie najbardziej wkurzało w trybie software, grając w Unreal'a. Na szczęście było Voodoo czy tam już pierwszy GeForce, nie pamiętam ;)

Azarien

@vpiotr: weź sobie powiększ obrazek.widzi „kaszkę” (dithering?) @grzesiek51114: mnie tam się podoba, ale dobrze to wygląda dopiero w wysokich rozdzielczościach, o jakich w 1998 r. można było sobie pomarzyć. w 640x480 pewnie wolałbym piksele. a co do grafiki akcelerowanej - filtrowanie biliniowe przy tak niskich rozdzielczościach tekstur wygląda słaaabo. w grach z tej epoki (Quake, Quake II, pierwsze Tomb Raidery) wolę nearest neighbour niż symulację dalekowzroczności.

grzesiek51114

@Azarien: prawda ale w 1998 roku oczu oderwać nie mogłem od Quake'a 2. Efekty świetlne, tekstury, okrągłe czerwone kółeczka jako imitacja krwi... Pamiętam jak wszystkie magazyny o grach piały z zachwytu nad nowym Quakiem... i w sumie słusznie. To samo dotyczyło Incoming. Za to Tomb Raider 2 już nie robił takiego wrażenia, choć przyznam się, że to moja ulubiona część. Konkludując: wtedy sto razy bardziej wolałem grafikę akcelerowaną. Odkąd miałem Voodoo tryb software mógł dla mnie nie istnieć. :)

Dzisiaj: fakt... tekstury gier, które wtedy wyglądały świetnie dzisiaj są strasznie rozmazane, ponieważ wtedy nikt nie myślał o rozdzielczościach rzędu FullHD. Starczy dziś popatrzeć choćby na takiego NFS'a III. Na nowoczesnym sprzęcie jest zwyczajnie brzydki ale na retro sprzęcie w rozdziałce 1024x768 na monitorze CRT na pewno przeżyłby drugą młodość. Wiem, bo doskonale pamiętam te czasy i nie dziwię się, że niektóre produkcje w trybie software mogą dzisiaj wyglądać "ostrzej" niż wtedy :)

PS: Nawiasem mówiąc, za Unrealem specjalnie nie przepadałem. Nie podobał mi się model strzelania. Takie to wszystko było... odrealnione :) Poza tym w ogóle nie było czuć, że te pukawki mają jakąkolwiek moc. Ot strzelało się i wróg padał. Wolałem Quake'a 2, bo choć gra była starsza technologicznie to jednak broń była mięsista, jak się należy.

vpiotr

Quake 2 rządzi. Mimo że wygląda jak dzisiejszy Unreal pre-alpha (czy tam technical preview) to miał fajne dźwięki.

axelbest

Potwierdzam Q2 rządzi, dla mnie rządzi zwłaszcza pod kątem singla. Przeszedłem go na każdy możliwy sposób (Reckoning, Ground Zero, Zaero, Juggernaut). Masa wspomnień, nieśmiertelna mapka q2dm1. Mody, patche, mapki - to coś co dostawaliśmy za darmo od innych fanów/twórców - nikt nie myślał o tym by dać DLC z 4 mapkami za min. 15$. Dobre czasy :)

Azarien

@grzesiek51114: to prawda, w wysokich rozdzielczościach stare gry nie wyglądają najlepiej właśnie przez słabą rozdzielczość tekstur oraz małą złożoność modeli. Tomb Raider 1 na emulowanym Voodoo i rozdzielczości HD wygląda osobliwie ;-) na szczęście można i dziś odpalić grę w 640x480, tylko trzeba dopilnować by na panoramicznym monitorze nie psuło proporcji.

grzesiek51114

Tak mi się przypomniało jeszcze prawie u progu ery akceleratorów: Carmageddon i najbardziej wkurzający bonus czyli: Bouncey Bouncey! :D