convert_stdmtl - ryzom/ryzomcore GitHub Wiki


title: Convert NeL Material to Standard (Legacy) material description: published: true date: 2023-03-01T05:22:42.708Z 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()
⚠️ **GitHub.com Fallback** ⚠️