Help modify script to colorcorrect a bunch of VRayMtl or 2Sided in Multimat
Hi there,
I tried it the last to days to get it done by myself. Just startet learning scripting last weeks. I'm clueless now.
I need a script that assigns a CC to VRayMtl or 2Sided where I can set the hueshift,tint and so on. It also should check if there is already an color correct and then change its values.
I took an existing script and change it to VRayMtl. Works
But if I neeed to change the shift and hue a second time the script creates a second CC. I missing a check variable I think
Also its missing the 2sided mtl option.
Important is the ability to change the hue values in the script and creating only 1 CC and/or modify excisting ones.
Anyone who can help me in the right direction?
--- get materials from selection ( mymaterials = #() for obj in selection do ( if obj.material != undefined do appendifunique mymaterials obj.material ) --- check for multisubmtls and collect the submtls mysubmaterials = #() for a=1 to mymaterials.count do ( if classof mymaterials[a] == Multimaterial then -- if multisubmtl, then ( for b=1 to mymaterials[a].materialList.count do --- loop through submtls ( if mymaterials[a].materialList[b] != undefined then appendifunique mysubmaterials mymaterials[a].materialList[b] -- collect submtls ) ) ) -- delete multisubs from matarray for a=mymaterials.count to 1 by -1 do ( if classof mymaterials[a] == Multimaterial then deleteitem mymaterials a ) -- append the submtls for a=1 to mysubmaterials.count do ( appendifunique mymaterials mysubmaterials[a] ) print mymaterials -- see whats in the diffuse slot for mymaterial in mymaterials do ( -- make sure its a standard material if classof mymaterial == VRayMtl then ( --- make sure the diffuse slot is not empty if mymaterial.texmap_diffuse != undefined then ( -- remember the map in the diffuse slot mymap = mymaterial.diffuseMap -- create a new cc node and wire it ccnode = ColorCorrection() ccnode.Map = mymap -- set cc settings ccnode.hueShift = -18.0 ccnode.saturation = 0.0 ccnode.tint = (color 0 0 0) ccnode.tintStrength = 0.0 ccnode.gammaRGB = 0.75 /* ccnode.rewireMode (Rewire_Mode) : integer ccnode.rewireR : integer ccnode.rewireG : integer ccnode.rewireB : integer ccnode.rewireA : integer ccnode.hueShift : float ccnode.saturation : float ccnode.tint (Hue_Tint) : fRGBA color ccnode.tintStrength (Hue_Strength) : float ccnode.lightnessMode : integer ccnode.contrast : float ccnode.brightness : float ccnode.exposureMode (Lightness) : integer ccnode.enableR : boolean ccnode.enableG : boolean ccnode.enableB : boolean ccnode.gainRGB (LightnessGainRGB) : float ccnode.gainR (LightnessGainR) : float ccnode.gainG (LightnessGainG) : float ccnode.gainB (LightnessGainB) : float ccnode.gammaRGB (LightnessGammaRGB) : float ccnode.gammaR (LightnessGammaR) : float ccnode.gammaG (LightnessGammaG) : float ccnode.gammaB (LightnessGammaB) : float ccnode.pivotRGB (LightnessPivotRGB) : float ccnode.pivotR (LightnessPivotR) : float ccnode.pivotG (LightnessPivotG) : float ccnode.pivotB (LightnessPivotB) : float ccnode.liftRGB (LightnessLiftRGB) : float ccnode.liftR (LightnessLiftR) : float ccnode.liftG (LightnessLiftG) : float ccnode.liftB (LightnessLiftB) : float ccnode.printerLights (LightnessPrinter) : float */ -- put the cc node to the diffuse slot mymaterial.texmap_diffuse = ccnode ) else print "nothing in diffuse slot" ) ) )
Comments
Working Code
The chunck of code i gave you was only the end of it i didn't took what you had already write above, so you needed to integrate what i coded in your base.
While looking at what you wrote, i think you have misunderstood where operations were going, you were adding a ccnode when there was already one, and you had twice the same test. Also the structure of and if else is the following :
Here is the entire code which is working perfectly i've just tested it on my scene.
Tell me if it suits your needs.
I attach the .ms with it.
Amazing! I owe you a beer!
Amazing! I owe you a beer! Big thanks! I had it nearly written down like this but I was missing this line:
ccnode = mymaterial.texmap_diffuse
Still a lot learning ahead. In my head it always works great ^^
If I now want to include 2Sided material. I thought I can put a further "else" operation like this but it seems its not allowed or I wrote it wrong?
2Sided
Sorry for the delay but i've been blocked by scriptspot anti spam system... Took so much time to get back here ..
This should work for 2sided materials
Informations
I forgot to tell the following things, the script add color correction if it found a map in the diffuse slot, so it will apply whren there is a Noise or Cellular or Checker, or whatever maps max can have. If you want to restrict the CC node adding behavior to bitmaptexture, you just need to rewrite the if then loop with the right conditions. If that's what you need and yo ucannot get it working feel free to tell me.
Color Correction test
What you want to do is when you test your diffuse Slot you want to have 3 cases : Case 1 you have nothing, nothing happen (if that's what you want to do) Case 2 you have a bitmap and the nyou want to plug this bitmap in a CC node and this CC ndoe into the diffuse slot (that's what you manage to do so far) Case 3 your diffuse slot has already a CC node, in this case you want to change the values.
In terms of code what it should look like.
Feel free to tell me if it's working !
there are some bugs in that code
Thanks mate. The code is not working. One have to tell max what "ccnode.hueshift" actually is. This is missing in you script also some typing issue I think.
I got this now. But this in not working. I don't know what I'm missing. It seems so simple...
there are 3 condition
1. diffusemap = bitmaptexture (add CCnode + apply values)
2. diffusemap = CCnode + bitmaptexture (just change values)
3. diffusemap = just color (do nothing)
it gets even more complicated with 2Sided mat. for front and back mat set a CCnode