Raytracing - Ich brauche neue Ideen was ich an den Bild noch verbessern kann



  • was genau meinst du mit "Glanzpunkteffekt". Ich kenne diesen Terminus nicht. (Ich kann mir einiges darunter vorstellen). Specular highlight?

    Einen Artikel kannst du gerne schreiben, wenn es gut wird, bekommt es einen sticky. vielleicht ueberrede ich die anderen mods das auch in unser c++ Magazin noch aufzunehmen.



  • Ja genau, ich meine damit Specular highlights.

    Appropos Specular Highlights. Die Bilder sehen deswegen so ausgewaschen aus, weil ich dort bei mein Material bei den Säulen und beim Fußboden versucht habe, diese hinzufügen, was aber nicht geklappt hat. Jetzt wo ich wieder ein rein Diffuses Material habe, sehen die Farben wieder schön kräftig aus.

    Ich glaube, ich werde jetzt mal als nächstes mich diesen Specular-Thema annehmen.


  • Mod

    achso 🙂

    ein specular fuegt man nicht einfach dazu, das wird von oberflaeche, material und lichtquelle definiert.
    jetzt verstehe ich weshalb es so desaturiert ausschaut, du hast nur diffuse, also lambert? dot(normal,lightdir)?

    path tracer ohny rightige materialien macht nicht soviel sinn, du verschwendest all die komplexen und zeitaufwendigen berechnungen fuer diffuse. erst mit guten materialien wird es "echt" aussehen.

    schau dir z.B.
    http://renderwonk.com/publications/s2010-shading-course/hoffman/s2010_physically_based_shading_hoffman_a.pdf

    und den rest in
    http://renderwonk.com/publications/s2010-shading-course/
    dazu
    http://blog.selfshadow.com/publications/s2012-shading-course/
    an



  • Ok, ich sehe, dass dort Subsurface-Scattering, Microfacetts, Blinn-Phong und sonste wie viele Brdfs. Genannt werden.

    Ich werde sie mir anschauen und in einer Extra-Testscene erstmal einzeln untersuchen.

    Hättest du ein Tipp, welche Brdfs für die Säulen und den Fußboden ich da nehmen könnte? Es sind so viele und ich muss mir da erstmal ein Überblick verschaffen, was davon am Besten für diese beiden Objekttypen von mir passen würde.

    @Edit: Ich habe mir die Folien angesehen und beim Thema Microfacet-Brdfs scheint es genau eine Masterformel zu geben, welche sich aus FresnelTerm, GeometryTerm und NormalDistriution zusammen setzt. Diese Formel wird sowohl in dein 1. Link als auch hier beschrieben:

    http://simonstechblog.blogspot.de/2011/12/microfacet-brdf.html

    Ich habe das Material bei mir eingesetzt. Die gute Nachricht. Beim meiner Ring-Scene zeigt es die Specular Highlights weiterhin schön. Bei der Säulenszene ist dieser Auswascheffekt weg. Die schlechte Nachricht. Es scheint ansonsten keinen Effekt zu haben. Es sieht weiterhin so aus, als ob ich diffuses Material habe.

    Bei all den Beispielen, wo Brdfs vorgestellt werden, wird ja meist immer mit direktem Licht gearbeitet. Mein Säulenbüro besteht aber zu 90% aus indirekten Licht. Vielleicht ist das ja der Grund, wiso ich diesen Effekt da nicht sehe.


  • Mod

    ja, die meisten spiele nutzen zu 99% nur ein brdf. auch viele renderer nutzen nur wenige brdfs.

    die idee ist, dass es eigentlich ein einziges brdf-model geben kann, das einzig durch verschiedene parameter die oberflaecheneingeschaften beschreibt. das problem ist, dass die simulation davon extrem aufwendig waere, denn dazu gehoert subsurface scatterin genau so wie atmospheric scattering etc.

    deswegen spezialisiert man ein paar. oft
    - metalle (specular ist bunt, basis material ist gray)
    - nicht metalle (dielectrics) bunte basis, weisses specular
    - subsurface scattering (meistens nur sehr duennes, z.b. haut, pflanzenblaetter etc.) BSSRDF
    - participating media (rauch)
    - atmospheric effects (meist in clouds und sky aufgeteilt)
    - anisotropische materialien (ging zwar mit dielectrics, aber die parametrisierung ist ein wenig komplexer und das will man nicht grundsaetzlich haben.
    - caustic materials (glass, wasser,...)
    - fur (fell, bzw rasen, tepich, stoff gehoert da oft dazu). BRTF

    dazu gibt es oft analytische formel. beim path tracen nutzt man manchmal auch gemessene werte, im einfachsten fall http://http.developer.nvidia.com/GPUGems2/gpugems2_chapter11.html

    wenn du metalle und dielectrics erstmal implementierst, solltest du deine scene sehr gut ausleuchten koennen.



  • Sehr schön, deine Hinweise und Link hilft mir jetzt erstmal wieder weiter. Ich werde jetzt erstmal versuchen das weiter zu verstehen/umusetzen.

    Dieses Thema mit der Anzeige von Kleidung/Kissen interessiert mich schon lange und ich wußte einfach nicht, unter welchen Begriff ich das googeln muss.


  • Mod



  • Ich habe am WE jetzt eine neue Szene angefangen. Hier nun erstmal die Abschlussbilder von der alten Szene.

    Diffuses Material:
    https://picload.org/image/rodpolir/saeulenbueromitgodraysundmotio.jpg
    https://picload.org/image/rodpolia/saeulenbueroohnegodrays.jpg

    Mit Specular Highlights
    https://picload.org/image/rodpolci/god_phong.png
    https://picload.org/image/rodpolcw/nogodbipath.png

    Mein nächstes Bild wird diesmal eine Nahaufnahme von kleinen Gegenständen sein. Sowas muss auch mal sein^^ Dort möchte ich mich um Subsurface Scattering kümmern.

    Ohne Tiefenunschärfe:
    https://picload.org/image/rodpowrg/test.png

    Mit Tiefenunschärfe
    https://picload.org/image/rodwgpll/test.png



  • schnapp dir doch eine der vielen referenz szenen. dann kannst du deine resultate auch mit dem wie es aussehen sollte vergleichen

    was ist das da links auf der Saeule? https://img1.picload.org/image/rodpolir/saeulenbueromitgodraysundmotio.jpg

    Schaut ein wenig aus als ob du durchs objekt tracen wuerdest.



  • Wo finde ich diese Referenz-Bilder? Bei einer kurzen Google-Suche fand ich nichts.

    Meinst du die vertikal verlaufende Rille bei der Säule?



  • ganz ganz ganz links, am unteren rand der dritten kachel von oben.

    DIE REFENREZ ist die cornell box, weil die Wissenschaftlich diese box erst im echten Leben ausgemessen haben und dann mit dem rendering vergleichen:
    http://www.graphics.cornell.edu/online/box/
    http://www.graphics.cornell.edu/online/box/compare.html.

    Blender hat einige test szenen, dieser subd affen kopf, oder z.B. http://blenderdiplom.com/en/downloads/584-download-cycles-material-test-scene.html
    oder
    https://code.blender.org/2016/02/new-cycles-benchmark/

    einige nette szenen (z.B. ist Sponza eine sehr sehr gaengige szene zu der du viele renderings finden solltest):
    http://graphics.cs.williams.edu/data/meshes.xml



  • Ok das mit diesen weißen Streusel ist mir auch schon aufgefallen und ich habe mich drüber gewundert^^ Ich nehms einfach erstmal in meine Liste der offenen Fragen/Fehler auf.

    Klingt nach einer guten Idee sich an diesen Benchmarkt-Szenen zu testen. Die Cornellbox kenne ich natürlich aber ist mir jetzt gerade beim Verfassen von mein letzten Beitrag nicht sofort eingefallen.

    Ich denke mal, bis ich diese ganzen 'Tests' geschaft habe, dürfte noch sehr viel Arbeit sein. Es geht hier ja nicht einfach nur um globale Beleuchtung sondern auch um das ganze Material-Zeug. Schön wärs noch, wenn ich auch noch gegen die Renderzeit arbeiten/vergleichen dürfte, nachdem der Bildvergleich geschaft ist.

    Du hast mich mit dein Link für diese Blender-Datei noch auf eine weitere gute Idee gebracht. Ich könnte doch einfach mal anfangen mir Anzusehen, wie man den Raytracer von Blender benutzt und diesen dann nehmen, um Referenzbilder zu erzeugen. Bei Blender arbeiten doch Leute, die Ahnung haben^^


  • Mod

    du kannst auch deinen raytracer in blender einbinden.

    hm, ja, mir klingt es als ob dein tracer recht langsam ist. vielleicht lohnt es sich daran zu arbeiten? Mit jeder verdopplung der geschwindigkeit wirst du doppelt so schnell progress machen beim entwickeln, weil du nur die haelfte wartest 😉

    installier dir CodeXL, starte deinen tracer und dann auf "profile" und dort "attach to process" und profile deinen tracer mal 2minuten

    vielleicht hast du funktionen die langsam sind, die du nicht erwartet haettest und du kannst mit einem fingerschnippen viel zeit sparen.
    ansonsten poste hier die top offenders und wir koennen vielleicht tipps geben.



  • Das mit den Profiler kann ich gerne machen aber ich glaube kaum, dass ich da mit CodeXL arbeiten kann. Das ist ein reines C#-Projekt. Dafür kann ich bereits den Profiler von Visual Studio nutzen, um mir das mal anzusehen was da hängt.

    Was ich z.B. mal rausgefunden habe ist, dass man bei der Vektor-Klasse sowas nicht machen darf:

    class Vector
    {
      public float[] Numbers = new float[]{0,0,0};
    }
    

    Macht man es stattdessen so, dann ist die Raytracingzeit halb so viel:

    class Vector
    {
     public float X = 0;
     public float Y = 0;
     public float Z = 0;
    }
    

    D.h. einfach nur die Multiplikation + Addition von einer Adresse, um im Array auf ein Element zuzugreifen, macht das ganze schon so übelst langsamer.



  • XMAMan schrieb:

    Wenn denn spectrales Raytraing auch 'normale' Alltagsszene verbessern könnte, dann würde ich das ja machen. Was mich stört ist, dass es nur für ganz bestimmte unscheinbare Effekte gut zu sein scheint.

    In einem "echten" Szenario könnte man Staubpartikel sehen, und auch jedes einzelne Teil gut erkennen.

    Eine sehr wichtige Besonderheit dazu ist, dass die Sonne wandert.
    Abhängig davon ändert sich die Farbe (wie auch der Schattenverlauf), also je gerader der Winkel, bzw. je stärker die Horizontnähe, desto farbiger (und dunkler).

    Manchmal ist die Sonne von Wolken verdeckt, und es kommt nur ein einzelner Lichtstrahl durch (welcher ebenfalls wandert).
    (dieser Effekt wird z.T. gezielt genutzt (z.B. Stonehenge oder Pyramiden))

    Am Gesamtbild selbst: Beim ersten Eindruck hatte ich gedacht, da hängt ein Möbelstück an der Decke bzw. ein abstraktes Bild?



  • An der Decke hängen nur die Lampen und zwei Ventilatoren.

    Oder meinst du die Textur mit den schwarz/weißen Kacheln?



  • XMAMan schrieb:

    An der Decke hängen nur die Lampen und zwei Ventilatoren.

    Oder meinst du die Textur mit den schwarz/weißen Kacheln?

    Die Ventilatoren. Außerdem würden in einem Zimmer mit Ventilatoren (und dieser Fensterbreite) höchstwahrscheinlich Jalousien vor den Fenstern hängen.


  • Mod

    nachtfeuer schrieb:

    XMAMan schrieb:

    An der Decke hängen nur die Lampen und zwei Ventilatoren.

    Oder meinst du die Textur mit den schwarz/weißen Kacheln?

    Die Ventilatoren. Außerdem würden in einem Zimmer mit Ventilatoren (und dieser Fensterbreite) höchstwahrscheinlich Jalousien vor den Fenstern hängen.

    jetzt stich nicht so auf sein innernarchitektenherz ein 😉

    ich hab wenig ahnung von C# optimierung. auf PSVita war das extrem langsam (ca 100x langsammer als c++ auf meinem handy), aber das schoben die leuete dem system zu.

    Ich wuerde vermuten, dass du zumindestens an high level algorithmen optimieren kannst. z.B. wie partitionierst du die szene? AABBs? OcTree? kd-tree? grid? spheres?



  • Für die Schnittpunktabfrage zwischen Strahl-Kugel/Dreieck/... nutze ich eine Bounding Intervall Hierachy https://en.wikipedia.org/wiki/Bounding_interval_hierarchy

    Für die Photonmap ein KD-Baum.

    Für die Beammap(Line-Line-Intersection) (Dort sind meine Godyrays) ein Reguläres Grid.

    Ansonsten versende ich die Photonen bei der Lichtquelle nur in die Richtungen/Bereiche, wo auch was ist und verwende Importancesampling für Lighrareasampling und Brdf-Sampling.

    Was mir bei C#-Projekten zumindest aufgefallen ist, dass sie mehr Hauptspeicher als C++ brauchen. Bei der Geschwindigkeit wäre ich auch nicht überrascht, wenn es spürbar langsamer ist.

    Ich kann ja mal ein von den Renderverfahren nehmen und ihn einmal als C++ und einmal als C#-Projekt schreiben und versuchen beide Projekte vom Aufbau her möglichst gleich zu machen. Dann ist nur noch die Programmiersprache der Unterschied und dann sehe ich ja, wer schneller ist.


  • Mod

    BIH sind nicht ganz so toll (wenn sie auch viel gehypt wurden).
    Fuer die beste performance solltest du etwas nutzen was den raum wirklich separiert (ohne ueberlappung) und adaptiv ist (also nicht sowas wie octree).

    z.B. kdtree oder bounding boxes die auch mit einer ebene den raum teilen.

    der grund dass diese besser performen ist, dass du aufhoeren kannst du tracen, sobald du die erste node mit einem hit hast.
    Das ist quasi dieselbe optimierung wie witty-raytracer bei schatten verwenden, wo das tracen abgebrochen wird beim ersten hit, weil dann klar ist dass die lichtquelle nicht erreicht wird.
    bei split hierarchien ist auch klar, dass jede weitere 'node' weiter entfernt sein muss als die erste mit einem hit, weil nichts ueberlappt und du von vorne nach hinten traversierst.

    BIH auf der anderen seite, wenn du viele grosse ueberlappende polys hast (z.b. eben fussboden, waende und decke), hast du eventuell ein paar hierarchiestufen garkeinen gewinn durch die hierarchie, weil die ueberlappung bei 100% liegen kann.

    http://www.flipcode.com/archives/Raytracing_Topics_Techniques-Part_7_Kd-Trees_and_More_Speed.shtml


Anmelden zum Antworten