DoF - Schönheitstipps
Übersicht

![]() |
ChriseBetreff: DoF - Schönheitstipps |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo!
Ich habe ein bisschen mit Depth of Field rumprobiert. Jetzt habe ich vor erstmal grafisch so viel rauszuholen wie möglich und danach performancetechnisch. Das Ergebnis ist.... sagen wir.... akzeptabel, aber nicht wirklich das, was man schön nennt. Darum wollte ich fragen, ob jemand von euch Tipps hat, das ganze an den entscheidenden Stellen weicher zu machen, aber am Focus doch scharf bleiben lässt. Wäre euch wirklich dankbar, mir fällt einfach nichts ein, was man da mache könnte.... Einfach mit der Maus auf die jeweiligen Cubes gehen um darauf scharf zu stellen. Nummernblock 8 oder 2 Focus manuell ändern. Pfeiltasten oben und unten Camera vor oder zurück bewegen. Code: [AUSKLAPPEN] timer=CreateTimer(25) SeedRnd MilliSecs() Graphics3D 1024,768,0,2 size=512 alpha#=0.5 w#=0.1 blend=1 focus#=15 order=-1 dof=0 light=CreateLight() camera=CreateCamera() CameraRange camera,0.1,1000 PositionEntity camera,0,0,-7 If dof=1 Then dof_tex=CreateTexture(size,size) dof_screen=CreateCube(camera) EntityTexture dof_screen,dof_tex PositionEntity dof_screen,0,0,2 EntityAlpha dof_screen,0.3 EntityOrder dof_screen,-2 EndIf pivot=CreateSphere(8,camera) EntityColor pivot,255,155,0 PositionEntity pivot,0,0,15 ScaleEntity pivot,0.1,0.1,0.1 camera_l=CreateCamera(camera) CameraRange camera_l,0.1,1000 PositionEntity camera_l,-w#,0,0 PointEntity camera_l,pivot CameraProjMode camera_l,0 CameraViewport camera_l,0,0,size,size l_tex=CreateTexture(size,size,8) l_screen=CreateCube(camera) EntityTexture l_screen,l_tex PositionEntity l_screen,0,0,2 EntityAlpha l_screen,alpha# HideEntity l_screen EntityOrder l_screen,order EntityBlend l_screen,blend camera_r=CreateCamera(camera) CameraRange camera_r,0.1,1000 PositionEntity camera_r,w#,0,0 PointEntity camera_r,pivot CameraProjMode camera_r,0 CameraViewport camera_r,0,0,size,size r_tex=CreateTexture(size,size,8) r_screen=CreateCube(camera) EntityTexture r_screen,r_tex PositionEntity r_screen,0,0,2 EntityAlpha r_screen,alpha# HideEntity r_screen EntityOrder r_screen,order EntityBlend r_screen,blend camera_u=CreateCamera(camera) CameraRange camera_u,0.1,1000 PositionEntity camera_u,0,w#,0 PointEntity camera_u,pivot CameraProjMode camera_u,0 CameraViewport camera_u,0,0,size,size u_tex=CreateTexture(size,size,8) u_screen=CreateCube(camera) EntityTexture u_screen,u_tex PositionEntity u_screen,0,0,2 EntityAlpha u_screen,alpha# HideEntity u_screen EntityOrder u_screen,order EntityBlend u_screen,blend camera_d=CreateCamera(camera) CameraRange camera_d,0.1,1000 PositionEntity camera_d,0,-w#,0 PointEntity camera_d,pivot CameraProjMode camera_d,0 CameraViewport camera_d,0,0,size,size d_tex=CreateTexture(size,size,8) d_screen=CreateCube(camera) EntityTexture d_screen,d_tex PositionEntity d_screen,0,0,2 EntityAlpha d_screen,alpha# HideEntity d_screen EntityOrder d_screen,order EntityBlend d_screen,blend Dim cube(20) For i=0 To 20 cube(i)=CreateCube() PositionEntity cube(i),Rnd(-5,5),Rnd(-5,5),Rnd(-5,20) ScaleEntity cube(i),Rnd(0.1,1),Rnd(0.1,1),Rnd(0.1,1) EntityPickMode cube(i),2,1 Next SetBuffer BackBuffer() While Not KeyHit(1) CameraPick(camera,MouseX(),MouseY()) p=CameraPick(camera,MouseX(),MouseY()) If p>0 Then dist#=EntityDistance(camera,p) focus#=focus#+((dist#)-focus#)/6 Else focus#=focus#+(7-focus#)/1000 EndIf If KeyDown(72) Then focus#=focus#+0.1 If KeyDown(80) Then focus#=focus#-0.1 If focus#<0.5 Then focus#=0.5 PositionEntity pivot,0,0,focus# PointEntity camera_l,pivot PointEntity camera_r,pivot PointEntity camera_u,pivot PointEntity camera_d,pivot If KeyDown(200) Then MoveEntity camera,0,0,0.1 If KeyDown(208) Then MoveEntity camera,0,0,-0.1 If dof=1 Then HideEntity dof_screen HideEntity l_screen HideEntity r_screen HideEntity u_screen HideEntity d_screen CameraProjMode camera,0 CameraProjMode camera_l,1 RenderWorld CopyRect 0,0,size,size,0,0,BackBuffer(),TextureBuffer(l_tex) CameraProjMode camera_l,0 CameraProjMode camera_r,1 RenderWorld CopyRect 0,0,size,size,0,0,BackBuffer(),TextureBuffer(r_tex) CameraProjMode camera_r,0 CameraProjMode camera_u,1 RenderWorld CopyRect 0,0,size,size,0,0,BackBuffer(),TextureBuffer(u_tex) CameraProjMode camera_u,0 CameraProjMode camera_d,1 RenderWorld CopyRect 0,0,size,size,0,0,BackBuffer(),TextureBuffer(d_tex) CameraProjMode camera_d,0 ShowEntity l_screen ShowEntity r_screen ShowEntity u_screen ShowEntity d_screen If dof=1 Then ShowEntity dof_screen CameraProjMode camera,1 If dof=1 Then CameraViewport camera,0,0,size,size RenderWorld CopyRect 0,0,size,size,0,0,BackBuffer(),TextureBuffer(dof_tex) CameraViewport camera,0,0,GraphicsWidth(),GraphicsHeight() EndIf RenderWorld Text 50,50,EntityDistance(pivot,camera) WaitTimer timer Flip 0 Wend End |
||
TerrorMachine |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nach 29 Sekunden krieg ich jedes mal nen MAV bei RenderWorld.
Ist dabei egal, ob ich die Maus Bewege oder ob ich still stehe. |
||
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Höh? Das ist komisch... bei mir funktioniert es zumindest vom technischen her einwandfrei.
Ich werds mir nochmal anschauen und dann den Code nachliefern. Ich gehe nun jedenfalls davon aus, dass dein PC gut genug für das Programm ist ![]() |
||
![]() |
Megamag |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hey Chrise!
Ich finde das in Ordnung und bekomme auch keine Fehler. Ich hätte aber einen Tipp für dich. Du könntest vielleicht noch Blur drübersetzten, denn es sieht manchmal ziemlich unschön aus, wenn in der Ferne die Blöcke so weit auseinander gehen, dass sie schon fast neben einander stehen ![]() |
||
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Blitz4D!
Danke schon jetzt, dass du eine Antwort gibst ![]() Meinst du den Blur von Hectic? Oder hattest du da an einen anderen gedacht? Beim ersteren wäre vll das Problem, dass Scharfe Bereiche ebenfalls sehr unscharf zu sehen wären... Wobei ich dir bei deiner Kritik völlig Recht gebe. Das war ja auch eigentlich der Grund, warum ich das Thema erstellt habe ^^ |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ein Blur würde - wie du schon beschrieben hast - den kompletten Bildschirm verschleiern und somit das zuvor berechnete DoF größtenteils wieder kaputt machen. Eine Lösung fällt mir allerdings auch nicht ein. | ||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
Naja, die Idee, vier Kameras zu benutzen, ist zwar im Testbett nicht allzu schlecht, jedoch musst du bedenken, dass man später in der Spielsituation kaum genug Rechenzeit übrig hat, die ganze Szene vier mal zu rendern (da ein Rendervorgang manchmal schon zuviel Zeit verschlingt).
Schon jetzt ist es sehr langsam bei mir, da viermal ein Copyrect in eine 512er Textur ausgeführt wird. Mit den vier Kameras bekommt man leider auch kein richtiges DoF hin - im Vergleich: ![]() In Spielen lässt sich das wohl nur mithilfe von Shadern in Echtzeit schaffen - in Blitz ist es sehr schwierig, da man ja auch keinen Zugriff auf den Z - Buffer hat. Der Effekt sieht sicher nicht schlecht aus und ich will ihn dir auch nicht schlechtreden, aber in Blitz Basic muss man wohl oder übel auf solches Eye-Candy verzichten ![]() |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
@hectic: Jauw, das dachte ich mir eben auch, dann wird daraus jedenfalls nichts.
@Noobody: Ja, das vorallem war die Befürchtung von mir. In dem kleinen Test ist die Geschwindigkeit noch angemessen aber ich würde übles ahnen, wenn ich mir das in einer komplexeren 3D-Welt überlege. Ich habe genau wie dieses Beispielbild von Wikipedia versucht, eine Art Buchseite in Blitz3D darzustellen. Sah zwar gar nicht mal so schlecht aus, kam aber eben lange nicht an das gewünschte Ergebnis. Och, schlechtreden macht bei diesem kleinen Test nichts aus ^^ War ja schließlich nur ein "Probierlerl". Aber du hast Recht, lieber drauf verzichten. |
||
norc |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Sonst könnte man vielleicht mit einem Delay-basierenden Motion-Blur ein DoF simlulieren, ich meine, Motion blur nur ausserhalb des Fokus. Da wären dann mehrere Quads vor der Kamera, alle nur einen Hauch sichtbar.
Eine zusätzliche Möglichkeit, ein Bild unscharf zu machen, ist, es in sehr niedriger Auflösung zu rendern, z.B.160*120, und dann auf das Screen Quad zu pappen. Macht man das DOF-mässig mit mehreren Stufen, so ergäbe sich wohl ein recht weicher Übergang. Wie man aber von dem einen originalen Render eine kleinere skalierte Version bekommt (ohne viel Zeitverlust), das weiss ich auch grad nicht. Vielleicht durch Rendern eines Quads, das mit dem Szenen-Render texturiert ist, in immer kleinerer Auflösung, und weitab der Szene. Bleibt immer noch das Copyrect in den Texturbuffer - könnte gut sein, dass eine halbierung der Grösse mit 2D Kommandos auf dem Backbuffer schneller geht. |
||
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo Norc!
Hmm dein erster Vorschlag klingt interessant. Das könnte man vielleicht realisieren. Das mit der Textur kleiner machen.... weiß nicht ob es da Probleme mit Treppenbildung gibt. Damit kenn ich mich leider nciht so aus ^^ Wie meinst du das mit den 2D Kommandos? Meinst du Scale bzw. Resize Image? Die wären zumindest laut Hilfe alles andere als Echtzeitfähig ![]() |
||
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noobody hat Folgendes geschrieben: In Spielen lässt sich das wohl nur mithilfe von Shadern in Echtzeit schaffen - in Blitz ist es sehr schwierig, da man ja auch keinen Zugriff auf den Z - Buffer hat.
Der Effekt sieht sicher nicht schlecht aus und ich will ihn dir auch nicht schlechtreden, aber in Blitz Basic muss man wohl oder übel auf solches Eye-Candy verzichten ![]() Stimmt nicht, FastExtensions hat z.B. Depth of Field unter seinen Postprocessing-Effekten. Sieht natürlich nicht so gut aus wie das in Crysis, ist aber durchaus (auch vom Tempo her) zu gebrauchen. FastExtensions' DOF-Beispielprogramm Screenshot aus meinem Spiel |
||
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Nette Screens. Die Fast-Extensions scheinen echt ziemlich gut zu sein! Hab ich nur leider nicht... | ||
![]() |
Noobody |
![]() Antworten mit Zitat ![]() |
---|---|---|
FireballFlame hat Folgendes geschrieben: Stimmt nicht, FastExtensions hat z.B. Depth of Field unter seinen Postprocessing-Effekten.
Wie gesagt: Noobody hat Folgendes geschrieben: ...in Blitz ist es sehr schwierig, da man ja auch keinen Zugriff auf den Z - Buffer hat.
Die FastExtensions hacken sich in den Arbeitsspeicher von Blitz und kriegen so Zugriff auf den Z-Buffer - etwas, was in Blitz nie möglich und auch per DLL sehr schwierig ist. |
||
Man is the best computer we can put aboard a spacecraft ... and the only one that can be mass produced with unskilled labor. -- Wernher von Braun |
![]() |
Chrise |
![]() Antworten mit Zitat ![]() |
---|---|---|
Noobody hat Folgendes geschrieben: Die FastExtensions hacken sich in den Arbeitsspeicher von Blitz und kriegen so Zugriff auf den Z-Buffer - etwas, was in Blitz nie möglich und auch per DLL sehr schwierig ist. Wäre es Ansich möglich, bzw. ist es schon einem gelungen? |
||
![]() |
blitzuser34Betreff: Death of Field |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi,
vielleicht kannst du es ja gebrauchen, hab es mir bisher nur kurz angeschaut: http://www.blitzcodebase.co.uk...dborg.html Blitzuser34 |
||
![]() |
ChriseBetreff: Re: Death of Field |
![]() Antworten mit Zitat ![]() |
---|---|---|
Lol genau den selben Code habe ich vor kurzem jemandem schon empfohlen ^^
D.h. ich hatte ihn mir schon vor der Idee es selbst auszuprobieren angeschaut. Thx trotzdem =) |
||
![]() |
FireballFlame |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das "stimmt nicht" bezog sich eher auf die Schlussfolgerung man müsse "auf solches Eye-Candy verzichten" ![]() |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group