Tutorial Render with Blender/pl: Difference between revisions

From FreeCAD Documentation
(Created page with "Jest to możliwe tylko wtedy, gdy zarówno Blender jak i FreeCAD są skompilowane z tą samą {{incode|pythonX.Y}} ''(główną i podrzędną)'' wersją. Na przykład, jeśli...")
(Created page with "Dodatkowo, prekompilowany moduł FreeCAD w Pythonie, {{incode|FreeCAD.so}} w Linuksie i {{incode|FreeCAD.pyd}} w Windows, powinien znajdować się w ścieżce Pythona używane...")
Line 271: Line 271:
Jest to możliwe tylko wtedy, gdy zarówno Blender jak i FreeCAD są skompilowane z tą samą {{incode|pythonX.Y}} ''(główną i podrzędną)'' wersją. Na przykład, jeśli Blender jest skompilowany z Pythonem 3.7, FreeCAD również musi być skompilowany z wersją Pythona 3.7. Jeśli FreeCAD jest skompilowany z inną wersją, na przykład Python 2.7.15 lub Python 3.6.7, wtyczka nie będzie działać. Numer wersji mikro ''(trzecia cyfra)'' nie ma znaczenia, to znaczy, że wtyczka powinna działać, jeśli jeden program jest skompilowany z Pythonem 3.7.5, a drugi z Pythonem 3.7.8.
Jest to możliwe tylko wtedy, gdy zarówno Blender jak i FreeCAD są skompilowane z tą samą {{incode|pythonX.Y}} ''(główną i podrzędną)'' wersją. Na przykład, jeśli Blender jest skompilowany z Pythonem 3.7, FreeCAD również musi być skompilowany z wersją Pythona 3.7. Jeśli FreeCAD jest skompilowany z inną wersją, na przykład Python 2.7.15 lub Python 3.6.7, wtyczka nie będzie działać. Numer wersji mikro ''(trzecia cyfra)'' nie ma znaczenia, to znaczy, że wtyczka powinna działać, jeśli jeden program jest skompilowany z Pythonem 3.7.5, a drugi z Pythonem 3.7.8.


In addition, the FreeCAD precompiled Python module, {{incode|FreeCAD.so}} on Linux and {{incode|FreeCAD.pyd}} on Windows, should be in the Python path used by Blender to import modules. This path can be set up in different ways, depending on the operating system and Python distribution.
Dodatkowo, prekompilowany moduł FreeCAD w Pythonie, {{incode|FreeCAD.so}} w Linuksie i {{incode|FreeCAD.pyd}} w Windows, powinien znajdować się w ścieżce Pythona używanej przez Blendera do importowania modułów. Ścieżka ta może być ustawiona na różne sposoby, w zależności od systemu operacyjnego i dystrybucji środowiska Python.


In Blender you can see all paths searched by inspecting the {{incode|sys.path}} variable. The FreeCAD module should be found in any of those directories.
In Blender you can see all paths searched by inspecting the {{incode|sys.path}} variable. The FreeCAD module should be found in any of those directories.

Revision as of 13:21, 5 June 2021

Ćwiczenie
Temat
Renderowanie
Poziom trudności
średniozaawansowany
Czas wykonania
60 minut
Autorzy
vocx
Wersja FreeCAD
0.18 lub nowszy
Pliki z przykładami
brak
Zobacz również
-

Wprowadzenie

Ten poradnik prezentuje jak stworzyć wyrenderowany obraz w programie Blender, zaczynając od części lub zespołu stworzonego w programie FreeCAD. Zakłada on, że użytkownik stworzył już część w programie FreeCAD, lub zaimportował ją do niego. Następnie część ta jest eksportowana do Blendera w celu wyrenderowania.

Przedstawia renderowanie w Blenderze 2.80 z wykorzystaniem zarówno renderera EEVEE jak i Cycles. Demonstruje różne polecenia środowiska Python, które mogą być użyte by wykonać działania szybciej, zarówno w programie FreeCAD jak i Blender.

Podobny opis tego procesu jest zaprezentowany w serii filmów, Renderuj modele Solidworks i FreeCAD w Blenderze, autorstwa Joko Engineering.

Uwaga: szybszym sposobem na renderowanie modeli w blenderze bez opuszczania programu FreeCAD może być Projekt Render



FreeCAD

1. Stwórz złożenie, używając zawartości ze środowiska Caęść lub Projekt Części, albo dowolnego innego środowiska, które tworzy obiekty brył, na przykład Architektura. Przypisz kolory lub materiały poszczególnym zawartościom tworzącym złożenie, w przybliżeniu odpowiadające kolorowi, który chcesz uzyskać w renderingu.

Złożenie trzech brył stworzonych w programie FreeCAD, z przypisanymi kolorami lub materiałami.

2. Jeśli twój model jest bardzo szczegółowy, upewnij się, że wartość WIDOKOdchyłka zawartości jest ustawiona na niską wielkość, pomiędzy 0.1 a 0.01, lub nawet mniejszą. Im niższa jest ta wartość, tym bardziej szczegółowa będzie wyeksportowana siatka, a co za tym idzie, tym lepsza będzie jakość otrzymanego renderu.

Właściwość odchylenia zawartości utworzonych w programie FreeCAD. Wartość odchylenia musi być małe, aby można było eksportować części z dobrą rozdzielczością.

3. Wybierz środowisko Part, kolejnie z menu Plik → Eksport, lub naciśnij klawisze Ctrl + E, i wyeksportować jako OBJ.

Alternatywnie, eksport może być wykonany z konsoli Python. Zdefiniuj listę obiektów, które mają być wyeksportowane i użyj funkcji eksportującej z nazwą pliku.

import importOBJ
objs = FreeCAD.ActiveDocument.getObjectsByLabel("Part")[0]

importOBJ.export(objs, "/home/user/assembly.obj")

Uwaga: podczas eksportu do OBJ, tworzone są dwa pliki. Pierwszy zawiera informacje o siatce, assembly.obj, drugi zawiera definicję materiałów, która w większości przypadków zawiera tylko kolor, assembly.mtl.

Uwaga 2: Jeśli wynikowy plik OBJ wydaje się być pusty, być może trzeba będzie wyeksportować poszczególne zawartości. W takim przypadku należy zaznaczyć każdą z nich pod częścią i powtórzyć eksport.

import importOBJ
objs = [FreeCAD.ActiveDocument.getObjectsByLabel("Body.base")[0],
FreeCAD.ActiveDocument.getObjectsByLabel("Body.bolt")[0],
FreeCAD.ActiveDocument.getObjectsByLabel("Body.bolt.big")[0]]

importOBJ.export(objs, "/home/user/assembly.obj")

Blender

Przygotowanie modelu

4. Otwórz Blendera. Zmień panel Oś czasu na konsolę Python (Shift + F4). To pomoże Ci wprowadzać komendy i widzieć wyniki. Możesz podzielić ten panel tak, aby po jednej stronie pozostała konsola, a po drugiej panel Info, pozwoli ci to zobaczyć działanie kodu po kliknięciu w interfejs.

Upewnij się, że używasz renderera EEVEE. W panelu Properties przejdź do Render, i dla Render Engine wybierz Eevee.

bpy.context.scene.render.engine = 'BLENDER_EEVEE'

5. Zaimportuj plik modelu z menu, Pilik → Import → Wavefront (.obj).

Alternatywnie, import można wykonać z poziomu konsoli Python.

obj_file = "/home/user/assembly.obj"
bpy.ops.import_scene.obj(filepath=obj_file)

6. Zmień skalę.

Jeśli zawartości wydają się być bardzo duże, może być konieczna zmiana jednostek, aby obiekty były wyświetlane w odpowiedniej skali.

W panelu Properties przejdź do Scene, Units i wybierz odpowiednie ustawienia Unit System, Unit Scale i Length.

Dla małych części, możesz chcieć zachować długość na Millimeters, a skalę na 0.001. W przypadku większych części, na przykład modelu budynku, może być konieczne ustawienie tych wartości na Meters i 0.001. W razie potrzeby wypróbuj inne wartości skali.

Może to być ustawione również z poziomu Python console.

bpy.context.scene.unit_settings.length_unit = 'MILLIMETERS'
# or bpy.context.scene.unit_settings.length_unit = 'METERS'
bpy.context.scene.unit_settings.scale_length = 0.001

Uwaga: Zmiana skali i jednostek sceny jest konieczna tylko wtedy, gdy chcesz pracować z obiektami w ich prawdziwych wymiarach. Jeśli chcesz tylko szybko wyrenderować scenę, możesz pominąć wszelkie regulacje.

6.1. W przypadku pomniejszenia, gdy widok przycina importowane części, może być konieczne dostosowanie wartości przycinania widoku.

Naciśnij klawisz N, aby wyświetlić panel pomocniczy. Przejdź do sekcji View i ustaw End na dużą wartość, na przykład 1E6 mm lub 1000 m.

6.2. Jeśli chcesz, możesz również dostosować rozmiar siatki. Przejdź do Overlays, następnie Guides i ustaw Scale dla tej siatki na 0.001.

7. Ustal obrót obiektów.

Po zaimportowaniu obiekty mogą być obrócone wokół wybranej osi, na przykład o 90 stopni wokół osi X. Naciśnij klawisz N, aby wyświetlić panel pomocniczy. Wybierz obiekt, przejdź do sekcji Transform i ustaw Rotation na w każdym polu. Zrób to dla każdego obiektu.

Można to zautomatyzować za pomocą małego skryptu, który po prostu ustawia rotację każdego importowanego ciała na zero, z wyjątkiem obiektów wewnątrz tupli fixed_objs. Może to być przydatne, jeśli importujesz obiekty do istniejącej sceny, gdzie inne obiekty są już we właściwych pozycjach.

fixed_objs = ('Camera', 'Cube', 'Light')

for obj in bpy.data.objects:
    if any(s for s in fixed_objs if s in obj.name):
        print('%s %s  [[No change]]' % (obj.name, obj.rotation_euler))
        continue
    else:
        obj.rotation_euler = (0, 0, 0)
        print('%s %s  ... rotated' % (obj.name, obj.rotation_euler))

Zespół stworzony w programie FreeCAD zaimportowany do Blendera; model został obrócony, a jednostki sceny dopasowane do zaimportowanych obiektów.

Przygotuj ujęcie kadru

8. Ustaw ujęcie widoku we właściwej pozycji.

Dostosuj rzutnię, aby spojrzeć na model w żądanej orientacji, a następnie naciśnij klawisze Ctrl + Alt + 0 (klawiatura numeryczna), albo użyj opcji z menu View → Align View → Align Active Camera to View.

8.1. Jeśli w ujęciu widoku nic nie widać, być może trzeba dostosować przycięcie. Zaznaczając kamerę w Outliner, przejdź do panelu Properties, następnie Object Data, potem Lens, a następnie ustaw Clip End na dużą wartość, na przykład 1E3 mm lub 1000 m.

bpy.context.object.data.clip_end = 1e+03

Jeśli widzisz obiekt w ujęciu widoku, możesz teraz szybko wyrenderować model, naciskając F12, co spowoduje otwarcie Image Editor z wynikiem. Naciśnij Esc, aby wyjść i powrócić do 3D Viewport.

Pierwszy render montażu w Blenderze, z ujęciem z poprawnym clippingiem, ale bez oświetlenia

Możesz przełączać się między ujęciem widoku a rzutnią 3D, naciskając klawisz 0 na klawiaturze numerycznej. Naciśnięcie klawisza F12 spowoduje wyświetlenie widoku z kamery w dowolnym momencie.

8.2. Jeśli ujęcie wygląda na bardzo małe w rzutni 3D, przejdź do panelu Properties, następnie Object Data, potem Viewport Display i ustaw większą wartość dla pola Size, na przykład 20 mm. Włącz także pole wyboru Limits, aby zobaczyć odległość obcinania ujęcia widoku.

bpy.context.object.data.display_size = 20
bpy.context.object.data.show_limits = True

Przygotuj oświetlenie sceny

9. Zaznacz światło w Outliner, przejdź do panelu Properties, następnie Object Data, naciśnij na Sun i ustaw Strength na 5.0.

bpy.context.object.data.type = 'SUN'
bpy.context.object.data.energy = 5

Spowoduje to przekształcenie światła w lampę słoneczną. Ten typ lampy emituje nieskończoną liczbę równoległych promieni świetlnych, które docierają do sceny pod stałym kątem.

Możesz umieścić lampę słoneczną w dowolnym miejscu rzutni nad swoim modelem, tak aby określić kierunek promieni świetlnych. Dla lampy słonecznej nie ma znaczenia jak blisko lub daleko umieścisz lampę, tylko kierunek promieni, które są definiowane przez rotację obiektu Light.

bpy.context.active_object.location = (150, 100, 100)
bpy.context.active_object.rotation_euler = (0.6, 0.05, 1.88)

Naciśnij ponownie klawisz F12, aby zobaczyć wstępny render modelu.

Render złożenia w Blenderze z dodaną lampą słoneczną, która emituje równoległe promienie świetlne o stałym kącie

Więcej ustawień: podłoga, oświetlenie globalne, odbicia i miękkie cienie

10. Dodaj płaszczyznę podłogi. Naciśnij klawisze Shift+A, a następnie wybierz Mesh, Plane i nadaj mu wymiary około 10 razy większe niż twój model. Ten obiekt będzie służył jako płaszczyzna podłogi lub blat stołu, na którym stoi model. Przesuń również płaszczyznę nieco w dół, tak aby nie przecinała modelu. Wystarczy -1 mm poniżej obiektu.

bpy.ops.mesh.primitive_plane_add(size=1500, view_align=False, enter_editmode=False, location=(0, 0, -1))

11. Ustaw iluminację świata. W panelu Properties przejdź do World i ustaw Color na wartość jasnoniebiesko-szarą, RGB (0.358, 0.512, 0.527), a także ustaw Strength na 0.3.

12. Ustaw odbicia i cienie. Renderer EEVEE w Blenderze produkuje szybkie obrazy poprzez dezaktywację większości efektów na początku. W celu uzyskania lepszych obrazów, niektóre opcje muszą być uaktywnione.

Przejdź do panelu Properties, następnie Render i zaznacz opcję Screen Space Reflections. W sekcji Shadows zaznacz również opcję Soft Shadows.

bpy.context.scene.eevee.use_ssr = True
bpy.context.scene.eevee.use_soft_shadows = True

Ustawienie rodzaju materiału dla obiektów

13. Zmień panel Python Console w panel Shader Editor (Shift+F3).

13.1. Zaznacz płaszczyznę podłoża, przejdź do panelu Properties, następnie Material i kliknij przycisk New. W oknie Shader Editor powinien pojawić się węzeł Principled BSDF. Nadaj mu beżowy kolor Base Color RGB (0.318, 0.267, 0.187), suwak Metallic ustaw na 0.000, a suwak Roughness na 1.000.

Podstawowy shader BSDF używany w Blenderze do symulacji różnych materiałów, od błyszczących metali po szorstkie i nieprzezroczyste bryły..

13.2. Zaznacz każdą z części modelu i dostosuj odpowiedni węzeł materiałowy Principled BSDF. W przypadku części metalowych ustaw właściwość Metallic na wartość 1.000. Dostosuj wartość właściwości Roughness, aby mieściła się w przedziale od 0.2 do 0.7. Im bardziej 0.000 zbliża się do wartości Roughness, tym bardziej będzie się odbijał (przypominał lustro).

For non metals, like plastics, wood and textiles, set the Metallic slider all the way to 0.000, and adjust the value of Roughness to between 0.4 and 1.0.

In general, metals are naturally smooth and therefore their roughness value is small, making them very reflective (shiny). Other materials are microscopically rough, and therefore do not reflect as much light, making them opaque.

14. Test different combinations of materials until they look acceptable. Press Z and then 8 (numerical pad) to enter Rendered mode; in this mode, the EEVEE renderer shows in real time in the 3D viewport how the final image will look like. Use Z to open the pie menu and switch back to Solid mode (Z 6), or go to LookDev mode (Z 2), a mode which adds different types of lighting to the scene to test the appearance of the materials.

Press F12 to render the view through the camera and check the quality of the image.

Rendering and saving

15. If your model looks reasonably well with the EEVEE renderer you can already save the image by going to Image → Save As or pressing Shift+S in the Image Editor.

Rendered assembly produced with Blender EEVEE; all materials use the Principled BSDF shader; only one Sun lamp is used, with some ambient background light.

16. If you want to improve the quality of the image, try the Cycles renderer.

Go to the Properties panel, then Render, and for Render Engine select Cycles. With the Cycles renderer, Blender will refine the image gradually until a number of iterations have passed. Every time the viewport changes the recalculation restarts.

bpy.context.scene.render.engine = 'CYCLES'

16.1. Adjust the sampling rate. Go to the Properties panel, then Render, then in the Sampling section select an appropriate number for Render and Viewport.

For the Viewport a small number of samples, in the range of 32 to 128, is generally enough to obtain a good preview of the image. For the final image, set Render to a higher number, from 128 to 2000, depending on the complexity and amount of details on the scene.

Press F12 to render the final view through the camera. Depending on your graphics card (GPU) the image should take several more seconds, or minutes, to render with Cycles than with EEVEE, but the quality of the image should be better.

17. When you are satisfied with the quality of the rendering, in the Image Editor go to Image → Save As or press Shift+S.

Rendered assembly produced with Blender Cycles; all options, materials, and lights that were used with EEVEE were kept for use with Cycles.

Rendering from the command line

18. If the scene has been completely finished, you may wish to render from outside Blender, from the operating system's command line. This can be useful to batch render different scenes in a remote system. Both EEVEE and Cycles are supported.

blender -b assembly.blend -E BLENDER_EEVEE -o //assembly_EEVEE_#### -t 3 -F PNG -x 1 -f 1
blender -b assembly.blend -E CYCLES -o //assembly_CYCLES_#### -t 3 -F PNG -x 1 -f 1

This specifies that rendering should happen in the background with -b; the rendering engine is chosen with -E; the output filename is selected with -o; the double forward slash // indicates a path relative to the input file; the hash mark # is used to indicate the frame number, padded with zeroes if necessary, for example, 0001; the number of CPU threads used in rendering is chosen with -t 3; the output file format is indicated with -F, and the -x 1 option adds automatically the extension to the name; the final option is -f 1 which indicates that only the first frame will be rendered, which is the normal case for a static scene; for animations use the -a switch to produce an image for each frame, which can then be assembled to produce a video file.

Importowanie wtyczek

Stworzenie pośredniej siatki Wavefront (.obj) i następnie zaimportowanie jej do Blendera zadziała w większości sytuacji. Jednakże, istnieje również możliwość importu pliku FreeCAD (.FCStd) bezpośrednio do Blendera za pomocą pluginu.

Jest to wtyczka do Blendera. Aby działała, Blender musi być w stanie zaimportować FreeCAD jako moduł z Python Console.

import FreeCAD

Jest to możliwe tylko wtedy, gdy zarówno Blender jak i FreeCAD są skompilowane z tą samą pythonX.Y (główną i podrzędną) wersją. Na przykład, jeśli Blender jest skompilowany z Pythonem 3.7, FreeCAD również musi być skompilowany z wersją Pythona 3.7. Jeśli FreeCAD jest skompilowany z inną wersją, na przykład Python 2.7.15 lub Python 3.6.7, wtyczka nie będzie działać. Numer wersji mikro (trzecia cyfra) nie ma znaczenia, to znaczy, że wtyczka powinna działać, jeśli jeden program jest skompilowany z Pythonem 3.7.5, a drugi z Pythonem 3.7.8.

Dodatkowo, prekompilowany moduł FreeCAD w Pythonie, FreeCAD.so w Linuksie i FreeCAD.pyd w Windows, powinien znajdować się w ścieżce Pythona używanej przez Blendera do importowania modułów. Ścieżka ta może być ustawiona na różne sposoby, w zależności od systemu operacyjnego i dystrybucji środowiska Python.

In Blender you can see all paths searched by inspecting the sys.path variable. The FreeCAD module should be found in any of those directories.

import sys
print(sys.path)
  • Kopia lub dowiązanie symboliczne wewnątrz jednego z tych katalogów może zostać utworzone wskazując na moduł FreeCAD.
ln -s /usr/lib/freecad/lib/FreeCAD.so $HOME/.config/blender/2.80/scripts/addons

ln -s /usr/lib/freecad/lib/FreeCAD.so $HOME/.local/lib/python3.7/site-packages
  • Inną możliwością jest dodanie modułu bezpośrednio do ścieżki wewnątrz Blendera.
import sys
sys.path.append("/usr/lib/freecad/lib/FreeCAD.so")

Uwagi końcowe

EEVEE nie jest fizycznie dokładnym rendererem, jednak jego główną siłą jest to, że jest to silnik czasu rzeczywistego, więc jest w stanie produkować szybkie renderingi bezpośrednio w rzutni 3D. W wielu przypadkach obrazy te mają wystarczającą jakość dla końcowej produkcji, co oznacza, że możliwe jest uzyskanie dobrego rezultatu w bardzo krótkim czasie. W przypadkach, gdy pożądane są złożone interakcje światła (odbicia, załamania, światło wolumetryczne i kaustyka), EEVEE jest bardziej ograniczony i wymaga pewnych opcji i sztuczek, aby obejść niektóre z tych ograniczeń.

Z drugiej strony, Cycles jest prawdziwym rendererem raytracingowym, co oznacza, że jest bardziej dokładny w obliczaniu ścieżek światła w przestrzeni sceny. Cycles jest zalecanym rendererem, gdy pożądana jest najwyższa jakość (fotorealistyczne rezultaty), kosztem dłuższego czasu renderowania.

Oba renderery mogą być użyte w celu wykorzystania zalet każdego z nich. W wielu przypadkach scena może być szybko przygotowana i przetestowana z EEVEE, aby uzyskać wstępne renderingi. Następnie ta sama scena może być użyta z niewielkimi zmianami z Cycles, aby uzyskać wyższej jakości, ostateczny rendering. W szczególności, gdy scena, która została ustawiona w EEVEE będzie używana w Cycles, światła mogą wymagać korekty wartości i pozycji, jako że oba renderery traktują światło w różny sposób.

Uzyskanie dobrych rezultatów zależy w dużej mierze od opcji renderowania, materiałów i oświetlenia. Shader materiałów Principled BSDF jest ogólnym rozwiązaniem, które sprawdza się w wielu przypadkach, jednak aby uzyskać prawdziwie fotorealistyczne rezultaty, nadal bardzo ważne jest użycie map tekstur i map normalnych, wraz z dokładnym oświetleniem sceny. Template:Tutorials navi/pl