Tomasz Dziób
Dodatek tworzący wizualizację 3D wybranej funkcji dwóch zmiennych.
Projekt powstał przy wykorzystaniu API Blendera.
Spis Treści
Projekt Function Visualizer to dodatek do Blendera, który umożliwia wizualizację funkcji matematycznych dwóch zmiennych w przestrzeni 3D. Użytkownicy mogą generować siatki reprezentujące różne funkcje, które zostaną pokazane w widoku 3D w Blenerze. Funkcjonalność dodatku opiera się na API Blendera, co zapewnia łatwą integrację z innymi narzędziami Blendera i jego środowiskiem.
Projekt powstał z inspiracji kanału na Youtube użytkownika 3Blue1Brown tworzącego content naukowy w dużej mierze opierający się na prostych i zrozumiałych wizualizacjach. Korzysta on z biblioteki do Pythona Manim która posiada dość stromą krzywą uczenia. Dlatego wpadłem na pomysł stworzenia prostego dodatku do programu, który wiele ludzi zna, lub kiedyś korzystało.
Celem tego dodatku jest umożliwienie łatwego i szybkie wizualizowanie funkcji matematycznych w formie 3D, co może być pomocne w edukacji, analizach matematycznych oraz w różnych zastosowaniach inżynieryjnych i naukowych. Projekt ma na celu umożliwienie użytkownikowi wprowadzenia funkcji, które zostaną wizualizowane na siatce 3D, z różnymi opcjami personalizacji, takimi jak wybór liczby wierzchołków siatki, animacja kamery czy oświetlenie.
Aby rozpocząć korzystanie z dodatku Function Visualizer, należy wykonać kilka prostych kroków, które umożliwią prawidłową instalację oraz konfigurację w programie Blender.
Aby uruchomić dodatek bedzie potrzebny Blender. Dodatek był testowany na najnowszej wersji tzn. Blender 4.3. Program można pobrać ze strony:
lub korzystając z konsoli:
Linux
sudo apt install blendermacOS
brew install --cask blenderWindows
scoop install blenderAby poprawnie zainstalować dodatek w Blenderze należy wykonać poniższą instrukcję:
- Pobierz to repozytorium jako plik .zip
- Włącz Blendera oraz przejdź do:
Edit>Preferences>Add-ons>Install from Disk ...
-
Wybierz pobrany plik .zip
-
Dodatek powinien być poprawnie zainstalowany
Aby rozwijać kod wymagana jest biblioteka NumPy:
pip install numpyDo zwiększenia komfortu pisania w IDE można zainstalować moduł symulujący Blender Python API, nie jest on potrzebny ale uzyskamy podpowiedzi podczas pisania kodu:
pip install fake-bpy-moduleRównie przydatnym dodatkiem do Visual Studio Code jest Blender Development, pozwala ona połączyć naszą sesję w IDE z oknem Blendera.
Aby zacząć używać dodatku należy otworzyć wysuwane menu z prawej strony 3D Viewport oraz naleźć zakładkę Function Visualizer
Naszym oczom powinno wyświetlić się główne menu dodatku.
Pozwala on na:
- Wygenerowanie osi układu współrzędnych oraz wybranie ich widoczności
- Wybraniu ilości vertices na krawędzi kwadratu siatki
- Wpisaniu funkcji która będzie wizualizowania
- Wygenerowanie siatki prezentującej funkcję
- Ustawienie kamery i oświetleniem sceny
- Zmianę skali animacji w zależności od rozmiaru wygenerowanj funkcji
x**2 + y**2
x**2 - y**2
sin(x) * cos(y)
sqrt(x**2 + y**2)
sin(sqrt(x**2 + y**2))
sqrt(25 - x**2 - y**2)
sqrt(x**2 + y**2 - 1)
x**3 + y**3
sin(x + y)
cos(x) + cos(y)
tan(x) * tan(y)
exp(x + y)+1
log(x + y)
x**2 * sin(y) - y**2 * cos(x)
cos(x)**2 + sin(y)**2
x**3 - 3*x*y**2
y**3 - 3*x**2*y
log(abs(x + y))
x * log(x + y)
exp(x) * sin(y)
sqrt(abs(x**2 - y**2))
x**4 + 2*x**3 - 5*x**2 + 4*x - 8
x**3 - 4*x**2 + 3*x - 2
-1/3*x**5-2/3*y**2+x+7/3
Plik z geometrią wygenerowaną przy pomocy dodatku można znaleźć w Sample_project.blend
API Blendera wymaga dość specyficznej struktury projektu. Główna funkcja oraz służące do rejestracji i wyrejestrowania muszą znajdować się w pliku __init__.py, reszta kodu znajdować się może w innych plikach.
import bpy
from .generateMeshOperator import generateMeshOperator
from .generateMeshPanel import VIEW3D_PT_generate_mesh_panel
from .generateMeshPanel import add_properties
from .createCoordinateSystem import CreateCoordinateSystemOperator
from .generateCameraLighting import GenerateCameraLighting
def register():
bpy.utils.register_class(generateMeshOperator)
bpy.utils.register_class(VIEW3D_PT_generate_mesh_panel)
bpy.utils.register_class(CreateCoordinateSystemOperator)
bpy.utils.register_class(GenerateCameraLighting)
add_properties()
def unregister():
bpy.utils.unregister_class(generateMeshOperator)
bpy.utils.unregister_class(VIEW3D_PT_generate_mesh_panel)
bpy.utils.unregister_class(CreateCoordinateSystemOperator)
bpy.utils.unregister_class(GenerateCameraLighting)
del bpy.types.Scene.mesh_size
if __name__ == "__main__":
register()Struktura funkcji w Blenderze opiera się na klasach i operatorach, które definiują, jak dana funkcjonalność działa i jak jest prezentowana w interfejsie.
Operator — Podstawowe jednostki działania w Blenderze. Operator to funkcja, którą można wykonać np. poprzez menu, skrót klawiszowy lub panele
Panel — Są używane do wyświetlania interfejsu użytkownika w różnych obszarach Blendera, takich jak VIEW3D (widok 3D) czy PROPERTIES
Properties — Reprezentują zmienne przechowywane w kontekście Blendera, które mogą być używane do przechowywania wartości wprowadzonych przez użytkownika
generateMeshOperator.py — Zawiera klasę operatora, która generuje siatkę 3D na podstawie funkcji eval.
generateMeshPanel.py — Definiuje panel w widoku 3D.
Zawiera metodę draw, która wyświetla interfejs użytkownika (np. pola do wprowadzenia funkcji).
createCoordinateSystem.py — Operator generujący układ współrzędnych w widoku 3D. Przydatne do wizualizacji funkcji matematycznych w odniesieniu do osi.
generateCameraLighting.py — Zawiera operator ustawiający kamerę i oświetlenie w scenie.







