Skocz do zawartości

Zmiana rozdzielczosci surface shadera - jak ?


Rekomendowane odpowiedzi

Napisano

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.

  • Odpowiedzi 5
  • Created
  • Ostatniej odpowiedzi

Top Posters In This Topic

Top Posters In This Topic

Napisano (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

 

 

f_SNAG0000m_6e0b2a0.jpg

 

 

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

 

f_SNAG0001m_22e49d5.jpg

 

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 przez Destroyer
Napisano
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.

Napisano
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

Napisano

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 ;]

Napisano

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!

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ę



×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Wykorzystujemy cookies. Przeczytaj więcej Polityka prywatności