Gamestudio Links
Zorro Links
Newest Posts
Blobsculptor tools and objects download here
by NeoDumont. 03/28/24 03:01
Issue with Multi-Core WFO Training
by aliswee. 03/24/24 20:20
Why Zorro supports up to 72 cores?
by Edgar_Herrera. 03/23/24 21:41
Zorro Trader GPT
by TipmyPip. 03/06/24 09:27
VSCode instead of SED
by 3run. 03/01/24 19:06
AUM Magazine
Latest Screens
The Bible Game
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Who's Online Now
3 registered members (AndrewAMD, TipmyPip, Edgar_Herrera), 804 guests, and 4 spiders.
Key: Admin, Global Mod, Mod
Newest Members
sakolin, rajesh7827, juergen_wue, NITRO_FOREVER, jack0roses
19043 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Einzelne Objekte vor Postprocessing-Shader "schützen" #458033
02/13/16 16:11
02/13/16 16:11
Joined: Sep 2005
Posts: 352
Germany
preacherX Offline OP
Senior Member
preacherX  Offline OP
Senior Member

Joined: Sep 2005
Posts: 352
Germany
Ich probiere grad mal was mit Postprocessing-Shader...

Hab dazu mal eine Frage:

Wenn ich einem View einen Postprocessing-Shader zuweise, so sind
ja alle Objekte innerhalb des Views davon betroffen. Gibt es eine Möglichkeit, einzelne Objekte aber davor zu schützen, sodass sie normal dargestellt werden?

Re: Einzelne Objekte vor Postprocessing-Shader "schützen" [Re: preacherX] #458036
02/13/16 19:36
02/13/16 19:36
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Nicht direkt, dazu müsstest du die Objekte in einem separaten (bspw. NOENT mit parent und "child" Verbindung/ Aufbau) View rendern und dem Ergebnis nach Postprocessing hinzufügen.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: Einzelne Objekte vor Postprocessing-Shader "schützen" [Re: Superku] #458037
02/13/16 20:34
02/13/16 20:34
Joined: Apr 2010
Posts: 172
W
wdlmaster Offline
Member
wdlmaster  Offline
Member
W

Joined: Apr 2010
Posts: 172
Die von Superku vorgeschlagene Methode hat den Nachteil, dass man eine zweite Kamera benötigt (Entities werden unnötigerweise noch mal gerendert) und die vom Postprocessing ausgeschlossenen Objekte werden immer VOLLSTÄNDIG ausgeschlossen, egal ob sie teilweise von nicht-auszuschließenden Objekten überlagert werden oder nicht.

Man nimmt sich einen Render-Target zur Hand und "maskiert" damit die Objekte, die ausgeschlossen werden sollen. Dazu erstellst du erstmal ne Bitmap, die die selbe Auflösung wie die Kamera hat. Dann setzt du den target1-Parameter der Kamera auf diese Bitmap. Dadurch kannste im Pixelshader per color1-Register in diese Bitmap schreiben (vorausgesetzt color1 wird noch nicht für andere Zwecke verwendet). In dem Shader, der auf die auszuschließenden Entities angewendet wird, fügst du im Kopf des Pixelshaders ne neue float4-Variable hinzu, die du dem color1-Register zuweist. Irgendwo im Pixelshader setzt du diese Variable dann einfach auf 1.

Im Postprocess-Shader nimmst du die oben erstellte Textur dann als "Maske", um alles, was schwarz (!) ist zu bearbeiten und den Rest nicht. Du musst also die Maske im Pixelshader invertieren. Das ist so gewählt, weil dadurch die Kompatibilität mit Objekten sichergestellt ist, die keine Shader sondern nur das Standardmaterial zugewiesen haben. Diese werden einfach mit solidem schwarz gerendert. Willst du stattdessen die "intuitive" Version, wo die auszuschließenden Objekte schwarz und der Rest weiß ist, müsstest du erstens JEDEM Objekt einen Shader zuweisen und zweitens in JEDEM Shader ins color1-Register schreiben.

Ein Nachteil dieser Methode ist, dass die sky_color unbedingt schwarz sein muss. Kannst also keine andere Farbe verwenden. Ansonsten ist dein Postprocessing von der Helligkeit des Hintergrunds abhängig.

Re: Einzelne Objekte vor Postprocessing-Shader "schützen" [Re: wdlmaster] #458039
02/13/16 22:41
02/13/16 22:41
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Superku Offline
Senior Expert
Superku  Offline
Senior Expert

Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
Das ist eine sehr gute Idee mit zusätzlichen Rendertargets, darauf war ich noch nie gekommen.
Jedoch sind die von wdlmaster angesprochenen Probleme eigentlich keine, da per NOENT-parent auch nur die tatsächlich benötigten Entitys gerendert werden (die du im default camera view dann unterdrückst), und du - per stage Verknüpfung meine ich - den z-Buffer des Vor-Views/ camera übernimmst.


"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual

Check out my new game: Pogostuck: Rage With Your Friends
Re: Einzelne Objekte vor Postprocessing-Shader "schützen" [Re: Superku] #458042
02/14/16 00:04
02/14/16 00:04
Joined: Sep 2005
Posts: 352
Germany
preacherX Offline OP
Senior Member
preacherX  Offline OP
Senior Member

Joined: Sep 2005
Posts: 352
Germany
Danke für die Antworten! laugh

Mal schauen ob ich das als absolute "Shader-Programmierer-Niete"
hinkriege... ^°

Re: Einzelne Objekte vor Postprocessing-Shader "schützen" [Re: preacherX] #458046
02/14/16 08:50
02/14/16 08:50
Joined: Apr 2010
Posts: 172
W
wdlmaster Offline
Member
wdlmaster  Offline
Member
W

Joined: Apr 2010
Posts: 172
Quote:

...da per NOENT-parent auch nur die tatsächlich benötigten Entitys gerendert werden...


Verwechsle nicht das bloße Schreiben von ein paar Pixeln in einen weiteren RAM Bereich mit dem kompletten Neurendern von Objekten. In der Render-Target-Methode wird garnichts neu gerendert, bei der NOENT-Methode schon. Ehe Acknex mit ihren lahmarschigen Algorithmen irgendwelche Entities aus den Views entfernt und im neuen View alle Matrizen und Parameter (überflüssigerweise) nochmals vorbereitet hat, hat die GPU die paar Pixel quasi im Vorbeigehen noch 100 mal geschrieben, mit null Performance-Verlust. Was ist, wenn ich mehr Masken benötige? In den Render-Target passen 4, also erstell ich noch 3 weitere Kameras und geh das Acknex-interne Prozedere noch 3 weitere überflüssige Male durch, wenn mir die GPU das selbe Ergebnis mit NULL Performance-Verlust direkt und ohne Engine-Umwege liefert?

Hmmm...

Re: Einzelne Objekte vor Postprocessing-Shader "schützen" [Re: wdlmaster] #458050
02/14/16 13:53
02/14/16 13:53
Joined: Sep 2005
Posts: 352
Germany
preacherX Offline OP
Senior Member
preacherX  Offline OP
Senior Member

Joined: Sep 2005
Posts: 352
Germany
Habe noch was im Handbuch entdeckt:

OVERRIDE
Overrides the view material setting. Set this flag for materials to be used for rendering objects even when a view material is set.

Kann mir das auch weiterhelfen oder sehe ich da was falsch?

Re: Einzelne Objekte vor Postprocessing-Shader "schützen" [Re: preacherX] #458053
02/14/16 19:11
02/14/16 19:11
Joined: Apr 2010
Posts: 172
W
wdlmaster Offline
Member
wdlmaster  Offline
Member
W

Joined: Apr 2010
Posts: 172
Ob dir das weiterhilft hängt davon ab, wie du deine Shader zuweist bzw. verwendest und welche der beiden genannten Methoden du verwendest. Für dein eigentliches Vorhaben hilft dir das wenig, es seit denn, du hast bereits per camera.material ALLEN Objekten ein und den selben Shader verpasst. In dem Fall kannst du bei demjenigen Shader das OVERRIDE Flag setzen, der für das Ausgrenzen der Entities zuständig ist. Ansonsten brauchst du dich in deinem Fall nicht mit OVERRIDE zu befassen sondern einfach nur den Shader mit oben genannter Änderung den betreffenden Entities zuweisen...

Re: Einzelne Objekte vor Postprocessing-Shader "schützen" [Re: wdlmaster] #462301
09/20/16 08:03
09/20/16 08:03
Joined: Jun 2010
Posts: 212
tagimbul Offline
Member
tagimbul  Offline
Member

Joined: Jun 2010
Posts: 212
hab ich das richtig verstanden?
1 view = 3 Channels
-target1/COLOR1
-target2/COLOR2
-target3/COLOR3

wenn ich einzelne effekte auf einem model haben will, wie z.B einen Bloom
und einen Blur,
dann mache ich ein material das
model1 ins target1/COLOR1 packt für bloom,
model2 ins target2/Color2 packt für blur,
und die scene ohne model 1 und 2 in target3/COLOR3

dann mache ich einen postprozessing shader der COLOR1 bis COLOR3 vermischt?


meine website mit 3dgs sachen =) //noch nicht ganz umgebaut ^^"
http://flashbreaker.com/home.html
und mein YT channel mit diversen game entwicklungs videos, vor allem shader zeugs
https://www.youtube.com/user/tagimbul/videos
Re: Einzelne Objekte vor Postprocessing-Shader "schützen" [Re: tagimbul] #462363
09/23/16 18:57
09/23/16 18:57
Joined: Apr 2010
Posts: 172
W
wdlmaster Offline
Member
wdlmaster  Offline
Member
W

Joined: Apr 2010
Posts: 172
Ist zwar ne späte Antwort meinerseits (ich schaue nur ganz selten mal hier vorbei) aber egal:

Quote:

hab ich das richtig verstanden?
1 view = 3 Channels

Nicht ganz. 1 View = 4 Render-Targets, 4 Kanäle pro Target (RGBA). Der "nullte" Target ist das normale Bild, was sowieso immer ausgegeben werden muss (COLOR0) + die 3 zusätzlichen Targets 1...3 (COLOR1...3)

Quote:

wenn ich einzelne effekte auf einem model haben will, wie z.B einen Bloom
und einen Blur,
dann mache ich ein material das
model1 ins target1/COLOR1 packt für bloom,
model2 ins target2/Color2 packt für blur,
und die scene ohne model 1 und 2 in target3/COLOR3


Das ist zu viel unnötiger Overhead für dieses Vorhaben, weil du ja dafür gerade mal 2 Kanäle im ersten Target benötigst, die Targets 2 und 3 kannst du für zukünftige Effekte verwenden. Du hast in jedem Target 4 Kanäle zur Verfügung, in denen du beliebige Informationen ablegen kannst. Es kommt nur darauf an, wie diese Kanäle von deinem Post-Process-Shader interpretiert werden. Du packst die Maske für den Bloom in den Rot-Kanal und die Maske für den Blur in den Grün-Kanal. Mehr braucht der Post-Process-Shader nicht zu wissen.

Da Bloom und Blur sowieso globale Effekte sind, die unabhängig von platzierten Objekten IMMER ausgeführt werden, brauchst du da nix irgendwelchen Targets zuzuweisen. Beim Blur interpolierst du einfach das gerenderte Bild (TargetMap) mit dem verwischten Bild (im Pixelshader berechnet) und nimmst den Grün-Kanal des ersten Targets als Faktor für die Interpolation. Allerdings ist es da auch nötig, die Maske selbst noch zu verwischen, da ansonsten das verwischte Bild zwar auf der Entity erscheint, aber nicht in benachbarte Pixel übergeht.


Moderated by  Blink, Hummel, Superku 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1