Povray - Open Source --- MA_Skyfakes
Veröffentlicht: |
29.12.2024 |
Status: |
experimentell |
Die Include-Datei enthält einfache und meist schnell zu rendernde Nebensächlichkeiten, um Weltraum-Szenerien auf unkompliziertem Weg interessanter zu gestalten. Dazu gehört ein Sternhintergrund, eine Sonne, mehrere Planeten und Horizonte aus Sicht eines orbitalen Beobachters.
Die Datei soll Stück für Stück um weitere Planeten und Horizonte erweitert werden, je nach Experimentierfreude meinerseits oder interessanten Tipps aus der Bevölkerung.
Screenplay und Param
Wie einige meiner anderen Makro-Sammlungen auch, sind die meisten Erzeugnisse von
Skyfakes kompatibel zu
Sreenplay und
MA_GetParam*(). Entsprechend sind die ersten drei Parameter der meisten Makros für diese reserviert.
Wer damit nichts anzufangen weiß und sie nicht benötigt, lässt die ersten drei Parameter einfach leer.
Beispiel-Datei
Mit im Paket ist die Beispiel-Datei
ma_skyfakes_examples.pov, in der alle hier gezeigten Bilder und Code-Schnipsel enthalten sind.
Da ich in der Doku nicht sämtliche Einstellungemöglichkeiten ansprechen will - sind dafür zuviele und werden stetig mehr - sollte bei Interesse ein Blick in die Datei riskiert werden.
Beispiele
Container
Für die weiter unten gezeigten Beispiele dient folgender Quellcode als Container.
#version 3.7;
#include "colors.inc"
#include "ma_helpers.inc"
#include "ma_skyfakes.inc"
#include "ma_skyfakes_textures.inc"
#declare CamLocation = <0,2,-10>;
#declare CamLookAt = <0,0,0>;
#declare CamAngle = 60;
/* Fill in example-lines here */
MA_CameraAndLight_Set()
Sternhintergrund
Simpler Sternenhintergrund
Der Sternenhintergrund erzeugt einen leicht weiß bepunkteten Hintergrund, der als Pigment der Skysphere zugewiesen werden muss.
Der erste Parameter beschreibt die Stern-Dichte, der zweite deren Größe. Allerdings nur ungefähr, beide Parameter beeinflussen sich gegenseitig. Für nette Resultate sollte mit Werten von 1 bis 10 getestet werden, und das am Besten in der letzendlichen Auflösung, da bei Änderung der Auflösung die Sterne ganz anders aussehen können.
sky_sphere {
SF_BackgroundStars_Pigment(2,5)
}
Sonne
Sonne + Sternenhintergrund
Ähnlich wie die Sterne besteht auch die Sonne nicht aus einem Objekt, sondern ist lediglich ein Farbverlauf, der an einer Stelle hellgelb und den restlichen 99,9% durchsichtig ist.
Parameter:
- Größe der Sonne (relativ zum Original, d.h. "2" ergibt eine doppelt große Sonne)
- Größe ihres Strahlenkranzes, relativ zur Voreinstellung
- Rotation X-Achse (+ nach unten, + nach oben)
- Rotation Y-Achse (- nach links, + nach rechts)
sky_sphere {
SF_BackgroundStars_Pigment(2,5)
SF_BackgroundSun_Pigment(1, 1, 0, 0)
}
Planeten
Zur Zeit gibt es drei Stück, deren Oberflächen mit simplen Color-Map-Kombinationen zusammengestrickt werden. Sie werden als Kugeln mit dem Radius eines Povray-Units zurückgegeben, wobei hinzugefügte Ringe oder Atmosphäre außerhalb dessen zu finden sind. Sie können ganz normal als Objekt behandelt werden.
Aufrufe:
object { SF_Minshara1("","","") translate <-3,0,0> }
object { SF_Gasgiant1("","","") translate < 0,0,0> }
object { SF_Moon1 ("","","") translate <+3,0,0> }
Planetare Spezialitäten
Alle Planeten können - ob es Sinn macht oder nicht - mit einer dünnen Atmosphäre oder einem Ringsystem ausgestattet werden. Sämtliches an Sonderausstattung wird über den dritten Parameter der Makros erledigt, der per
MA_GetParam*() nach eventuellen Einstellungen sucht.
object {
SF_Minshara1("","","atmo-type: simple-1;rings-type: saturn-1")
SF_Gasgiant1("","","atmo-type: simple-1;atmo-scattering-color: <0.9, 0.2, 0.2>")
}
Planetare Probleme
Die Atmosphäre ist höchst-experimenteller Natur, da ich mich in das Thema erstmal einarbeiten muss. Je nach Entfernung und Größe des späteren Objekts (und wahrscheinlich auch Entfernung zur Kamera oder Lichtquelle oder was weiß ich) fällt das Ergebnis ziemlich seltsam aus.
Dem kann mit den Params entgegengewirkt werden, jedoch muss dafür ein bisschen rumprobiert werden.
Im Bild ist der mittlere Planet unverändert, bei 20 Units Entfernung zur Kamera.
Die Planeten links und rechts sind um den Faktor 2.500 vergrößert und um 50.000 Units nach hinten verschoben, erscheinen zum mittleren dadurch gleich groß.
Beim Rechten habe ich die Atmosphäre unverändert gelassen, bei Linken dafür massiv runtergedreht, damit sie dem Mittleren Beispiel ähnlich sieht.
Wie auch immer, das vernünftig und automatisiert hinzubekommen steht auf der Liste. Bis dahin kann mit dem Param "atmo-scattering-factor" nachgeholfen werden. Je größer der Planet und weiter entfernt er ist, umso kleiner muss der Wert sein.
#declare LigVector = <10,0,-10>*100000;
#declare CamLocation = <0,0,-20>;
#declare CamAngle = 40;
object {
//Big size, big distance, low sc-factor
SF_Minshara1("","","atmo-type: simple-1; atmo-scattering-factor: 0.0120")
scale 2500
translate <-8000, 0, 50000>
}
object {
//Small size, small distance, high sc-factor
SF_Minshara1("","","atmo-type: simple-1; atmo-scattering-factor: 40")
scale 1
translate < 0, 0, 0>
}
object {
//Big size, big distance, low sc-factor, much to light
SF_Minshara1("","","atmo-type: simple-1; atmo-scattering-factor: 40")
scale 2500
translate <+8000, 0, 50000>
}
Horizonte
Horizont-1
Horizonte sind gewissermaßen ein Planet bzw. eine Kugel, die sehr groß skaliert und ziemlich nah an die Kamera herangeführt werden. Dadurch entsteht der gekrümmte Horizont und es hat den Anschein, als würde man in einer tiefen Umlaufbahn um den Planeten kreisen.
Bisher gibt es nur einen für den Planeten Erde und noch ohne Atmosphäre. Weitere folgen, mindestens für Mond und Mars müssen halbwegs vernünftige Ansichten her, bevor ich mich irgendwann an richtig aufwendige Varianten ranwage. Hab ich schonmal versucht, das wurde schnell zur Never-Ending-Story, ohne vernünftiges Ergebnis.
Der vierte Parameter definiert, wo der Horizont zu erscheinen hat (l,t,r,b). Der Vektor für die Rotation sollte dazu genutzt werden, um eine ansprechende Stelle mit gutem Verhältnis zwischen Land, Ozean und Wolken zu finden, oder um den Planeten während Animationen um wenige Grad rotieren zu lassen.
#declare CamLocation = <3,3,-10>;
object {
SF_GetHorizon1 ( "", "", "", "b", <0,10,0>)
}
Problem: Kameraeinstellung
UWA und Perspective
Es gibt in dem Fall zwei verwendbare Kameraeinstellungen:
perspective (default-Einstellung) und
ultra_wide_angle.
Wird ein hoher Kamerawinkel (> 70 Grad) verwendet, eignet sich
ultra_wide_angle für Sonne und Planeten am Besten, da
perspective runde Objekte am Rand des Bildes stärker verzerrt. Sie werden in die Länge gezogen und ei-förmig, was nicht wirklich realistisch anmutet. Beim Horizont verhält es sich genau andersrum, es kann soweit kommen, das
ultra_wide_angle den Horizont am Bildschirmrand zur Bildmitte zieht und eine Art Schale bildet (was ich auf die Schnelle allerdings nicht mehr reproduzieren konnte). Das Anim-Gif rechts zeigt mit dem fast flachen Horizont und dem größeren Planeten die Einstellung
ultra_wide_angle.
Siehe auch:
http://povray.org/documentation/3.7.0/r3_4.html#r3_4_2_2
http://povray.org/documentation/3.7.0/r3_4.html#r3_4_2_1_3
https://de.wikipedia.org/wiki/Auge#Gesichtsfeld
Gänzlich bin ich bisher nicht dahintergestiegen, wann man welche Einstellung verwendet und wie das Problem vielleicht für alle Anwendungsmöglichkeiten perfekt zu lösen ist. Im Endeffekt sollte man sich wohl entscheiden, was man abbilden möchte. Hoher Kamerwinkel mit Horizont
und auffällig runden Objekten in der Ecke wird schwierig.
Im aktuellen Beispiel ist es eher einfach, denn eine braucht Sonne nur dann mit im Bild sein, wenn das Licht tatsächlich fast von vorne kommt, was eher selten der Fall sein dürfte. Für das finale Bild unten wurde ein Winkel von 60 Grad gewählt, die Sonne entfernt und ein
Raumschiffchen eingefügt.
Download
ma_skyfakes.7z => 1,5 MB 7-Zip, Version 1.0 vom 29. Dezember 2024