Not logged inOpenClonk Forum
Up Topic Community / German / CR Projekt in OC wiederbeleben
1 2 Previous Next
Parent - - By DaFatBrainbug Date 2018-03-11 20:51
Klar mach ich gerne.
Wenn er dann mal mehr ist als ein ungeordneter Haufen Experimentalcode ^^
Meine Tests mit Landschafts-Cel-Shading waren immerhin ganz erfolgreich.
Auf dem oberen Bild ist der Effekt dezenter, auf dem unteren stärker eingestellt.

Reply
Parent - - By Marky [de] Date 2018-03-11 21:35
Wenn die Schatten noch ein bisschen glatter wären statt diese harten Kanten...
Parent - By DaFatBrainbug Date 2018-03-11 22:23 Edited 2018-03-11 22:49
Sieht schon smoother aus oder? Bin schon ganz zufrieden damit.
links 3, mitte 4 brighness levels. original rechts zum vergleich.
Das, was mal die Lichtstrahlen waren sieht noch etwas seltsam aus.
Und die Materialkanten sind nicht gerade hübsch.

Reply
Parent - - By Pyrit Date 2018-03-11 22:04
Ja, das sieht voll gut aus!
Mich interessiert auch, ob man an den Übergängen sowas wie anti-aliasing machen kann? Damit da nicht diese Pixelstufen entstehen.
Parent - By Marky Date 2018-03-11 22:55
Genau - das und ein bisschen smoothing.
Parent - - By DaFatBrainbug Date 2018-03-11 23:07 Edited 2018-03-11 23:09
Also wichtig ist auf jeden Fall dass die Kanten nicht zu zackig sind, das ist schon besser geworden.
AA zwischen den Stufen - klingt gut, aber nicht so einfach.
Ne gewisse härte find ich aber ganz in Ordnung, so soll das ja bei Cel-Shading aussehen. Die option mit AA wär aber sicher interessant. Wenn ich wüsste wie.
Der Kontrast der verschiedenen Stufen hat auch viel Einfluss auf die wahrgenommene Härte. Je nach Display (und den Shadereinstellungen) kann das beim einen härter und beim anderen weicher aussehen.
Reply
Parent - - By Clonkonaut Date 2018-03-11 23:14
AA müsste man wohl irgendwie kompliziert in den Shader reinschreiben. OC macht ja schon AA, aber erkennt die Shadingkanten dafür natürlich nicht als harte Kanten.
Reply
Parent - By Caesar Date 2018-03-12 00:22
Hm, ist es moeglich, dass es wesentlich einfacher waere, die Kanten ein bisschen weich zu machen, statt echtes AA zu implementieren
Parent - By Sven2 [us] Date 2018-03-12 00:24
Ich finde die harten Kanten cool. Das hat ein wenig Retro-Charakter.
Parent - - By DaFatBrainbug [de] Date 2018-03-12 14:25 Edited 2018-03-12 14:40
Ok, Thema schwarze Outlines.
Die Technik wie hier von PeterW benutzt taugt leider nur für rundliche Objekte und bringt weitere Probleme mit sich. Größere Fächen in scharfem Winkel zum Viewport werden dann eben schwarz.

Was sind die Alternativen?
- Inverted backface culling: Alle vom Blickwinkel abgewandten Faces werden gezeichnet (culling deaktiviert), 'überzeichnet'/fetter gemacht und geschwärzt. Somit sind die dann vom Viewport als schwarze überstehende Ränder sichtbar wenn die zum Viewport zugewandten Faces darüber gerendert werden. Objekte müssen also 2 mal gerendert werden. Geht das überhaupt über glsl-Files?
- Edge-Detection: hier in der 1. Antwort beschrieben. Rendert die Objekte im 1. Durchgang. Dann werden die Normals mit benachbarten Normals verglichen, und wenn diese sich stark unterscheiden wirde eine 'Edge' erkannt, die dann in einem 2. Renderlauf darübergelegt wird. Man brauch wohl einen Stencil-Buffer, was auch immer das genau ist. Wieder die Frage ob das über glsl-Files möglich ist?
- ? Gibt wohl noch mehr Möglichkeiten.

Würde gerne von euch hören was davon machbar ist oder ob ihr noch eine bessere Methode kennt.

Edit: Ein guter Startpunkt wäre mal zu wissen wie/wo ich den Culling-Mode umstellen kann.
Reply
Parent - - By Clonkonaut Date 2018-03-12 15:04

> wie/wo ich den Culling-Mode umstellen kann.


Das geht glaube ich gar nicht per Shader oder überhaupt allgemein. Die Einstellung ist immer in den jeweiligen .material-Dateien der ganzen Meshes drin.
Reply
Parent - By DaFatBrainbug Date 2018-03-12 19:09
Mist, das hilft mir nicht weiter.
Reply
Parent - - By DaFatBrainbug [de] Date 2018-03-22 11:56
Kann ich über den Shader-Code irgendwie FBOs (frame buffer objects) erstellen?
Das wäre super für eine ganze Reihe von Effekten.
Reply
Parent - - By Luchs [de] Date 2018-03-22 14:30
Nein, so etwas geht leider nur mit Modifikation des Renderers in C++. (Manche Sachen gehen vielleicht auch über die Ogre material-Skripte, aber ich meine dass Sachen mit extra FBOs nicht implementiert sind.)
Parent - - By DaFatBrainbug [de] Date 2018-03-22 16:07
Schade!
Ein Depth Buffer Object müsste es ja trotzdem geben, oder? (Also eine 2D textur, in der die z-Werte gespeichert werden) Habe gelesen, dass der immer standardmäßig erstellt wird.
Kann ich denn den irgendwie ansprechen?
Reply
Parent - - By Luchs Date 2018-03-22 17:46
Es gibt auf jeden Fall einen Depth Buffer, die GPU nutzt das intern, um überlappende Objekte richtig zu zeichnen. Im Fragment Shader kannst du darauf aber nicht zugreifen, weil zu dem Zeitpunkt noch gar nicht feststeht, wie der Depth Buffer insgesamt aussieht. Insbesondere wird der Fragment Shader ggf. auch für Fragmente ausgeführt, die tatsächlich von einem anderen Fragment verdeckt werden.

Um mit dem Depth Buffer zu arbeiten, müsste man (wieder im C++-Code) einen zusätzlichen Render-Pass einführen.
Parent - - By DaFatBrainbug Date 2018-03-22 18:16
Ok, danke für die Erklärung.
Reply
Parent - - By Luchs Date 2018-03-22 19:38
Ich würd's dir ja gerne einbauen, kenne mich aber leider nicht gut genug mit dem Rendering-Code in OC bzw. mit OpenGL allgemein aus. :(
Parent - - By DaFatBrainbug Date 2018-03-22 23:12
Wenn das eine Möglichkeit ist.. vielleicht schau ich mir das selber mal an.
Zumindest mit dem Shadercode kenn ich mich schon ganz gut aus jetzt. 2 Wochen hats gedauert.
Reply
Parent - - By Clonkonaut [fr] Date 2018-03-22 23:14
Nicht schlecht! :)
Vielleicht fallen dir ja an unserem verwendeten Code Sachen auf (oder sind aufgefallen), die man verbessern könnte.
Reply
Parent - - By DaFatBrainbug Date 2018-03-22 23:48
Ok ich geb mir mal Mühe :)

Der Abschnitt über Shader in der Clonk Wiki war nicht besonders hilfreich.
Die beiden ersten Links darin gehen zur Ogre manual. Fand ich viel zu technisch für den Einstieg und erschlägt einen mit 1000 Variablen, wenn man doch einfach erst mal nen Clonk in pink rendern will. Der ganze Abschnitt in der Wiki spricht vor allem davon was man nicht kann und verwirrt so. Die wichtige Rolle von light, texture, fragColor, etc ist mir erst langsam klar geworden durch rumprobieren. Ein paar Beispiele mit kleinem Skript und großem anschaulichen Effekt wären hier richtig gut.

Die Unterteilung in mehrere glsl Dateien wird nirgens erklärt.

Es ist schwer zu erkennen wo die Grenzen des Machbaren liegen. Musste viel fragen und selber testen wo die Ansatzpunkte zum 'echten' OGL sind.

Die Funktion des Ambient Lights war sehr schwer zu durchschauen. Erst nachdem ich so ziemlich alles andere abgeschaltet hab, hab ich verstanden wie das Licht untertage zusammengemixt wird.

Wenn 2 dynamische Lichtquellen nah bei einander sind, dann verschmilzt das Licht zu einem Punkt zwischen den Lichtquellen. Das sieht manchmal sehr seltsam aus, speziell mit dem Shader.

Die normalen Runden Bäume sind aus schiefen Flächen zusammengesetzt, das hatte öfter mal seltsame Lichteffekte zur Folge.
Reply
Parent - - By Clonkonaut [fr] Date 2018-03-23 00:09
Du sprichst, was die Doku angeht, exakt meine Probleme an. :)
Die ist so ein bisschen für Leute geschrieben, die sich perfekt mit Ogre-Shadern auskennen. Fände es daher genauso cool, wenn du deine Erkenntnisse zum Clonkshader aufschreiben könntest (unsere Person ist da leider nicht mehr so aktiv).
Reply
Parent - By DaFatBrainbug [de] Date 2018-03-23 09:48
Jeder Entwickler schreibt natürlich gerne Dokus. :)
Ich glaub nicht, dass ich da so viel Durchblick hab um was wirklich hilfreiches zu schreiben.
Es ist ja schon Job des Entwicklers seinen Code zu dokumentieren.

Ich helf aber gerne um die 'noob-Sicht' auf die Doku zu repäsentieren, wenn sich jemand mit mehr technischem Verstand findet, der das überarbeitet. Evtl kann ich dafür ein paar kleine Beispiele programmieren.
Reply
Parent - By ala [de] Date 2018-03-23 09:17

>Wenn 2 dynamische Lichtquellen nah bei einander sind, dann verschmilzt das Licht zu einem Punkt zwischen den Lichtquellen. Das sieht manchmal sehr seltsam aus, speziell mit dem Shader.


Ohja, überlappende Lichter sinde echt seltsam. Und das passiert eigentlich recht oft in der Praxis, gerade wenn wir mehr Lichtobjekte verwenden wollen. Da wünsche ich mir auch noch Verbesserung.
Parent - By DaFatBrainbug Date 2018-03-14 01:35 Edited 2018-03-14 01:37
Hab den Cel-Shader heut abend doch noch so weit bekommen, dass ich hier mal eine 1. Version posten kann. Für alle zum rumspielen. Leider noch keine Outlines (am ende ist ein Stück Code drin für Edge-Detection, sieht aber doof aus). Muss jetzt ins Bett^^
Values zum ändern: STRG-F "levels"
I hereby license the file CommonShader.glsl under the CC-BY license
Attachment: CommonShader.glsl (7k)
Reply
Up Topic Community / German / CR Projekt in OC wiederbeleben
1 2 Previous Next

Powered by mwForum 2.29.7 © 1999-2015 Markus Wichitill