Typowy samolot ma wiele różnych otworów w kadłubie i skrzydłach. Blender potrafi wykonać trochę operacji Boole'a na powierzchniach. Możesz ich użyć, aby stworzyć w siatce dziurę, lecz czasami rezultaty uzyskane za pomocą tego polecenia nie są takie, jakich byś sobie życzył. Zazwyczaj występują problemy z układem ścian wokół nowej krawędzi (przecięcia). Złapałem się wiele razy na usuwaniu oryginalnych ścian, wygenerowanych przez te operacje. Po ich usunięciu, tworzyłem bardziej “regularny” układ krawędzi wokół takiego otworu.

Ostatecznie, stwierdziłem że potrzebuję narzędzia, które wyznaczy wspólną krawędź dwóch przenikających się siatek. Uznałem za bardziej praktyczne, gdy włączę ją do siatki poprzez ręczne stworzenie nowych ścian, bez marnowania czasu na usuwanie tych stworzonych automatycznie. Tak więc, oto moje narzędzie. Osobiście używam go bardzo często, może przyda się także Tobie.

W Blenderze 2.72 pojawiło się podobne, standardowe polecenie Intersect(Boolean). (Aktualnie, w Blenderze 2.8 możesz je znaleźć w Edit Mode, w menu Faces). Przypomina ono ten dodatek i pozwala uzyskać podobne rezultaty. Różni się tym, że dzieli ściany siatki wzdłuż nowo utworzonej krawędzi przecięcia, lub od razu usuwa odciętą część siatki.

Zwróć jednak uwagę, że to standardowe polecenie Intersect i przedstawiona poniżej wtyczka różnią się nieco opcjami. Sugeruję wykorzystać obydwie. (Ta wtyczka dodaje polecenie do innego menu, więc nie ma pomiędzy nimi konfliktu). W mojej codziennej pracy używam standardowego polecenia gdy chcę podzielić ściany siatki, a wtyczki - gdy chcę przebudować topologię siatki wokół uzyskanej krawędzi przecięcia.

Stąd możesz pobrać plik z dodatkiem ("add-on") object_intersection.py dla Blendera 2.8

Stąd możesz pobrać plik z dodatkiem ("add-on") object_intersection.py dla poprzednich wersji Blendera (2.5 - 2.7)

Przed rozpoczęciem tego poradnika powinieneś zainstalować dodatek Intersection do swojego Blendera. (Tutaj masz opis, który wyjaśnia jak to się robi).


Aktywacja dodatku
Ten dodatek nosi nazwę Intersection. Znajdziesz go w kategorii Object. Aby go używać, musisz go aktywować (Rys.1):
Rys. 1. Aktywacja dodatku Intersection
Użycie polecenia w Object Mode
W Object Mode zaznacz dwa obiekty, które chcesz przeciąć (Rys. 2), następnie: w Blenderze 2.8 otwórz menu Object. (W Blenderze 2.7: naciśnij klawisz [W], by otworzyć menu Specials):
Rys. 2. Wywołanie polecenia Intersect.

Z menu Object (lub Specials) wybierz polecenie Intersect. Otwiera to okno dialogowe z opcjami operacji (Rys. 3):

Rys. 3. Rezultat polecenia Intersect.

Gdy naciśniesz przycisk OK, skrypt przełącza Blendera w Edit Mode. Jednocześnie do siatki aktywnego obiektu zostanie dodana krawędź przecięcia. Ta nowa krawędź nie jest połączona z resztą siatki, a jej wierzchołki są zaznaczone. Dzięki temu, jeżeli nie będziesz zadowolony z uzyskanego rezultatu, możesz jego wynik usunąć jednym naciśnięciem klawisza [X](Rys. 3) i spróbować jeszcze raz.


Użycie dodatku w Edit Mode
Dodatek udostępnia także polecenie w trybie edycji. Wyznacza tu krawędź przecięcia zaznaczonych ścian siatki z pozostałymi ścianami. W Blenderze 2.8 znajdziesz je w menu Edges, pod nazwą Intersect Faces. (Rys. 4 przedstawia wywołanie polecenia w Blenderze 2.7, z menu Specials):
Rys. 4. Użycie polecenia Intersect w Edit Mode

W Edit Mode zaznacz odpowiednie ściany siatki, a następnie otwórz menu Edges (Blender 2.7: naciśnij klawisz [W] by otworzyć menu Specials). Wybierz stamtąd polecenie Intersect Faces (Blender 2.7: Intersect). Spowoduje to wyznaczenie krawędzi przecięcia. Tak jak w przypadku innych poleceń Blendera, parametry tej operacji możesz interaktywnie przełączać w przyborniku narzędzia (Tool options).

Opcja "Use both meshes"
Krawędź przecięcia biegnie przez punkty, w których krawędzie jednej z siatek przecinają ściany drugiej. Domyślnie program korzysta z dwóch zbiorów punktów. Najpierw jest sprawdzane przecięcie krawędzi obiektu aktywnego ze ścianami drugiego, a potem — ścian obiektu aktywnego z krawędziami tego drugiego. Potem obydwa rezultaty są ze sobą łączone w jedną krawędź (Rys. 5a):
Rys. 5. Porównanie rezultatów - opcja Use both meshes włączona (a) i wyłączona (b).

Jeżeli chcesz uzyskać krawędź złożoną wyłącznie z punktów leżących na krawędziach aktywnego obiektu — wyłącz domyślną opcję Use both meshes. Uzyskasz linię, która będzie zazwyczaj mniej dokładna (Rys. 5b). Łatwiej ją jednak będzie włączyć w istniejącą siatkę, bo przy okazji powstanie mniej ścian trójkątnych.


Opcja "Use selected faces"
W przypadku siatek o dużej liczbie ścian warto wskazać skryptowi mniejszy obszar do przetwarzania (to skraca czas obliczeń). Jeżeli w chwili wywołania polecenia siatka ma jakieś zaznaczone ściany, to Intersect przetworzy tylko ten wskazany obszar. (Jeżeli nic nie jest zaznaczone — przetwarzane są wszystkie ściany siatki). Opcja, która to wymusza to Use selected faces (Rys. 6):
Rys. 6. Ograniczenie przecinanego obszaru za pomocą selekcji ścian siatki.

Use selected faces jest domyślnie włączona. Jeżeli nie chcesz ograniczać przetwarzanego zakresu ścian siatek — wyłącz ją.

Opcja use selected faces nie jest dostępna w Edit Mode. Jeżeli chciałbyś w tym trybie wykluczyć z przecinania jakieś ściany, ukryj je przed wywołaniem polecenia (poleceniem Hide Selected – [H]), a potem „odkryj” po zakończeniu operacji ([Alt]-[H] – Show Hidden)


Opcja "Use diagonals"
Rys. 7. Przykład niekompletnej krawędzi.

Najtrudniejszą częścią algorytmu tej wtyczki jest fragment odpowiedzialny za łączenie znalezionych punktów przecięcia w jedną lub więcej ciągłych krawędzi. Zazwyczaj działa poprawnie, ale czasami to mu się nie udaje. Może tak stać się np. wtedy, gdy rozwiązanie składa się z większej liczby oddzielnych krawędzi (Rys. 7):

Rys. 8. Szczególny przypadek dla algorytmu łączenia krawędzi.

Oczywiście, jeżeli takich błędów jest niewiele, można po prostu szybko skorygować, łącząc wierzchołki ręcznie. Uważaj jednak na sytuacje, gdy krawędzie jednej siatki trafiają dokładnie w krawędzie drugiej siatki. Tak się może stać przy próbie wyznaczenia krawędzi przenikania dwóch walców o tej samej średnicy i liczbie wierzchołków (Rys. 8):

Rys. 9. Poprawna krawędź przenikania dla innego zestawu walców.

W takim szczególnym przypadku, jak na Rys. 8, wszystkie punkty zostały znalezione, ale skryptowi nie mógł się zdecydować, jak je należy połączyć. Oczywiście, jeżeli przecinane siatki będą się od siebie różnić, otrzymamy poprawny rezultat (Rys. 9):

W razie problemów — pamiętaj, że zazwyczaj wystarczy drobny obrót lub przesunięcie jednej z siatek, by punkty krawędzi zostały połączone poprawnie. Na wszelki wypadek dodałem jednak do parametrów skryptu opcję Use diagonals.

Podczas przetwarzania program zamienia każdą czworokątną ścianę siatki na dwa trójkąty, połączone wzdłuż przekątnej. Przecięcie tej przekątnej ze ścianą przeciwległego obiektu także jest wyznaczane, jednak te punkty pełnią rolę pomocniczą, i nie są włączane do rezultatu, wyświetlanego użytkownikowi. Czasami jednak możemy uzyskać z nich taką, niekompletną krawędź (Rys. 10):
Rys. 10. Przykład krawędzi, której skrypt nie potrafił połączyć do końca.

Czasami włączenie opcji Use diagonals może poprawić taki rezultat (Rys. 11):

Rys. 11. Przykład zastosowania opcji Use diagonals.
Rys. 12. Rezultat zagęszczenia jednej z siatek

Z drugiej jednak strony — uzyskana krawędź staje się mniej „poręczna” do dalszej pracy, bo ma teraz dwa razy więcej wierzchołków. Właściwie to tę opcję pozostawiłem „na wszelki wypadek”. W tym i podobnych przypadkach poprawę rezultatu możesz także osiągnąć, zagęszczając siatkę (Rys 12):