Dieses Dokument bietet einen umfassenden Überblick über flexmark-java, eine leistungsstarke Java-Implementierung des CommonMark Markdown-Parsers. Es beschreibt detailliert seine Funktionen, einschließlich Geschwindigkeit, Erweiterbarkeit und detaillierte Quellpositionsverfolgung, zusammen mit Anweisungen für den Schnellstart, verfügbaren Erweiterungen und der Migration von Pegdown. Das Dokument deckt auch seine fortlaufenden Entwicklungs- und Beitragsrichtlinien ab.
Flexmark-Java
flexmark-java ist eine Java-Implementierung des CommonMark-Parsers (Spezifikation 0.28), der den verwendet
Blöcke zuerst, Inlines nach der Markdown-Parsing-Architektur.
Seine Stärken sind Geschwindigkeit, Flexibilität, auf Markdown-Quellelementen basierendes AST mit Details der
Quellposition bis hin zu einzelnen Zeichen von Lexemen, aus denen das Element besteht und
Erweiterbarkeit.
Die API ermöglicht eine detaillierte Steuerung des Parsing-Prozesses und ist für das Parsen mit großen Datenmengen optimiert
Anzahl der installierten Erweiterungen. Der Parser und die Erweiterungen verfügen über zahlreiche Parseroptionen
Verhalten und HTML-Rendering-Variationen. Das Endziel besteht darin, dass der Parser und der Renderer dazu in der Lage sind
um andere Parser mit einem hohen Maß an Genauigkeit nachzuahmen. Dies ist nun teilweise abgeschlossen
Implementierung der Markdown-Prozessor-Emulation
Motivation für dieses Projekt war die Notwendigkeit, den Pegdown-Parser in meinem Markdown Navigator zu ersetzen
Plugin für JetBrains-IDEs. Pegdown verfügt über einen tollen Funktionsumfang, die Geschwindigkeit ist jedoch im Allgemeinen geringer
als ideal und bei pathologischen Eingaben bleibt die Analyse während des Parsens entweder hängen oder praktisch hängen.
️Version 0.60.0 weist wichtige Änderungen aufgrund von Neuorganisation, Umbenennung, Bereinigung usw. auf
Optimierung von Implementierungsklassen. Die Änderungen sind im Detail aufgeführt
Version-0.60.0-Änderungen.
letzte
Anforderungen
Für Versionen 0.62.2 oder niedriger, Java 8 oder höher, Java 9+ kompatibel. Für Versionen 0.64.0 oder
höher, Java 11 oder höher.
Das Projekt ist auf Maven: com.vladsch.flexmark
Der Kern hat keine anderen Abhängigkeiten als org.jetbrains:annotations:24.0.1. Für Erweiterungen siehe
Beschreibung der Erweiterung unten.
Die API wird ständig weiterentwickelt, um neue Erweiterungen und Funktionen zu berücksichtigen.
Schnellstart
Fügen Sie für Maven „flexmark-all“ als Abhängigkeit hinzu, die den Kern und alle Module umfasst
folgendes Beispiel:
Quelle:
BasicSample.java
Bauen über Gradle
Erstellen mit Android Studio
Zusätzliche Einstellungen aufgrund doppelter Dateien:
Weitere Informationen finden Sie in der Dokumentation:
Beispiele für die Wiki-Home-Nutzung
Erweiterungsdetails
Erweiterungen schreiben
Pegdown-Migrationshelfer
Die PegdownOptionsAdapter-Klasse konvertiert Pegdown Extensions.*-Flags in Flexmark-Optionen und
Erweiterungsliste. Pegdown Extensions.java ist der Einfachheit halber enthalten und neue Optionen wurden nicht gefunden
im Pegdown 1.6.0. Diese befinden sich im Flexmark-Profile-Pegdown-Modul, aber Sie können sie abrufen
Quelle aus diesem Repo: PegdownOptionsAdapter.java, Extensions.java und erstellen Sie Ihre eigene
Version, angepasst an die Anforderungen Ihres Projekts.
Sie können Ihre Erweiterungsflags an static PegdownOptionsAdapter.flexmarkOptions(int) oder Sie übergeben
kann PegdownOptionsAdapter instanziieren und praktische Methoden zum Festlegen, Hinzufügen und Entfernen verwenden
Erweiterungsflags. PegdownOptionsAdapter.getFlexmarkOptions() gibt eine neue Kopie von zurück
DataHolder jedes Mal mit den Optionen, die Pegdown-Erweiterungsflags widerspiegeln.
Die Standard-Flexmark-Java-Pegdown-Emulation verwendet eine weniger strenge HTML-Blockanalyse, die eine Unterbrechung unterbricht
HTML-Block in einer Leerzeile. Pegdown unterbricht einen HTML-Block nur dann in einer Leerzeile, wenn alle Tags vorhanden sind
Der HTML-Block wird geschlossen.
Um dem ursprünglichen Pegdown-HTML-Block-Parsing-Verhalten näher zu kommen, verwenden Sie die Methode, die a benötigt
boolesches strictHtml-Argument:
Es ist auch ein Beispiel mit einem benutzerdefinierten Link-Resolver verfügbar, der einen Link-Resolver für enthält
Ändern von URLs oder Attributen von Links und eines benutzerdefinierten Knoten-Renderers, falls Sie dies überschreiben müssen
generierter Link-HTML.
Flexmark-Java bietet viel mehr Erweiterungen und Konfigurationsoptionen als
Pegdown zusätzlich zu den in Pegdown 1.6.0 verfügbaren Erweiterungen.
Verfügbare Erweiterungen über PegdownOptionsAdapter
Neueste Ergänzungen und Änderungen
Umfangreiche Neuorganisation und Codebereinigung der Implementierung in Version 0.60.0, siehe
Version-0.60.0-Änderungen dank großartiger Arbeit von
Alex Karezin können Sie sich einen Überblick über Modulabhängigkeiten verschaffen
mit der Möglichkeit, einen Drilldown zu Paketen und Klassen durchzuführen.
Merge-API zum Zusammenführen mehrerer Markdown-Dokumente zu einem einzigen
dokumentieren.
Docx-Renderer-Erweiterung:
Begrenzte Attribute-Knotenbehandlung
Erweiterbares HTML-zu-Markdown-Konvertermodul:
Flexmark-HTML2MD-Konverter. Probe:
HtmlToMarkdownCustomizedSample.java
Kompatibilität mit Java9+-Modulen
Zusammengesetzte Aufzählungsreferenzen
Enumerated References-Erweiterung zum Erstellen
Gesetzliche Nummerierung für Elemente und Überschriften.
Makros-Erweiterung, um beliebige Markdown-Inhalte zu ermöglichen
als Block- oder Inline-Elemente eingefügt werden, sodass Blockelemente nur inline verwendet werden können
Elemente sind durch die Syntax zulässig.
GitLab Flavored Markdown zum Parsen und
Rendern von GitLab-Markdown-Erweiterungen.
OSGi-Modul mit freundlicher Genehmigung von Dan Klco (GitHub @klcodanr)
Medien-Tags Media-Link-Transformer-Erweiterung mit freundlicher Genehmigung
Cornelia Schultz (GitHub @CorneliaXaos) transformiert Links
Verwendung benutzerdefinierter Präfixe für Audio-, Einbettungs-, Bild- und Video-HTML5-Tags.
Übersetzungs-Hilfs-API zur Erstellung von Übersetzungs-Markdowns
Dokumente einfacher.
Hinweis: So erstellen Sie Seiteninhalte im Blockstil. Für
Die vollständige Dokumentation finden Sie in der Admonition Extension, Material für MkDocs
Dokumentation.
Aufzählungsreferenz zum Erstellen einer Aufzählung
Referenzen für Abbildungen, Tabellen und andere Markdown-Elemente.
Attribute zum Parsen von Attributen der Form {name name=value name='value' name="value" #id .class-name} Attribute.
YouTube Embedded Link Transformer
Dank Vyacheslav N. Boyko (GitHub @bvn13) wandelt er einfache Links zu YouTube-Videos um
eingebettetes Video-Iframe-HTML.
Docx-Konverter unter Verwendung der docx4j-Bibliothek. Anwendung:
DocxConverter-Beispiel, wie man es anpasst:
Anpassen des Docx-Renderings
Die Entwicklung dieses Moduls wurde gefördert von
Johner Institut GmbH.
Aktualisieren Sie die Bibliothek, damit sie mit CommonMark (Spezifikation 0.28) kompatibel ist, und fügen Sie hinzu
ParserEmulationProfile.COMMONMARK027 und ParserEmulationProfile.COMMONMARK028 erlauben
Auswahl einer bestimmten Spezifikationsversionsoption.
Benutzerdefinierte Knoten-Rendering-API mit der Möglichkeit, Standard-Rendering für einen überschriebenen Knoten aufzurufen.
Ermöglichen benutzerdefinierter Knoten-Renderings, die nur Sonderfälle verarbeiten und den Rest als rendern lassen
üblich. Benutzerdefinierter Link-Resolver
Gfm-Probleme und
Gfm-Users-Erweiterungen zum Parsen und Rendern #123 und
@Benutzername bzw.
Deep-HTML-Block-Parsing-Option für eine bessere Verarbeitung von Rohtext-Tags, die nach anderen Tags stehen
und für Pegdown-HTML-Block-Parsing-Kompatibilität.
Flexmark-All-Modul, das Folgendes umfasst: Kern, alle Erweiterungen, Formatierer, JIRA und YouTrack
Konverter, Pegdown-Profilmodul und HTML-zu-Markdown-Konvertierung.
PDF-Ausgabemodul
PDF-Ausgabe mit Open HTML To PDF
Typografisch umgesetzt
XWiki-Makroerweiterung
Jekyll-Tags
HTML zum Markdown
Maven Markdown Page Generator Plugin
Markdown Formatter-Modul zur Ausgabe von AST als Markdown mit
Formatierungsoptionen.
Tabellen für Markdown Formatter
mit Spaltenbreite und Ausrichtung der Markdown-Tabellen:
Veröffentlichungen, Fehlerbehebungen, Verbesserungen und Support
Ich verwende Flexmark-Java als Parser für das Markdown Navigator-Plugin für JetBrains-IDEs. Ich neige dazu
Verwenden Sie die neueste, unveröffentlichte Version, um Fehler zu beheben oder Verbesserungen zu erhalten. Wenn Sie also einen Fehler finden, ist das so
Wenn Sie einen Show-Stopper für Ihr Projekt haben oder auf der Github-Problemseite einen Fehler sehen, der als für die nächste Version behoben markiert ist und sich auf Ihr Projekt auswirkt, teilen Sie mir dies bitte mit, damit ich möglicherweise umgehend reagieren kann
Erstellen Sie eine neue Version, um Ihr Problem zu beheben. Ansonsten lasse ich Fehlerbehebungen und Verbesserungen zu
akkumulieren und denken, dass niemand von dem betroffen ist, was bereits festgelegt ist.
Erweiterungspunkte in der API sind zahlreich
Es gibt viele Erweiterungsmöglichkeiten in der API mit ihrem Verwendungszweck. Ein guter Sanftanlauf ist der
Flexmark-Java-Samples-Modul, das einfache Beispiele enthält, nach denen gefragt wird
Erweiterungen. Der nächstbeste Ort ist die Quelle einer vorhandenen Erweiterung mit ähnlicher Syntax
zu dem, was Sie hinzufügen möchten.
Wenn Ihre Erweiterung mit der richtigen API übereinstimmt, ist die Aufgabe normalerweise sehr kurz und bündig. Wenn Ihr
Die Erweiterung verwendet die API auf unbeabsichtigte Weise oder befolgt nicht die erwartete Ordnungsmäßigkeit
Protokolle, es kann sein, dass es ein harter Kampf mit einem Rattennest an if/else-Bedingungen ist
Das Beheben eines Fehlers führte nur zur Erstellung eines weiteren.
Wenn zum Hinzufügen einer einfachen Erweiterung mehr als ein paar Dutzend Zeilen erforderlich sind, dann entweder Sie
machen es falsch oder der API fehlt ein Erweiterungspunkt. Wenn man sich das alles anschaut
Bei den implementierten Erweiterungen werden Sie feststellen, dass es sich bei den meisten Erweiterungen um ein paar Codezeilen handelt, abgesehen vom Standardtext
wird von der API vorgegeben. Das ist das Ziel dieser Bibliothek: Bereitstellung eines erweiterbaren Kerns, der macht
Das Schreiben von Erweiterungen ist ein Kinderspiel.
Die größeren Erweiterungen sind Flexmark-Ext-Tables und Flexmark-Ext-Spec-Example, das Kernstück von
Beide umfassen etwa 200 Codezeilen. Sie können sie als Orientierungshilfe für die Schätzung Ihrer Größe verwenden
Verlängerung.
Meine eigene Erfahrung mit dem Hinzufügen von Erweiterungen zeigt, dass manchmal ein neuer Erweiterungstyp am besten ist
Beheben Sie das Problem mit einer API-Erweiterung, um die Implementierung nahtlos zu gestalten, oder indem Sie einen Fehler beheben
war nicht sichtbar, bevor die Erweiterung die API genau richtig betonte. Deine Absicht
Die Erweiterung könnte genau diejenige sein, die einen solchen Ansatz erfordert.
Zögern Sie nicht, ein Problem zu eröffnen, wenn Sie die Antwort nicht finden können
Das Fazit lautet: Wenn Sie eine Erweiterung oder ein Feature implementieren möchten, zögern Sie bitte nicht
Eröffnen Sie ein Problem und ich gebe Ihnen Hinweise, wie Sie am besten vorgehen. Es kann Ihnen viel ersparen
Zeit, indem Sie mich die API verbessern lassen, um den Anforderungen Ihrer Erweiterung gerecht zu werden, bevor Sie viel investieren
vergebliche Mühe hinein.
Ich bitte Sie, sich darüber im Klaren zu sein, dass ich bei diesem Projekt als Chefkoch und Flaschenreiniger fungiere, ohne dass ich dafür zuständig bin
Jota vulkanischer Gedankenverschmelzungsfähigkeiten. Ich bitte Sie, zu beschreiben, was Sie umsetzen möchten
weil ich deine Gedanken nicht lesen kann. Bitte führen Sie Aufklärungsarbeiten im Hintergrund rund um die Quelle durch
Code und Dokumentation, da ich das, was ich weiß, nicht ohne Ihr Einverständnis an Sie weitergeben kann
Bemühung.
Beratung ist möglich
Wenn Sie eine kommerzielle Anwendung haben und die Erweiterung(en) nicht selbst schreiben möchten oder möchten
Um den Zeit- und Arbeitsaufwand für die Implementierung von Erweiterungen und die Integration von Flexmark-Java zu reduzieren, fühlen Sie sich wohl
Sie können mich gerne kontaktieren. Ich stehe Ihnen auf Beratungs-/Vertragsbasis zur Verfügung.
Markdown-Prozessor-Emulation
Trotz seines Namens ist Commonmark weder eine Obermenge noch eine Teilmenge anderer Markdown-Varianten.
Vielmehr wird eine standardmäßige, eindeutige Syntaxspezifikation für den ursprünglichen „Kern“ vorgeschlagen.
Markdown, wodurch effektiv eine weitere Geschmacksrichtung eingeführt wird. Während Flexmark die Standardeinstellung ist
Der Parser ist Commonmark-kompatibel und kann auf verschiedene Arten optimiert werden. Die dafür erforderlichen Anpassungen
Emulieren Sie die am häufigsten verwendeten Markdown-Parser, die in Flexmark verfügbar sind
ParserEmulationProfiles.
Wie der Name ParserEmulationProfile schon sagt, wird nur der Parser an die angepasst
spezifischer Abschlagsgeschmack. Durch die Anwendung des Profils werden keine Funktionen hinzugefügt, die über die in verfügbar sind
Gemeinschaftsmarke. Wenn Sie Flexmark verwenden möchten, um das Verhalten eines anderen Markdown-Prozessors vollständig zu emulieren,
Sie müssen den Parser anpassen und die Flexmark-Erweiterungen konfigurieren, die das Zusätzliche bereitstellen
Funktionen, die im Parser verfügbar sind, den Sie emulieren möchten.
Eine Neufassung des Listenparsers, um die Emulation anderer Markdown-Prozessoren besser zu steuern
Die Emulation der Markdown-Prozessoren ist abgeschlossen. Hinzufügung von
Prozessorvoreinstellungen zur Emulation des spezifischen Markdown-Verarbeitungsverhaltens dieser Parser finden Sie auf a
Kurze To-Do-Liste.
Einige Emulationsfamilien können ihr Ziel besser emulieren als andere. Die meisten davon
Der Aufwand richtete sich darauf, zu emulieren, wie diese Prozessoren Standard-Markdown und -Liste analysieren
verwandte Parsing speziell. Für Prozessoren, die den ursprünglichen Markdown erweitern, müssen Sie hinzufügen
jene Erweiterungen, die bereits in flexmark-java für den Parser/Renderer-Builder implementiert sind
Optionen.
Erweiterungen werden geändert, um ggf. ihre eigenen Voreinstellungen für eine bestimmte Prozessoremulation einzuschließen
Auf diesem Prozessor ist eine entsprechende Erweiterung implementiert.
Wenn Sie eine Diskrepanz feststellen, öffnen Sie bitte ein Problem, damit es behoben werden kann.
Wichtige Prozessorfamilien sind implementiert und einige Familienmitglieder außerdem:
Profile zum Kapseln von Konfigurationsdetails für Varianten innerhalb der
Familie wurden in 0.11.0 hinzugefügt:
Geschichte und Motivation
Flexmark-Java ist ein Zweig des Commonmark-Java-Projekts, der geändert wurde, um einen AST zu generieren, der
spiegelt alle Elemente in der Originalquelle wider, vollständige Quellpositionsverfolgung für alle Elemente
in der AST und einfacheren JetBrains Open API PsiTree-Generierung.
Die API wurde geändert, um eine detailliertere Steuerung des Parsing-Prozesses zu ermöglichen und optimiert
Parsen mit einer großen Anzahl installierter Erweiterungen. Der Parser und die Erweiterungen sind im Lieferumfang enthalten
Optimierungsoptionen für das Parser-Verhalten und HTML-Rendering-Variationen. Das Endziel ist es, das zu haben
Parser und Renderer können andere Parser mit hoher Genauigkeit nachahmen.
Der Grund dafür war die Notwendigkeit, den Pegdown-Parser im Markdown Navigator-Plugin zu ersetzen.
Pegdown hat einen tollen Funktionsumfang, aber seine Geschwindigkeit ist im Allgemeinen nicht ideal und für
Pathologische Eingaben bleiben beim Parsen entweder oder praktisch hängen.
commonmark-java verfügt über eine hervorragende Parsing-Architektur, die leicht zu verstehen und zu erweitern ist.
Ziel war es sicherzustellen, dass das Hinzufügen der Quellpositionsverfolgung im AST die Benutzerfreundlichkeit nicht beeinträchtigt
des Parsens und Generierens des AST mehr als unbedingt nötig.
Gründe für die Wahl von Commonmark-Java als Parser sind: Geschwindigkeit, leichte Verständlichkeit, Benutzerfreundlichkeit
Verlängerung und Geschwindigkeit. Nachdem ich nun den Kern überarbeitet und ein paar Erweiterungen hinzugefügt habe, bin ich äußerst zufrieden
zufrieden mit meiner Wahl.
Ein weiteres Ziel bestand darin, die Fähigkeit von Erweiterungen zu verbessern, das Parserverhalten so zu ändern, dass jedes
Der Markdown-Dialekt könnte durch den Erweiterungsmechanismus implementiert werden. Eine erweiterbare Option
Eine API wurde hinzugefügt, um die Einstellung aller Optionen an einem Ort zu ermöglichen. Verwendung von Parsern, Renderern und Erweiterungen
Diese Optionen für die Konfiguration, einschließlich der Deaktivierung einiger Kernblockparser.
Dies ist eine laufende Arbeit mit vielen API-Änderungen. Es wird kein Versuch unternommen, die Rückwärts-API beizubehalten
Kompatibilität zum ursprünglichen Projekt und bis der Funktionsumfang weitgehend vollständig ist, nicht einmal
frühere Versionen dieses Projekts.
Funktionsvergleich
(1)
Pathologische Flexmark-Java-Eingabe von 100.000 [Analyse in 68 ms, 100.000] in 57 ms, 100.000
verschachtelte [] Analyse in 55 ms
(2)
Commonmark-Java pathologische Eingabe von 100.000 [parst in 30 ms, 100.000] in 30 ms, 100.000
verschachtelte [] Analyse in 43 ms
(3)
Pathologische Pegdown-Eingabe von 17 [ analysiert in 650 ms, 18 [ in 1300 ms
Fortschritt
Ich bin sehr zufrieden mit der Entscheidung, für mich selbst auf einen Commonmark-Java-basierten Parser umzusteigen
Projekte. Auch wenn ich eine große Operation im Inneren durchführen musste, um die volle Quellposition zu erreichen
Tracking und AST, das mit Quellelementen übereinstimmt, macht die Arbeit damit zu einer Freude und ist jetzt ein
Freude zu verlängern. Wenn Sie kein Element auf Quellebene AST oder den Rest von Flexmark-Java benötigen
hinzugefügt und CommonMark Ihr Ziel-Markdown-Parser ist, empfehle ich Ihnen, ihn zu verwenden
commonmark-java, da es eine ausgezeichnete Wahl für Ihre Anforderungen ist, seine Leistung jedoch nicht
Sie leiden unter dem Mehraufwand an Funktionen, die Sie nicht nutzen werden.
Benchmarks
Neueste Version, 28. Januar 2017, Flexmark-Java 0.13.1, Intellij-Markdown von CE EAP 2017, Commonmark-Java
0.8.0:
Verhältnisse von oben:
Da diese beiden Dateien die pathologische Eingabe für Pegdown darstellen, führe ich sie nicht mehr als aus
Teil des Benchmarks, um eine Verzerrung der Ergebnisse zu verhindern. Die Ergebnisse sind hier für die Nachwelt.
Verhältnisse von oben:
Mitwirken
Pull-Requests, Issues und Kommentare willkommen? Für Pull-Anfragen:
Lizenz
Copyright (c) 2015-2016 Atlassian und andere.
Copyright (c) 2016-2023, Vladimir Schneider,
BSD (2-Klausel) lizenziert, siehe Datei LICENSE.txt.
Beispiel:
Mitsuba Renderer 3
Dokumentation | Tutorial-Videos | Linux | MacOS | Windows | PyPI |
---|---|---|---|---|---|
️
Warnung
️
Derzeit gibt es hier eine große Menge undokumentierter und instabiler Arbeiten
der master
. Wir empfehlen Ihnen dringend, unsere zu verwenden
neueste Version
bis auf Weiteres.
Wenn Sie die bevorstehenden Änderungen bereits ausprobieren möchten, schauen Sie sich bitte um
dieser Portierungsanleitung.
Es sollte die meisten kommenden neuen Funktionen und Breaking Changes abdecken.
Einführung
Mitsuba 3 ist ein forschungsorientiertes Rendering-System für Vorwärts- und Rückwärtslicht
Transportsimulation, entwickelt an der EPFL in der Schweiz.
Es besteht aus einer Kernbibliothek und einer Reihe von Plugins, die Funktionen implementieren
von Materialien und Lichtquellen bis hin zu kompletten Rendering-Algorithmen.
Mitsuba 3 ist retargetierbar : Das bedeutet, dass die zugrunde liegenden Implementierungen und
Datenstrukturen können sich verändern, um verschiedene Aufgaben zu erfüllen. Für
Beispielsweise kann derselbe Code beide skalaren (klassischen, jeweils einen Strahl gleichzeitig ausführenden) RGB-Transporte simulieren
oder differenzieller spektraler Transport auf der GPU. Darauf baut alles auf
Dr.Jit, ein spezialisierter Just-in-Time -Compiler (JIT), der speziell für dieses Projekt entwickelt wurde.
Hauptmerkmale
Plattformübergreifend : Mitsuba 3 wurde unter Linux ( x86_64
) und macOS getestet
( aarch64
, x8664
) und Windows ( x8664
).
Hohe Leistung : Der zugrunde liegende Dr.Jit-Compiler verschmilzt Rendering-Code
in Kernel, die modernste Leistung erzielen
ein LLVM-Backend, das auf die CPU abzielt, und ein CUDA/OptiX-Backend
zielt auf NVIDIA-GPUs mit Raytracing-Hardwarebeschleunigung ab.
Python zuerst : Mitsuba 3 ist tief in Python integriert. Materialien,
Texturen und sogar vollständige Rendering-Algorithmen können in Python entwickelt werden,
die das System im laufenden Betrieb JIT-kompiliert (und optional differenziert).
Dies ermöglicht die Experimente, die für die Forschung in der Computergrafik erforderlich sind
andere Disziplinen.
Differenzierung : Mitsuba 3 ist ein differenzierbarer Renderer, was bedeutet, dass er
kann Ableitungen der gesamten Simulation in Bezug auf die Eingabe berechnen
Parameter wie Kameraposition, Geometrie, BSDFs, Texturen und Volumina. Es
implementiert aktuelle differenzierbare Rendering-Algorithmen, die an der EPFL entwickelt wurden.
Spektral und Polarisation : Mitsuba 3 kann monochromatisch verwendet werden
Renderer, RGB-basierter Renderer oder Spektralrenderer. Jede Variante kann
Berücksichtigen Sie optional die Auswirkungen der Polarisation, falls gewünscht.
Tutorial-Videos, Dokumentation
Wir haben mehrere YouTube-Videos aufgenommen, die eine sanfte Einführung bieten
Mitsuba 3 und Dr.Jit. Darüber hinaus finden Sie komplette Juypter-Notizbücher
Es umfasst eine Vielzahl von Anwendungen, Anleitungen und Referenzdokumentationen
auf readthedocs.
Installation
Wir stellen vorkompilierte Binärräder über PyPI bereit. Mitsuba auf diese Weise zu installieren ist so einfach wie das Ausführen
pip install mitsuba
auf der Kommandozeile. Das Python-Paket enthält standardmäßig dreizehn Varianten:
scalar_rgb
scalar_spectral
scalarspectralpolarized
llvmadrgb
llvmadmono
llvmadmono_polarized
llvmadspectral
llvmadspectral_polarized
cudaadrgb
cudaadmono
cudaadmono_polarized
cudaadspectral
cudaadspectral_polarized
Die ersten beiden führen eine klassische Einzelstrahl-Simulation mit entweder einem RGB durch
oder spektrale Farbdarstellung, wobei die beiden letzteren für die Umkehrung verwendet werden können
Rendern auf der CPU oder GPU. Um auf zusätzliche Varianten zugreifen zu können, müssen Sie Folgendes tun
Kompilieren Sie eine benutzerdefinierte Version von Dr.Jit mit CMake. Bitte beachten Sie die
Dokumentation
Einzelheiten hierzu finden Sie hier.
Anforderungen
Python >= 3.8
(optional) Für Berechnung auf der GPU: Nvidia driver >= 495.89
(optional) Für vektorisierte / parallele Berechnung auf der CPU: LLVM >= 11.1
Verwendung
Hier ist ein einfaches „Hello World“-Beispiel, das zeigt, wie einfach es ist, ein zu rendern
Szene mit Mitsuba 3 aus Python:
# Importieren Sie die Bibliothek mit dem Alias „mi“import mitsuba as mi# Legen Sie die Variante des Renderers festmi.setvariant('scalarrgb')# Laden Sie eine Szenescene = mi.loaddict(mi.cornellbox())# Rendern Sie die Szeneimg = mi. render(scene)# Schreiben Sie das gerenderte Bild in eine EXR-Dateimi.Bitmap(img).write('cbox.exr')
Es stehen Tutorials und Beispiel-Notebooks für eine Vielzahl von Anwendungen zur Verfügung
in der Dokumentation.
Um
Dieses Projekt wurde von Wenzel Jakob erstellt.
Wesentliche Funktionen und/oder Verbesserungen am Code wurden von beigesteuert
Sébastien Speierer,
Nicolas Roussel,
Merlin Nimier-David,
Delio Vicini,
Tizian Zeltner,
Baptiste Nicolet,
Miguel Crespo,
Vincent Leroy und
Ziyi Zhang.
Wenn Sie Mitsuba 3 in akademischen Projekten verwenden, geben Sie bitte Folgendes an:
@software{Mitsuba3,title = {Mitsuba 3 renderer},author = {Wenzel Jakob und Sébastien Speierer und Nicolas Roussel und Merlin Nimier-David und Delio Vicini und Tizian Zeltner und Baptiste Nicolet und Miguel Crespo und Vincent Leroy und Ziyi Zhang},Anmerkung = {https://mitsuba-renderer.org},Version = {3.1.1},Jahr = 2022}