Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   33 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
PsichiX

XenoN Core [v2.0 już w ten piątek!]

Rekomendowane odpowiedzi

prawie 10k - 47-50 fps.

A teraz, uwaga uwaga

10.5k NA GMOWYCH PARTICLACH w enduransie, gdzie pare rzeczy jest jeszcze malowanych - 50-51 fps

 

Więc czekamy na wersję kilka(dziesiąt) razy szybszą :)

PS: Ta pętla "forline" - jesteś pewien że nikt na to nie wpadł i to Twoja własna metoda ;d ? Chyba, że opatentowałeś, to ok.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
10.5k NA GMOWYCH PARTICLACH w enduransie, gdzie pare rzeczy jest jeszcze malowanych - 50-51 fps

dowody panie, chce to zobaczyc. dajesz :> ps. a obliczyles to jak?

 

PS: Ta pętla "forline" - jesteś pewien że nikt na to nie wpadł i to Twoja własna metoda ;d ? Chyba, że opatentowałeś, to ok.

tak. ze tez nie masz sie czego czepiac :D

 

tak czy inaczej, musze jeszcze to przyspieszyc, ktos mial 6 fps na 6000 czastek na athlonie 1.9 GHz. VBO powinno to zalatwic.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
dowody panie, chce to zobaczyc. dajesz :> ps. a obliczyles to jak?
A to można na kilka sposobów obliczyć?

part_partiles_count().

 

Teraz jestem na lapku więc nie udowodnię, ale taka prawda - jeśli się nie pomyliłem (mogło być 1000 a nie 10000 :D) to gmowe particle zawstydziły Twoje particle :P

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Aż zrobiłem screena, nie wiem, czemu u mnie tak powoli działa:

lol_cpu_part.png

 

GeForce FX5500

AMD Sempron 2600+

1,83 GHz

Może to pomoże

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dobra, czyli tablice nie daja dobrego rezultatu na starszych kartach. widac albo sa emulowane przez sterownik albo kij wie co. Zabieram sie za dodanie renderowania na buforach :)

Dzieki za przetestowanie :) tak czy siak u mnie smiga, wiec jeszcze raz dzieki, bez tego testu dalej myslal bym ze na starszym kompie tez bedzie chociaz proporcjonalnie smigac :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Przy ~8000 particli wahało mi się między 50-87FPS (z tym czasem spadało, ale może to wina tego, że miałem jeszcze parę aplikacji włączonych). Athlon 3500+ 2.21GHz, 512RAM

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

ej no juz nie zalamujcie mnie xD co ja mam jakas super karte i procek czy jak? :/

W sumie tu chodzi glownie o procek, bo dane sa generowane co klatke do tablicy i z niej potem renderowane. Dzialam dalej :thumbsup:

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

o właśnie! przecież żyjemy w erze kilku rdzeni, więc czemu by nie rozdzielić wypełniania tablic na wszystkie rdzenie? ze też nie pomyślałem o tym :D

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Coś ty tam Psichix nakręcił? :o

Wyłączyło mi monitor i nic go nie chciało załączyć :<

ATI Radeon Xpress 200 series

AMD Sempron Processor 3300+ 2GH

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

jak to wylaczylo monitor :0 przyznam ze takiej akcji sie nie spodziewalem :D ale zobacze co moze nie grac

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Gdy przeciągam szybko po ekranie to mam 8 fps :/ Gdy powoli 80.

 

GeForce FX5500

AMD Sempron 2600+

1,83 GHz

Ram 775

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

10000 particli - 38 fps

jak zacząłem machać po tabletecie to było tyle particli że zjechało do 17 fpsów

jak macham średnią prędkością - 100fpsów

procek 2rdzeniowy pentium 2.6 gb z , 2gb ramu karciak graficzny jakis gforce z 256 ram na pokładzie

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jakie rozbieżności... o dziwo, na każdym sprzęcie rozrzut jest taki, że nie ma stałego progresu wraz z mocą sprzętu...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Przy tych prawie 10k cząsteczek mam FPSy około 120.

GeForce 8800GT 512MB

Intel Core 2 Duo E7200 podkręcony do około 3,16GHz

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Hehe, a ja wpadłem na pomysł i odpaliłem 4 na raz testy, lecz każdemu ustawiłem osobny rdzeń, czyli każda aplikacja na 1 rdzeń, i priorytet realtime

Oto wynik :D

powah.png

w sumie 40k - 50fps :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A ja odkryłem ciekawą rzecz, mianowicie: gdy włączyłem Menedżera Zadań i przesuwałem kursorem po nim, to 4,5k particli chodziło na 36 fps, w edicie dam screena.

 

E: omg2.png

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

nie moja wina ze ATI jakies zacofane jest, do nich zawsze trzeba jakies substytuty robic :/

Widze ze nie obsluguje Twoja karta sprajtow punktowych, i cos jeszcze musi byc emulowane przez sterownik.

W końcu OpenGL 1.1 to sie nie dziwie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie wiem czy zacofane, zazwyczaj czytam, że Radeony mają lepszą wydajność w grach, chociaż sam mam Nvidię...

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dopiero teraz zauwazylem ze Pieter ma OpenGL 1.1 a to staaaaaara technologia, dla tego nie dziwie sie ze taki maly FPS. przy 4000 czastek

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Witajcie :) Od kilku miesięcy co jakiś czas wspominam co nieco że zamierzam stworzyć język programowania specjalnie na potrzeby zarządzania silnikiem. Tak więc ponad tydzień temu kiedy przypadkiem naprawiłem poważny błąd w module Psyche (tym samym skończyłem go całkowicie) pomyślałem że po co mam co każdą zmianę kodu rekompilwać gre, skoro mogę robić to z poziomu skryptu. Wyrzuciłem prototyp i napisałem go na nowo.

I tak oto przedstawiam Wam: Intuicio - assemblero-podobny język programowania dla silnika XenoN Core.

Czemu język programowania a nie skryptowy? bo tak jak w Javie, nie można uruchomić programu nim nie zostanie skompilowany, tym samym w maszynie wirtualnej wykonywany jest kod bajtowy nie zaś skrypty. Na chwilę obecną okiełznałem wszystko od strony działania kompilacji i wykonywania kodu i pozostało mi tylko dodawać nowe instrukcje. Z racji iż mam świadomość że języki assemblerowe nie są lubiane przez początkujących, dla tego planuję dodać interpreter który będzie (wedle podanych mu zasad) interpretował skrypty wysokopoziomowe do kodu Intuicio (zrobi się In++ będący odpowiednikiem C++ to łatwiej będzie się Wam pisać programy ;p). Nie omieszkam wspomnieć że kiedyś zrobię xenona jako usługę bądź platformę wirtualną która będzie uruchamiać programy Intuicio niczym Java programy *.jar (marzenia xD).

 

Do rzeczy, macie tu małą pokazówkę:

http://gmclan.org/up1105_3_Intuicio.html

Na pokazówce program wykonuje skrypt z pliku "Resources/brain.xis" (możecie go śmiało podejrzeć i zmodyfikować) i tworzy sieć neuronową oraz wyświetla jego aktualny stan, a z razcji iż nie jest podłączony do żadnego ciała, nie widać nic ciekawego, poza wędrującymi impulsami. Legenda: Zielone kulki to detektory, czerwone to efektory, niebieskie to neurony. Impuls wychodzi z detektora i przechodzi połączeniami do neuronów i efektorów. Zatrzymuje się tylko gdy napotka opór bramy neuronu (impulsy są filtrowane wedle bramy, mamy wejściowy sygnał 0xFF który napotka neuron o bramie 0xF0 to przepuści sygnał 0x0F i gdy sygnał będzie 0x00 to umiera. Sygnały i bramy są 32 bitowe - to taka krótka lekcja jak działa sieć).

Byłbym rad gdybyście przetestowali, pisząc własny skrypt i umieszczając go tu :)

 

Póki co Intuicio obsługuje moduł Psyche, jego elementy, zmienne w tym różne typy wartości liczbowych (całkowite, zmiennoprzecinkowe, wektory), skoki (dla pętli, if-ów), rejestry (wszystkie obliczenia arytmetyczne wykonywane są na przeznaczonych do tego rejestrach), ustawienai środowiska programu (ustalanie ilości rejestrów itp) i pare innych rzeczy :P

 

To teraz mały opis instrukcji:

 

Każda instrukcja zaczyna się z nową linią bądź po średniku.

Jak wspomniałem wszelkie obliczenia wykonuje się na rejestrach, których są 3 typy: całkowity (REGI), zmiennoprzecinkowy (REGF) oraz wektorowy (REGV). Należy pierw aktywować moduł danych rejestrów. np. ":REGISTRY REGI" dla aktywacji rejestru liczb całkowitych. Reszta obsługiwanych modułów to:

:CORE - instrukcje rdzenia, domyślny moduł dla większości instrukcji

:PSYCHE - instrukcje sieci neuronowej

 

Instrukcja TMP deklaruje zmienne (domyślny typ zmiennej to DWORD). Możliwe jest wypisanie wielu nazw na raz.

TMP name1 name2

 

Instrukcja JMP deklaruje miejsca skoków (instrukcje poprzedzane znakiem "@").

JMP jump1 jump2

 

Instrukcja REG w module Core wypełnia zmienną daną wartością liczbową. W module Registry wypełnia rejestr daną wartością liczbową.

:CORE

REG name1 FF04x; ' zmienna, liczba (koncowka "x" oznacza hex)

:REGISTRY REGI

REG 0x 35d; ' rejestr (liczbowo), liczba ("d" oznacza dword (unsigned int))

:REGISTRY REGF

REG 1x 5.26r; ' rejestr (liczbowo), liczba ("r" oznacza real (double))

:REGISTRY REGV

REG 2x 100:15:0:1; ' rejestr (liczbowo), liczba ("v" oznacza vector)

 

Instrukcja NEW tworzy nowa zmienna (niszczy domyślne dword i zastępuje innym typem).

NEW name UNIFORM count; ' zmienna, typ, liczba elementów

 

Instrukcja PAR ma kilka podinstrukcji ale wszystkie odnoszą się do buforu parametrów który podpinamy pod program przy wywołaniu jego wykonywania.

PAR START offset; ' ustawia kursor odczytu/zapisu bufora na pozycje z wartosci zmiennej offset

PAR GET name UNIFORM; ' czyta wartosc z bufora do zmiennej danego typu

PAR SET name UNIFORM; ' wpisuje wartosc do bufora ze zmiennej danego typu

 

Instrukcja USE kopiuje element do podręcznego rejestru dla używanych elementów głównych (na nich wykonywane są dalsze operacje poszczególnych modułów).

USE name PSYCHE; ' zmienna, typ elementu

 

Instrukcja ADD w module Psyche dodaje nową komórkę. W module Registry dodaje dwa rejestry do siebie

:PSYCHE

ADD name NEURON value; ' zmienna, typ, wartość sygnału/bramy ze zmiennej

:REGISTRY REGI

ADD 0x 1x; ' rejestr pierwszy, rejestr drugi

 

Instrukcja SET w module Psyche ustala wartość stanu danej komórki.

:PSYCHE

SET name NEURON GATE value; ' zmienna, typ komórki, typ zmiennej stanu, wartość ze zmiennej

 

Instrukcja LNK w module Psyche łączy dwie komórki ze sobą. Możliwe połączenia: detektor->neuron, detektor->efektor, neuron->neuron, neuron->efektor.

:PSYCHE

LNK from NEURON to; ' element początkowy, typ elementu końcowego, element końcowy

 

Instrukcja IF w module Registry skacze do danego miejsca gdy podany warunek zostanie spełniony.

:REGISTRY REGI

IF 0x 1x EQUAL jump; ' rejestr pierwszy, rejestr drugi, typ warunku (EQUAL, LESS, GREAT), miejsce skoku

 

Instrukcja MTM kopiuje wartość rejestru do zmiennej.

MTM name REGI 0x; ' zmiena, typ rejestru (REGI, REGF, REGV), rejestr

 

Instrukcja MTR kopiuje wartość zmiennej do rejestru.

MTR name REGI 0x; ' zmiena, typ rejestru (REGI, REGF, REGV), rejestr

 

Instrukcja :END kończy wykonywanie programu.

 

Instrukcje rejestrów (struktura jak ADD):

SUB 0x 1x; ' odejmuje rejestry

MUL 0x 1x; ' mnoży rejestry

DIV 0x 1x; ' dzieli rejestry

AND 0x 1x; ' operacja and (&)

OR 0x 1x; ' operacja or (|)

XOR 0x 1x; ' operacja xor (^)

NEG 0x 1x; ' operacja negacji (~)

 

Nom to na razie chyba wszystko :)

 

EDIT: A no i zapis liczb i ich odpowiednik:

 

F0AD56x - hex (dowolna wielkosc, dopasowana do ilosci znakow)

120c - char

120b - byte (unsigned char)

120s - short

120w - word (unsigned short)

1024i - int

1024d - dword (unsigned int)

56.4h - half (float)

56.4r - real (double)

100:52:0:1f - halfvector (float vector)

100:52:0:1v - vector (double vector)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Ktoś kiedyś powiedział, że to "sztuka dla sztuki". Z tego co wiem, twój silnik został podzielony na kilka modułów. Mógłbyś je wymienić raz jeszcze ;) ?

 

Edit -> Dobra, mam.

 

Chaos - Moduł fizyczny. Gotowy (rozwijany)

Photon - Moduł graficzny. Gotowy (rozwijany)

Echo - Moduł dźwiękowy. Gotowy

Psyche - Moduł sztucznej inteligencji. W fazie testów

TimeBridge - Moduł kontroli czasu wirtualnego. W fazie produkcji

Ether - Moduł sieciowy. W fazie produkcji

 

No i chciałbym wiedzieć, jakie zalety ze sobą niesie ten silnik, bo przecież najważniejsze jest to, żeby czymś się różnił od innych, nie :P ?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Generalnie był tworzony na potrzeby rozszerzenia maksymalnie możliwości GMa (co się udało) i kilku moich większych projektów i nie zastanawiałem się czym jest/będzie lepszy od innych silników (na scenie światowego gamedevu). Tak więc mogę powiedzieć że moduł chaos podchodzi do fizyki od nieco innej strony niż reszta silników, w których kluczowym elementem są rigid body (ciała sztywne), w xenonie fizyka opiera się o ciałą częściowo miękkie, czyli ciała sztywne przy kolizjach ulegają deformacjom, zależnym od sił (realność poszła w kierunku zachowań o właściwościach atomowych). Photon dąży wciąż do realistycznej grafiki 3D (tym samym 2D), mam bogate źródło informacji na temat technik graficznych na poziomie CryEngine 2/3. Z Echo zamierzam się "pobawić" jeszcze, może zmienię bibliotekę, wkompiluję w silnik jeśli licencja pozwoli. Najważniejsze dla mnie to mieć możliwość obsługi dźwięku 3D, póki co pod tym względem kuleje. Psyche jest gotowy, testowany, mam nadzieję że uda mi się stworzyć pierwsze prawdziwie inteligentne samouczące się sieci na nim, na razie są tylko testy. Z TimeBridge zaś wiążę wielkie nadzieje ponieważ dotąd żaden silnik nie posiada fizyki i innych elementów zależnej w tak dużym stopniu od czasu wirtualnego. A Ether? sieć jak sieć, musi szybko i sukcesywnie przesyłać dane, tutaj mam nadzieję iż sukcesem będzie wykombinowany przeze mnie system dla sieci klient-serwer (pewnie dotąd nikt nie podszedł do tego w ten sposób )

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
pewnie dotąd nikt nie podszedł do tego w ten sposób

 

Zaczynasz popadać w samozachwyt - niepotrzebnie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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

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

×