kategoria: ANSI C
[#31] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@recedent, post #30

Tzn. Taka rozdzielczosc wybrałeś? Myślę że to za dużo i po.prostu zamulił. Pewnie po 1 minucie pojawiła by się pierwsza klatka, wskaż coś małego jak 320x250x32 lub 640x480x32
[#32] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #31

To tylko 060 jak nazwa sugeruje ?
Moje uae4arm nie ma takiej emulacji

Ostatnia aktualizacja: 11.03.2021 22:26:34 przez Norbert
[#33] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #31

Kłopot w tym, że mój monitor jest wybredny i tak niska rozdziałka będzie poza zasięgiem. Ale w sumie mogę spróbować w niższej rozdzielczości na PowerBooku.
Pewnie nie ma opcji uruchomienia gry w okienku?
[#34] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@recedent, post #33

na razie nie.. próbuje osiągnąć sensowną wydajność testując na fullscreen w optymalnych warunkach,
jak coś zacznie wychodzić to można pododawać opcje.. byłby po prostu launcher i można by sobie wybierać wszsytko..

a na czym próbowałeś odpalić na morphosie? a tam nie ma takiego rtg jak na Vampirach ze można podpiąć dowolny monitor?
Czyli żeby odpalić musiała by być wersja okienkowa tylko tak? nie masz jakiejś systemowej emulacji że samo robi okienko?

Ostatnia aktualizacja: 11.03.2021 23:23:21 przez mateusz_s
[#35] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@Norbert, post #32

nie wiedziałem.. rozumiem że 040 może być?
[#36] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #35

tutaj jest fajny przykąłd na temat tego co wspominałem na początku, ze jedną z opcji które chciałbym kiedyś dorzucić, jest możłiwosć wypalenia gotowych tekstur z intensywnością swiatla.. taka tekkstura nie musiała by być duża wystarczyła by 64x64 na sciankę,
mapę edytora musiałbym wyeksportowac jako model 3d np. do 3ds maxa i tam sobie w wyrenderować realistyczne światłą i cienie, ambienty itp,

potem przy teksturowaniu sceny w raycasterze, wartosc jest mnozona przez wartosc odpowiadającej textury intensywnośći.. w tym momecie intenwywność jest liczona na bieżaco w zależnosci od odległości i orinetacji śćianki..

łądny efekt, przy czym tutaj Kolega, ma kolorowe światła


Ostatnia aktualizacja: 12.03.2021 15:48:46 przez mateusz_s
[#37] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #35

Może być.
Dzięki temu będzie można porównać różnice w działaniu między 060 a 040, na sprzęcie emulowanym i prawdziwym
[#38] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@recedent, post #30

U mnie jest tak samo, a testowałem w różnych rozdziałkach i głębi kolorów.
[#39] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@waldiamiga, post #38

postaram sie dorzucić taką opcję, bo chciałbym, że apka odpalała się możliwie gdzie się da..
tylko na razie skupiam się żeby polikwidować te wąskie gardła które mam teraz, bo jest masakra jakaś z wydajnością..


Ostatnia aktualizacja: 12.03.2021 23:32:03 przez mateusz_s
[#40] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #39

Podaj procentowe czasy z profilera, może coś pomogę.
[#41] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@waldiamiga, post #38

Udało się uruchomić na AmigaOS4.x z VooDoo3, półtorej klatki na sekundę i zielony ekran.

[#42] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #39

a moglbys wypuscic zrodla gdzies to bym fixnął żeby na morphosie działało?

Ostatnia aktualizacja: 13.03.2021 10:58:54 przez michal_zukowski
[#43] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #25

Zrobilem test u siebie na 060/Voodoo3.

Niestety rozdzialki 320x240x32 moj monitor nie zdzierzyl wiec wybralem 640x480.
Obraz wyswietlil sie w trybie super wide . Podejrzewam ze renderer masz zafiksowany na wysokosc 240.
W takim trybie uzyskalem wynik ok 3.2 FPS.

Moglem tylko patrzec gora/dol (strasznie czule) oraz obracac sie na boki. Kroku do przodu nie udalo mi sie wyczaic.
[#44] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@Phibrizzo, post #43

Kroku do przodu nie udalo mi sie wyczaic.

"standardowy" WSAD.
[#45] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@waldiamiga, post #44

Faktycznie. Niby wczesniej sprawdzilem ale widocznie za krotko czekalem na reakcje.
[#46] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@waldiamiga, post #41

Udało się uruchomić na AmigaOS4.x z VooDoo3, półtorej klatki na sekundę i zielony ekran.


No potwierdzam, pod X1000 też to tak zielono wygląda i też działa wolno. No może nie aż tak wolno jak na WinUAE, ale ledwie kilka razy szybciej, a pewnie w normalnych warunkach liczba FPS powinna być trzycyfrowa.
[#47] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@Phibrizzo, post #45

Kwikłem :D
[#48] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@waldiamiga, post #41

Udało się uruchomić na AmigaOS4.x z VooDoo3, półtorej klatki na sekundę i zielony ekran.


[#49] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@MUFA-amigaone-pl, post #46

wczoraj troche testowałem, generalnie jest dziwna sprawa..

- w "małym teście" gdzie była tylko pętla i wyświetlanie po zamianie WIDTH i HEIGHT na u_int16 + unroll-loops + integer bufor był wzrost z 130 fps do 550 fps..

- wstawiłem wszystkie te poprawki w docelowym kodzie (który składa się z kilku plików i modułów i wiekszej ilosci obliczen)
ale fps nawet nie drgnał.. wieć coś jest ewidentnie zrąbane

- natomiast wyłączyłem podłogę i sufit i z 6 fps skoczyło do 60 fps.
- przy czym jeśli podszedłem blisko do ściany (czyli cały ekran był wypełniony) to fps spadł do 20 fps

- wieć problem chyba leży gdzieś tutaj..

na ten moment podłoga i sufit są rysowane w niezbyt oiptyumalny sposób tj. rysują cały ekran a dopero na to są rysowane ściany tam gdzie faktycznie są, więc jeżeli wypelnieni całego bufora czyli przejscie WIDTH*HEIGHT tak mocno go obciąza no to dodatkowe drugie to samo go zabija.. ale ewidentnie jest jakieś wąskie gardło gdzieś..

- no i przetestowałem fixując WIDTH i HEIGHT wpisanymi wartosciami też i też ZERO róznicy

- bedę sie skupiał na tym fragmencie teraz

- ale przetestuje też kompilatory inne,
[#50] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@michal_zukowski, post #42

@michal_zukowski

Hej, podesłał bym Ci ale trochę później, OK? Chcę jeszcze sam poszukać błędów i posprawdzać kompilatory.

A w jaki sposób chcesz to uruchomić na Morphos? Będziesz to przerabiał żeby się w okienku wyświetliło?
Będziesz używał tych samych kompilatorów co do Amigi? czy są osobne dla morphosa.. tak chcę docelowo żeby to działało gdzie się da..
[#51] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #50

Czy na tą wydajność może mieć wpływ, które nagłówki są przyłączane..
bo jak patrzyłem to tych nagłówków różnych wersji jest od pyty, ja mam takie:

#include <proto/exec.h>
#include <proto/dos.h>
#include <proto/graphics.h>
#include <proto/intuition.h>

#include <intuition/intuition.h>
#include <intuition/screens.h>

#include <proto/cybergraphics.h>
#include <cybergraphx/cybergraphics.h>

#include <proto/asl.h>
[#52] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #51

Nie, no co ty. Tam są tylko opisane bazy bibliotek i jakies definy do ustawiania.
[#53] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #51

Zrobiłem profiler, wiadomo, że funkcja renderująca zajmuje najwięcej, pod nią są wypisane jakieś
funkcje ale nie nie wiele potrafię z tego wyczytać? Jak Ktoś ma ochotę zerknać to wrzucam link:

https://we.tl/t-oIkrwJW7L1

wśród tych funkcji jest np. kernel_cosf, kernel_sinf, cosf - nie mam pojęcia skąd się wzieły, bo ja ja zastąpiłem swoimi funkcjami które biorą te wartości z tablic
wygląda jakby była jakaś emulacja soft float, w sensie ze nie używa FPU, ale dałem mu taką flagę ?


edit:
czy może być tak, że z jakiegoś powodu tylko plik main.c jest optymalizowany a reszta olewana?, kompiluje w ten sposób, mam wiele plików:

m68k-amigaos-gcc main.c BM_Bitmap.c BM_Bitmap_TGA.c EM_Engine_Main.c GP_Gameplay.cLV_Level.c MY_Draw.c MY_Math.c RC_Raycaster.c TM_Timer.c -o main -O3 -noixemul -lm -Wall -march=68060 -mcpu=68060 -mtune=68060 -mhard-float -m68881 -funroll-loops






Ostatnia aktualizacja: 13.03.2021 23:44:30 przez mateusz_s

Ostatnia aktualizacja: 13.03.2021 23:56:01 przez mateusz_s
[#54] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #53

*********
UPDATE
(taki tam średni UPDATE)

na razie jest lipton,
próbowałem na wszystkie sposoby
ale nie mogę przebić powyżej 5-6 fps (winuae 060 fastest bez JIT),
a na Vampirzach chodzi po ok 9 fps - więc odniesienie jest podobne...
no chyba ze sobie włącze JIT to mi śmiga 60 nawet w 640x480 ale nie tędy droga :)

- jeśli wyłączę sufit i podłogę - to w zależności od tego jak blisko jestem ściany mam 60-20 fps
- no sufit i podłoga są mocno nie optymalne - skupie się teraz chyba na optymalizacji tego algorytmu
- próbowałem wrzucić wszystko do jednego pliku, bo myślałem, że są jakieś problemy przy kompilacji,
bo niby mój pierwszy test wydajnościowy działał szybko.. ale nie było różnicy, no ale też w tym teście nie było tylu obliczeń.
- nie używam też jakiś ciężkich funkcji typu sqrt(), a dzieleń na floatach jest dość mało
- w międzyczasie moze jeszcze sprawdzę w tym środowisku Cubic IDE, bo sobie zamówiłęm ale jeszcze nie dostałem żadnego linka może jutro przyjdzie..

- czy w tym momencie jest sens konwertowania floatów na fixed-point? nie wiem.. jeśli mamy 040, 060 z FPU?


Natomiast udało mi się chyba znaleźć prawdziwe wąskie gardło, chodzi o pobieranie textela z textury i wpisywanie do bufora:

for (u_int16 ry = 0; ry < APP_requested_height; ++ry)
{
........
       // drawing floor and ceiling from left to right
        for (u_int16 ry_x = 0; ry_x < APP_requested_width; ++ry_x)
        {
                 ...........
               // get pixel coords in texture
            u_int32 texture_pixel_index = texture_pixel_x + texture_pixel_y * RC_texture_size_i;

            // draw into buffer
            u_int32 output_pixel_index = ry_x + ry * RC_render_width_i;

               // kolor pobrany z textury
               unsigned int tmp = GP_level_textures[texture_index].pixels[texture_pixel_index];

               // zapisuje wynik w buforze ekranowym
               my_buf_1[output_pixel_index] =
                                        (((tmp >> 16 & 0x0ff) * intensity_value) >> 8 ) << 16 |
                                        (((tmp >>  8 & 0x0ff) * intensity_value) >> 8) <<  8 |
                                        (((tmp       & 0x0ff) * intensity_value) >> 8);
         }
}


tmp to int który oznacza jakiś kolor, jeśli jest pobrany z textury - to fps jest z 6, jak go zafixuje na jakaś stałą wartość to skacze do ponad 400, jak zafixuje np. texture_pixel_index na 5000 to wzrasta do 50 itp..
czyli jak nie musi skakać po teksturze to jest znaczenie szybciej.. nie wiem czy to można jakość poprawić, textury były 128x128, potem zmieniłem na 64x64 - bez różnicy..

kolor w teksturze to też int 4 bajty, może jakby je zamienić na 256 indeksowany to by wzrosło..? nie potrzeba mi 24/32 textur dalem je bo nie chcilo mi sie wczytywać indeksowanych.


*******

Ostatnia aktualizacja: 15.03.2021 03:13:03 przez mateusz_s

Ostatnia aktualizacja: 15.03.2021 03:20:19 przez mateusz_s
[#55] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #54

Nie wiem jak to optymalizuje kompilator ale wszystkie mnożenia y można wyrzucić poza pętlę x. To samo tyczy gp-level-textures który można wyrzucić przed pętlę y.
Zapisując na ekranie od lewej do prawej możesz inkrementować wskaźnik zamiast odwoływać się do indeksu tablicy.

Ostatnia aktualizacja: 15.03.2021 08:53:46 przez Kefir_Union
[#56] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@mateusz_s, post #54

1: Zapomnij o truecolor i od razu przejdź na 8bit. Tekstury 8bit + tablice dla odcieni. Do tego albo zafiksowana paleta + albo generowana paleta. Zabijasz cache, zabijasz procesor (3x więcej obliczeń), zabijasz pamięć. Bez sensu.

2: Jak wrzucasz kod to nie wrzucaj tak pociętych kawałków. Tu nie ma połowy kodu który jest istotny.
[#57] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@kiero, post #56

W ogóle po co to optymalizować w C? To jest najcięższa pętla programu, więc oczywistą oczywistością jest przepisanie jej na assembler.
[#58] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@Kefir_Union, post #57

Bo może ktoś nie umie w asembler i nie zrobi tego lepiej niż kompilator? Bo może najpierw lepiej pozbyć się problemów wysokopoziomowych niż tłumaczyć nieefektywny kod na asembler?
[#59] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@kiero, post #58

Trzeba zrobić jedno i drugie równocześnie
[#60] Re: [C, RTG] Moje Raycasterowe zabawy, progresy, testy..

@Kefir_Union, post #55

@Kefir_Union

aaa.. ależ to oczywiste, nie zauważyłem, dzięki pomysł super pomysł z tym wywaleniem przed petle X

miałem co prawda potem umiescic juz prekalkulowane wartosci w tablicy zeby czytal po kolei ale możliwe że to bez sensu, przynajmniej bez wcześniejszego testu







Ostatnia aktualizacja: 15.03.2021 12:53:05 przez mateusz_s

Ostatnia aktualizacja: 15.03.2021 12:53:58 przez mateusz_s
Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem