Verfasst am: 21.09.2010, 09:57
Titel: Objekte mit rauher Oberfläche erzeugen
Hallo,
ich möchte/muss in MATLAB das Banks-Beleuchtungsmodell (BRDF) pogrammieren.
Dazu ist es notwendig ein Objekt (ein Würfel oder eine Kugel wäre (optimal) zu erzeugen, welches eine rauhe Oberfläche besitzt.
Die rauhe Oberfläche muß für Banks dazu so beschaffen sein, dass die Rauigkeit durch kleinste Zylinder beschrieben werden (ähnlich einer gefrästen Oberfläche oder Haaren).
Von diesen Zylindern, die quasi die Mikrofacetten beschreiben, muss die Mittellinie und die Normale bekannt oder ermittelbar sein!
Für das Cook-Torrance-Modell müssen die Mikrofacetten nicht in Zylinderform vorliegen, hier kann die Oberfläche
beliebig rauh sein (statistisch verteilt, wie eine echte Oberfläche).
Meine Frage nun. Wie kann ich am besten ein Objekt erzeugen, dass diese Eigenschaften besitzt? Ist
das überhaupt möglich mit den Mikrozylindern??
Ich hoffe Ihr versteht, was ich will. Im Endeffekt einen Würfel oder eine Kugel mit rauher Oberfläche, wobei die Rauigkeit der Oberfläche unterschiedlich "aussieht". Und ganz wichtig: man muß bei den Banks-Zylindern die Mittellinie und Normale bestimmen können, im anderen Modell reichen die Normale der Facette.
nur eben den zylinder vollständig geschlossen (weiß grade auch nicht, warum der nicht vollständig geschlossen ist...) und die rauhigkeit etwas geringer!
DANKE schonmal, hoffe jemand kann mir weiterhelfen!
Die Rauhigkeit der Oberfläche entsteht nun einfach dadurch, dass die Normale gekippt wird. Wie du das machst, hängt von der Problemstellung ab. Reicht ein zufälliges "tilten", das i.A. nicht reproduzierbar sein wird, rotierst du die Normale bezüglich der durch zwei paarweise orthogonale Vektoren, die gleichzeitig noch senkrecht auf der Normale stehen, definierten Richtungen.
Willst du etwas größerskalige Störungen sehen, die dann wahrscheinlich auch reproduzierbar sein sollten, musst du dir eine Parametrisierung überlegen, die z.B. in Abhängigkeit Auftreffpunktes den Radius etwas verändert, und damit auch wiederum nur die Normale tiltet.
Es empfiehlt sich, eine solche Parametrisierung so weit wie möglich analytisch auszubolzen.
Grundlegend ist, dass man eine rauhe Oberfläche als solche nicht "erzeugt", sondern sie im Renderprozess durch Manipulation der Normalen faked.
Ich hoffe, die Antwort geht in die richtige Richtung.
erstmal danke für die Antwort, hatte nicht damit gerechnet überhaupt noch eine zu erhalten!
Leider verstehe ich nicht ganz, was Du meinst bzw. wie ich das jetzt umsetzen kann - bin bzgl. MATLAB bzw. grafischer Berechnung noch Anfänger!
Eine Schnittpunktberechnung an sich muss ich (glaube) nicht durchführen. Ich benötige "nur" einen Zylinder mit einer rauhen Oberfläche, die nicht reproduzierbar sein muss. Ich muss nur von jedem Vertex die Normale und Position des Vertex ermitteln können.
Hast Du denn evtl ein paar Code-Schnipsel, wie man das am besten "erzeugt"??
Ich hab für die anisotrope Oberfläche mal wieder ein wenig weiter probieren können und eine Ebene mit Zylindern als Facetten programmiert, das Ganz sieht dann so aus:
Das kommt der Sache schonmal einigemaßen Nahe, allerdings bin ich mir sicher, dass man das auch besser programmieren kann - mit viel mehr Zylindern, also einer größeren Fläche.
Noch besser wäre natürlich, wenn ich eine solch geartete Oberfläche auf einem Zylinder hätte.
Hat evtl jemand eine Idee, wie man das besser umsetzen kann??
Wenn Du im ersten IF schon alle x(i) <= 1 abgefangen hast, brauchst Du das im zweiten IF nicht nochmal zu testen. Deswegen erzuegt der folgende Code identische Ergebnisse:
Aber wenn sowieso alle Spalten von y den gleichen Wert haben, wäre eine Spalte auch genug.
Gruß, Jan
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.