[B3D] Echter Blur V.1.2
Übersicht

![]() |
hecticSieger des IS Talentwettbewerb 2006Betreff: [B3D] Echter Blur V.1.2 |
![]() Antworten mit Zitat ![]() |
---|---|---|
24.12.2007
Bugfix: Jetzt funktionieren tatsächlich alle Bildformate. Hatte da noch was nicht richtig übertragen ![]() Update: Skallierung des Blurs (von 0 bis 1) wird nun näher (linearer) der Warnehmung vorgenommen. Ich weiß schon, es gibt so viele Blurlibrarys wie Sand am Meer. Doch keines von dem was ich bisher gefunden habe, war auch ein echter Blur oder wirklich für meine Zwecke anwendbar. So wird ein Motionblur plötzlich als nur Blur benannt. Das gleiche gilt auch für Zoomblur und Radialblur. Echte Blureffekte gibt es zwar auch, doch haben diese meistens den Nachteil, dass sie sehr verpixelt aussehen. Mein Ziel war es also: - Motionblur so weit es geht einzudämmen - Verpixelte Stellen so weit wie möglich gering zu halten - Vor allem keine Zoomveränderung aus dem Originalbild Folgende Lib kann von sich aus gestartet werden. Will man die Lib für eigene Projekte verwenden, so muss lediglich der letzte Codeabschnitt (über Kommentare eingegrenzt) gelöscht werden. Edit1: Neue Version 1.2 - Blur nun auch bei allen Bildschirmverhältnisen möglich (danke an Silver_Knee) - Blur bei Volllast (also '=1') ist nun sowas wie trübsal, was man beim sterben anweden kann. - CamerRange -Problem dadurch gelöst, dass sich nun die Quads mit Abstand von 100 befinden. - Kleine Korrektur an den Seitenrändern rechts und unten gemacht. Code: [AUSKLAPPEN] ;Public Domain
;Real-Blur V.1.2 Global BlurMesh1 Global BlurMesh2 Global BlurMesh3 Global BlurFace Global BlurAngle Global BlurTexture Global BlurXScreen Global BlurYScreen Global BlurScreen# Const BLURWIDTH#=0.8 Const BLURDEPTH%=512 ;256 Function CreateBlur(FCamera%) BlurXScreen=GraphicsWidth() BlurYScreen=GraphicsHeight() BlurScreen=Float(BlurYScreen)/Float(BlurXScreen) BlurMesh1=CreateMesh(FCamera) BlurFace=CreateSurface(BlurMesh1) BlurTexture=CreateTexture(BLURDEPTH,BLURDEPTH,257) EntityTexture BlurMesh1,BlurTexture TextureBlend BlurTexture,2 EntityAlpha BlurMesh1,0 EntityFX BlurMesh1,9 AddVertex(BlurFace,-100.8,+BlurScreen*100+0.8,100, 0.5/BLURDEPTH-0.004 ,0.5/BLURDEPTH-0.004) AddVertex(BlurFace,+100.8,+BlurScreen*100+0.8,100, 0.5/BLURDEPTH+1.004 ,0.5/BLURDEPTH-0.004) AddVertex(BlurFace,+100.8,-BlurScreen*100-0.8,100, 0.5/BLURDEPTH+1.004 ,0.5/BLURDEPTH+BlurScreen+0.004) AddVertex(BlurFace,-100.8,-BlurScreen*100-0.8,100, 0.5/BLURDEPTH-0.004 ,0.5/BLURDEPTH+BlurScreen+0.004) AddTriangle BlurFace,0,1,2 AddTriangle BlurFace,2,3,0 BlurMesh2=CopyEntity(BlurMesh1) BlurMesh3=CopyEntity(BlurMesh1) EntityParent BlurMesh2,FCamera EntityParent BlurMesh3,FCamera EntityOrder BlurMesh1,-101 EntityOrder BlurMesh2,-102 EntityOrder BlurMesh3,-103 End Function Function UpdateBlur(FCamera%,FSmooth#=0) If FSmooth>=0 Then FSmooth#=(1-(1.0/(1+FSmooth*4)))*1.2 ;1.25 EntityAlpha BlurMesh1,FSmooth EntityAlpha BlurMesh2,FSmooth/(1+FSmooth) EntityAlpha BlurMesh3,FSmooth/(1+(2*FSmooth)) BlurAngle=(BlurAngle+181) Mod 360 PositionEntity BlurMesh1,Cos(BlurAngle+000)*FSmooth*BLURWIDTH,Sin(BlurAngle+000)*FSmooth*BLURWIDTH,0 PositionEntity BlurMesh2,Cos(BlurAngle+120)*FSmooth*BLURWIDTH,Sin(BlurAngle+120)*FSmooth*BLURWIDTH,0 PositionEntity BlurMesh3,Cos(BlurAngle+240)*FSmooth*BLURWIDTH,Sin(BlurAngle+240)*FSmooth*BLURWIDTH,0 CameraViewport FCamera,0,0,BLURDEPTH,BLURDEPTH*BlurScreen:RenderWorld CopyRect 2,2,BLURDEPTH-3,BLURDEPTH*BlurScreen-3,2,2,BackBuffer(),TextureBuffer(BlurTexture) CameraViewport FCamera,0,0,BlurXScreen,BlurYScreen Else EntityAlpha BlurMesh1,0 EntityAlpha BlurMesh2,0 EntityAlpha BlurMesh3,0 End If RenderWorld End Function Function FreeBlur() FreeTexture BlurTexture FreeEntity BlurMesh1 FreeEntity BlurMesh2 FreeEntity BlurMesh3 End Function ;######################## AB HIER NUR ZUR VERANSCHAULICHUNG ########>>>> ;######## DER CODE DADRÜBER KANN ALS INCLUDE BENUTZT WERDEN ########>>>> Graphics3D 800,600,0,2 SetBuffer BackBuffer() Local Timer=CreateTimer(60) Local Camera=CreateCamera() Local Light=CreateLight() TurnEntity Light,40,-60,0 Local Mover=CreateSprite() ScaleSprite Mover,2,10 EntityColor Mover,255,0,0 MoveEntity Mover,-12,0,10 Local Cube=CreateCube() TurnEntity Cube,-30,0,0 MoveEntity Cube,0,-2,3 Local BlurPower#=.5 CreateBlur(Camera) ;BLUR INITIALISIEREN While Not KeyHit(1) TranslateEntity Mover,.02,0,0 If EntityX(Mover)>12 Then PositionEntity Mover,-12,0,10 If KeyDown(203) Then BlurPower=BlurPower-.01:If BlurPower<0 Then BlurPower=0 If KeyDown(205) Then BlurPower=BlurPower+.01:If BlurPower>1 Then BlurPower=1 TurnEntity Cube,0,.2,0 UpdateBlur(Camera,BlurPower) ;BLUR ANWENDEN (KEIN RENDERWORLD ANWENDEN) Rect 20,20,400,10,0 Rect 20,20,BlurPower*400,10,1 Text 20,40,"Cursor links/rechts" Text 20,60,"Blur-Stärke "+BlurPower WaitTimer(Timer) Flip 0 Wend FreeBlur() End ;<<<<####################### BIS HIER NUR ZUR VERANSCHAULICHUNG ######## ;<<<<######## DER CODE DADRÜBER KANN ALS INCLUDE BENUTZT WERDEN ######## Hier ein Screenshot komplett unbearbeitet: Blurwerte gehen von 0 bis 1 Viel Spaß damit |
||
- Zuletzt bearbeitet von hectic am Fr, Aug 28, 2009 18:44, insgesamt 6-mal bearbeitet
FWeinbehemals "ich" |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sehr Geil
aber ich würde noch mehr werte nehemn grade der Wert 1.450 ist für ein Tot im Ego-Shooter Sehr geil einzusetzen weil das bild ja immer kleiner wird. Aber Respeckt für die Arbeit sieht super aus. Und ist auch SIcherlich Fullspeed Fähig. |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
![]() |
Silver_Knee |
![]() Antworten mit Zitat ![]() |
---|---|---|
So nun läuft es (theoretisch) auf allen Auflösungen.
ich habe festgestellt, dass der Faktor 0.75 ,der hin und wieder auftaucht, Y/X entspricht. Ich habe also eine neue Global eingeführt: BlurScreen# und darein die Y/X gespeichert und alles entsprechend ersetzt. Tested: 800*600;1280*1024;1280*960 Code: [AUSKLAPPEN] Global BlurMesh1
Global BlurMesh2 Global BlurMesh3 Global BlurFace Global BlurAngle Global BlurTexture Global BlurXScreen Global BlurYScreen Global BlurScreen# Const BLURWIDTH#=0.008 Const BLURDEPTH%=256 Function CreateBlur(FCamera%) BlurXScreen=GraphicsWidth() BlurYScreen=GraphicsHeight() BlurScreen=Float(BlurYScreen)/Float(BlurXScreen) BlurMesh1=CreateMesh(FCamera) BlurFace=CreateSurface(BlurMesh1) BlurTexture=CreateTexture(BLURDEPTH,BLURDEPTH,257) EntityTexture BlurMesh1,BlurTexture ; EntityColor BlurMesh1,255,224,224 TextureBlend BlurTexture,2 EntityOrder BlurMesh1,-100 EntityAlpha BlurMesh1,0 EntityFX BlurMesh1,9 ; AddVertex(BlurFace,-1,+0.75,1, 0.5/BLURDEPTH ,0.5/BLURDEPTH) ; AddVertex(BlurFace,+1,+0.75,1, 0.5/BLURDEPTH+1 ,0.5/BLURDEPTH) ; AddVertex(BlurFace,+1,-0.75,1, 0.5/BLURDEPTH+1 ,0.5/BLURDEPTH+0.75) ; AddVertex(BlurFace,-1,-0.75,1, 0.5/BLURDEPTH ,0.5/BLURDEPTH+0.75) AddVertex(BlurFace,-1.008,+BlurScreen+0.008,1, 0.5/BLURDEPTH-0.004 ,0.5/BLURDEPTH-0.004) AddVertex(BlurFace,+1.008,+BlurScreen+0.008,1, 0.5/BLURDEPTH+1.004 ,0.5/BLURDEPTH-0.004) AddVertex(BlurFace,+1.008,-BlurScreen-0.008,1, 0.5/BLURDEPTH+1.004 ,0.5/BLURDEPTH+BlurScreen+0.004) AddVertex(BlurFace,-1.008,-BlurScreen-0.008,1, 0.5/BLURDEPTH-0.004 ,0.5/BLURDEPTH+BlurScreen+0.004) AddTriangle BlurFace,0,1,2 AddTriangle BlurFace,2,3,0 BlurMesh2=CopyEntity(BlurMesh1) BlurMesh3=CopyEntity(BlurMesh1) EntityParent BlurMesh2,FCamera EntityParent BlurMesh3,FCamera End Function Function UpdateBlur(FCamera%,FSmooth#=0) If FSmooth>=0 Then FSmooth#=(1-(1.0/(1+FSmooth*2)))*1.35 EntityAlpha BlurMesh1,FSmooth EntityAlpha BlurMesh2,FSmooth/(1+FSmooth) EntityAlpha BlurMesh3,FSmooth/(1+(2*FSmooth)) BlurAngle=(BlurAngle+181) Mod 360 PositionEntity BlurMesh1,Cos(BlurAngle+000)*FSmooth*BLURWIDTH,Sin(BlurAngle+000)*FSmooth*BLURWIDTH,0 PositionEntity BlurMesh2,Cos(BlurAngle+120)*FSmooth*BLURWIDTH,Sin(BlurAngle+120)*FSmooth*BLURWIDTH,0 PositionEntity BlurMesh3,Cos(BlurAngle+240)*FSmooth*BLURWIDTH,Sin(BlurAngle+240)*FSmooth*BLURWIDTH,0 CameraViewport FCamera,0,0,BLURDEPTH,BLURDEPTH*BlurScreen:RenderWorld ; CopyRect 0,0,256,192,0,0,BackBuffer(),TextureBuffer(BlurTexture) CopyRect 2,2,BLURDEPTH-4,BLURDEPTH*BlurScreen-4,2,2,BackBuffer(),TextureBuffer(BlurTexture) CameraViewport FCamera,0,0,BlurXScreen,BlurYScreen:RenderWorld Else EntityAlpha BlurMesh1,0 EntityAlpha BlurMesh2,0 EntityAlpha BlurMesh3,0 End If End Function Function FreeBlur() FreeTexture BlurTexture FreeEntity BlurMesh1 FreeEntity BlurMesh2 FreeEntity BlurMesh3 End Function ;######################## AB HIER NUR ZUR VERANSCHAULICHUNG ########>>>> ;######## DER CODE DADRÜBER KANN ALS INCLUDE BENUTZT WERDEN ########>>>> Graphics3D 800,600,0,1 SetBuffer BackBuffer() Local Timer=CreateTimer(60) Local Camera=CreateCamera() Local Light=CreateLight() Local Tube=CreateCylinder(12) Local Cube=CreateCube() Local BlurPower#=1 CreateBlur(Camera) ;BLUR INITIALISIEREN CameraClsColor Camera,164,164,72 TurnEntity Light,50,-50,0 ScaleEntity Tube,16,16,16 TurnEntity Tube,0,0,90 TurnEntity Cube,-30,0,0 MoveEntity Cube,0,-2,3 EntityColor Tube,255,0,0 EntityFX Tube,4 FlipMesh Tube While Not KeyHit(1) If KeyDown(203) Then BlurPower=BlurPower-.025:If BlurPower<0 Then BlurPower=0 If KeyDown(205) Then BlurPower=BlurPower+.025:If BlurPower>1 Then BlurPower=1 TurnEntity Tube,0,.5,0 TurnEntity Cube,0,.2,0 UpdateBlur(Camera,BlurPower) ;BLUR ANWENDEN Text 20,20,"Cursor links/rechts" Text 20,40,"Blur-Stärke "+BlurPower WaitTimer(Timer) Flip 0 Wend FreeBlur() End ;<<<<####################### BIS HIER NUR ZUR VERANSCHAULICHUNG ######## ;<<<<######## DER CODE DADRÜBER KANN ALS INCLUDE BENUTZT WERDEN ######## |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
@ich; ja, Fullspeedfähig sollte es sein. Auf meiner alten Kiste (komplett ~4 Jahre alt) geht es, wenn auch nicht ohne Recourceneinbusen. So ist ein Spiel, welches zuvor mit 120 FPS unterwegs war, nun mit Blur auf 80 FPS. In diesem Fall also -33% Recourcen weg. Blurlibrarys sind aber alle recht Recourcenverschwendent und sollten so auch immer mit bedacht eingesetzt werden.
@Silver_Knee; coole Sache, habe deine Verbesserung bei mir getestet und so auch bei mir jetzt eingebaut. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
Wende ich den Blur auf Hectic's 4WD-Buggy an, flimmert es ziemlich stark.
Ansonsten schöne Sache. Sehr nützlich! |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Stimmt, was für ein Reinfall für mich. Workaround erstmal:
Code: [AUSKLAPPEN] CameraRange camera,.5,3000
Weil im Abstand von 1 die Quads vor einem gesetzt sind. Da fällt mir auch wieder ein, was ich noch ändern wollte in der Blurlib. Edit1: Neue Version 1.1 im obersten Codeabschnitt hinzugefügt. Vier neue Verbesserungen: - Blur nun auch bei allen Bildschirmverhältnisen möglich (danke an Silver_Knee) - Blur bei Volllast (also '=1') ist nun sowas wie trübsal, was man beim sterben anweden kann. - CamerRange -Problem dadurch gelöst, dass sich nun die Quads mit Abstand von 100 befinden. - Kleine Korrektur an den Seitenrändern rechts und unten gemacht. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
CaeSarBetreff: Perfekt |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Großes Lob ![]() kann man gut gebrauchen mfg Cae$ar |
||
![]() |
Puccini |
![]() Antworten mit Zitat ![]() |
---|---|---|
also ich verwend ja schon deine draw3d -routinen, und seit geraumer zeit suche ich eine gute funktionssamlung zu blur!
du hast mir damit jetzt ein haufen arbeit abgenommen ![]() nahezu mein gesamtes spiel besteht aus deinen code snippets ^^ Grosses Lob! MfG Puccini |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke, das freud mich zu hören. ![]() Beachte aber bitte, dass jede art von Blur sehr viel Recourcen braucht. Man sollte von daher im Spiel (oder was auch immer), dem User immer die Möglichkeit geben, dieses eben abzustellen. Denn es gibt ja auch noch User da draussen, die mit Notebooks oder recht alten Rechnern unterwegs sind. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Puccini |
![]() Antworten mit Zitat ![]() |
---|---|---|
ich programmier mein spiel auf meinem notebook ![]() und das mit dem Tests hab ich mir auch schon gedacht. hab einen 1ghz amd mit ner nvidia2 rumliegen ^^ wenns auf dem noch läuft läufts überall ^^ naja. das blur kommt nur zum einsatz wenn man gestürzt ist oder hard geschlagen wurde. ausstellen soll natürlich auch gehen ![]() Aber ich sag mal, die demo die dabei is verbraucht bei mir grad mal 20%cpu.. da taktet der nich mal von seinen 800mhz hoch ^^ also so scheints schon super zu sein. |
||
-=Achtung=-
Suche Hobby-Modelliere der hin und wieder bock hat ein kleines Objekt zu erstellen. Bei Interesse PM www.ragesoft.de Passwortmanager: http://ragesoft.de/index.php?o...;Itemid=39 |
GermannXBetreff: Klasse! |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Also ich muss wirklich sagen, dass ist genial!
Nur hätte ich ein Frage: Warum flackert das bei mir so böse, wenn ich das in meinem Programm verwenden will? Wärend auf dem Screenshot oben an allen Seiten ein dunkler Rand ist, gibts den bei mir immer abwechselnd oben und links oder unten und rechts. Das kann man auf folgendem Screenshot gut erkennen: http://www.file-upload.net/vie...z.jpg.html Warscheinlich irgend ein dämlicher Fehler von mir, aber ich weiss eben nicht welcher. Falls das schonmal jemandem passiert ist oder ne Idee hat, woran es liegen könnte, wäre es nett, wenn man mir mitteilen würde wie man das Problem löst. ![]() Danke im Vorraus GermannX |
||
...und der Tod warf seine Sense weg und stieg auf den Mähdrescher, denn es war Krieg! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der Blur hat zwei Konstanten die geändert werden können:
Code: [AUSKLAPPEN] Const BLURWIDTH#=0.8
Const BLURDEPTH%=256 BLURWIDTH ... gibt an, wie stark die drei Quads ausseinander liegen. Je mehr, umso stärker fällt der Blureffekt aus ohne mehr Systemrecourcen zu benötigen. Allerdings ist die Voreinstellung von 0.8 bereits eine art Maximum die sinnvoll ist. Das hängt auch von der angewendeten Auflösung selbst ab. - Versuche also zuerst BLURWIDTH wieder auf 0.8 oder gar weniger zu stellen. - Noch nebenbei: Benutze keine festgelegten hohen Auflösungen (> 1024x768) mit einem Blur zusammen, ohne den User die Möglichkeit zu geben diesen Auschalten zu können, da es dann anfäng stark an den Recourcen zu fressen (Hängt sehr von der Grafikkarte ab). Auch tritt der Blureffekt auf größeren Auflösungen schwächer aus. BLURDEPTH ... gibt an, wie groß die Blurtextur sein soll. Je größer, umso bessere Darstellungsqualität wird erreicht. Jedoch auch mehr Systemrecourcen werden benötigt. Sinnvolle Werte sind zum Beispiel 256 oder 512. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
Erstmal sehr geil sowas such ich schon lange !
Jetzt wollt ich aber noch fragen, ob man auch z.b. nahe dinge an der Cam scharf sieht und weite verschwommen und umgekehrt so als ob man halt aus einem richtigen auge guckt ? Oder kann man das hiermit nicht realisieren ? mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
The_Nici |
![]() Antworten mit Zitat ![]() |
---|---|---|
ToeB, das wäre Depth of Field, und das ist wiederum aufwändiger.
Du könntest mehrmals pro Schleifendurchlauf Rendern und auf Sprites hauen, aber das zieht die Performance runter. |
||
![]() |
ToeB |
![]() Antworten mit Zitat ![]() |
---|---|---|
okay, aber kann ich diesen Blur auch in einer anderen Farbe malen, z.b. in Rot für wenn man getroffen ist und so weiter...
mfg ToeB |
||
Religiöse Kriege sind Streitigkeiten erwachsener Männer darum, wer den besten imaginären Freund hat.
Race-Project - Das Rennspiel der etwas anderen Art SimpleUDP3.0 - Neuste Version der Netzwerk-Bibliothek Vielen Dank an dieser Stelle nochmal an Pummelie, welcher mir einen Teil seines VServers für das Betreiben meines Masterservers zur verfügung stellt! |
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Über Parameter ist es direkt nicht vorgesehen, aber man kann sich ja ohne weiteres die nötigen Parameter selbst einbauen.
Als Beispiel in die CreateBlur -Funktion einfach mit hinein: Code: [AUSKLAPPEN] EntityColor BlurMesh1,255,160,160
|
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group