Automatyzacja widoczności na trybunach. Case Study: Dynamo i Python w revitowym audytorium.

Większość z nas zna to uczucie z kina czy teatru, gdy komfort odbioru spektaklu jest obniżony przez osobę siedzącą rząd niżej, która zasłania widok. Z perspektywy widza to po prostu niewygoda. Z mojej perspektywy architekta to często wynik błędu w obliczeniach kluczowego parametru. Mowa o C-Value, czyli w polskiej nomenklaturze branżowej przewyższeniu widowni. To wartość określająca pionową odległość między linią wzroku obserwatora a czubkiem głowy osoby siedzącej rząd niżej.

Wymagana wartość „C” zależy od przyjętego układu foteli. Przy ustawieniu „na mijankę”, gdzie wzrok biegnie między głowami widzów z przodu, wystarczające może być 60 mm. W układzie tradycyjnym, „rząd za rzędem”, konieczne jest często zapewnienie pełnych 120 mm przewyższenia, aby widz mógł swobodnie obserwować punkt skupienia na scenie.

W tradycyjnym procesie projektowym w środowisku BIM, koordynacja geometrii podłogi z tymi wymaganiami bywa żmudna. Często modelowanie trybun w Revicie polega na ręcznym definiowaniu stropów i wtórnym dopasowywaniu foteli. Każda rewizja projektu – np. zmiana układu z prostego na łukowy – wymusza przebudowę całego przekroju.

W tym studium przypadku chciałem pokazać, jak wykorzystanie narzędzi programistycznych w ramach Revita pozwoliło mi zautomatyzować to zagadnienie.

Odwrócenie zależności: C-Value jako parametr formotwórczy

Aby usprawnić ten proces, opracowałem skrypt Dynamo, który odwraca standardową zależność. Zamiast dopasowywać widoczność do narzuconej geometrii, algorytm traktuje zadaną wartość parametru przewyższenia jako nadrzędny parametr, który tę geometrię tworzy. Skrypt wykorzystuje logikę iteracyjną, bazującą na trygonometrii trójkątów podobnych. Dla każdego kolejnego rzędu algorytm przelicza wektor widoczności, uwzględniając rosnącą odległość od sceny i stały, zadany parametr C-Value.

To właśnie tutaj ujawnia się największa przewaga automatyzacji. Aby utrzymać stałą widoczność, profil trybuny rzadko jest linią prostą – fizyka i geometria wykreślna wymuszają progresywne zwiększanie wysokości stopni (profil zbliżony do paraboli) im dalej znajdujemy się od sceny. Ręczne wyliczanie i modelowanie takiej krzywej w Revicie jest procesem czasochłonnym i podatnym na błędy. Mój algorytm generuje ten skomplikowany, zmienny profil natychmiastowo, tworząc parametryczny układ reagujący na każdą zmianę punktu skupienia.

Narzędzie, działające płynnie w Dynamo Player, pozwala na szybkie wariantowanie geometrii, obsługując automatycznie zarówno standardowe układy proste, jak i bardziej złożone układy radialne (łukowe). Co istotne dla wydajności modelu, skrypt generuje natywną geometrię Revita (DirectShapes/Solids), a nie obciążające siatki mesh.

System nie ogranicza się jednak tylko do geometrii podłogi widowni. Jego integralną częścią jest predefiniowana, parametryczna rodzina fotela. Algorytm nie tylko rozmieszcza krzesła na wygenerowanych stopniach, ale też steruje ich kluczowymi parametrami: reguluje szerokość siedziska (dopasowując je np. do promienia w układach łukowych) oraz precyzyjnie definiuje pozycję oka widza dla każdego rzędu. Dodatkowo rodzina posiada dedykowany parametr na numer siedziska, który jest automatycznie uzupełniany w procesie generacji.

Weryfikacja: Automatyzacja widoków z perspektywy widza

Wygenerowanie poprawnej geometrii i rozmieszczenie foteli to jeden etap. Drugim jest weryfikacja przyjętych założeń z perspektywy konkretnego miejsca.

Ręczne tworzenie setek kamer w Revicie jest nieefektywne. Napotkałem tu na specyficzne wyzwania z API programu, dotyczące poprawnego skalowania widoków perspektywicznych i ich kłopotliwego kadrowania (Crop Box). Jako rozwiązanie zastosowałem skrypt w Pythonie, który automatycznie ustawia kamerę, przelicza jednostki (z imperialnych na metryczne) i „czyści” kadr. Dzięki temu użytkownik otrzymuje gotowy, czytelny widok nawigacyjny z perspektywy konkretnego krzesła, idealny do szybkiej oceny.

Integralność danych

Automatyzacja powinna dbać także o integralność informacji. Dlatego opracowany system wykracza poza geometrię. Skrypt generujący widoki jest zintegrowany z modelem – automatycznie nadaje unikalne identyfikatory (np. R5_S12) i wpisuje je do wspomnianego wcześniej parametru w rodzinach krzeseł. Zapewnia to zgodność między nazwą widoku 3D a elementem w zestawieniu.

To rozwiązanie jest dla mnie przykładem na to, jak projektowanie parametryczne ewoluuje – z narzędzia do tworzenia skomplikowanych form, w stronę elementu kontroli jakości i optymalizacji codziennych procesów projektowych.