GameDev

Samouczki Blendera: struktura obiektów i optymalizacja, podstawy programowania w Pythonie i jak pracować w Blenderze

Samouczki Blendera: struktura obiektów i optymalizacja, podstawy programowania w Pythonie i jak pracować w Blenderze

Naucz się: Zawód Artysta 3D

Naucz się więcej

Specjalista grafiki komputerowej z doświadczeniem w optymalizacji i automatyzacji projektów. Autor serii edukacyjnej samouczków Blender, mających na celu rozwijanie umiejętności modelowania i animacji 3D. Dostarczam wysokiej jakości materiały do ​​szkoleń i doskonalenia umiejętności zawodowych w dziedzinie grafiki komputerowej.

Zapisz się na nasz kanał na Telegramie „Checkpoint” – przestrzeń poświęconą grom i ich rozwojowi. Znajdziesz tu ciekawe materiały, newsy i dyskusje o świecie gier wideo i procesie ich tworzenia. Dołącz do nas, aby być na bieżąco z najnowszymi trendami w branży gier.

Rok temu Andrey opublikował szczegółowy kurs Blendera na swoim kanale YouTube. Używa tego potężnego narzędzia od ponad 7 lat. Kurs zaczyna się od podstaw, dzięki czemu idealnie nadaje się dla początkujących, ale kolejne lekcje zawierają również przydatne informacje dla bardziej doświadczonych użytkowników, w tym ukryte funkcje programu. Materiał został nagrany w wersji 2.90.1, ale przedstawiona wiedza odnosi się zarówno do wcześniejszych wersji (od 2.80), jak i najnowszej 3.0.0. Ten kurs będzie przydatny dla każdego, kto chce lepiej zrozumieć Blendera i opanować jego funkcjonalność.

W trzeciej i czwartej lekcji wideo szczegółowo omawiamy strukturę, optymalizację i randomizację obiektów za pomocą narzędzi Blendera i skryptów Pythona. W poprzednich lekcjach omówiliśmy już interfejs programu, podstawy modelowania i proste operacje. Teraz zagłębimy się w bardziej złożone aspekty pracy z obiektami 3D, co pozwoli Ci znacząco poprawić jakość projektów i zwiększyć efektywność pracy. Te lekcje pomogą Ci opanować ważne techniki, które są kluczowe w tworzeniu profesjonalnych modeli 3D.

Specjalista w dziedzinie grafiki komputerowej, optymalizacji procesów i automatyzacji projektów. Autor materiałów edukacyjnych i kursów dotyczących Blendera, które pomagają rozwijać umiejętności modelowania i wizualizacji 3D.

Struktura obiektu

Podczas tworzenia nowego projektu w edytorze 3D domyślnie pojawia się sześcian. Ten obiekt ma swoje własne, unikalne dane, które można wyświetlić, klikając strzałkę obok nazwy obiektu Cube w strukturze projektu (Outliner). Dane obiektu Cube obejmują siatkę Cube, która jest oznaczona zieloną ikoną trójkąta. Ważne jest, aby zrozumieć, że obiekt i jego siatka to różne elementy, co pozwala na większą elastyczność pracy z nimi podczas modelowania.

Wyświetlanie obiektu i siatki w kolekcji scen. Dla przejrzystości obiekt jest podkreślony na pomarańczowo, a siatka na zielono. Kolaż: Leon Balbury dla Skillbox Media

Obiekt ma nazwę i cechy, takie jak położenie, obrót, skala i wymiary. Parametry te są wyświetlane w panelu Transform, który znajduje się na karcie Element u góry. Panel można szybko otworzyć za pomocą klawisza skrótu N. Korzystając z tych narzędzi, możesz efektywnie zarządzać obiektami w swoim projekcie.

W trybie edycji możesz przeglądać dane siatki. Aby to zrobić, przejdź do zakładki „Przekształć” – zakładka „Element”. W tej sekcji pojawią się nowe dane, w tym mediana. Mediana to współrzędne średniej wartości punktów, co pozwala na lepszą analizę rozkładu danych w siatce.

Współrzędne siatki na karcie „Median”. Zrzut ekranu: Leon Balbury dla Skillbox Media

Zmodyfikujmy i przesuńmy siatkę w oknie widoku, zwracając uwagę na jej współrzędne. Następnie wróć do trybu obiektu i zauważ, że współrzędne obiektu pozostają niezmienione. W oknie widoku widać jego początek — pomarańczową kropkę reprezentującą położenie i środek obiektu. To pokazuje, że siatka i obiekt to dwa różne elementy w Blenderze. Zrozumienie różnic między nimi jest ważne dla efektywnej pracy z modelami 3D i zarządzania ich właściwościami.

Obiekt i siatka przesunięte na bok. Zrzut ekranu: Leon Balbury dla Skillbox Media

Relacje obiektów i siatek

Teraz przyjrzyjmy się, dlaczego te informacje są istotne dla użytkownika. Dla wygody zmieńmy nazwę obiektu Cube na Cube object (kliknij dwukrotnie nazwę w strukturze projektu), a jego siatkę na Cube mesh. Elementy te są w relacji podobnej do relacji rodzic-dziecko, w której siatka Cube działa jako element potomny obiektu Cube. Należy pamiętać, że obiekt może mieć tylko jeden element potomny na raz, podczas gdy siatka może być elementem potomnym wielu obiektów.

Nowy sześcian tworzy się za pomocą skrótu klawiaturowego Shift + A. Podobnie jak w przypadku oryginalnego sześcianu, nowy obiekt będzie miał osobną siatkę. Jednak przechodząc do „Ustawień danych obiektu”, Na karcie (Właściwości danych obiektu) możemy zastąpić nową siatkę tą, którą wcześniej zmieniliśmy na Siatkę sześcienną. Pozwala to na efektywne zarządzanie zasobami i upraszcza proces modelowania w programach 3D, zachowując jednocześnie integralność projektu.

Zastępowanie siatki nowego obiektu. Zrzut ekranu: Leon Balbury dla Skillbox Media

Oba obiekty będą miały tę samą siatkę, co ma swoje zalety, które omówimy później.

Notatka jest ważnym elementem każdego dokumentu lub materiału, ponieważ pozwala wyjaśnić lub uzupełnić wcześniej przedstawione informacje. Notatki mogą zawierać odniesienia do źródeł, wyjaśnienia terminów lub dodatkowe informacje, które pomogą czytelnikowi lepiej zrozumieć kontekst. Prawidłowe korzystanie z notatek poprawia jakość treści i ułatwia jej zrozumienie. Należy pamiętać, aby notatki były zwięzłe i na temat, aby nie odwracać uwagi czytelnika od głównego tematu.

Zrzut ekranu przedstawia dwa obiekty o różnym wyglądzie po wykonaniu operacji. Ta różnica wynika z różnic w ich położeniu i ustawieniach. Jeśli przywrócisz wszystkie parametry na karcie „Przekształć – Element” do ich pierwotnych wartości, oba obiekty będą identycznymi sześcianami.

Przeprowadźmy nowy eksperyment. Usuńmy poprzednie obiekty i dodajmy nowy sześcian, nadając mu nazwę „główna siatka sześcianu”. Ten sześcian stanie się główną siatką dla kolejnych operacji. Przejdźmy do zakładki Nakładki widoku. W pierwszej lekcji aktywowaliśmy oś Z. Teraz zaznaczmy pole Statystyki, aby wyświetlić informacje o bieżącej scenie w lewym górnym rogu ekranu. Pomoże Ci to lepiej poruszać się po parametrach i cechach Twojej pracy.

Lokalizacja opcji „Statystyki” i lista danych. Polski: Zrzut ekranu: Leon Balbury dla Skillbox Media

Statystyki wskazują aktualny stan sceny, prezentując istotne dane i trendy. Analizując liczby, można zidentyfikować kluczowe aspekty wpływające na rozwój wydarzeń w danym obszarze. Dane te pomagają lepiej zrozumieć dynamikę zmian i przewidywać kolejne kroki. Należy zwrócić uwagę na znaczenie statystyk w ocenie sytuacji na scenie, ponieważ dostarczają one ważnych spostrzeżeń uczestnikom i obserwatorom.

  • 3 obiekty – 1/3 oznacza, że ​​wybrano jeden z nich;
  • 8 wierzchołków;
  • 12 krawędzi;
  • 6 ścian;
  • 12 trójkątów.

Podczas tworzenia nowego sześcianu lub duplikowania go za pomocą kombinacji klawiszy Shift + D liczba wszystkich wskaźników geometrycznych jest podwajana, ponieważ duplikowana jest również siatka obiektu. Jeśli jednak zastąpisz siatkę nowego obiektu siatką poprzedniego (na przykład siatką sześcienną), wartości geometryczne pozostaną niezmienione. Jest to istotne podczas pracy z modelami, aby zoptymalizować wydajność i uniknąć redundancji danych.

Skrót klawiaturowy Alt + D znacznie upraszcza tworzenie nowego obiektu z oryginalną siatką. Za pomocą tego skrótu można szybko wygenerować wiele identycznych obiektów, co pozwala zachować początkową liczbę wielokątów. Jest to szczególnie przydatne do usprawnienia procesu modelowania 3D i oszczędzania czasu podczas tworzenia kopii obiektów.

Ta operacja znacznie skraca czas i zmniejsza koszty zasobów związane z obliczeniami sceny. Każdy wielokąt ma wiele wewnętrznych cech, takich jak normalna, cieniowanie i inne parametry, które na pierwszy rzut oka mogą wydawać się nieistotne, ale odgrywają kluczową rolę w procesie renderowania. Silnik graficzny musi przetworzyć wszystkie te dane dla każdego wielokąta w scenie. Użycie tych samych cech skraca czas obliczeń, nawet jeśli dane te należą do różnych obiektów, co znacząco optymalizuje wydajność renderowania.

Optymalizacja scen wielkoskalowych

Aby skomplikować zadanie, zaznacz wszystkie obiekty w scenie i użyj skrótu klawiaturowego Alt + D, aby skopiować je wielokrotnie. Zaleca się wcześniejsze usunięcie lub ukrycie (H) kamery i źródła światła, aby uniknąć przypadkowego utworzenia duplikatów. Prawidłowa organizacja obiektów na scenie pomoże uprościć pracę i zwiększyć efektywność korzystania z edytora 3D.

Grupa obiektów skopiowana kilkakrotnie. Zrzut ekranu: Leon Balbury dla Skillbox Media

Statystyki na zrzucie ekranu pokazują, że na scenie znajduje się 310 obiektów. Aby zaznaczyć wszystkie obiekty, użyj klawisza A lub narzędzia Zaznaczanie okręgów (naciśnij C). Zwiększ promień zaznaczenia za pomocą kółka myszy. Zastosowanie modyfikatora „Powierzchnia podziału”, który omówiliśmy w drugiej lekcji, zwiększy liczbę ścian jednego z zaznaczonych obiektów. Jeśli zastosujesz ten modyfikator do wszystkich obiektów na scenie, całkowita liczba wielokątów może osiągnąć pół miliona. Aby szybko zastosować modyfikator do różnych poziomów wygładzania, użyj skrótów klawiaturowych Ctrl + 1, Ctrl + 2, Ctrl + 3 i Ctrl + 4. Należy pamiętać, że użycie modyfikatorów powoduje całkowite przeliczenie geometrii obiektu, w wyniku czego efekt zastosowania identycznych siatek znika.

Uwaga: Ten tekst stanowi ważny punkt odniesienia dla zrozumienia kluczowych aspektów omawianego tematu. Podkreśla znaczenie prezentowanych danych i ich wpływ na dalsze badania. Zwróć uwagę na główne punkty wymagające szczególnej uwagi i analizy. Aspekty te mogą mieć wpływ na praktyczne zastosowanie i interpretację wyników. Upewnij się, że bierzesz pod uwagę wszystkie niuanse, aby uniknąć nieporozumień i zapewnić dokładność informacji.

Aby zastosować modyfikator do wszystkich obiektów, wykonaj następujące kroki: Najpierw zastosuj modyfikator do aktywnego obiektu. Następnie zaznacz pozostałe obiekty, do których chcesz go skopiować, naciskając klawisz A. Następnie naciśnij Ctrl + L i wybierz opcję Kopiuj modyfikatory z otwartego menu. Ten proces pozwala efektywnie przenieść ustawienia modyfikatorów do wielu obiektów jednocześnie, znacznie upraszczając pracę nad projektem.

Proces odwrotny działa podobnie: jeśli usuniesz modyfikator z aktywnego obiektu i użyjesz funkcji Kopiuj modyfikatory, możesz przenieść ustawienia do wszystkich zaznaczonych obiektów. Ta metoda pozwala skutecznie zarządzać modyfikatorami i oszczędzać czas podczas edycji kilku obiektów jednocześnie.

Podobną operację można wykonać wewnątrz obiektu. Aby to zrobić, anuluj modyfikator skrótem klawiaturowym Ctrl + Z i przejdź do trybu edycji. Zaznacz wszystkie wielokąty, naciskając klawisz A, a następnie otwórz menu narzędzi prawym przyciskiem myszy lub klawiszem W, jeśli zaznaczenie jest przypisane do prawego przycisku myszy. Wybierz opcję „Podziel”. W lewym dolnym rogu widoku pojawi się zakładka o tej samej nazwie. Otwórz go i ustaw wartość Smoothness na 1, a Number of Cuts na (Number of Cuts) przez 4. W ten sposób możesz skutecznie podzielić wielokąty i poprawić szczegółowość modelu.

Daje to podobny efekt, jak zastosowanie modyfikatora za pomocą skrótu klawiaturowego Ctrl + 4, ale scena zawiera teraz tylko 150 wielokątów. Nawet jeśli będziesz kontynuować duplikowanie za pomocą skrótu klawiaturowego Alt + D, liczba ścian pozostanie taka sama. Pozwala nam to zoptymalizować wydajność i uprościć pracę z modelami w grafice 3D.

Gdyby każdy z 2156 obiektów miał własną siatkę, ta scena miałaby około 1 miliona wielokątów. Zrzut ekranu: Leon Balbury dla Skillbox Media

Możesz zaznaczyć dowolny obiekt i przejść do trybu edycji, aby wprowadzić żądane zmiany, korzystając z metod z drugiej lekcji. Wszelkie wprowadzone zmiany zostaną automatycznie zastosowane do wszystkich pozostałych obiektów, ponieważ mają one tę samą siatkę. Umożliwia to efektywną edycję i optymalizację obiektów, przy jednoczesnym zachowaniu jednolitego stylu i harmonii w projekcie.

Obiekty po manipulacjach w trybie edycji. Zrzut ekranu: Leon Balbury dla Skillbox Media

Jeśli wybierzesz jeden z obiektów w trybie obiektu, na karcie Przekształć, w sekcji Element, możesz ustawić unikalne parametry położenia, obrotu, skalowania i wymiarów wzdłuż dowolnej osi. W tym przypadku zmiany wprowadzone w transformacji nie wpłyną na inne obiekty, zachowując ich oryginalne cechy.

Transformacja jednego obiektu. Zrzut ekranu: Leon Balbury dla Skillbox Media

Podczas tworzenia scen na dużą skalę możliwe jest użycie tylko jednej siatki, co znacząco optymalizuje koszty zasobów. Na przykład, nawet przy 17 248 obiektach w scenie, całkowita liczba wielokątów wynosi zaledwie 150. Gdyby dla każdego obiektu użyto osobnej siatki, całkowita liczba wielokątów osiągnęłaby około 8 milionów. Ten przykład pokazuje, jak optymalizacja może znacząco poprawić wydajność pracy ze scenami 3D i zmniejszyć obciążenie systemu.

Ta metoda ma zastosowanie również do całych kolekcji, które omówiliśmy w pierwszej lekcji. Na przykład, jeśli masz kolekcję ośmiu różnych modeli domów, które chcesz zduplikować, standardowe kopiowanie znacznie zwiększy liczbę wielokątów w scenie. Jeśli jednak klikniesz kolekcję prawym przyciskiem myszy i wybierzesz opcję „Instancja do sceny” (Instancja do sceny), możesz zduplikować grupę modeli bez zwiększania geometrii. Możesz również wykonać tę operację za pomocą menu Dodaj (Shift + A) i wybrać opcję Instancja kolekcji. Dzięki temu liczba wielokątów pozostanie taka sama, co pomoże zoptymalizować scenę i przyspieszyć pracę.

Uwaga: Korzystając z tego tekstu, pamiętaj, że może on zawierać ważne informacje, które zalecamy przeczytać. Wszystkie podane dane są aktualne w momencie publikacji i mogą ulec zmianie w czasie. Zalecamy regularne sprawdzanie źródeł i aktualizacji, aby być na bieżąco z najnowszymi zmianami. Zwróć uwagę na możliwe linki do dodatkowych zasobów, które pomogą Ci pogłębić zrozumienie tematu.

Należy pamiętać, że kolekcje mogą się na siebie nakładać. Jeśli nowe obiekty nie są widoczne na pierwszy rzut oka w scenie, sprawdź strukturę projektu — skopiowane kolekcje będą tam wyświetlane. Pomoże Ci to lepiej zorganizować przestrzeń roboczą i uniknąć pomyłki z elementami sceny.

Aby rozdzielić zduplikowaną kolekcję na pojedyncze obiekty, zaznacz ją i przejdź do menu Zastosuj (Ctrl + A), a następnie wybierz opcję Zastosuj — Utwórz instancje rzeczywiste. Ten proces przekonwertuje duplikaty na niezależne obiekty, co ułatwi dalszą pracę z nimi i poprawi organizację projektu.

Zapisywanie wielokątów znacząco wpływa na wydajność programu i proces renderowania. Jest to kluczowe podczas tworzenia animacji, ponieważ optymalizacja wielokątów może skrócić czas renderowania każdej klatki o kilka minut. Efektywne zarządzanie wielokątami nie tylko przyspiesza pracę w programie, ale także poprawia ogólny efekt, umożliwiając tworzenie wizualizacji o wyższej jakości bez straty czasu.

Rozważmy teraz możliwość modyfikowania obiektów w Blenderze nie pojedynczo, ale za pomocą wbudowanych narzędzi i skryptów Pythona. To znacznie uprości proces edycji i zautomatyzuje zadania związane z modelowaniem i animacją. Za pomocą skryptów Pythona można tworzyć bardziej złożone i wydajne algorytmy masowej modyfikacji obiektów, co znacznie zaoszczędzi czas i poprawi jakość pracy w Blenderze.

Randomizacja za pomocą narzędzi Blendera

Wróć do trybu obiektów i zaznacz wszystkie obiekty. Upewnij się, że podczas zaznaczania nie przechwytujesz kamery ani źródła światła. Jest to ważne dla poprawnej pracy z elementami sceny i zapobiegania niepożądanym zmianom.

Blender posiada funkcję wyszukiwania poleceń, dostępną po naciśnięciu klawisza F3. Dzięki niej można szybko znaleźć i użyć polecenia „Randomize Transform”. Jeśli scena zawiera wiele obiektów, załadowanie wyniku może zająć trochę czasu.

W lewym dolnym rogu ekranu pojawia się zakładka, która umożliwia losowe ustawienie położenia, obrotu i rozmiaru obiektów wzdłuż wszystkich trzech osi. Przyjrzyjmy się na przykład parametrowi „Obrót”. Ustawiając maksymalną wartość w pierwszym polu na 180, każdy obiekt otrzyma unikalny kąt obrotu wzdłuż osi X, w zakresie od 0° do 360° (od -180° do 180°). Poeksperymentujemy również z parametrem „Skala”, ustawiając go na 5. Spowoduje to, że każdy obiekt zmieni swoją skalę na losową wartość z zakresu od 1 do 5. Jeśli scena zawiera wiele obiektów, ich przetworzenie może zająć trochę czasu.

Wynik zmiany obrotu obiektów wzdłuż osi X (180°) i ich skali (5). Zrzut ekranu: Leon Balbury dla Skillbox Media

Problemem, z którym borykają się użytkownicy podczas wykonywania tej operacji, jest to, że duża liczba obiektów w scenie prowadzi do długiego czasu przetwarzania. Użycie Pythona w Blenderze może znacząco zoptymalizować proces randomizacji, pozwalając na znaczące skrócenie czasu poświęcanego na manipulowanie obiektami. Użycie skryptów i automatyzacja zadań z Pythonem otwierają nowe możliwości zwiększenia wydajności pracy w Blenderze.

Randomizacja w Pythonie

Wróćmy do kroku poprzedzającego randomizację obiektów za pomocą funkcji Randomize Transform. Zaczniemy od wybrania tylko tych obiektów, które planujemy zrandomizować, w osobnej kolekcji, w tym przypadku sześcianach. Zmieńmy nazwę kolekcji na przykład na Cubes. Ta nazwa będzie później wygodnie używana w kodzie jako identyfikator kolekcji.

Aby uruchomić konsolę Pythona, przesuń kursor do dolnej krawędzi okna widoku i delikatnie przeciągnij go w górę. W otwartym oknie wybierz „Typ edytora”, a następnie „Konsola Pythona”. Dzięki temu będziesz mógł bezpośrednio wchodzić w interakcję z Pythonem, wprowadzając polecenia i otrzymując wyniki w czasie rzeczywistym.

Randomizacja w Pythonie odbywa się za pomocą modułu random. Najpierw zaimportuj ten moduł do obszaru roboczego za pomocą polecenia import. Po wykonaniu tego polecenia Blender uzyska dostęp do funkcjonalności modułu random. Moduł ten jest dołączony do wersji Pythona używanej przez Blendera, co pozwala programowi na bezproblemowe korzystanie z jego metod do generowania liczb losowych i innych operacji związanych z randomizacją.

Moduł random to obszerna klasa zawierająca liczne metody i podklasy. Aby zapoznać się z jej zawartością, wpisz „random” w wierszu poleceń, a następnie użyj klawisza kropki, aby uzyskać dostęp do wewnętrznej hierarchii modułu. Następnie naciśnij klawisz Tab (lub Ctrl + Spacja w wersjach starszych niż 2.82a), aby wyświetlić dostępne metody i podklasy. Umożliwi to szybkie znalezienie funkcji potrzebnych do pracy z liczbami losowymi i innymi elementami, zapewniając efektywne wykorzystanie możliwości modułu losowego.

Notatka to ważny element, który może zawierać dodatkowe wyjaśnienia, komentarze lub zalecenia dotyczące określonego tematu. Służy do wyjaśnienia informacji i pomaga czytelnikowi lepiej zrozumieć kontekst. Notatki są często używane w materiałach szkoleniowych, artykułach naukowych i dokumentach, gdzie konieczne jest podkreślenie kluczowych punktów lub dostarczenie dodatkowych informacji.

Podczas pisania notatek ważne jest zachowanie przejrzystości i zwięzłości. Powinny być łatwe do zrozumienia i nie przeładowane zbędnymi szczegółami, aby nie odwracać uwagi od głównych informacji. Prawidłowe formatowanie notatek i ich umiejętne wykorzystanie może znacznie poprawić jakość treści i zwiększyć jej wartość dla czytelników.

Biorąc pod uwagę wszystkie te aspekty, notatki stanowią integralną część wysokiej jakości treści, która pomaga skutecznie przekazać informacje docelowej grupie odbiorców.

Funkcja autouzupełniania w środowiskach programistycznych przyspiesza proces wprowadzania poleceń. Za pomocą skrótu klawiaturowego Tab lub Ctrl + Spacja można szybko uzupełnić wprowadzony tekst. Na przykład, jeśli wpiszesz „obj” i naciśniesz klawisz Tab, program automatycznie zamieni je na słowo „obiekt”. Oszczędza to dużo czasu i ułatwia pracę z kodem, zwłaszcza podczas pisania długich identyfikatorów. Użyj tej funkcji, aby zwiększyć produktywność i zmniejszyć liczbę błędów.

Aby pracować z generowaniem liczb losowych w Pythonie, będziemy potrzebować metody randint(). Wpisz random.randint() w konsoli i naciśnij klawisz Tab (w wersjach starszych niż 2.82a użyj kombinacji klawiszy Ctrl + Spacja), aby uzyskać informacje o tej metodzie. Ta metoda pozwala generować losowe liczby całkowite w określonym zakresie, co czyni ją przydatną w różnych zadaniach związanych z losowością, takich jak gry czy symulacje.

Ta metoda generuje losową liczbę całkowitą w określonym zakresie, łącznie z jej wartościami ekstremalnymi. Na przykład, wprowadzimy wartości 0 i 100 w nawiasach, rozdzielając je przecinkami, a następnie naciśniemy Enter. Spowoduje to wygenerowanie losowej liczby z zakresu od 0 do 100, co jest przydatne w różnych scenariuszach, takich jak gry czy analiza statystyczna.

Metoda generuje liczbę 39 (Twój wynik może się różnić). Jeśli odświeżysz polecenie, naciskając klawisz ↑ (w górę) i ponownie naciskając Enter, zostanie wygenerowana nowa liczba z zakresu od 0 do 100. Wynik będzie się zmieniał za każdym razem, gdy wprowadzisz polecenie. Powtórzenia są jednak możliwe, ponieważ algorytm losowy sprawia, że ​​wynik jest nieprzewidywalny.

Metoda randint() Blendera pozwala ustawić losowe wartości skali i inne parametry dla obiektów, znacznie upraszczając proces tworzenia unikalnych scen. Blender używa modułu bpy do pracy z obiektami, który jest automatycznie dostępny w konsoli Pythona po uruchomieniu. Oznacza to, że nie ma potrzeby importowania go oddzielnie za pomocą polecenia import. Używanie losowych wartości może być przydatne do generowania różnych efektów i przyspieszenia procesu modelowania 3D.

Moduł bpy jest kluczowym narzędziem do interakcji z interfejsem Blendera. Umożliwia użytkownikom zarządzanie różnymi aspektami aplikacji. W szczególności komponent aplikacji obejmuje wszystkie funkcje związane z pracą z aplikacją, podczas gdy kontekst zawiera informacje o bieżących elementach, takich jak aktywny obiekt, scena, okno i inne elementy interfejsu. W ten sposób moduł bpy znacznie upraszcza przepływ pracy w Blenderze, umożliwiając użytkownikom efektywniejsze konfigurowanie i zarządzanie projektami.

Do pracy z projektem w Blenderze potrzebujemy klasy danych. Ta klasa przechowuje wszystkie bieżące dane projektu, które są również dostępne w pliku Blendera. Zawiera ona informacje o kolekcjach, obiektach, kamerach, światłach, siatkach i innych elementach, umożliwiając efektywne zarządzanie zawartością projektu. Korzystanie z klasy danych zapewnia wygodny dostęp do kluczowych danych potrzebnych do modelowania i animacji w Blenderze.

Lokalizacja karty Plik w Blenderze. Aby powrócić do poprzedniego menu, wybierz opcję Wyświetl warstwę. Zrzut ekranu: Leon Balbury dla Skillbox Media

Aby uzyskać informacje o obiektach, a nie siatkach, należy wpisać w wierszu ścieżkę do klasy zawierającej te obiekty. Ten proces umożliwia dostęp do szczegółowych danych o każdym obiekcie, co jest ważne dla prawidłowej pracy z nimi w projekcie.

Po naciśnięciu klawisza Tab (w wersjach starszych niż 2.82a, Ctrl + Spacja) program wyświetli obszerną listę nazw wszystkich obiektów w projekcie. Aby wyszukać konkretny obiekt, należy określić ścieżkę do klasy, a następnie dodać nawiasy kwadratowe i wpisać jego dokładną nazwę w cudzysłowie (podwójny "" lub pojedynczy »). Umożliwi to szybkie i efektywne znalezienie potrzebnych elementów w dużym projekcie.

Uwaga: Ta sekcja zawiera ważne wyjaśnienia i komentarze, które mogą być przydatne w zrozumieniu tematu. Prosimy o zapoznanie się z poniższymi szczegółami i zaleceniami. Te uwagi pomogą Ci lepiej zrozumieć przedstawiony materiał i uniknąć ewentualnych nieporozumień. Przeczytaj je uważnie, aby w pełni wykorzystać treść.

Podając nazwę, ważne jest, aby wziąć pod uwagę wielkość liter, ponieważ wielkie i małe litery mają znaczenie. Na przykład „Cube” i „cube” reprezentują różne obiekty. Jest to ważne dla poprawnej pracy z danymi i wyszukiwania informacji.

Po naciśnięciu Enter, jeśli obiekt o podanej nazwie istnieje, zostanie on wyświetlony w wierszu. W przeciwnym razie program wygeneruje błąd.

Utworzyliśmy pętlę do iterowania po obiektach za pomocą polecenia for. W tym celu używamy następującej konstrukcji: for variable_name in object_list. W tym kontekście variable_name pobierze kolejno wartość każdego elementu z listy obiektów, co pozwala na efektywne przetwarzanie danych i wykonywanie niezbędnych operacji na każdym elemencie. Takie podejście zapewnia prostotę i czytelność kodu, co jest ważnym aspektem programowania.

Ta konstrukcja oznacza „dla każdego obiektu spośród wszystkich obiektów w projekcie”. Należy zauważyć, że kończy się dwukropkiem. W tym kontekście „obiekt” to nazwa zmiennej (zamiast „obiekt” można użyć dowolnego innego słowa), która będzie kolejno odbierać wartość każdego obiektu z klasy bpy.data.objects. Na każdym z tych obiektów można wykonywać różne operacje.

Uwaga: Ten tekst zawiera ważne informacje, które należy wziąć pod uwagę. Należy koniecznie przeczytać te wskazówki, aby uniknąć potencjalnych nieporozumień. Prawidłowe zrozumienie i zastosowanie podanych informacji pozwoli zaoszczędzić czas i zasoby oraz poprawić wydajność.

Słowo „obiekt” jest słowem zarezerwowanym w Pythonie i ma kluczowe znaczenie w tym języku programowania. Użycie tego terminu jako nazwy zmiennej może spowodować utratę dostępu do jej pierwotnej wartości w programie. Aby uniknąć takich problemów, zaleca się używanie innych słów lub ich skrótów do nazywania zmiennych, takich jak «ob», «obj» i podobnych wariantów. Pomoże to zachować czytelność kodu i zapobiegnie potencjalnym błędom.

Wprowadź polecenie dla obiektu w pliku bpy.data.objects: i naciśnij Enter. Zauważ, że następny wiersz jest automatycznie wcięty. To wcięcie informuje program, że kolejny wiersz należy do ciała pętli i będzie wykonywany dla każdego obiektu. Teraz utwórzmy zmienną, która otrzyma losową wartość.

Skala to nazwa zmiennej, którą można zastąpić dowolnym innym słowem, które zostanie później użyte do oznaczenia wartości tej zmiennej. Wybór nazwy zmiennej odgrywa ważną rolę w kodowaniu, ponieważ powinna być intuicyjna i odzwierciedlać istotę danych, z którymi pracujesz. Prawidłowe nazewnictwo zmiennych poprawia czytelność i łatwość utrzymania kodu, co jest ważnym aspektem w tworzeniu oprogramowania.

Moduł random w Pythonie udostępnia różne funkcje do generowania liczb losowych, a jedną z najpopularniejszych metod jest randint. Funkcja randint pozwala uzyskać losową liczbę całkowitą z określonego zakresu. Metoda ta jest przydatna w różnych zastosowaniach, takich jak gry, modelowanie i analiza statystyczna. Korzystając z randint, programiści mogą łatwo generować losowe wartości dla swoich projektów, dodając element nieprzewidywalności i interaktywności.

Zakres losowych wartości wynosi od 5 do 100.

Dopasowanie wyniku uzyskanego za pomocą metody randint() polega na podzieleniu tego wyniku przez 100. Takie podejście pozwala na normalizację wartości uzyskanych z generatora liczb losowych i zapewnia wygodniejszą pracę z nimi w kontekście dalszych obliczeń lub analizy danych.

Aby rozwiązać nasz problem, musimy ustawić zakres losowych wartości od 0 do 1. Ponieważ metoda randint działa tylko z liczbami całkowitymi, wybierzemy zakres od 5 do 100, a następnie podzielimy wynikową wartość losową przez 100. W rezultacie otrzymamy liczbę z zakresu od 0,05 do 1, gdzie 5/100 równa się 0,05, a 100/100 równa się 1. To podejście Pozwala na efektywne generowanie wartości odpowiednich dla różnych algorytmów i obliczeń.

Następnym krokiem jest ustawienie uzyskanej wartości jako rozmiaru obiektu. Potwierdź wykonanie poprzedniego wiersza, naciskając Enter. Zwróć uwagę, że to samo wcięcie jest zachowane na początku nowego wiersza, co oznacza kontynuację opisu ciała pętli. Wprowadź następujące polecenie:

Obiekt to zmienna używana w instrukcji for object in bpy.data.objects. Reprezentuje ona każdy z obiektów obecnych na scenie.

Ustawiając skalę obiektu w grafice 3D, należy pamiętać, że wartość skali jest podawana w nawiasach trzykrotnie, rozdzielona przecinkami. W panelu Transform (Przekształć) widać, że skala każdego obiektu jest określana przez trzy osie: X, Y i Z. W związku z tym polecenie object.scale = scale nie zadziała, ponieważ określa tylko jedną wartość, podczas gdy wymagane są trzy różne. Aby poprawnie ustawić wartość zmiennej skali dla wszystkich trzech osi, należy wpisać ją w nawiasach trzykrotnie, rozdzielając przecinkami: object.scale = (skala, skala, skala). Zapewni to prawidłowe skalowanie obiektu w przestrzeni 3D.

Potwierdź wiersz i usuń wcięcia na początku następnego wiersza, ponieważ nie są wymagane żadne dodatkowe polecenia. Następnie naciśnij ponownie Enter. Poczekaj chwilę, a uzyskamy pożądany rezultat.

Otrzymany rezultat. Zrzut ekranu: Leon Balbury dla Skillbox Media

Wszystkie obiekty na scenie mają różne rozmiary. Jeśli ponownie uruchomimy pętlę dla obiektów, kopiując po prostu trzy linijki kodu, skala obiektów zmieni się losowo, a scena nabierze nowego wyglądu. Ten proces pozwala nam dynamicznie zmieniać wizualną reprezentację sceny, co może być przydatne do tworzenia unikalnych efektów i różnorodności w projekcie.

Proces przetwarzania danych jest zauważalnie szybszy w porównaniu z użyciem funkcji Randomize Transform. Aby dokładnie zmierzyć czas przetwarzania, utworzymy nowy skrypt na podstawie wcześniej opracowanego. Pozwoli nam to uzyskać dokładniejsze wyniki i zoptymalizować pracę z danymi.

Aby zoptymalizować pracę z oknem widoku, przesuń kursor do prawego górnego rogu i przeciągnij go w lewo, aby podzielić okno. Następnie wybierz typ edytora „Edytor tekstu” w nowym oknie. Pozwoli to na napisanie niezbędnego skryptu wygodniej i szybciej niż w konsoli Pythona.

Najpierw kliknij przycisk +Nowy. Przed skopiowaniem poleceń określonych w poprzednim kroku należy ponownie zaimportować wymagane moduły, ponieważ edytor tekstu nie ma informacji o operacjach wykonywanych w konsoli Pythona. Moduły importujemy za pomocą polecenia import, oddzielając je przecinkiem. Umożliwi to edytorowi dostęp do niezbędnych funkcji i bibliotek do dalszej pracy z kodem.

Przyjrzyjmy się ponownie głównym modułom. Moduł bpy odpowiada za interakcję z interfejsem Blendera, moduł random służy do generowania liczb losowych, a moduł time pozwala śledzić czas wykonywania operacji. Należy zauważyć, że w przeciwieństwie do konsoli Pythona, gdzie niektóre moduły, takie jak bpy, są importowane automatycznie podczas uruchamiania, w edytorze tekstu wszystkie moduły muszą zostać dodane ręcznie. Ta wiedza jest ważna dla efektywnej pracy z Pythonem w Blenderze i optymalizacji skryptów.

Następnie zdefiniujemy funkcję, która wykona określoną część kodu. Funkcja to blok kodu, który można wywołać wielokrotnie, co czyni ją wygodnym narzędziem upraszczającym programowanie. Funkcja jest oznaczona nawiasami na końcu swojej nazwy. Przed użyciem funkcji w kodzie należy ją zdefiniować. W tym celu należy użyć następującej konstrukcji:

Definicja funkcji programistycznej rozpoczyna się od słowa kluczowego def (od angielskiego „define”). To słowo kluczowe sygnalizuje kompilatorowi lub interpreterowi, że po nim nastąpi definicja funkcji. Funkcje są ważnym elementem języków programowania, ponieważ pomagają w strukturyzacji kodu, upraszczają jego ponowne użycie i poprawiają czytelność. Słowo kluczowe def to podstawowy sposób deklarowania funkcji, po którym następuje nazwa funkcji i jej ewentualne parametry. Prawidłowe definiowanie i używanie funkcji przyczynia się do bardziej wydajnego i zorganizowanego kodu.

Funkcja random_scale została zaprojektowana do generowania losowych skal. Jest używana w różnych aplikacjach wymagających adaptacyjnego dostosowywania rozmiarów obiektów lub elementów interfejsu. Jej głównym celem jest tworzenie zmiennych i dynamicznych efektów wizualnych, co jest szczególnie ważne w tworzeniu gier i projektowaniu stron internetowych. Prawidłowe użycie funkcji random_scale może znacznie zwiększyć interaktywność i zaangażowanie użytkownika. Należy pamiętać, że wywołując tę ​​funkcję, należy wziąć pod uwagę parametry wpływające na wynik końcowy, aby osiągnąć pożądany efekt.

Nawiasy w składni funkcji są ważnym elementem, który może być pusty lub zawierać parametry. Parametry określone w nawiasach są zazwyczaj używane w treści funkcji do wykonywania określonych operacji lub obliczeń. Prawidłowe użycie nawiasów i parametrów w funkcjach jest kluczowym aspektem programowania, zapewniającym elastyczność i wydajność kodu.

Dwukropek (:) oznacza początek treści funkcji. Ten symbol jest używany w językach programowania do oddzielenia nagłówka funkcji od jej zawartości, umożliwiając wyraźne określenie miejsca rozpoczęcia wykonywania kodu. Prawidłowe użycie dwukropka jest kluczem do strukturyzowania i organizowania kodu, ułatwiając jego czytanie i zrozumienie.

Po naciśnięciu Enter edytor automatycznie wstawi wcięcie. Można je również wstawić, naciskając klawisz Tab lub cztery spacje. Wcięcia w Pythonie odgrywają kluczową rolę, ponieważ określają, czy wiersze należą do tego samego bloku kodu, takiego jak treść funkcji czy pętla. Prawidłowe użycie wcięć zapewnia poprawne wykonanie programu i ułatwia czytanie kodu.

Przed wykonaniem głównej części funkcji zapiszemy czas wykonania. W tym celu utworzymy zmienną t1 i przypiszemy jej bieżący czas za pomocą metody perf_counter() z modułu time. Pozwoli nam to dokładnie zmierzyć czas wykonania funkcji i zoptymalizować wydajność kodu.

Metoda to funkcja należąca do określonej klasy w programowaniu obiektowym. Aby uzyskać dostęp do metody, należy określić nazwę klasy, do której należy, i oddzielić ją kropką od nazwy samej metody. Należy pamiętać, że słowo kluczowe «def» jest używane tylko podczas definiowania nowej funkcji. Aby wywołać istniejącą metodę, wystarczy podać jej nazwę za pomocą nawiasów otwierających i zamykających.

Teraz należy skopiować i wkleić pętlę, która odpowiada za losowe dostosowywanie skali wszystkich obiektów. Ta pętla została wcześniej zaimplementowana w konsoli.

Ważne jest, aby usunąć dodatkowe kropki, które automatycznie pojawiały się podczas kopiowania z konsoli, oraz poprawnie ustawić wcięcia. Ciało pętli powinno być oddzielone nowym wcięciem dla lepszej czytelności. Kolejny wiersz po pętli ze zmienną t2 rejestruje czas wykonania funkcji. Prawidłowe formatowanie kodu poprawia jego zrozumienie i ułatwia dalszą pracę z nim.

Aby określić czas trwania całego procesu, należy odjąć wartość t1 od t2 i wyświetlić uzyskany wynik. W tym celu używamy polecenia print(). Jest to wbudowana metoda języka Python, która umożliwia wyprowadzanie informacji tekstowych i liczbowych do konsoli systemowej. Nie należy jej mylić z konsolą języka Python. Konsolę systemową można otworzyć za pomocą zakładki „Okno” — „Pokaż/ukryj konsolę systemową” (Okno — Przełącz konsolę systemową).

Ta metoda jest odpowiednia dla użytkowników systemu Windows. Użytkownicy systemów macOS i Linux powinni uruchomić Blendera za pomocą terminala, podając pełną ścieżkę do pliku blender-launcher.exe. Spowoduje to, że terminal będzie działał jako konsola systemowa, umożliwiając monitorowanie procesów i wyświetlanie komunikatów o błędach.

Aby wyświetlić różnicę czasu między początkiem a końcem funkcji w konsoli, należy wykonać obliczenia w nawiasach. Pozwoli to dokładnie określić przedział czasu poświęcony na wykonanie funkcji.

Aktualnie funkcja jest prezentowana jedynie jako polecenie i nie zostanie wykonana automatycznie po uruchomieniu skryptu. Aby ją aktywować, należy ją wywołać. Oddzielamy napisaną funkcję pustą linią, a następnie w kolejnej linii wskazujemy nazwę funkcji random_scale() bez prefiksu def, wcięć i dwukropka, ale z nawiasami na końcu. Spowoduje to wywołanie wcześniej zdefiniowanej funkcji.

Po uruchomieniu skryptu każdemu obiektowi w scenie zostanie przypisana losowa wartość parametru skali. Konsola systemowa wyświetli informacje o czasie poświęconym na wykonanie tej operacji. Aby uruchomić skrypt, wystarczy kliknąć przycisk odtwarzania w prawym górnym rogu edytora lub użyć skrótu klawiaturowego Alt + P.

Po zakończeniu operacji otwórz konsolę systemową, aby przeanalizować wyniki. W tym przypadku wykonanie funkcji zajęło 0,34 sekundy. Ten czas pozwala ocenić wydajność kodu i zidentyfikować potencjalne wąskie gardła wydajności.

Notatka to ważny dodatek do tekstu głównego, który może zawierać wyjaśnienia, objaśnienia lub dodatkowe informacje. W kontekście pisania artykułów i treści na strony internetowe, notatki odgrywają znaczącą rolę w lepszym zrozumieniu materiału przez czytelnika. Mogą one pomóc uniknąć nieporozumień i dostarczyć użytecznych informacji, które nie zostały zawarte w tekście głównym. Skuteczne wykorzystanie notatek przyczynia się do jakości treści i poprawia jej czytelność. Tworząc tekst zoptymalizowany pod kątem SEO, należy pamiętać, że notatki mogą również zawierać słowa kluczowe i frazy, co zwiększa widoczność strony w wyszukiwarkach. Prawidłowo sformatowane notatki poprawiają strukturę tekstu i ułatwiają nawigację, co z kolei może pozytywnie wpłynąć na doświadczenie użytkownika.

Ten skrypt został zaprojektowany do pracy ze wszystkimi obiektami w projekcie. Na początku rozdziału wspomnieliśmy o kolekcji z kostkami o nazwie Cubes. Aby zmodyfikować obiekty tylko w tej kolekcji, należy zastąpić fragment bpy.data.objects fragmentem bpy.data.collections[‘Cubes’].objects, gdzie ‘Cubes’ to nazwa żądanej kolekcji.

Takie podejście pozwala na bardziej precyzyjną kontrolę obiektów, zapewniając wygodę i wydajność pracy z danymi w Blenderze.

Podsumowując, używając Pythona, udało nam się zrandomizować skalę 17 248 obiektów w zaledwie jedną trzecią sekundy. To pokazuje, jak podstawowe umiejętności programistyczne mogą znacząco zoptymalizować procesy i przyspieszyć działanie w porównaniu z tradycyjnymi narzędziami Blendera. Wykorzystanie Pythona w grafice 3D otwiera nowe horyzonty w zakresie zwiększania wydajności i produktywności w projektowaniu.

W czwartej części naszego przewodnika zagłębimy się w podstawy animacji i omówimy różne metody jej wdrażania. Poznasz kluczowe zasady animacji, a także techniki, które pomogą Ci skutecznie odtwarzać animowane efekty. Te informacje będą przydatne zarówno początkującym, jak i doświadczonym programistom, którzy chcą poprawić interakcję z użytkownikiem za pomocą animacji.

Sprawdź inne materiały z tej serii.

  • Samouczki Blendera: interfejs, nawigacja, proste operacje
  • Samouczki Blendera: podstawy modelowania
  • Samouczki Blendera: podstawy animacji

Zawód artysty 3D

Uczestnicząc w tym kursie, nauczysz się obsługi programów Autodesk Maya, Blender, Houdini, Substance Painter i Photoshop od podstaw do poziomu profesjonalnego. Naucz się modelowania 3D i dodaj ponad 20 praktycznych prac do swojego portfolio, stając się poszukiwanym artystą 3D. W ciągu roku opanujesz zawód, na który jest duże zapotrzebowanie w branży filmowej i gier. Na zdjęciu: praca uczestnika kursu Dmitrija Daniłowa.

Dowiedz się więcej