run_scene_engine — Generieren synthetischer Daten mittels Scene Engine.
run_scene_engine( : : SceneEngine, GenerationParams : GeneratedData)
Der Operator run_scene_engine generiert synthetische Daten
mittels der laufenden SceneEngine, welche zuvor
mit open_scene_engine gestartet wurde.
Die Datengenerierung wird über das Dictionary GenerationParams
gesteuert, die generierten Daten werden in GeneratedData
zurückgegeben.
Der Operatoraufruf ist erst beendet, wenn die Scene Engine die Generierung abgeschlossen hat.
Es wird empfohlen, das Dictionary mit den Parametern zur Datengenerierung
mithilfe der Prozeduren create_scene_engine_run_params und
set_scene_engine_run_param zu erstellen. Diese bieten eine
benutzerfreundliche Möglichkeit, die verschiedenen Einstellungen für die
meisten Anwendungsfälle zu verwalten.
Die Datengenerierung wird in fünf Schritten durchgeführt:
Physiksimulation: In diesem Schritt werden die Positionen (Posen) der verschiedenen Objekte erzeugt, indem diese mittels einer Physiksimulation fallen gelassen werden. Die Objekte werden entweder auf eine Ebene oder in eine Box fallen gelassen.
Das Parameter-Dictionary kann verwendet werden, um die Anzahl der in die Szene fallengelassenen Instanzen festzulegen sowie zusätzliche „Störobjekte“ einzufügen.
Material- und Assetverwaltung: In diesem Schritt werden die Oberflächeneigenschaften der Objekte festgelegt. Für jedes Objekt, inklusive der Grundebene und der Box, kann dies entweder eine einheitliche Einstellung über die gesamte Objektoberfläche sein oder Textur- und Materialkarten, die die Oberflächeneigenschaften punktweise festlegen.
Kameraplatzierung: In diesem Schritt werden die virtuellen Kameras derart in der Szene platziert, dass sie zumindest teilweise die Zielobjekte sehen.
Die Parameter ermöglichen die Festlegung der Anzahl der Kameras, des Abstands der Kameras zum Objekt, der Rotation um die z-Achse, der Kameraneigung (Elevation) sowie der minimalen Objektoberfläche, die sichtbar sein muss.
Meta-Informationen In diesem Schritt werden Meta-Informationen für jede Kameraperspektive berechnet, die später dabei helfen, Ground-Truth-Daten für Deep Learning zu erzeugen.
Rendering: In diesem Schritt werden fotorealistische Bilder der Szene berechnet, wofür die platzierten Objekte und ihre Oberflächeneigenschaften sowie die Kamerapositionen aus den vorherigen Schritten verwendet werden.
Die Datengenerierung wird über ein Dictionary gesteuert, welches in
GenerationParams übergeben wird.
Wie oben erwähnt wird empfohlen, die Prozeduren zu verwenden, um
dieses Dictionary aufzubauen und zu verändern (create_scene_engine_run_params
und set_scene_engine_run_param).
Um die Erzeugung von Daten mit hoher Variation zu ermöglichen, erlauben viele Werte zusätzlich die Definition eines Intervalls anstelle eines einzelnen Werts. Die Scene Engine wählt dann bei Bedarf zufällig einen Wert aus diesem Intervall aus. Ein Intervall wird durch ein Tupel aus minimalem und maximalem Wert festgelegt. Für Parameter, die drei Werte erfordern, wie beispielsweise RGB-Werte, kann eine konkrete Konstellation bestehend aus einem Tupel mit drei Werten übergeben werden, oder ein Intervall festgelegt werden, indem ein Tupel mit sechs Einträgen übergeben wird, welches die drei Minimalwerte gefolgt von den drei Maximalwerten enthält.
Zum Beispiel: Wenn cameras.elevation auf 60 gesetzt
ist, beträgt die Kameraneigung relativ zur Bodenebene stets 60
Grad.
Wenn stattdessen [40,90] angegeben wird, wird für jede Kamera
zufällig eine Neigung zwischen 40 und 90 Grad
ausgewählt.
Wenn base_color auf [0.2, 0, 0] gesetzt
ist, wird Rot auf 0.2 gesetzt, während Grün und Blau den Wert
0 erhalten.
Wird hingegen [0.2, 0, 0, 0.5, 0, 0.1] angegeben, so liegt der
Rotwert zwischen 0.2 und 0.5, Grün bleibt bei
0.0, und Blau liegt zwischen 0.0 und 0.1.
Im Dictionary GenerationParams können folgende Werte gesetzt werden:
Dieses Dictionary steuert die Platzierung der Kameras in der virtuellen Szene während der 'cameras'-Stufe.
Abstand der virtuellen Kameras zum platzierten Objekt. Beim Platzieren einer Kamera wird eines der Zielobjekte mit dem Typnamen 'part' ausgewählt und im Bildzentrum positioniert. Die Kamera wird anschließend um den angegebenen Abstand von diesem Objekt entfernt positioniert.
Wertevorschläge: Objektdurchmesser * [1,3]
Wertebereich: 0
Kameraneigung relativ zur Bodenebene in Grad. Eine Neigung von 90 Grad entspricht einem senkrechten Blick von oben auf die Ebene, während 0 Grad einer Kamera entspricht, die flach auf der Ebene liegt.
Wertebereich: [0, 90]
Wertevorschläge: [20, 90]
Vertikaler Sichtwinkel der Kamera in Grad. Kleinere Sichtwinkel simulieren Kameras mit längerer Brennweite.
Wertebereich: [0, 170]
Wertevorschläge: [40, 90]
Rotation in Bildebene, d.h. Rotation um die z-Achse der Kamera, in Grad. Um die Rotation zu deaktivieren (also alle Kameras aufrecht auszurichten), sollte dieser Wert auf Null gesetzt werden.
Wertebereich: [-360, 360]
Wertevorschläge: [-180, 180]
Anzahl der zu platzierenden Kameras.
Wertebereich: [1, 100]
Default: 15
Die Auflösung der erzeugten Kameras.
Wertebereich: [100, 10000]
Default: 'cameras.width': 900, 'cameras.height': 600
Dieses Dictionary steuert die Environment Map, die in der Szene verwendet wird. Die Environment Map bestimmt sowohl den Hintergrund der Szene als auch die Lichtquellen. Es wird empfohlen, eine Environment Map aus der Asset-Bibliothek zu verwenden, da diese Variationen in Hintergrund und Beleuchtung bieten.
Für 'environment_map.type' 'individual' ist dies die Farbe der Environment Map in normalisierten (RGB)-Werten.
Wertebereich: [0, 1] für jede Komponente
Wertevorschläge: [1, 0, 0]
Ein Tupel aus Strings. Für 'environment_map.type'
'asset' können diese Werte verwendet werden, um die Auswahl
der verwendeten Assets weiter zu filtern. Eine Liste verfügbarer 'tags' und 'categories' kann mit
get_scene_engine_param erstellt werden.
Der Typ der Environment Map. Wenn der Wert auf 'asset' gesetzt ist, wird eine zufällige Environment Map aus der Asset-Bibliothek verwendet. Wenn der Wert auf 'individual' gesetzt ist, wird eine einfarbige Environment Map verwendet.
Werteliste: 'asset', 'individual'
Default: 'asset'.
Dieses Dictionary steuert die Objekttypen und ihre Materialien. Der Wert ist ein Dictionary. Die Schlüssel enthalten die Namen der Objekttypen und sind jeweils einem Dictionary zugeordnet, das die Eigenschaften des Objekttyps beschreibt.
Die möglichen Werte in den Dictionaries werden in einem Abschnitt weiter unten beschrieben.
Einige Objektnamen sind vordefiniert und werden speziell behandelt: 'part' bezieht sich immer auf den „Haupt“-Objekttyp, typischerweise derjenige, für den ein Datensatz erstellt wird. 'box' und 'ground_plane' steuern die Materialien von Boxen und der Bodenebene, die in der Physikstufe erzeugt werden.
Wertevorschläge: Siehe Abschnitt „Objekteinstellungen“ weiter unten.
Dictionaries mit Informationen über zusätzliche benutzerdefinierte Objekttypen.
Dictionary mit Details zum Hauptobjekt ('part'), der Box, in die Objekte fallen ('box'), und der Bodenebene ('ground_plane').
Dictionary mit Einstellungen für die 'physics'-Stufe.
Wahrscheinlichkeit, dass eine Box in der Szene enthalten ist, als Zahl.
Wertebereich: [0, .., 1]
Default: 0.5
Wenn eine Box in die Szene eingefügt wird, bestimmen diese Werte deren Größe.
Wertebereich: 0
Wertevorschläge: Objektdurchmesser mal 4, 3, 5 bzw. 0.2
Dictionary mit zusätzlichen Parametern für den fotorealistischen Renderer. Derzeit können keine Parameter gesetzt werden.
Anstatt die 'physics'-Stufe auszuführen, um eine neue Szene zu erstellen, kann eine bestehende Szene in diesem Feld übergeben werden. Dies kann verwendet werden, um eine Szene nach manuellen Anpassungen beispielsweise der Materialien oder Kamerapositionen erneut zu rendern.
Der Wert dieses Feldes ist ein Dictionary und ist üblicherweise das
GeneratedData eines vorherigen Laufs von
run_scene_engine.
Achtung:
Wird typischerweise nicht gesetzt, ansonsten
GeneratedData eines vorherigen Aufrufs.
Ein Tupel, das die auszuführenden Stufen enthält. Für einen vollständigen Durchlauf sollte dieses Tupel 'physics', 'materials', 'cameras', 'rendering' enthalten.
Stufen können übersprungen werden, wenn eine bestehende Szenenbeschreibung im Feld 'scene' übergeben wird (siehe oben), oder wenn beispielsweise nur die physikalische Szene, aber keine gerenderten Bilder benötigt werden.
Es ist zu beachten, dass die Metainformationen in der Kamera-Suchstufe ('cameras') berechnet werden. Die Stufe 'meta_info' kann also übersprungen werden, wenn die Stufe 'cameras' aktiv ist. Wenn jedoch feste Kamerapositionen und -parameter im Feld 'scene' übergeben werden, kann die Stufe 'meta_info' verwendet werden, um die Metainformationen zu berechnen, ohne die Kamerasuche auszuführen.
Werteliste: 'physics', 'materials', 'cameras', 'meta_info', 'rendering'.
Das Feld 'objects' im Konfigurations-Dictionary definiert die Details aller Objekte, die in der Szene platziert und gerendert werden sollen, einschließlich des Objekts, der Box, des Hintergrunds und aller benutzerdefinierten Objekte.
Ein Dictionary, das das Material des Objekts beschreibt.
Die Grundfarbe des Objekts im (RGB)-Format. Diese Einstellung kann für die Materialtypen 'preset' oder 'individual' verwendet werden. Für 'preset' kann damit beispielsweise roter Kunststoff erzeugt werden.
Wertebereich: [0, 1] für jede Komponente
Wertevorschläge: [1, 0, 0]
Verteilung eines oder dreier Werte (für 'material.sheen_tint' und 'material.coat_tint'). Für den Typ 'individual' definieren diese Werte die physikalisch basierten Rendering-Eigenschaften (PBR) des Objekts. Die Parameter werden weiter unten im Abschnitt „Individuelle Materialien“ näher beschrieben.
Für 'material.type' 'preset' legt dieses Feld den Namen
des zu verwendenden Presets fest. Eine Liste der verfügbaren Namen kann
über get_scene_engine_param abgefragt werden.
Werteliste: 'plastic', 'plastic_clear', 'metal', 'metal_shiny', 'glass'.
Ein Tupel aus Strings. Für 'material.type' 'asset' können
diese Werte verwendet werden, um die Auswahl der verwendeten Assets weiter
zu filtern. Eine Liste verfügbarer 'tags' und
'categories' kann mit get_scene_engine_param erstellt
werden.
Materialtyp. 'asset' ist ein Material, das aus der Asset-Bibliothek geladen wird, typischerweise eine physikalisch realistische Textur. 'preset' ist ein vordefiniertes, einheitliches Material, wie beispielsweise Kunststoff oder Metall, das zusätzlich über eine Farbe angepasst werden kann. 'individual' ist ein vom Benutzer definiertes, einheitliches Material. Details zu den Parametern der jeweiligen Typen sind in den folgenden Abschnitten beschrieben.
Werteliste: 'asset', 'preset', 'individual'.
Wenn dieser Wert auf 'fallback' gesetzt ist, wird das definierte Material nur angewendet, wenn das Objekt noch kein Material enthält. Wenn der Wert auf 'always' gesetzt ist, wird das definierte Material immer angewendet. Dies kann verwendet werden, um ein Ersatzmaterial für Störobjekte zu definieren, die aus der Asset-Bibliothek geladen werden und manchmal bereits ein eigenes Material oder eine eigene Textur enthalten.
Werteliste: 'always', 'fallback'
Default: 'fallback'.
Eine Verteilung, die die Anzahl der Instanzen beschreibt, die für diesen Objekttyp erstellt werden sollen.
Wertebereich: 0
Wertevorschläge: [1, 4]
Um das 3D-Mesh des Objekttyps zu definieren, das für die Physiksimulation
und das Rendering verwendet wird, muss eines der folgenden drei Felder
gesetzt werden: mesh_fname, mesh oder mesh_asset.
3D Objektmodell, das das Mesh enthält, das für das Modell verwendet werden soll. Wenn 'mesh' gesetzt ist, muss das 3D Objektmodell mindestens Punkte und Flächen enthalten.
Dictionary mit der Spezifikation des für das Modell zu verwendenden Assets. Ist 'mesh_asset' gesetzt, wird das Objekt zufällig aus den verfügbaren Assets ausgewählt. Es ist zu beachten, dass viele Assets bereits eine Textur enthalten.
Ein Tupel aus Strings. Für asset-Meshes können diese Werte verwendet
werden, um die Auswahl der verwendeten Assets weiter zu filtern. Eine Liste
verfügbarer 'tags' und 'categories' kann mit
get_scene_engine_param erstellt werden.
Dateiname des Meshes, das für das Modell verwendet werden soll.
Wenn gesetzt, wird das Objekt aus dieser Datei eingelesen.
Weitere Informationen zu unterstützten Dateiformaten sind unter
read_object_model_3d zu finden.
Wertevorschläge: 'pipe_joint'
Bei Verwendung von 'material.type' 'preset' stehen die folgenden Materialien zur Verfügung. Diese Materialien können durch Festlegen der Farbe im Feld 'material.base_color' weiter angepasst werden.
Es ist möglich, die Parameter dieser Materialien weiter zu verfeinern. Dazu
können ihre detaillierten Einstellungen über get_scene_engine_param
abgefragt werden. Die Einstellungen können anschließend angepasst und im
'material'-Dictionary gesetzt werden, wobei 'material.type' auf
'individual' gesetzt werden muss.
Wenn der Wert 'material.type' auf 'individual' gesetzt ist, können physikalisch basierte Rendering-Eigenschaften (PBR) des Materials festgelegt werden. Die folgenden Bilder zeigen, wie die wichtigsten dieser Einstellungen die resultierenden Materialien beeinflussen.
Es wird empfohlen, keine einzelnen Werte zu setzen, sondern Verteilungen für jeden Wert anzugeben. Dies fügt den generierten Daten Variation hinzu, wodurch die auf diesen Daten trainierte Netze besser generalisieren.
Es ist zu beachten, dass get_scene_engine_param verwendet werden kann, um
die PBR-Eigenschaften (als Verteilungen) der voreingestellten Materialien abzurufen.
Diese können als Ausgangsbasis zur Feinabstimmung eines Materials genutzt werden.
Weitere Details zu den Parametern sind im unten in der 'References'-Sektion aufgeführten Paper beschrieben.
roughness) von 0.0 (links)
bis 1.0 (rechts).
base_color) für Kunststoffteile der selben
Rauheit (roughness).
base_color) für Metallteile der selben
Rauheit (roughness).
base_color) für Glas der selben
Lichtdurchlässigkeit (transmission).
clear coat) von 0.0 bis
1.0 mit der selben Rauheit (roughness) (obere Reihe)
und Rauheitswerten (roughness) von 0.0 bis 1.0 (untere Reihe)
auf Metallteilen.
SceneEngine (input_control) scene_engine → (handle)
Handle der Scene Engine-Verbindung.
GenerationParams (input_control) dict → (handle)
Parameter für die Datengenerierung.
GeneratedData (output_control) dict → (handle)
Generierte Daten.
Sind die Parameterwerte korrekt, dann liefert
run_scene_engine den Wert 2 (
H_MSG_TRUE)
. Gegebenenfalls wird eine
Fehlerbehandlung durchgeführt.
open_scene_engine,
set_scene_engine_param,
get_scene_engine_param
render_object_model_3d,
disp_object_model_3d
Burley, Brent, and Walt Disney Animation Studios: „Physically-based shading at disney.“ Acm Siggraph. 2012.
3D Metrology