Blog (3)
Komentarze (5)
Recenzje (0)

Maya: wyświetlanie geometrii NURBS

@makalMaya: wyświetlanie geometrii NURBS23.08.2012 01:26

Każdy, kto choć przez chwile miał styczność z grafiką 3D powinien wiedzieć, że w swej naturze powierzchnie NURBS (Non-Uniform Rational B-Spline) są bardzo "płynne", w przeciwieństwie do powierzchni zbudowanych o wielokąty (ang. polygons), które swą gładkość osiągają przez:

  • zwiększenie liczby wielokątów (to pociąga za sobą większe obciążenie CPU oraz GPU),
  • algorytmy wygładzające (subdivision levels, które także obciążają CPU/GPU),
  • triki polegające na odpowiednim kierunkowaniu wektorów normalnych dla poszczególnych wierzchołków (w Mayi ustawia się to za pomocą funkcji Set Normal Angle...).

NURBS-y korzystając ze swojej matematycznie określonej konstrukcji (nie będę wchodził w zbyt techniczne szczegóły) pozwalają przy niewielkim obciążeniu procesora GPU, a także, jeśli dochodzi do renderingu, CPU (wyjątkiem jest mental ray korzystający z CUDA, jeśli takowe wykryje) dać nam powierzchnie, na których światło rozpada się równomiernie.

Zatem przykładowo tworzymy prymityw - kulę. Odpalamy render (w moim przypadku jest to mental ray). I... zaskoczenia nie ma. Powierzchnia wygląda dokładnie tak samo na ekranie roboczym jak i po wyrenderowaniu, poza (spodziewanym) nieco innym rozpadem światła. Można powiedzieć, że znajduje tu zastosowanie stara zasada WYSIWYG. Niestety, a może "stety", rzeczywistość nie jest tak prosta jak się wydaje.

Daj mi więcej kontroli!

W programie Autodesk Maya mamy skróty klawiszowe, które zajmują się jakością wyświetlania geometrii.

  • Klawisz "1" odpowiadający za Low Quality Display (MEL: setDisplaySmoothness 1).
  • Klawisz "2" odpowiadający za Medium Quality Display (MEL: setDisplaySmoothness 2).
  • Klawisz "3" odpowiadający za High Quality Display (MEL: setDisplaySmoothness 3).

Skróty działają w zupełnie odmienny sposób na geometrie zbudowane z wielokątów, NURBS, czy Subdivision surfaces (pl. powierzchnie wielopodziałowe, w polskim koślawym tłumaczeniu znalezionym tylko i wyłącznie w „Maya 2011. Wprowadzenie” :-). Żeby było jeszcze zabawniej, każdy rodzaj geometrii, zależnie od tego jak powstał, ma odmienny stopień jakości wyświetlania. W tym tekście skupię się tylko na powierzchniach NURBS.

Kiedy stworzyliśmy nasz prymityw (kulę) on także miał od tamtego momentu przypisane sobie parametry określające sposób jego prezentacji. Znajdują się one gdzieś pomiędzy wspomnianymi: Medium Quality Display a High Quality Display. Żeby to sobie trochę rozjaśnić w głowie, najlepiej przetestować samemu przyciskając odpowiednio na klawiaturze: 1, 2 i 3... W trakcie robienia tego nasz model musi być zaznaczony. Jeśli w obszarze roboczym mamy wiele obiektów o różnej budowie (polygons, NURBS, subdivs) niedobrze by było, gdyby Maya domyślnie zmieniała stopień jakości wyświetlania dla wszystkich, ze względu na, jak już wspomniałem, różne oddziaływanie tych skrótów na różne rodzaje geometrii.

Co się zatem dokładnie dzieje z naszą geometrią kiedy korzystamy z tych skrótów? By to zobaczyć powinniśmy wejść do Attribute Editor i przy zaznaczonym obiekcie otworzyć kartę noszącą generalnie nazwę Shape node, a w z schemacie wyświetlającą się jako nazwaObiektuShape, gdzie nazwaObiektu to... nazwa naszego obiektu - jeśli ją nadaliśmy. W przypadku naszej kuli powinno to być domyślnie nurbsShpereShape. Kiedy już weszliśmy w tą kartę poniżej zobaczymy zwinięte menu o nazwie NURBS Surface Display. Czas zajrzeć pod maskę.

Parametry, które będą nas interesowały to: Curve Precision oraz Crv Precision Shaded. Pierwsze określa dokładność wyświetlania krzywych, drugie zaś wyświetlanie krzywych w trybie Smooth Shade. Jeśli chodzi o płaszczyzny NURBS nie zaś same krzywe (jako oddzielne obiekty, które notabene nie mają w ogóle takich opcji w Atribute Editor) to sprawa wygląda następująco: parametr Curve Precision będzie zmieniał wygląd naszej geometrii tylko w trybie Wireframe (klawisz 4), zaś Crv Precision Shaded tylko wygląd w trybie Smooth Shade (klawisz 5). Na screenshotcie umieszonym powyżej widzimy domyślne ustawienia jakie są przydzielane dla wszystkich prymitywów NURBS dostępnych w menu. Używając skrótów: 1, 2 oraz 3 nadpisujemy te parametry w następujący sposób:

  • Low Quality Display (1): Curve Precision = 3; Crv Precision Shaded = 1;
  • Medium Quality Display (2): Curve Precision = 7; Crv Precision Shaded = 2;
  • High Quality Display (3): Curve Precision = 15; Crv Precision Shaded = 4;

Analizując powyższe zmiany można dojść do wniosku, że w zasadzie domyślne atrybuty nadawane prymitywom są jak najbardziej w porządku i nie trzeba ich zmieniać. Ponadto rewaluujemy wartości dla Divisions U I Divisions V, ale w tym tekście nie będę się nimi zajmował. Natomiast zaznaczę, że można zobaczyć tego wpływ w trybie Wireframe.

Często się zdarza, że w trakcie budowy modelu na zasadzie geometrii NURBS możemy napotkać problem zbyt kanciastego wyświetlania w trybie Smooth Shade, wtedy wystarczy po prostu podnieść wartość Crv Precision Shaded do wartości nas satysfakcjonującej i po kłopocie.

By usunąć kanciastość wartość Crv Precision Shaded została zmieniona z 4 na 16.
By usunąć kanciastość wartość Crv Precision Shaded została zmieniona z 4 na 16.

Panie renderze, czy Pan mnie w ogóle słucha?

Te opracowanie w ogóle by nie powstało, gdyby nie to, że rozbieżności w wyświetlaniu geometrii sięgają jeszcze dalej. To, co opisałem powyżej to absolutne podstawy, które każdy korzystający z Mayi powinien znać... Doszliśmy do głównego punktu programu. Czyli różnicy pomiędzy wyświetlaniem modelu NURBS w obszarze roboczym i jego aparycją w renderze. Trzeba wiedzieć, że to dwie różne kwestie.

Najlepiej to pokazać na przykładzie, gdzie nadajemy dla naszego dobrego już przyjaciela - kuli NURBS - właściwości Low Quality Display i następnie sprawdzimy efekt tego działania w renderze.

Ciekawe? Prawda jest taka, że jeśli chodzi o geometrie NURBS to w przeciwieństwie do polygonów (pozwolę sobie na takie spolszczenie) to co widzimy w obszarze roboczym nie jest równe temu co dostajemy po wyrenderowaniu (tutaj akurat subdivision surfaces reagują tak samo jak NURBS). Ale co by to nas niby obchodziło, skoro końcowym efektem ma być koniec-końcu gładka powierzchnia? Jest? Jest. No, niestety nie zawsze.

Wszystko dzieje się w imię większej kontroli nad tym, co się robi. W imię nieskończonej optymalizacji.

Mimo tego, że modele NURBS są matematycznie opisane w przeciwieństwie do zorientowanych przestrzennie wierzchołków opisujących wielokąty, to w trakcie renderingu obowiązuje je ta sama zasada, co ich "sztywnych" braci. Mianowicie podział na trójkąty - najmniejsze do uzyskania elementy płaszczyzn. Dedykowany renderer w celu obliczeń rozbija powierzchnie modeli na trójkąty i dalej na tej podstawie określa jak światło ma się rozchodzić po ich powierzchni.

Wystarczy tej teorii. Czas wreszcie zostawić naszą kulę i zbudować coś ciekawszego... niewiele, aczkolwiek coś, co pomoże nam lepiej dostrzec problem. Prosty kabel zbudowany na zasadzie dwóch krzywych: koła oraz nieregularnej linii i narzędzia Extrude - czyli sytuacja, która przy modelowaniu NURBS nie jest rzadkością. Nasz obiekt będzie wyglądał z początku kanciasto, ale wiemy już jak to naprawić, więc zmieniamy Crv Precision Shaded, przechodzimy do renderowania i...

Baby don’t hurt me, don’t hurt me... no more.

Jak to się stało, że do tej pory zawsze gładkie powierzchnie NURBS teraz w renderze postanowiły nam zrobić takiego placka? Otóż jest coś, co różni nasze prymitywy (menu: Create > NURBS Primitives) od geometrii skonstruowanej na zasadzie Surfaces > Revolve / Loft / Planar / Extrude. To kafelkowanie, inaczej teselacja... dokładniej triangulacja. A jeszcze ściślej... różnice w jej egzekwowaniu pomiędzy tak tworzonymi modelami. Jednak Maya i w tej kwestii nie zostawia nas na pastwę losu. Nad teselacją również mamy kontrolę i to dosłownie pod nosem, bo poniżej już omawianego menu NURBS Surface Display i nazywa się ono, nie inaczej, Tessellation.

Na potrzeby tego tekstu nie będę dalej wnikał, "po co" i "dlaczego", wyjaśnię po prostu, co zrobić by problem pokazany powyżej rozwiązać. Interesuje nas podmenu Simple Tessellation Options. Główną różnicą pomiędzy naszą wcześniejszą kulą, a obecnym kablem jest to, że dla U Division Factor oraz V Division Factor kula miała przypisane wartości 4.5, kabel zaś ma aż o 3 razy mniejsze: 1.5. By podglądać efekty naszych działań na żywo wystarczy zaznaczyć pierwsze okienko Display Render Tessellation. W dużej ilości przypadków wartości rzędu 4.5 wystarczają w zupełności. Należy mieć na uwadze, że podwyższanie U/V Division Factor powoduje intensyfikacje podziału powierzchni na większą ilość trójkątów, co zatem przekłada się na większe obciążanie CPU podczas renderingu. Zatem powinniśmy kontrolować tą wartość do najmniejszej potrzebnej.

Na upartego można dostrzec w poprawionym renderze po prawej stronie trochę krawędzi, ale wynika to już tylko z ekstremalnie zbudowanej geometrii na potrzeby prezentacji, gdzie specjalnie użyłem mniejszej ilości wierzchołków kontrolnych (ang. CVs - control vertices) do wyraźniejszego pokazania problemu.

Posłowie

Powyższy tekst nie wyczerpuje w pełni tematu wyświetlania NURBS, co parokrotnie w nim zaznaczałem. Jednakże informacje w nim zawarte pozwolą spokojnie rozwiązać większość napotkanych przez nas problemów związanych z wyświetlaniem tego rodzaju geometrii.

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.