Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Apr 20, 2024 15:09

Foren-Übersicht » Sonstiges » Meinungen zu den Projekten
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 418 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5 ... 28  Nächste
Autor Nachricht
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 22, 2009 20:52 
Offline
DGL Member

Registriert: Di Mai 24, 2005 16:43
Beiträge: 710
Soweit ich weiß, sollte man statt einem (oder bei dir halt mehreren) Uber-Shadern lieber mehrere kleine haben.
Ich glaube zwar, dass das Problem mit den If-Abfragen bei Shadern inzwischen nicht mehr so akut ist, aber ich denke schon, dass
ein größerer Shader zu weniger Performance führt.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Apr 22, 2009 21:47 
Offline
DGL Member
Benutzeravatar

Registriert: Do Jul 20, 2006 17:34
Beiträge: 52
So wie ich das verstanden hab schmeißt er vor dem an OpenGl senden alles aus dem Uber-Shader raus was er nicht braucht, und hat dann nen schlanken Shader ohne ifs - schlauer Ansatz wie ich finde.

Die Screenshots sehen wirklich toll aus und das Spielkonzept hört sich auch sehr interessant an.

_________________
2+2=5
For extremely large values of two


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Apr 23, 2009 16:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 15:54
Beiträge: 372
Wohnort: München
Programmiersprache: Delphi, C#, FPC
Seth hat geschrieben:
Soweit ich weiß, sollte man statt einem (oder bei dir halt mehreren) Uber-Shadern lieber mehrere kleine haben.
Ich glaube zwar, dass das Problem mit den If-Abfragen bei Shadern inzwischen nicht mehr so akut ist, aber ich denke schon, dass
ein größerer Shader zu weniger Performance führt.


Wilson hat schon recht, hier mal ein kleines Beispiel

Vertex Shader ("Mega Shader")
Code:
  1. #ifdef GE_TEXTURE
  2. uniform mat4 transMatrix; // ist jetzt irgendwas
  3. #endif
  4.  
  5. #ifdef GE_LIGHT0
  6. uniform vec4 lightPos0; // und noch irgendwas
  7. #endif
  8.  
  9. usw.


Fragment Shader ("Mega Shader")
Code:
  1. #ifdef GE_TEXTURE0
  2. uniform sampler2D texture0;
  3. #endif
  4.  
  5. #ifdef GE_TEXTURE1
  6. uniform sampler2D texture2;
  7. #endif
  8.  
  9. void main()
  10. {
  11.   vec4 finalColor = vec4(1.0);
  12.   #ifdef GE_TEXTURE0
  13.   finalColor *= texture2D(texture0, gl_TexCoord[0].st) * gl_Color;
  14.   #else
  15.   finalColor *= gl_Color;
  16.   #endif
  17.  
  18.   usw.
  19. }


Jetzt gibt es für jedes Material einen einzelnen Shader, so ungefähr so aussieht:
Vertex Shader für ein spezielles Material
Code:
  1. #define GE_TEXTURE0
  2. #define GE_TEXTURE1
  3. #define GE_BUMPMAP
  4.  
  5. #include "megashader.vertex" // include wird von der Engine selbst übernommen, also nicht von OGL
  6.  


Fragment Shader für ein spezielles Material
Code:
  1. #define GE_TEXTURE0
  2. #define GE_TEXTURE1
  3. #define GE_BUMPMAP
  4.  
  5. #include "megashader.fragment" // include siehe drüber
  6.  


Das hat nen riesen Vorteil: ich kann die Shader beliebig zusammensetzen und muss bei einer Optimierung/Verbesserung nur eine Shader-Datei ändern. Da OGL zwar #include für den späteren Gebrauch schon mal reserviert hat, es aber noch nicht funktioniert, hab ich das selbst bei mir in die Shader-Klasse eingebaut. Die ganzen #ifdef - Sachen (also der Preprozessor) funktioniert jedenfalls prächtig. Die ganzen #if... statements übergebe ich so an OGL, so dass der sich dann raussuchen darf, was er braucht. Da alles unbenutzte schon zu Compile-Time rausgeschmissen wird, ist der final ausgeführte Shader je nach Material sehr schlank.

@Wilson:
danke für dein Feedback - da ist man doch gleich motivierter :-)

_________________
Aktuelles Projekt: Gael - Development Blog
Website: LightBlackSoft.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Apr 24, 2009 09:44 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Das ist ja mal cool, das hört sich sehr performant an. Zumindest glaub ich das, weil der shader wird ja erst nachdem laden compiliert, wobei dann doch alle undefinierten Sachen raußfliegen und somit im eigentlichen Shader nicht mehr auftauchen, oder? Wie ist das in dem Fall mit der maximalen Zeilenlänge? Gab es das nicht bei Shadern? Wie wird die dort berücksichtigt? Es könnte ja sein, dass der Shader beim laden bereits eine maximale Länge nicht überschreiten darf, oder muss erst der compilierte Shader eine maximale Länge einhalten?

_________________
Klar Soweit?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 11, 2009 02:55 
Offline
DGL Member

Registriert: Sa Mai 09, 2009 08:46
Beiträge: 3
Hi!
Echt eine tolle Idee. Erinnert mich aber doch sehr an Thief: Dark Project.
Das ist nicht zufällig das, woran du gedacht hattest? :)
Ist aber nicht schlimm, ich hab Thief geliebt und finde, es gibt viel zu wenige Stealth-Shooter dieser Sorte!
Ich freu mich auf das Spiel!

achja, mich würde mal interessieren wie genau du die Schatten machst! Sind das Stencilschatten?


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 11, 2009 07:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 15:54
Beiträge: 372
Wohnort: München
Programmiersprache: Delphi, C#, FPC
Oh, da ist ja noch nen offener Post :oops:
Zitat:
Das ist ja mal cool, das hört sich sehr performant an. Zumindest glaub ich das, weil der shader wird ja erst nachdem laden compiliert, wobei dann doch alle undefinierten Sachen raußfliegen und somit im eigentlichen Shader nicht mehr auftauchen, oder? Wie ist das in dem Fall mit der maximalen Zeilenlänge? Gab es das nicht bei Shadern? Wie wird die dort berücksichtigt? Es könnte ja sein, dass der Shader beim laden bereits eine maximale Länge nicht überschreiten darf, oder muss erst der compilierte Shader eine maximale Länge einhalten?

Also von einer maximalen Zeilenlänge in nem Shader hab ich noch nichts gehört, wäre ja komisch. Also dass man keine 2 GB Shader-Code hochladen kann, ist ja irgendwie klar. Der GLSL-Compiler liegt doch im Treiber und ist somit erstmal nicht von der Grafikhardware beschränkt. Der Output des Shaders ist dann aber Grafikkartenhardware-beschränkt (z.B. maximale Anzahl von varyings).

Bei den Preprozessor-Anweisungen liegt der Vorteil darin, dass die #if-#else-#endif im Shader-Code nicht mehr auftauchen, da diese vom Preprozessor vorher bereits komplett aus dem Shader rausgeworfen werden. Man kann (wie beim Preprozessor normal) bei den #ifs natürlich keine Variableninhalte überprüfen, dafür ist der Preprozessor jedoch nicht da.

Zitat:
achja, mich würde mal interessieren wie genau du die Schatten machst! Sind das Stencilschatten?

Ich benutze Shadow Textures als Schattenmethode. Ich hab mich dafür einfach entschieden. Die haben den Vorteil, dass ich keine Kenntnisse über die Geometrie brauche um Schatten zu erstellen. Außerdem hab ich den Vorteil, dass ich für halb-transparente Objekte (z.B. einen Zaun), ebenfalls sehr einfach Schatten erstellen kann. Das Anti-Aliasing-Problem ist natürlich ein Nachteil, jedoch wird der bei mir nicht so groß, da ich keine sehr weit reichenden Lichtquellen haben werden (bzw. benutzen will). Die Punktlichter sind auch nicht mehr so das Problem, da diese intern nur 6 Spot-Lights mit einem FOV von 90° sind.
Ich weiß nicht, ob es bei Stencil-Schatten auch mögich ist, jedoch hab ich mit dem Shadow Textures auch noch die Möglichkeit, die Shadows ebenfalls durch den Parallax-Shader zu schicken. Dadurch werden die Schatten an Objekten sehr schön angepasst, wodurch die Oberfläche noch realistischer wirkt. Das kann man im neusten Video sehr gut an der hinteren Wand sehen.

Für Soft-Shadows benutz ich nen einfachen Blur-Filter. Dadurch entstehen etwas weichere Schatten. Die Schatten werden ebenfalls noch durch den DoF-Post-Filter nochmal etwas "weicher" gezeichnet.

_________________
Aktuelles Projekt: Gael - Development Blog
Website: LightBlackSoft.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 11, 2009 11:54 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Basiert dein Spiel auf der sysygy Engine? Oder ist Sysygy=Gael?

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 11, 2009 12:18 
Offline
DGL Member
Benutzeravatar

Registriert: Fr Jan 04, 2008 21:29
Beiträge: 419
Wohnort: Lübeck
Für Schatten habe ich in der Unreal Engine 3 einmal ein sehr interessanten Ansatz gelesen. Dort wird mit zwei depthcubemaps gearbeitet, die eine ist etwas höher auflösend und die andere ist niedrig in der Auflösung und mit einem Blur filter verschommen. Anschließend wird der Vergleichswert als interpolation aus den beiden Texturen gebildet, wodurch Schatten entstehen die weicher werden, je weiter sie sich von dem angestrahlten Objekt entfernen. Im ungefähren stell ich mir das so vor wie auf dem Bild im Anhang. Nachteil ist natürlich, dass man doppelt so viele Cubemaps braucht und somit auch doppelt so viele renderpasses, aber dafür siehts garantiert noch cooler aus. In deinem Fall muss du natürlich die erschummelte Tiefe durch das Parallaxmapping berücksichtigen.

Edit: Ich würd das alles gerne selbst mal ausprobieren, aber ich schaffe es einfach nicht nen vernünftigen Renderbaum zusammen zu tüffteln, der mir erstmal alles an Daten in ein FBO schiebt. Meine Lichtquellen zeichne ich als billboarded quads über die szene , aber da die Daten im FBO falsch ankommen und ich nicht weiß was ich falsch mache kann ich das alles nicht ausprobieren. Auch habe ich ein Probleme Tiefenwerte in texturen zuspeichern, bzw. im Shader auszulesen. Wäre klasse, wenn du mir dabei etwas helfen könntest per pn oder so, da sich das was du beschrieben hast sehr stark nach dem anhört, was ich auch umsetzen möchte.

Edit2: kann auch sein, dass man den maximalen Beleuchtungsradius der Lichtquelle verwenden muss anstelle des roten Vektors, wie gesagt, das sind nur gedanken gänge, prüfen kann ich das nicht


Dateianhänge:
Dateikommentar: pi*Daumen Zeichnung für Softshadows
softshadows.jpg
softshadows.jpg [ 88.48 KiB | 7140-mal betrachtet ]

_________________
Klar Soweit?
Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Mai 11, 2009 12:55 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 15:54
Beiträge: 372
Wohnort: München
Programmiersprache: Delphi, C#, FPC
Flash hat geschrieben:
Basiert dein Spiel auf der sysygy Engine? Oder ist Sysygy=Gael?

Gael ist im Moment der Name der Engine - da ich für das Spiel noch keinen Namen habe, heißt es im Moment auch noch Gael.

Die Engine erstelle ich komplett neu, da ich in meiner alten Engine ein paar Ansätze drinnen habe, die mir nicht gefallen und nicht flexibel genug waren. Ein paar Code-Fetzen übernehm ich schon (z.B. die komplette Vektor-Geometry-Unit oder die FBO-Unit), ein Großteil ist jedoch komplett neu geschrieben.

Das liegt vor allem daran, dass ich komplett dynamisches Licht einbauen will und fast die komplette Render-Pipeline mit Shadern realisiert wird. Im moment gibt es z.B. nur einen Render-Pass, der ohne Shader realisiert wird - das ist der Pre-Depth-Pass, bei dem nur die Tiefenwerte geschrieben werden. Der Rest ist komplett mit Shadern. Daher wird auch eine OpenGL 2.0-Grafikkarte Vorraussetzung sein.

Zudem arbeite ich nicht mehr mit Display-Listen sondern mit VBOs, dadurch hätt ich soviel ändern müssen, dass es sich nicht lohnt, alte Code-Fragmente zu benutzen.

Sellmann hat geschrieben:
Für Schatten habe ich in der Unreal Engine 3 einmal ein sehr interessanten Ansatz gelesen. Dort wird mit zwei depthcubemaps gearbeitet, die eine ist etwas höher auflösend und die andere ist niedrig in der Auflösung und mit einem Blur filter verschommen. Anschließend wird der Vergleichswert als interpolation aus den beiden Texturen gebildet, wodurch Schatten entstehen die weicher werden, je weiter sie sich von dem angestrahlten Objekt entfernen. Im ungefähren stell ich mir das so vor wie auf dem Bild im Anhang. Nachteil ist natürlich, dass man doppelt so viele Cubemaps braucht und somit auch doppelt so viele renderpasses, aber dafür siehts garantiert noch cooler aus. In deinem Fall muss du natürlich die erschummelte Tiefe durch das Parallaxmapping berücksichtigen.

Das hab ich auch schon gesehen - aber nur als Video (YouTube Link). Jedoch ist das eine relativ gute Idee, aber der Speicherverbrauch ist jedoch relativ hoch - und die 6 zusätzlichen RenderPasses für jedes weitere Punktlicht sind schon sehr hoch. Vielleicht bau ich sowas mal ein - jedoch mit sehr niedriger Priorität.

Ich schau mal, dass ich in nächster Zeit mal ne Demo fertig stelle und diese mal hochlade - damit jeder mal ein wenig rumspielen kann :-). Jedoch will ich vorher noch ein paar Features einbauen, die jedoch noch einiges an Zeit dauern. Die aktuelle Demo könnt ich zwar schon hochladen, jedoch bin ich mit der noch nicht so zufrieden.

Sellmann hat geschrieben:
Edit: Ich würd das alles gerne selbst mal ausprobieren, aber ich schaffe es einfach nicht nen vernünftigen Renderbaum zusammen zu tüffteln, der mir erstmal alles an Daten in ein FBO schiebt. Meine Lichtquellen zeichne ich als billboarded quads über die szene , aber da die Daten im FBO falsch ankommen und ich nicht weiß was ich falsch mache kann ich das alles nicht ausprobieren. Auch habe ich ein Probleme Tiefenwerte in texturen zuspeichern, bzw. im Shader auszulesen. Wäre klasse, wenn du mir dabei etwas helfen könntest per pn oder so, da sich das was du beschrieben hast sehr stark nach dem anhört, was ich auch umsetzen möchte.


Also mein Render-Baum schaut wie folgt aus (dargestellt als XML):
Kurze Erklärung
  • RenderPass Enabled: Wenn 0, wird der Pass vom Renderer nicht automatisch ausgeführt, sondern von anderen Objekten (beim Depth:Lighting z.B. jedes Licht)
  • RenderElements: was für Mesh-Typen gezeichnet werden sollen
  • VBO-Binds: welche VBO-Streams benutzt werden sollen
  • DepthMask, ColorMask, DepthFunc: wie glDepthMask, glColorMask, glDepthFunc
  • PolygonOffset: wie glPolygonOffset
  • Type="RenderToTexture": zeichnen die Child-Passes in ein FBO, der dann am Ende per Fullscreen-Quad ausgegeben wird


Code:
  1. <Renderer>
  2.   <RenderPasses>
  3.     <Items>
  4.       <RenderPass Type="DepthPass" Name="RenderPass:Depth:Lighting" Enabled="0">
  5.         <VBOBinds>Normal, Vertex</VBOBinds>
  6.         <RenderElements>RenderStatic, RenderDynamic, RenderBlend</RenderElements>
  7.         <ColorMask x="0" y="0" z="0" w="0"/>
  8.         <DepthMask>1</DepthMask>
  9.         <DepthFunc>LessEqual</DepthFunc>
  10.       </RenderPass>
  11.       <RenderPass Type="DepthPass" Name="RenderPass:Depth:PreDepth" Enabled="0">
  12.         <VBOBinds>Normal, Vertex</VBOBinds>
  13.         <RenderElements>RenderStatic, RenderDynamic</RenderElements>
  14.         <ColorMask x="0" y="0" z="0" w="0"/>
  15.         <DepthMask>1</DepthMask>
  16.         <DepthFunc>LessEqual</DepthFunc>
  17.         <PolygonOffset Enabled="1" Factor="1" Units="1"/>
  18.       </RenderPass>
  19.       <RenderPass Type="ColorPass" Name="RenderPass:Normal:Lighting" Enabled="0">
  20.         <VBOBinds>Normal, Color, Index, TexCoord, EdgeFlag, SecColor, FogCoord, Weight, Vertex</VBOBinds>
  21.         <RenderElements>Material, RenderStatic, RenderDynamic, RenderBlend, Lighting</RenderElements>
  22.         <ColorMask x="1" y="1" z="1" w="1"/>
  23.         <DepthMask>0</DepthMask>
  24.         <DepthFunc>LessEqual</DepthFunc>
  25.       </RenderPass>
  26.       <RenderPass Type="RenderToTexture" Name="RenderPass:Normal:Post" Enabled="1">
  27.         <VBOBinds>Normal, Color, Index, TexCoord, EdgeFlag, SecColor, FogCoord, Weight, Vertex</VBOBinds>
  28.         <RenderElements>Material, RenderStatic, RenderDynamic, RenderBlend, Lighting</RenderElements>
  29.         <ColorMask x="1" y="1" z="1" w="1"/>
  30.         <DepthMask>1</DepthMask>
  31.         <DepthFunc>LessEqual</DepthFunc>
  32.         <ChildPasses>
  33.           <Pass>RenderPass:Depth:PreDepth</Pass>
  34.           <Pass>RenderPass:Normal:Lighting</Pass>
  35.         </ChildPasses>
  36.         <DrawShader>shader:post:dof</DrawShader>
  37.         <ShaderProperty>
  38.           <Items>
  39.             <Item Type="float" Name="sampleDist" Value="0.01"/>
  40.             <Item Type="float" Name="bloomIntenisty" Value="1.5"/>
  41.             <Item Type="float" Name="dofScale" Value="2.0"/>
  42.             <Item Type="float" Name="dofLenseSize" Value="0.43"/>
  43.             <Item Type="float" Name="dofLenseRadius" Value="0.15"/>
  44.           </Items>
  45.         </ShaderProperty>
  46.       </RenderPass>
  47.     </Items>
  48.   </RenderPasses>
  49. </Renderer>


Vielleicht hilft das ein wenig

_________________
Aktuelles Projekt: Gael - Development Blog
Website: LightBlackSoft.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 04, 2009 06:37 
Offline
DGL Member
Benutzeravatar

Registriert: Di Okt 03, 2006 14:07
Beiträge: 1277
Wohnort: Wien
Hallo LittleDave,

Zitat:
Jedoch macht mir das skalieren große Problem - irgendwo ist da noch der Wurm drinnen.

Vielleicht das alte Problem mit den Normalen?

Zitat:
hab ich nen kleines Problem: ich müsste bei fast jeder aktion alle betroffenen VBOs neu erstellen

Das versteh ich nicht. Du machst doch die Lichter mit Texturen, oder? Die VBOs sind doch bloße Formen, warum müssen die neu erstellt werden, wenn Du die Texturen änderst?

Zitat:
Was mir jetzt noch probleme bereitet: wie bekomme ich die aktuelle Helligkeit? Wenn da jemand nen guten Tipp hat, wäre ich sehr froh.

Das ist wahrscheinlich ein statistisches Problem (Mittelwert/Varianz der Farbe) und man könnte es vielleicht mit Stichproben in den Griff kriegen. Und O,Mann! Was ist "eine winzige LED"???

Viele Grüße,
Traude


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 04, 2009 10:24 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Eine winzige "Licht emmitierende Diode" Siehe Wikipedia. 8)

Und da hat er schon recht, mit dem Helligkeitsproblem. Eigentlich ist das jetzt so eine Raytracing Problematik, da du nicht nur die direkte Sichtlinie zu den Leuchten beachten musst, sondern auch die gesamte indirekte Beleuchtung.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 04, 2009 16:19 
Offline
DGL Member
Benutzeravatar

Registriert: Do Sep 02, 2004 19:42
Beiträge: 4158
Programmiersprache: FreePascal, C++
Wegen dem Licht: Ich würde vielleicht nur das Licht speichern, an das sich der Spieler gewöhnt hat und das dann als Faktor oder Summand verwenden um die Szene zu skalieren (schon im Shader). Damit dürftest du den realistischsten Wert erhalten. Die aktuelle Helligkeit brauchst du aber dennoch, um nämlich den Anpassungswert zu korrigieren. Dafür fällt mir ganz Spontan glHistogram ein. Nie damit gearbeitet, aber es scheint mir hilfreich.

Wenn du es ganz krass machen willst, kannst du noch nen FBO oder so erstellen, wo du die inverse der Szene reinrenderst, und zwar additiv (ok, da wäre der Accumulation-Buffer eher angebracht, da musst du dann auch nur einmal rendern). Das kopierst du dann in eine Textur / du benutzt diese Textur dann als multiplikatives Blending über der Szene und simulierst damit die dunklen Flecken die man sieht, wenn man in überstrahltes Licht geschaut hat (überreizte Nervenzellen oder so war das). Natürlich müsstest du diese Textur jeden frame etwas gen weiß verschieben, damit der Effekt nachlässt. Wäre aber ziehmlich cool.

Weiter so!

Gruß Lord Horazont

_________________
If you find any deadlinks, please send me a notification – Wenn du tote Links findest, sende mir eine Benachrichtigung.
current projects: ManiacLab; aioxmpp
zombofant networkmy photostream
„Writing code is like writing poetry“ - source unknown


„Give a man a fish, and you feed him for a day. Teach a man to fish and you feed him for a lifetime. “ ~ A Chinese Proverb


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 04, 2009 18:57 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7804
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Coole Idee.

Das mit glHistogram ist tatsächlich ein Ansatz. Man müsste halt nur wissen ob das auf der GraKa läuft oder ob da der Treiber in den "jag die Frames in den Keller"-Modus wechselt.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Jun 04, 2009 19:56 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Mär 09, 2005 15:54
Beiträge: 372
Wohnort: München
Programmiersprache: Delphi, C#, FPC
Traude hat geschrieben:
Hallo LittleDave,

Zitat:
Jedoch macht mir das skalieren große Problem - irgendwo ist da noch der Wurm drinnen.

Vielleicht das alte Problem mit den Normalen?

Ne, um Beleuchtung geht es noch nicht. Es geht darum, Meshes zu skalieren - und zwar nicht mit glScale sondern manuell - also Vertex für Vertex. Ist nur ein internes Problem. Aber trotzdem danke :-)

Traude hat geschrieben:
Zitat:
hab ich nen kleines Problem: ich müsste bei fast jeder aktion alle betroffenen VBOs neu erstellen

Das versteh ich nicht. Du machst doch die Lichter mit Texturen, oder? Die VBOs sind doch bloße Formen, warum müssen die neu erstellt werden, wenn Du die Texturen änderst?

Es geht dabei immer noch um den Editor. Es ist jetzt so, dass jedes Material nen eigenen VBO hat, der speziell für das Material angefertigt wird (Anzahl Texturkoordinaten werden z.B. beachtet). Jetzt müsste ich bei einem Material-Wechsel und bei jedem Verschieben, Skalieren, Rotieren mindestens zwei VBOs neu erstellen (Material: 2 VBOs, Transformieren: 1 VBO). Zudem sind die Materials noch extrem mit dem Renderer und noch speziell mit den Shadern verknüpft. Wenn ein Level jetzt einmal geladen ist und nicht mehr verändert wird, dann ist das sehr einfach beim Zeichnen - im Editor leider nicht. Daher hab ich für den Editor ja auch nen extra Render-Pfad

Lord Horazont hat geschrieben:
Wegen dem Licht: Ich würde vielleicht nur das Licht speichern, an das sich der Spieler gewöhnt hat und das dann als Faktor oder Summand verwenden um die Szene zu skalieren (schon im Shader). Damit dürftest du den realistischsten Wert erhalten. Die aktuelle Helligkeit brauchst du aber dennoch, um nämlich den Anpassungswert zu korrigieren. Dafür fällt mir ganz Spontan glHistogram ein. Nie damit gearbeitet, aber es scheint mir hilfreich.

Danke für den Tip mit dem glHistogram, kannte ich bisher überhaupt nicht :-). Mal schauen, wie das so funktioniert ...

Lord Horazont hat geschrieben:
Wenn du es ganz krass machen willst, kannst du noch nen FBO oder so erstellen, wo du die inverse der Szene reinrenderst, und zwar additiv (ok, da wäre der Accumulation-Buffer eher angebracht, da musst du dann auch nur einmal rendern). Das kopierst du dann in eine Textur / du benutzt diese Textur dann als multiplikatives Blending über der Szene und simulierst damit die dunklen Flecken die man sieht, wenn man in überstrahltes Licht geschaut hat (überreizte Nervenzellen oder so war das). Natürlich müsstest du diese Textur jeden frame etwas gen weiß verschieben, damit der Effekt nachlässt. Wäre aber ziehmlich cool.

Hört sich interessant an - ich zeichne eh schon in nen FBO, den ich dann per Post-Shader anzeige. Somit wäre da nicht mehr viel zu ändern. Zudem hat jedes Material auch noch nen eigenen Shader. Somit hab ich bereits überall nen aktiven Shader (bin ja fast schon OGL 3 - kompatibel :shock:), was das Leben schon extrem erleichtern kann.

Flash hat geschrieben:
Coole Idee.

Das mit glHistogram ist tatsächlich ein Ansatz. Man müsste halt nur wissen ob das auf der GraKa läuft oder ob da der Treiber in den "jag die Frames in den Keller"-Modus wechselt.

Mal schauen ;-) wenn ich es so implementiere, dann werd ich natürlich auch dazu Feedback geben

_________________
Aktuelles Projekt: Gael - Development Blog
Website: LightBlackSoft.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Jun 05, 2009 14:21 
Offline
DGL Member
Benutzeravatar

Registriert: Mi Jan 31, 2007 18:32
Beiträge: 150
Programmiersprache: Pascal
Wenn ich dich richtig verstanden habe erstellst du bei jedem Transformationsforgang das VBO neu.... warum speicherst du nicht eine Matrix zu den Vertex Daten und veränderst nur die???
Ich meine es würde ja schon mal verhindern das du ständig das VBO neu füllen müsstest...

Was sich mir nicht erschließt ist warum du bei Verschieben, Skalieren, Rotieren etwas an den Material VBO ändern musst ...


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 418 Beiträge ]  Gehe zu Seite Vorherige  1, 2, 3, 4, 5 ... 28  Nächste
Foren-Übersicht » Sonstiges » Meinungen zu den Projekten


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 9 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.029s | 19 Queries | GZIP : On ]