-
Notifications
You must be signed in to change notification settings - Fork 94
convert_stdmtl
Ryzom Core Wiki edited this page Jul 8, 2024
·
10 revisions
title: Convert NeL Material to Standard (Legacy) material description: published: true date: 2023-03-16T23:03:29.841Z tags: editor: markdown dateCreated: 2022-03-16T10:34:47.843Z
If you are having trouble exporting models to another software tool, or issues rendering out models, use this script to "fix" the asset in 3ds Max. It converts the NeL Material into a Standard (Legacy) material so that the exporter can make sense of it.
fn fix_texture_file_name t =
(
if t == undefined then return "unknown.png"
return "c:/database/textures/" + (getFilenameFile (filenameFromPath t)) + ".png"
)
fn find_nel_bitmap_texture t =
(
-- we should log the textures we skip here
if (t.bitmap1FileName != "") then return t.bitmap1FileName
if (t.bitmap2FileName != "") then return t.bitmap2FileName
if (t.bitmap3FileName != "") then return t.bitmap3FileName
if (t.bitmap4FileName != "") then return t.bitmap4FileName
if (t.bitmap5FileName != "") then return t.bitmap5FileName
if (t.bitmap6FileName != "") then return t.bitmap6FileName
if (t.bitmap7FileName != "") then return t.bitmap7FileName
if (t.bitmap8FileName != "") then return t.bitmap8FileName
return "unknown.png"
)
fn fix_bitmap_texture t =
(
local bt
if classof t == NelBitmapTexture then
(
bt = BitmapTexture()
bt.filename = find_nel_bitmap_texture t
bt.filename = fix_texture_file_name bt.filename
return bt
)
else if classof t == BitmapTexture then
(
t.filename = fix_texture_file_name t.filename
)
return t
)
fn fix_material t =
(
local m
local i
if classof t == NelMaterial then
(
m = StandardMaterial()
m.twoSided = t.bTwoSided
m.ambient = t.cAmbient
m.diffuse = t.cDiffuse
m.opacity = t.pOpacity
m.specular = t.cSpecular
m.specularLevel = t.pSpecularLevel
m.glossiness = t.pGlossiness
m.selfIllumColor = t.cSelfIllumColor
m.selfIllumAmount = t.pSelfIllumAmount
m.useSelfIllumColor = t.bUseSelfIllumColor
-- if t.bAlphaTest then print "alpha-test"
m.diffuseMap = fix_bitmap_texture t.tTexture_1
m.specularMap = fix_bitmap_texture t.tTexture_2
return m
)
else if classof t == MultiMaterial then
(
for i = 1 to t.count do
(
t[i] = fix_material t[i]
)
return t
)
return t
)
fn kill_nel_mats =
(
local g, m
for g in geometry do
(
g.material = fix_material g.material
)
)
fn fix_asset =
(
unfreeze geometry
kill_nel_mats()
actionMan.executeAction 0 "40021" -- Selection: Select All
actionMan.executeAction 0 "311" -- Tools: Zoom Extents All Selected
actionMan.executeAction 0 "63508" -- Views: Standard Display with Maps
actionMan.executeAction 0 "40043" -- Selection: Select None
)
fix_asset()