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 Scene Engine 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 Operator kehrt erst zurück, wenn die Scene Engine die Generierung abgeschlossen hat.
Es wird empfohlen, das kontrollierende Dictionary über die
Prozeduren create_scene_engine_run_params und
set_scene_engine_run_param zu erzeugen, welche es erlauben,
die möglichen Einstellungen benutzerfreundlicher zu setzen und
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 an Instanzen zu steuern, welche fallengelassen werden, sowie um weitere Störobjekte fallen zu lassen.
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 Materialbilder, die die Oberflächeneigenschaften über die Oberfläche variieren lassen können.
Kameraplatzierung: In diesem Schritt werden die Kameras derart in der Szene platziert, dass sie zumindest teilweise die Zielobjekte sehen.
Über die Parameter kann die Anzahl der Kameras, die Rotationen um die z-Achse der Kameras (in-plane rotation), die Neigung der Kameras zur Grundebene sowie die Mindestfläche, die von den Zielobjekten gesehen werden muss, gesteuert werden.
Meta-Informationen In diesem Schritt werden Meta-Informationen über die Szene berechnet, welche später verwendet werden können, um Ground Truth Daten der Szene für ein maschinelles Lernen zu bestimmen.
Rendering: In diesem Schritt werden photorealistische 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ählt 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 die Definition einer Gleichverteilung anstelle eines
einzelnen Werts. Die Scene Engine wählt dann bei Bedarf zufällig einen
Wert aus dieser Verteilung aus.
Wenn im Folgenden als Verteilung angegeben, kann entweder ein
einzelner Wert übergeben werden, der dann als konstanter Wert verwendet
wird, oder ein Tupel aus zwei Werten, das den minimalen und maximalen
Wert definiert.
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.
Für Verteilungen, die drei Werte erfordern, wie etwa RGB-basierte Farben,
können entweder drei Werte übergeben werden, die dann als konstante Werte
verwendet werden, oder sechs Werte, wobei die ersten drei die
Minimalwerte und die letzten drei die Maximalwerte der jeweiligen
Bereiche darstellen.
Zum Beispiel: 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.
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 unten), 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'.
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.
Restriktion:
Wird typischerweise nicht gesetzt, ansonsten
GeneratedData eines vorherigen Aufrufs.
Dictionary mit Einstellungen für die 'physics'-Stufe.
Wahrscheinlichkeit, dass eine Box in der Szene enthalten ist, als Zahl.
Default: 0.5
Wertebereich: [0, .., 1]
Wenn eine Box in die Szene eingefügt wird, bestimmen diese Werte deren Größe.
Wertebereich:
Wertevorschläge: Part-Durchmesser mal 4, 3, 5 bzw. 0.2
Restriktion: Verteilung eines einzelnen Werts (siehe oben)
Dieses Feld 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 'physics'-Stufe erzeugt werden.
Wertevorschläge: Siehe Abschnitt zu Objekteinstellungen weiter unten.
Dictionary mit Details zum Hauptobjekt ('part'), der Box, in die Objekte fallen ('box'), und der Bodenebene ('ground_plane').
Dictionaries mit Informationen über zusätzliche benutzerdefinierte Objekttypen.
Dieses Dictionary steuert die Platzierung der Kameras in der virtuellen Szene während der 'cameras'-Stufe.
Anzahl der zu platzierenden Kameras.
Wertebereich:
Default: 15
Die Auflösung der erzeugten Kameras.
Wertebereich:
Default: 'width': 900, 'height': 600
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: 'Diameter * [1,3]'
Wertebereich:
Restriktion: Verteilung eines einzelnen Werts (siehe oben)
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.
Wertevorschläge: [-180,180]
Wertebereich:
Restriktion: Verteilung eines einzelnen Werts (siehe oben)
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.
Wertevorschläge: [20, 90]
Wertebereich:
Restriktion: Verteilung eines einzelnen Werts (siehe oben)
Vertikaler Sichtwinkel der Kamera in Grad. Kleinere Sichtwinkel simulieren Kameras mit längerer Brennweite.
Wertevorschläge: [40, 90]
Wertebereich:
Restriktion: Verteilung eines einzelnen Werts (siehe oben)
Dictionary mit zusätzlichen Parametern für den fotorealistischen Renderer. Derzeit können keine Parameter gesetzt werden.
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.
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'.
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.
Für 'environment_map.type' 'individual' ist dies die Farbe der Environment Map in normalisierten (RGB)-Werten.
Wertebereich: für jede Komponente
Wertevorschläge:
Restriktion: Verteilung dreier Werte (siehe oben)
Das Feld 'objects' im Konfigurations-Dictionary definiert Details der Objekte, die in der Szene platziert und gerendert werden sollen.
Eine Verteilung, die die Anzahl der Instanzen beschreibt, die für diesen Objekttyp erstellt werden sollen.
Wertevorschläge: [1,4]
Wertebereich: .
Restriktion: Verteilung eines einzelnen Werts (siehe oben)
Ein Dictionary, das das Material des Objekts beschreibt.
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'.
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'.
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'.
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: für jede Komponente
Wertevorschläge:
Restriktion: Verteilung dreier Werte (siehe oben)
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.
Restriktion: Verteilung eines oder dreier Werte (siehe oben)
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.
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.
Dateiname des Meshs, das für das Modell verwendet werden soll. Wenn
'mesh_fname' gesetzt ist, wird das Objekt aus dieser Datei geladen.
Weitere Details zu den unterstützten Dateiformaten finden sich unter
read_object_model_3d.
Wertevorschläge: 'pipe_joint'
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.
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.
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