Kharynic - The History of Mine Valley 2464 73

O temacie

Autor inż. Avallach

Zaczęty 6.02.2018 roku

Wyświetleń 2464

Odpowiedzi 73

mathsicist

mathsicist

Użytkownicy
posty202
Propsy267
Nagrody
Profesjabrak
  • Użytkownicy
Jak szacujesz przebieg pracy? Gdybyś miał zgadywać, kiedy będzie gotowa wersja która coś wyświetla?
 

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7534
Propsy4970
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?

inż. Avallach
Administrator

Kharynic - The History of Mine Valley
#21 2018-02-08, 10:04(Ostatnia zmiana: 2018-02-08, 12:59)
Lista obszarów prac posortowanych według planowanej kolejności i z oznaczonym statusem jest dostępna w /docs/roadmap.md w repozytorium. Będę starał się ją na bierząco aktualizować. Obecnie zrobiony jest pierwszy punkt - web shell, a pracuję nad drugim - scripting system.
Optymistycznie za miesiąc powinien być bardzo podstawowy model lokacji (forteca bez wnętrz), kamera, może kontroler postaci i wsparcie dla klawiatury i myszki.
Na prace mam realistycznie patrząc jakąś godzinę dziennie, więc dopóki nie dojdę do momentu kiedy będą mogły dołączyć osoby nie obeznane z programowaniem silnika będzie to szło wolno. Kiedy będzie gotowy system skryptowania (może nawet ze specjalnym edytorem na stronie) i ładowania assetów bezpośrednio z wybranego repozytorium mam nadzieję że dołączy się trochę osób - w tym z zagranicy.

KAW

KAW

Użytkownicy
posty14
Propsy2
  • Użytkownicy
Zainteresuj się tą biblioteką skróci deweloping o połowę: https://assetstore.unity.com/packages/tools/unirx-reactive-extensions-for-unity-17276
EDIT:
Prosty przykład użycia - skrypt sprawdzający czy nazwa obiektu się zmieniła i wyświetlający to po 5 sekundach.
Normalnie:
Spoiler
using System.Collections;
using UnityEngine;
public class NonReactiveTest : MonoBehaviour
{
   public string OldName;
   void Start()
   {
      OldName = this.gameObject.name;
   }
   void Update()
   {
      if (this.gameObject.name != OldName)
      {
         OldName = this.gameObject.name;
         StartCoroutine("Log", this.gameObject.name);
      }
   }
   IEnumerator Log(string name)
   {      
      yield return new WaitForSeconds(5f);
      Debug.Log(name);   
   }
}
Z UniRX:
Spoiler
using UnityEngine;
using UniRx;
public class ReactiveTest : MonoBehaviour
{
   void Start()
   {
      this.gameObject.ObserveEveryValueChanged(x => x.name).Delay(new System.TimeSpan(0,0,5)).Subscribe
      (x => Debug.Log(x));
   }
}
 

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7534
Propsy4970
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?
Znam UniRX, ogólnie kojarzę programowanie reaktywne. Prawdopodobnie użyję, chociaż na razie się z tym wstrzymam. Planuję ograniczyć ilość kodu "logicznego" w silniku, raczej wystawiając szerokie api do skryptów.

KAW

KAW

Użytkownicy
posty14
Propsy2
  • Użytkownicy
Właśnie RX można by użyć jako platformy do skryptów ponieważ łatwiej stworzyć projektanta takich wyrażeń (tak wiem łatwiej powiedzieć niż zrobić tak tylko o tym mówię). To by było dobrym przykładem gdyby nie było przestarzałe: https://www.assetstore.unity3d.com/en/?stay#!/content/14381 , inny dobry działający przykład http://bonsai-rx.org/docs/installation/ chodź obawiam się, że nigdy jego potencjał nie zostanie wykorzystany.
 

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7534
Propsy4970
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?

inż. Avallach
Administrator

Kharynic - The History of Mine Valley
#25 2018-02-09, 09:34(Ostatnia zmiana: 2018-02-09, 09:59)
Skrypty nie mogą wymagać build systemu Unity do działania, a co za tym idzie UniRX odpada jako platforma (uFrame i inne systemy osadzone w Unity Editorze tym bardziej).
Muszą być kompilowalne w przeglądarce, tak żeby development nie wymagał instalowania żadnych narzędzi - nawet edytor będzie na stronie gry. Tutaj jest obecny projekt systemu: https://github.com/kharynic-project/kharynic/blob/master/docs/scripting.md
To dla mnie bardzo istotne żeby zarówno granie jak i rozwijanie gry było dostępne z przeglądarki. Mam nadzieję przyciągnąć do projektu modderów, zwłaszcza Pewnej Starej Gry.

W pierwszej kolejności myślę o JavaScripcie, którego kompilator jest wbudowany w przeglądarki (a interpretery, jak jint, dostępne także jako libki C# działające poza przeglądarką). W drugiej, o TypeScripcie, który będzie transpilowany w tle przez przeglądarkowy edytor i commitowany razem z wygenerowanym JS.
W ostateczności może zrobię też eksperyment sprawdzający czy da się odpalić transpiler Bridge.NET z poziomu WebAssembly - ale tu martwię się o wydajność, problemy z debugowaniem i przeczuwam że używanie C# jako języka skryptowego w przeglądarce to overkill.

Adanos

Adanos

Administrator
Szara eminencja
posty5113
Propsy3705
ProfesjaProgramista
  • Administrator
  • Szara eminencja
Zastanawiam się, czy jest sens opierania się na pewnej, bardzo starej grze. Dużo jest nawiązań, więc po co sobie komplikować życie i martwić się kwestiami prawnymi, skoro można w zupełności się odciąć i wymyślić coś, co nie będzie miało nawiązań? Ja rozumiem, że w pewnym sensie jest to ułatwienie i nie trzeba robić wszystkiego od nowa.
Zadziwiające jest to, że dużo osób chce się wzorować na tej grze właściwie we wszystkim: grafika, skrypty, świat, fabuła. Tak jakby to był niedościgniony wzór, którego nie można poprawić. :D
Taka mała dygresja. W każdym razie kibicuję projektowi. :)

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7534
Propsy4970
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?

inż. Avallach
Administrator

Kharynic - The History of Mine Valley
#27 2018-02-09, 13:32(Ostatnia zmiana: 2018-02-09, 13:45)
Zastanawiam się, czy jest sens opierania się na pewnej, bardzo starej grze. Dużo jest nawiązań, więc po co sobie komplikować życie i martwić się kwestiami prawnymi, skoro można w zupełności się odciąć i wymyślić coś, co nie będzie miało nawiązań? Ja rozumiem, że w pewnym sensie jest to ułatwienie i nie trzeba robić wszystkiego od nowa.
To duchowa kontynuacja innego projektu przy którym pracowałem przez lata. Liczę na współpracę części zespołu skłonnej odłączyć się od sprawców wewnętrznego rozłamu i przenieść na nową platformę. Jest to po części sprawa osobista.

Zadziwiające jest to, że dużo osób chce się wzorować na tej grze właściwie we wszystkim: grafika, skrypty, świat, fabuła. Tak jakby to był niedościgniony wzór, którego nie można poprawić. :D
Taka mała dygresja. W każdym razie kibicuję projektowi. :)
Podchodzę do tego trochę inaczej - to co tworzę to nie rekonstrukcja, to dekonstrukcja: http://tvtropes.org/pmwiki/pmwiki.php/Main/Deconstruction

Nie mamy dobrotliwego starego króla który zjednoczył królestwo. Mamy tyrana który krwawo podbija coraz to kolejne krainy, wykrwawiając zarazem własny naród.
Nie mamy potwornych orków którzy wymuszają na nim wysokie podatki i tworzenie obronnej armii. Mamy tyrana który wyzyskuje lud nakładając głodowe podatki i masowy przymusowy werbunek do armii, walczącej z wypartymi w góry i ginącymi z głodu barbarzyńcami z północy. Ostatnim ogniskiem wolności na kontynencie, nie zdławionym jeszcze jego żelazną ręką.
Nie mamy brutalnego, ale na swój sposób anachistycznego i liberalnego obozu wśród lasów i gór. Mamy więzienie o zaostrzonym rygorze i obóz pracy przymusowej dla podejrzanych o wrogość wobec reżimu.
Wreszcie nie mamy bohatera. Mamy najemnego łowcę głów który tropi i morduje uciekinierów z tego obozu śmierci.
To historia upadku który rozpoczął się lata przed wzrostem zagrożenia na froncie. Nie będzie szczęśliwego zakończenia.

W kwestii skryptów podobieństw nie będzie, chyba że easter-eggi (jak log startowy).

Paradoxal

Paradoxal

Użytkownicy
Awesomeness
posty452
Propsy448
ProfesjaGrafik 3D
  • Użytkownicy
  • Awesomeness
Opisz troche założenia od strony graficznej tego projektu. Wiem że na razie kodujesz podstawy i do tworzenia czegokolwiek daleko ale chciałbym tylko poznać jaką masz wizje artystyczną na to. Rozumiem też że grafika będzie dosyć archaiczna jak te propy low poly, które wrzucałeś kiedyś do swojej teczki?
 

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7534
Propsy4970
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?

inż. Avallach
Administrator

Kharynic - The History of Mine Valley
#29 2018-02-09, 15:29(Ostatnia zmiana: 2018-02-09, 15:36)
Low poly nie oznacza archaicznej. Owszem, pasuje do stylu starej gry, ale za wyborem stoją też inne istotne kwestie.
Streamowanie wszystkich assetów z repozytorium sieciowego wymusza ich niską wagę. Prosta grafika temu sprzyja.
Renderowanie gry w przeglądarce oznacza istotne ograniczenia wydajnościowe. Prosta grafika jest tu koniecznością.
Szukanie kontrybutorów wśród pół amatorów także wymusza prosty styl graficzny, nie wymagający umiejętności graficznych na poziomie current-genów.

Nie tylko modele będą na podobnym poziomie złożoności co w starej grze (no, może 2x więcej tris). Tekstury będą traktowane bardzo podobnie - używanie bezszwowych uniwersalnych tekstur gdzie tylko się da. Współcześnie może na szczęście wyglądać to całkiem nieźle dzięki zastosowaniu specjalnych shaderów, łączących dane z uniwersalnej tekstury z bardzo lekkimi danymi per-mesh. Tutaj jest to bardzo ładnie opisane i pokazane na przykładzie Unity: https://80.lv/articles/stylized-environment-production-in-unity/


Ta scena i pozostałe w artykule używa tyko kilku głównych tekstur (beton, drewno, metal, dachówka, bruk, liście). Żadnych unikatowych, wszystkie oprócz liści bezszwowe i bez normalmap.

Paradoxal

Paradoxal

Użytkownicy
Awesomeness
posty452
Propsy448
ProfesjaGrafik 3D
  • Użytkownicy
  • Awesomeness
Low poly nie oznacza archaicznej.
Nigdzie tak nie napisałem. Chodziło mi o różnicę między twoim low poly a low poly dzisiejszych standardów.

Nie tylko modele będą na podobnym poziomie złożoności co w starej grze (no, może 2x więcej tris). Tekstury będą traktowane bardzo podobnie - używanie bezszwowych uniwersalnych tekstur gdzie tylko się da. Współcześnie może na szczęście wyglądać to całkiem nieźle dzięki zastosowaniu specjalnych shaderów, łączących dane z uniwersalnej tekstury z bardzo lekkimi danymi per-mesh. Tutaj jest to bardzo ładnie opisane i pokazane na przykładzie Unity: https://80.lv/articles/stylized-environment-production-in-unity/


Ta scena i pozostałe w artykule używa tyko kilku głównych tekstur (beton, drewno, metal, dachówka, bruk, liście). Żadnych unikatowych, wszystkie oprócz liści bezszwowe i bez normalmap.

Tutaj ciekawy pomysł. Używanie seamlessowych tekstur nie tylko dla podłoża ale i dla architektury skraca czas pracy. Z tym że wiąże sie to z większym nakładem trisów dla modeli ale w sumie nie jest to jakiś problem wielki. A jak będzie wyglądała sprawa optymalizacji? Unity ma skrypty do samoczynnego generowania LODów czy trzeba je robić samemu?

Musisz rozwinąć o jaką konkretnie rożnicę ci chodzi, ciężko odnieść się do samej "archaiczności".
Chodzi mi o detale modeli, z tego co patrzyłem organika jest zbliżona do Pewnej Starej Gry, nie mówię że to źle ale liczba trójkątów jest znacznie niższa w stosunku do modeli tworzonych obecnie na potrzeby current genów jak to wcześniej wspominałeś.
 

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7534
Propsy4970
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?

inż. Avallach
Administrator

Kharynic - The History of Mine Valley
#31 2018-02-09, 16:33(Ostatnia zmiana: 2018-02-09, 16:49)
Automatyczne LODowanie wbudowane w silnik jest tylko w wersji pro. Ale robienie ich ręcznie nie wchodzi w grę - projekt ma powstać minimalnym nakładem pracy i assetów. Liczę na to że trzymanie się low poly i inteligentnego ukrywania obiektów (opartego o rozmiar i odległość, a do tego wysokopoziomowy occlussion culling) wystarczy. Jeśli gra rozwinie się kiedyś poza główną lokację (forteca i otoczenie) i będzie taka wyraźna potrzeba, dodam jakiś prosty generator LOD, działający np w oparciu o niwelowanie krawędzi poczynając od najkrótszych, aż model będzie mieścił się w wymaganiach danego poziomu. Stara gra robiła coś podobnego - co ciekawe całkowite wyłączenie tego mechanizmu i ustawienie nieskończonej widoczności nie stanowiło żadnego znaczącego wysiłku dla współczesnego PC.

Chodziło mi o różnicę między twoim low poly a low poly dzisiejszych standardów.
Musisz rozwinąć o jaką konkretnie rożnicę ci chodzi, ciężko odnieść się do samej "archaiczności".

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7534
Propsy4970
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?

inż. Avallach
Administrator

Kharynic - The History of Mine Valley
#32 2018-02-09, 18:23(Ostatnia zmiana: 2018-02-09, 18:48)
Chodzi mi o detale modeli, z tego co patrzyłem organika jest zbliżona do Pewnej Starej Gry, nie mówię że to źle ale liczba trójkątów jest znacznie niższa w stosunku do modeli tworzonych obecnie na potrzeby current genów jak to wcześniej wspominałeś.
Jak na grę PC current gen byłoby to rzeczywiście znacznie mniej. Myślę jednak że w porównaniu z grami przeglądarkowymi (a chodzi właśnie o taką) nie będzie się wyróżniać. Jak dobrze pójdzie, gra będzie działać też na mocniejszych platformach mobilnych (czy to na WebGL w przeglądarce czy natywnie na Vulcanie), chociaż nie jest to główny target.

Jeśli będą chętni, po ukończeniu projektu będzie można przygotować wersję natywną na PC z wygenerowanymi normalmapami i włączoną tesselacją. To jednak cel opcjonalny, przede wszystkim zależy mi na okrojeniu i uproszczeniu początkowych założeń tak żeby rozwój projektu do grywalnej postaci był jak najszybszy (minimum viable product).
Na razie jest wątpliwe czy będę w stanie poświęcać na niego chociaż tą godzinę dziennie, upraszczanie to konieczność. Wraz z postępem prac, wzrostem zainteresowania projektem i dostępnymi zasobami będzie można te założenia rozszerzać. Ja dysponuję przede wszystkim kompetencjami z zakresu rozwoju oprogramowania które są potrzebne żeby napisać silnik rozgrywki, narzędzia, zaprojektować i rozplanować resztę. Kwestię np tworzenia assetów o wyższym stopniu złożoności zostawiam kontrybutorom - projekt jest przecież otwarty, każdy będzie mógł dodać swoją cegiełkę jeśli tylko będzie ona pasować.

Popatrz na modding - jeśli gra jest grywalna, a assety łatwe do podmiany, to nawet jeśli oryginalne są niskiej jakości, w końcu znajdują się modderzy chętni wymienić je na lepsze. Tutaj będą mieli możliwość nie tylko stworzenia moda, ale uczynienia go oficjalną częścią projektu i znalezienia się wśród jego twórców. Nie ma wymagań co do przejścia sekretnej inicjacji, zanoszenia listu do kopalni czy robienia konkretnie czegoś czego ktoś żąda. Nie ma też premiery ani deadline'u - projekt jest na bieżąco dostępny do gry i rozwoju, a gracze otrzymują aktualizacje na bieżąco.

Obecnie minimalną grywalną wersję wyobrażam sobie jako pojedynczą lokację, nieruchomych npc, dialogi tworzące questy, bohatera którym można biegać i wykonywać interakcje z obiektami i przedmiotami zbieranymi do ekwipunku. W tym stanie projekt powinien być już grywalny i satysfakcjonująco przedstawiać chociaż część fabuły. W tym miejscu będzie można ustalić dalszy kierunek.

Fabio

Fabio

The Modders
posty2694
Propsy1542
ProfesjaProducent
  • The Modders
@inż.Avallach a o projekcie informujesz tylko tutaj i na FB czy gdzieś jeszcze?

PS. To o tym łowcy skądś kojarzę, chyba z pomysłu na fabułę do moda (Gothic) :D.
 
Gothic II:
Z życia złodzieja
The Vulcano Quest - Dubbing PL

Gothic I:
Orcades

Simen to taki nilfgard, za proste przestepstwa ucina rece ~ Mac Dun

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7534
Propsy4970
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?
@inż.Avallach a o projekcie informujesz tylko tutaj i na FB czy gdzieś jeszcze?

PS. To o tym łowcy skądś kojarzę, chyba z pomysłu na fabułę do moda (Gothic) :D.
Pomysł był mój, zapostowany z multikonta. Kiedyś proponowałem go jako fabułę DK. O projekcie informuję tylko tutaj - na razie. Profil na FB (i na YT i Twitterze) jest założony na zapas - w razie gdyby ktoś stworzył inne o takiej samej nazwie, będzie widać który był założony wcześniej. Mam też dodatkową domenę kharynis.org.

Z szerszym marketingiem czekam na pewien moment - wtedy napiszę na polskich, niemieckich i rosyjskich forach o pewnej starej grze.

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7534
Propsy4970
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?

inż. Avallach
Administrator

Kharynic - The History of Mine Valley
#35 2018-02-10, 21:26(Ostatnia zmiana: 2018-02-11, 11:24)
Wrzuciłem demo builda ze standardowymi assetami dla pokazania że silnik się ładuje. Są tu już drobne bugi, ale obecnie skupiam się na kodzie niskopoziomowym w porównaniu do tego.

Można dodawać już skrót do gry na pulpit i otwierać ją osobno od przeglądarki (po kliknięciu okno przełączy się na pełen ekran).






Na Androidzie i iOSie tryb "osobnej apki" działa w identyczny sposób, bez instalacji - ale tam na razie nie da się nawet obejrzeć dema.


Aha, wrzuciłem też kilkadziesiąt modeli, w tym te użyte do robienia splash screena: https://github.com/kharynic-project/kharynic/tree/master/resources/meshes
Możecie używać niekomercyjnie (np w modach) pod warunkiem zaznaczenia w creditsach że użyto zasobów z kharynic.org.

//edit: wrzuciłem nowego builda z automatycznym zwiększaniem jakości grafiki kiedy jest to możliwe.

inż. Avallach

inż. Avallach

Administrator
Czego pragniesz?
posty7534
Propsy4970
Nagrody
ProfesjaProgramista
  • Administrator
  • Czego pragniesz?

inż. Avallach
Administrator

Kharynic - The History of Mine Valley
#36 2018-02-11, 19:28(Ostatnia zmiana: 2018-02-11, 19:38)
Mam działające "externale" - interfejs wystawiony przez silnik dla skryptów. Kod C# transpilowany do C++ transpilowany do asm.js skompilowany do WebAssembly gada z JavaScriptem. Było przy tym sporo generwania kodu C# i JS, zapoznawania się z działaniem Emscripten i CLR. Dla zainteresowanych detalami technicznymi:
Generator wrapperów JS i C#: https://github.com/kharynic-project/kharynic/blob/master/engine/Assets/Editor/EngineExternals.Generator.cs
Definicje externali: https://github.com/kharynic-project/kharynic/blob/master/engine/Assets/EngineExternals.cs
Kod rejestrujący wskaźniki załadowanych funkcji C# w JS: https://github.com/kharynic-project/kharynic/blob/master/engine/Assets/Engine.cs#L52

Działanie w praktyce:
Kod silnika w C#:

Użycia w JavaScripcie / konsoli deweloperskiej:


Teraz pracuję nad (prostszym) interfejsem w drugą stronę - wystawianie przez skrypty interfejsu dla silnika (do tej pory kodziłem warstwy pośrednie ręcznie, teraz kolej na generator).

Wowoz

Wowoz

Użytkownicy
Wowoźny
posty3583
Propsy4581
Nagrody
Profesjabrak
  • Użytkownicy
  • Wowoźny
 


Paradoxal

Paradoxal

Użytkownicy
Awesomeness
posty452
Propsy448
ProfesjaGrafik 3D
  • Użytkownicy
  • Awesomeness
Cytuj
multiplayer support

Nie zabijaj tego dobrze zapowiadającego sie przedsięwzięcia multiplayerem.

Dla tworzących multi w grach cRPG powinno być osobne miejsce w piekle.
 


1 Użytkownik i 1 Gość przegląda ten wątek.
Do góry