Announcements

Between mid-October and November, the content on AREA will be relocated to the Autodesk Community M&E Hub and the Autodesk Community Gallery. Learn more HERE.

3ds max script texture baking ends with red texture

3ds max script texture baking ends with red texture

schoffhauzer.istvan
Explorer Explorer
992 Views
1 Reply
Message 1 of 2

3ds max script texture baking ends with red texture

schoffhauzer.istvan
Explorer
Explorer

Hi,

 

I'm trying to create a script what projects a texture from a mesh to a target mesh ( the two mesh have different UV ). The script usually bakes a red texture, however if I bake a texture manually and after this try execute the script it creates the correct texture.

I use Scanline Renderer to render the texture.

Could somebody help me with this issue?

 

-- Initialize Variables
oldMesh = selection[1] -- $House
newMesh = selection[2] -- $House_New
size = 1024
diffTexName = (getDir #export + "\\" + newMesh.name + "_D.jpeg")

-- Add Tesselation
addModifier newMesh (tessellate()) ui:on
tess = newMesh.modifiers[#Tessellate]
tess.faceType = 1
tess.tension = 0
tess.iterations = 1

-- Set The Renderer To Scanline
myRenderer = Default_Scanline_Renderer()
renderers.current = myRenderer
myRenderer.shadows = false

-- Create Diffuse Map
be1 = diffusemap()
be1.fileType = diffTexName
be1.fileName = filenameFromPath diffTexName
be1.outputSzX = be1.outputSzY = size -- set the size of the baked map
be1.filterOn = true -- enable filtering
be1.shadowsOn = false -- disable shadows
be1.lightingOn = false -- disable lighting
be1.enabled = true -- enable baking

-- Setup BakeProperties
newMesh.INodeBakeProperties.removeAllBakeElements()
newMesh.INodeBakeProperties.addBakeElement be1
newMesh.INodeBakeProperties.bakeEnabled = true -- enabling baking
newMesh.INodeBakeProperties.bakeChannel = 1 -- channel to bake
newMesh.INodeBakeProperties.nDilations = 8 -- expand the texture a bit (padding)

-- Add Projection Modifier
addModifier newMesh (Projection()) ui:on
AddPModObjects newMesh false false objList:#(oldMesh)
newMesh.modifiers[#Projection].resetCage()
newMesh.modifiers[#Projection].displayCage = true
newMesh.modifiers[#Projection].pushValue = 0.025
newMesh.modifiers[#Projection].pushCage 0.025
newMesh.modifiers[#Projection].MapChannel = 1
newMesh.INodeBakeProjProperties.enabled = true 

-- Bake Texture
select newMesh
render rendertype:#bakeSelected vfb:off progressBar:true outputSize:[size,size]

-- Remove Projection
for index = newMesh.modifiers.count to 1 by -1 do
    if ((classOf newMesh.modifiers[index]) == Projection) do
        deleteModifier newMesh index

 

 

0 Likes
Accepted solutions (1)
993 Views
1 Reply
Reply (1)
Message 2 of 2

schoffhauzer.istvan
Explorer
Explorer
Accepted solution

The problem is solved.

We added autoWrapAlwaysUpdate and autoWraptolerance setup to projection modifier and set the INodeBakeProjProperties's values.

And the whole render part from the diffusetexture creation repeat once, because the firstly rendered texture always full of red and the second one is the correct version.

-- Initialize Variables
oldMesh = selection[1] -- $House
newMesh = selection[2] -- $House_New
size = 1024
diffTexName = (getDir #export + "\\" + newMesh.name + "_D.jpeg")

-- Set The Renderer To Scanline
myRenderer = Default_Scanline_Renderer()
renderers.current = myRenderer
myRenderer.shadows = false

-- Create Diffuse Map
-- REPEAT FROM THIS
be1 = diffusemap()
be1.fileType = diffTexName
be1.fileName = filenameFromPath diffTexName
be1.outputSzX = be1.outputSzY = size -- set the size of the baked map
be1.filterOn = true -- enable filtering
be1.shadowsOn = false -- disable shadows
be1.lightingOn = false -- disable lighting
be1.enabled = true -- enable baking

-- Add Projection Modifier
proj = projection mapchannel:1 pushvalue:0.0 displayCage:1
addModifier newMesh proj
proj.autowraptolerance = 0.0
proj.addobjectnode oldMesh
proj.pushCage 0.025
proj.addRegisteredProjectionType 1
proj.projectall()

-- Setup BakeProperties
newMesh.INodeBakeProperties.removeAllBakeElements()
newMesh.INodeBakeProperties.addBakeElement be1
newMesh.INodeBakeProperties.bakeEnabled = true -- enabling baking
newMesh.INodeBakeProperties.bakeChannel = 1 -- channel to bake
newMesh.INodeBakeProperties.nDilations = 8 -- expand the texture a bit (padding)

-- Projection Properties
newMesh.INodeBakeProjProperties.enabled = true
newMesh.INodeBakeProjProperties.projectionMod = proj
newMesh.INodeBakeProjProperties.projSpace = #raytrace
newMesh.INodeBakeProjProperties.normalSpace = #tangent
newMesh.INodeBakeProjProperties.tangentXDir = #X_Right
newMesh.INodeBakeProjProperties.tangentYDir = #Y_Down
newMesh.INodeBakeProjProperties.useCage = true
newMesh.INodeBakeProjProperties.hitResolveMode = #furthest
newMesh.INodeBakeProjProperties.heightMapMin = -10.0
newMesh.INodeBakeProjProperties.heightMapMax = 10.0
newMesh.INodeBakeProjProperties.heightBufMin = -0.158
newMesh.INodeBakeProjProperties.heightBufMax = 0.025

-- Bake Texture
select newMesh
render rendertype:#bakeSelected vfb:off progressBar:true outputSize:[size,size]
-- END OF REPEAT

-- Remove Modifiers
for index = newMesh.modifiers.count to 1 by -1 do
    deleteModifier newMesh index

 

0 Likes