每当材质需要替换贴图时都要一个个打开材质,比较麻烦,这里直接选择模型进行一个贴图的替换,主要针对mtlstandard和VRAY材质的diffuse和normal贴图的替换
废话不多说直接上代码
/*先定义一个函数用来收集VRay材质和MTLstandard材质*/
fn ti_huan=
(
--bitmap_path=getopenfilename caption:"" filename:"" types:"JPEG (*.jpg)|*.jpg|TIFF(*.tif)|*.tif|BMP (*.bmp)|*.bmp|Targa (*.tga)|*.tga|PNG (*.png)|*.png"--gets
global m_mat=#()
global v_mat=#()
d=for b in selection where classof b.material==standardmaterial collect b--vraymtl材质
v=for b in selection where classof b.material==vraymtl collect b
)
rollout boss "替换贴图" width:200 height:300 rolledup:on
(
button but1"替换漫反射贴图" pos:[10,10] width:100 height:20
checkbutton but2"显示贴图"pos:[115,10] checked:false
on but1 pressed do undo on
(
ti_huan()
bitmap_path=getopenfilename caption:"" filename:"" types:"JPEG (*.jpg)|*.jpg|TIFF(*.tif)|*.tif|BMP (*.bmp)|*.bmp|Targa (*.tga)|*.tga|PNG (*.png)|*.png"
if bitmap_path!=undefined do
(
for f=1 to d.count do
(
append m_mat d[f]
m_mat[f].material.diffusemap=bitmaptexture filename:bitmap_path
)
for p=1 to v.count do--VRAy材质贴图
(
append v_mat v[p]
v_mat[p].material.texmap_diffuse=bitmaptexture filename:bitmap_path
)
)
)
on but2 changed state do
(
ti_huan()
if but2.state==true then
(
try
(
for f=1 to d.count do
(
append m_mat d[f]
showtexturemap m_mat[f].material m_mat[f].material.diffusemap on
)
for p=1 to v.count do--VRAy材质贴图
(
append v_mat v[p]
showtexturemap v_mat[p].material v_mat[p].material.texmap_diffuse on
)
)
catch ()
)
else
(
try
(
for f=1 to d.count do
(
append m_mat d[f]
showtexturemap m_mat[f].material m_mat[f].material.diffusemap off
)
for p=1 to v.count do--VRAy材质贴图
(
append v_mat v[p]
showtexturemap v_mat[p].material v_mat[p].material.texmap_diffuse off
)
)catch()
)
)
button but3 "替换法线贴图" pos:[10,45] width:80 height:20
checkbox c_k"法线" pos:[95,45] width:45 height:20 checked:true
on but3 pressed do
(
ti_huan()
bitmap_path=getopenfilename caption:"" filename:"" types:"JPEG (*.jpg)|*.jpg|TIFF(*.tif)|*.tif|BMP (*.bmp)|*.bmp|Targa (*.tga)|*.tga|PNG (*.png)|*.png"
if bitmap_path!=undefined do
(
for f=1 to d.count do
(
append m_mat d[f]
if c_k.checked==true then
(
m_mat[f].material.bumpMap = Normal_Bump ()
m_mat[f].material.bumpmap.normal_map=bitmaptexture filename:bitmap_path
)
else
(
m_mat[f].material.bumpmap=bitmaptexture filename:bitmap_path
)
)
for p=1 to v.count do--VRAy材质贴图
(
append v_mat v[p]
if c_k.checked==true then
(
v_mat[p].material.texmap_bump=Normal_Bump ()
v_mat[p].material.texmap_bump.normal_map=bitmaptexture filename:bitmap_path
)
else
(
v_mat[p].material.texmap_bump=bitmaptexture filename:bitmap_path
)
)
)
)
checkbutton but4"显示" pos:[140,45] width:40 height:20 checked:false
on but4 changed state do
(
ti_huan()
if but4.state==true then
(
try
(
for f=1 to d.count do
(
append m_mat d[f]
showtexturemap m_mat[f].material m_mat[f].material.bumpmap.normal_map on
)
for p=1 to v.count do--VRAy材质贴图
(
append v_mat v[p]
showtexturemap v_mat[p].material v_mat[p].material.texmap_bump.normal_map on
)
)
catch ()
)
else
(
try
(
for f=1 to d.count do
(
append m_mat d[f]
showtexturemap m_mat[f].material m_mat[f].material.bumpmap.normal_map off
)
for p=1 to v.count do--VRAy材质贴图
(
append v_mat v[p]
showtexturemap v_mat[p].material v_mat[p].material.texmap_bump.normal_map off
)
)catch()
)
)
label label1"QQ-1054631343"
)createdialog boss