ca mel Napisano 19 Styczeń 2009 Napisano 19 Styczeń 2009 Wie ktos moze jak zmieniac skryptem rozdzielczosc hardwarowej tekstury w viewporcie pokazywanej przez surface shader ? Napisalem sobie skrypt ktory masowo zmienia lamberty z wypaloną teksturą (w kanale koloru albo zarzenia) na surface shadery i przypisuje je w miejsce lambertow. Wszystko dziala bardzo pieknie, lecz problem pojawia sie gdy chce obejzec w viewporcie rozklad koloru czy swiatla bo domyslnie surface shader pokazuje wszystko w ultra malej rozdzielczosci i zamiast wypalonych tekstur widac rozmazane plamy. Mozna to z latwoscia zmienic recznie otwierajac attr edytor i zmienic ustawienie w zakladce hardware texturing. Lecz pojawia sie pytanie - jak zrobic to skryptem jesli jest np 100 takich shaderow? Zmiana atrybutu ".resolution" w teksturze (czy dodanie takiego gdy go nie ma) nie pomaga. I dodatkowe pytanie - powiedzmy ze jakis lambert ma dwie tekstury, np. w kanalach color i ambient. Jak zmieniac skryptem pokazywany w viewporcie kanal ? Jakby ktos wpadl jak dokonac tych dwoch rzeczy byłbym bardzo wdzieczny ;] Pozdr.
Destroyer Napisano 19 Styczeń 2009 Napisano 19 Styczeń 2009 (edytowane) Nadciągam z pomocą ;) Oto skrypt w którym można zmieniać jakośc hardware texture dla kazdego materiału działa z materiałami mentala a nawet Vraya :) Mozna też wybrać jaki jaki chanel wyświetla ale nie może zmianić wyświetlania dla wszystkich zaznaczonych shaderów, tylko jeden na raz :( Możesz sam spróbować coś tam zdziałać albo napisać do autora żeby coś z tym zrobił ale coś mi mówi że fileadmin udostępniający 420 skryptów nie jest osobą fizyczną :D klik . właśnie znalazłem rozwiązanie ^^ Zaznaczasz shadery w Hypershaddzie i w Attribute Spread shit :) wybierasz zakładkę All i tam na samym koncu masz rozdziałkę wyświtlenych textur ale.. jakże by inaczej działa tylko przy surface shaderze i tylko gdy jakość texturki nie jest już ustawiona na default :/ nie ma dobrego rozwiązania :) Edytowane 19 Styczeń 2009 przez Destroyer
ca mel Napisano 19 Styczeń 2009 Autor Napisano 19 Styczeń 2009 Nadciągam z pomocą ale.. jakże by inaczej działa tylko przy surface shaderze i tylko gdy jakość texturki nie jest już ustawiona na default :/ nie ma dobrego rozwiązania O ba, swietny skrypt! Super to dziala, bardzo przydatne jest w takiej postaci, bo czasem warto miec wczytane niskiej jakosci tekstury zeby nie zapchac karty graficznej. No ale automatu nie zastapi. Co do szita - ja to nie mam nawet rozdzielczosci w zakladkach dla surface shadera. Dopiero jak podgladam atrybuty pliku z tekstura to laskawie pojawia sie rozdzielczosc ;] Ale oczywiscie nic w przypadku surf shadera nic nie zmienia. Pewnie z jakis powodow zrobione jest tak specjalnie. Po cichu zaczynam liczyc na to ze wpadnie tu bareja i machnie pare linijek ;/ Tak czy inaczej dzieki za odzew, ten skrypt ktory podeslales wyglada bardzo obiecujaco, moze da sie cos z niego wyciagnac. Pozdr.
Destroyer Napisano 19 Styczeń 2009 Napisano 19 Styczeń 2009 Co do szita - ja to nie mam nawet rozdzielczosci w zakladkach dla surface shadera. Dopiero jak podgladam atrybuty pliku z tekstura to laskawie pojawia sie rozdzielczosc ;] Ale oczywiscie nic w przypadku surf shadera nic nie zmienia. Żeby rozdziałka textury pojawiła się w Spread Sheet-cie surfaceShader musi mieć coś innego niż default w Texture reslution np. low i potem zminiając wartości w Sheet-cie texturki w viewporcie reagują jak powinny Co do skryptu to został napisany na początku 1998 roku ubiegłego wieku :) dla mayi 1 i 1.0.1 :) i tak cud że jeszcze działa :D
ca mel Napisano 19 Styczeń 2009 Autor Napisano 19 Styczeń 2009 surfaceShader musi mieć coś innego niż default w Texture reslution np. low Lecz to wlasnie na tym polega istota mojego problemu. Zeby zmienaic to nie uzywajac Att edytora, lecz nacisnac jeden guzik i poczekac az sie zrobi samo;] i tak cud że jeszcze działa :D Bo to jeszcze porządna firma pisała ;]
ca mel Napisano 22 Styczeń 2009 Autor Napisano 22 Styczeń 2009 No i rozkminilem to ustrojstwo. Okazalo sie ze z nieznanych mi przyczyn material w viewporcie jest polaczony z szaderem przez tajemnicze atrybuty 'message' a nie jego tekstura i jest tak tylko w przypadku wlasnie surface shadera. Jesli komus przyda sie skrypt zamianiajacy bliny lamberty czy phongi z podlaczoną incandescence albo color na wlasnie surface shadera z poprawnym wyswietlaniem to jest on tu: /// lecimy /// string $polaczenie_do_zmian; string $nasztyp_nodu; string $nowy_SurfaceShader; string $nowy_SurfaceShader_nowszy; string $nasza_selekcja_do_zmian[] = `ls -sl`; string $nasza_selekcja_do_zapisu[]; clear $nasza_selekcja_do_zapisu; string $listaPolaczen[]; int $pozycjoner_do_zapisu = 0; string $polaczony_z[]; for ($nasz_selektor in $nasza_selekcja_do_zmian) { $nasztyp_nodu = `nodeType $nasz_selektor`; switch ($nasztyp_nodu) { case "blinn": case "phong": case "lambert": clear $polaczony_z; $polaczenie_do_zmian = $nasz_selektor + ".color"; $polaczony_z = `listConnections $polaczenie_do_zmian`; $polaczony_z_cale = $polaczony_z[0] + ".outColor"; //print $polaczony_z_cale; if ($polaczony_z_cale == ".outColor") { $polaczenie_do_zmian = $nasz_selektor + ".incandescence"; $polaczony_z = `listConnections $polaczenie_do_zmian`; $polaczony_z_cale = $polaczony_z[0] + ".outColor"; } if ($polaczony_z_cale == ".outColor") break; $nowy_SurfaceShader = `shadingNode -asShader surfaceShader`; $nowy_SurfaceShader_nowszy = "surfMy_" + $nasz_selektor; $nowy_SurfaceShader_nowszy_planowany = $nowy_SurfaceShader_nowszy; $nowy_SurfaceShader_najnowszy = `rename $nowy_SurfaceShader $nowy_SurfaceShader_nowszy`; $shader_counter = 0; while ($nowy_SurfaceShader_najnowszy != $nowy_SurfaceShader_nowszy) { $shader_counter++; $nowy_SurfaceShader_nowszy = $nowy_SurfaceShader_nowszy_planowany + "_" + $shader_counter; $nowy_SurfaceShader_najnowszy = `rename $nowy_SurfaceShader_najnowszy $nowy_SurfaceShader_nowszy`; } $nasza_selekcja_do_zapisu[$pozycjoner_do_zapisu++] = $nowy_SurfaceShader_najnowszy; $na_co_zmienic = $nowy_SurfaceShader_najnowszy + ".outColor"; connectAttr -force $polaczony_z_cale $na_co_zmienic; hyperShade -objects $nasz_selektor; string $nasza_selekcja[] = `ls -sl`; if ( (size($nasza_selekcja) == 1) && ($nasza_selekcja[0] == $nowy_SurfaceShader_najnowszy )) break; else for ($przypisywacz in $nasza_selekcja) hyperShade -assign $nowy_SurfaceShader_najnowszy; clear $listaPolaczen; $listaPolaczen = `listConnections $nowy_SurfaceShader_najnowszy`; for ($polaczenie in $listaPolaczen) if (`objectType $polaczenie` == "materialInfo") { disconnectAttr ($nowy_SurfaceShader_najnowszy + ".message") ($polaczenie + ".texture") -nextAvailable; connectAttr ($polaczony_z[0] + ".message") ($polaczenie + ".texture") -nextAvailable; break; } break; default: break; } //switch }; select -r $nasza_selekcja_do_zapisu; /// fine /// Sam rozpoznaje selekcje wiec jak zaznaczymy cos za duzo to nie szkodzi, do tego usuwa filtr z zaznaczonych tekstur. W zalacznikach wklejam przyklad wykorzystania metody wypalanie + zmiana na surface shader. Do tej pory uzywalem do podgladu czegos takiego trybu high quality - predkosc odswierzania jak widac na pierwszych dwoch skrinach nie jest imponujaca. Za to surface shadery przy tej samej jakosci dzialaja kilkukrotnie szybciej. Takze warto hehe. Nie moge Ci dac repa panie Destroyerze bo mi forum pisze ze najpierw musze rozdac pare innych... Ale sie nalezy. Swietny skrypt, napewno sie przyda i troche mnie naprowadzil na te atrybuty '.message' ;] Jeszcze raz dzieki i pozdrawiam!
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się