Skocz do zawartości
Ice Cube

texture_set_interpolation

Rekomendowane odpowiedzi

Cześć

załączyłem w mojej grze taką fajną opcje by poznikały pixele

texture_set_interpolation(true)

 

i nad niektórymi obiektami pojawiły mi sie kreski takie jak na załączonym obrazku ;/

gdy wchodze w edycje textury nic tam nie ma,a w grze jednak po zalączeniu tej opcji sie pojawia ta kreska.

 

i druga sprawa do czego służy texture_set_blending ?

nie wiem co to blender -sory :D

 

 

 skrzynia.png.52104e339053d30fee9f022443fcc0ba.png

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A zrób tą texturę o jeden pixel wyższą i wtedy przenieś o jeden w górę cały obrazek tak by dolne pixele nie dotykały krawędzi obrazka

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
11 minut temu, I am Lord napisał:

A zrób tą texturę o jeden pixel wyższą i wtedy przenieś o jeden w górę cały obrazek tak by dolne pixele nie dotykały krawędzi obrazka

 

no dobra to działa :) ,kreska zniknęła

 

pozostaje jeszcze kwestia podłogi,która sie składa z 4 textur leżących obok siebie i tworzących kwadrat,na połączeniach powstały też takie jakby kreski

screenshot100.png

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Zaznaczyłeś "use as 3d texture"? W gms2 chyba można było zaznaczyć, żeby na atlasie się po 1 pikselu wrapowaly obrazki na krawędziach aby z tym walczyć, nie wiem czy w jedynce też. Ten pasek to jest rozmyta sąsiadującą grafika.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
4 godziny temu, gnysek napisał:

Zaznaczyłeś "use as 3d texture"? W gms2 chyba można było zaznaczyć, żeby na atlasie się po 1 pikselu wrapowaly obrazki na krawędziach aby z tym walczyć, nie wiem czy w jedynce też. Ten pasek to jest rozmyta sąsiadującą grafika.

LOL Używam gm 8.0 :P (już niedługo zmienie)

próbowałem wygumować 1 pixel dookoła textur.efekt-jeszcze bardziej widoczne linie ;/

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
4 godziny temu, I am Lord napisał:

A to jakich rozmiarów jest ta textura?

2048/2048

to jest cała podłoga w grze 4 pliki

 

niestety gm nie przyjmuje większych plików dlatego rozbiłem to na 4

i textury są    draw_floor

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

GM8 chyba też miał "use as 3D texture" ale zdaje się że musisz ją w drzewku backgrounds umieścić 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
45 minut temu, I am Lord napisał:

GM8 chyba też miał "use as 3D texture" ale zdaje się że musisz ją w drzewku backgrounds umieścić 

a gdzie to dżewko ?:o

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
5 godzin temu, I am Lord napisał:

No drzewko folderów jak kto gdzie -.-

Sprites

Backgrounds

Sounds

Scripts itd

no niestety nigdzie nie ma use as 3D texture ;/

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A zobacz czy oprócz włączenia iterpolacji, włączenie jeszcze texture_set_repeat(true) cos zmienia

 

a i wyłącz też "smooth edges" w ustawieniach sprita czy tam backgorunda

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Bo to 8.0 (robione przez Marka) a nie 8.1 (robione przez YoYoGames).

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
46 minut temu, I am Lord napisał:

A zobacz czy oprócz włączenia iterpolacji, włączenie jeszcze texture_set_repeat(true) cos zmienia

 

a i wyłącz też "smooth edges" w ustawieniach sprita czy tam backgorunda

tylko takie opcje są dostępne w sprite i background

 

blalbalbal.png

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A bo ty nie masz włączonego advanced mode, to sobie włącz gdzieś w opcjach czy pod Files to było. Już nie pamiętam

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
1 minutę temu, I am Lord napisał:

A bo ty nie masz włączonego advanced mode, to sobie włącz gdzieś w opcjach czy pod Files to było. Już nie pamiętam

no właśnie mam włączone advanced ,i są takie opcje jak powyżej na zdięciu.

texture_set_repeat(true) też nie daje żadnego efektu ;/

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dokładnie, jak używasz programu który ma 9 lat, to się nie dziw, że są problemy. W ogóle działają gry z niego na nowych Windowsach? Przypominam, że już od pół roku wsparcia nie ma nawet GM Studio 1.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

pokombinuje jeszcze.

ta gra którą robie śmiga na win 10 bez problemu

 

p.s.

gm studio 1 lub 2 jest darmowe? ,moge jakoś pobrać?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Cześć, problem z interpolacją tekstur jest jak najbardziej "normalną" odpowiedzią od karty graficznej, generalnie ten problem występuje od zawsze, odkąd istnieje interpolacja sampli. Jednym z rozwiązań jest wyłączenie powtarzalności tekstur np. w OpenGL jest to ustawienie w teksturze flagi GL_TEXTURE_WRAP_S/T na GL_CLAMP_TO_EDGE, jednak GameMaker nie udostępnia takowych funkcji ;) 

 

Przykładowe ustawienia wrap-owania tekstur w OpenGL (opcje te występują również w DirectX);

c3_clamping.png

 

W Twoim przypadku GameMaker prawdopodobnie ustawia teksturom odpowiednik GL_REPEAT w DirectX, dlatego pojawiają Ci się te "artefakty" na krańcach tekstury. 

 

Dodatkowo każda tekstura musiałaby być "stworzona" jako oddzielna tekstura w VRAM, atlas tekstur nie zadziała, jak to się dzieje w przypadku GMS1.4+ (tzw. grupy obrazków w ustawieniach GMa, ale da się to akurat ominąć).
 

Więc w skrócie problem polega na tym, że interpolacja sampli w fragment shaderze miesza sąsiadujące kolory, tworząc tzw. texel, jak się pewnie domyślasz, artefakty które pojawiają Ci się na krańcach modelu podłogi to po prostu zmieszane kolory z drugiego krańca tekstury, dlatego też warto czasami używać tekstur seamless ;) Po więcej teorii dot. tekstur i metod samplowania odsyłam do https://cglearn.eu/pub/computer-graphics/textures-and-sampling

 

Jako, że nie możemy wyłączyć powtarzalności tekstur, można za to wykluczyć krańce tekstury z samplowania, efekt nie jest idealny, ale nie ma tak oczojebnych artefaktów. Przykład poniżej:


P63NYqz.png e2tzEwc.png

 

Jednak aby wykluczyć krańce tekstury w GMie, trzeba stworzyć własny model podłogi, bo draw_floor nie udostępnia funkcji do modyfikacji UV per vertex, ani GameMaker 8.0 nie wspiera shaderów.

Kod obj_floor w Create Event u mnie wygląda tak:

// tworzymy model podlogi tylko raz i przypisujemy model do zmiennej globalnej
if (!variable_global_exists("model_floor")) {
    
    // obliczamy polowe texela tekstury do wykluczenia go z sampla
    // teraz kazdy kafelek Twojej podlogi musi miec taka sama wielkosc
    var u, v;
    u = (1.0 / background_get_width(texTile)) * 0.5;
    v = (1.0 / background_get_height(texTile)) * 0.5;

    // szerokosc i dlugosc podlogi
    var w, h;
    w = 64;
    h = 64;
    
    // tworzymy model podlogi (tylko raz)
    global.model_floor = d3d_model_create()
    d3d_model_primitive_begin(global.model_floor, pr_trianglefan);
    d3d_model_vertex_texture(global.model_floor, 0, 0, 0, 0.0 + u, 0.0 + v);
    d3d_model_vertex_texture(global.model_floor, w, 0, 0, 1.0 - u, 0.0 + v);
    d3d_model_vertex_texture(global.model_floor, w, h, 0, 1.0 - u, 1.0 - v);
    d3d_model_vertex_texture(global.model_floor, 0, h, 0, 0.0 + u, 1.0 - v);
    d3d_model_primitive_end(global.model_floor);
}

// tekstura podlogi
texid = background_get_texture(texTile);

 

Natomiast obj_floor i Draw Event:

d3d_model_draw(global.model_floor, x, y, 0, texid);

 

Można też poprawić wygląd łączeń, ale tutaj jest trochę więcej roboty - musiałbyś zeskalować tekstury powiedzmy z 2048 do 2046 na środek i te wolne piksele na krańcach przekopiować z sąsiadujących ze sobą tekstur (tekstura nadal musi mieć 2048px).

  • Wow! (+1) 1

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

ja chyba to tak rozwiązywałem, że dawałem pozycje rysowania tekstur od 0.01 do 0.99 z tego co pamiętam. Ale zabawa z 3D w GameMakerze, to jak wożenie lodówki maluchem, albo jazda na sankach latem po trawniku. Generalnie średnio wychodzi :D

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
58 minut temu, gnysek napisał:

ja chyba to tak rozwiązywałem, że dawałem pozycje rysowania tekstur od 0.01 do 0.99 z tego co pamiętam. Ale zabawa z 3D w GameMakerze, to jak wożenie lodówki maluchem, albo jazda na sankach latem po trawniku. Generalnie średnio wychodzi :D

 

Ważne, że działało i dawało zadowalające efekty, tyle, że to takie mini-piekło dla perfekcjonisty :P Jednak ten problem z interpolacją dotyczy każdego silnika czy biblioteki graficznej, brak shaderów czy chociaż podstawowych ustawień tekstur to już rzeźnia po prostu. Ale warto wiedzieć jak sobie radzić z takimi problemami gdy ogranicza narzędzie :D 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Czyli co zamiast pełnego zakresu UV mapy, trzeba zabrać z niej z każdego krańca po połowie pixela?

A wyłączenie texture_repeat nie dawało nic? Ewentualnie można tak narysować textury by te miały na krawędziach takie same pixele po jednej i drugiej stronie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
7 godzin temu, I am Lord napisał:

Czyli co zamiast pełnego zakresu UV mapy, trzeba zabrać z niej z każdego krańca po połowie pixela?

A wyłączenie texture_repeat nie dawało nic? Ewentualnie można tak narysować textury by te miały na krawędziach takie same pixele po jednej i drugiej stronie.

 

Bezszwowe tekstury to normalna praktyka by się pozbyć tego efektu, ale czasami to nie wystarcza, zwłaszcza jak się podzieli teksturę na mniejsze elementy, bo po prostu limit rozmiaru tekstury nie pozwala na to. Efekt co prawda nie jest idealny, ale można i z tym powalczyć, np. przekopiowując krańce tekstury z tekstury sąsiadującej. Coś na zasadzie dodawania 1px obramowania do sprite'ów w atlasie tekstur, żeby też ominąć te brzydkie łączenia z sąsiednim spritem. (w 3D tekstura musi być rozmiaru potęgi dwójki, dlatego np. 2050px odpada i trzeba obraz skalować)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nowsze GMy mają tą opcję, żeby dodać jako border 1px przeciwległy bok.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×