Added: #1440 Initial code for shape export
--HG-- branch : build_pipeline_v3hg/feature/build_pipeline_v3
parent
5e1cab83f5
commit
433cf02624
@ -0,0 +1,32 @@
|
||||
|
||||
try
|
||||
(
|
||||
undo off
|
||||
(
|
||||
NelToolLoggerInitError %LogErrorFile%
|
||||
NelToolLoggerInitDepend %LogDependFiles%
|
||||
|
||||
-- Unhide, unselect
|
||||
unhidecategory()
|
||||
max unhide all
|
||||
max select none
|
||||
|
||||
-- Setup
|
||||
lowercasenodes()
|
||||
dependxref undefined
|
||||
|
||||
-- Go!
|
||||
runNelMaxExport()
|
||||
|
||||
NelToolLoggerReleaseError
|
||||
NelToolLoggerReleaseDepend
|
||||
|
||||
gc()
|
||||
)
|
||||
)
|
||||
catch
|
||||
(
|
||||
-- Error
|
||||
nlerror("Fatal error occured")
|
||||
NelForceQuitRightNow()
|
||||
)
|
@ -0,0 +1,134 @@
|
||||
|
||||
|
||||
-- #################################################################
|
||||
-- ## %PreGenWarning%
|
||||
-- #################################################################
|
||||
|
||||
|
||||
-- Allocate 20 Me for the script
|
||||
heapSize += 15000000
|
||||
|
||||
-- In case of error just abort the app and don't show nel report window
|
||||
NelForceQuitOnMsgDisplayer()
|
||||
|
||||
-- Global definitions
|
||||
NEL3D_APPDATA_LOD_NAME_COUNT_MAX = 10
|
||||
NEL3D_APPDATA_LOD = 1423062537
|
||||
NEL3D_APPDATA_LOD_NAME_COUNT = NEL3D_APPDATA_LOD
|
||||
NEL3D_APPDATA_LOD_NAME = NEL3D_APPDATA_LOD_NAME_COUNT+1
|
||||
NEL3D_APPDATA_LOD_BLEND_IN = NEL3D_APPDATA_LOD_NAME+NEL3D_APPDATA_LOD_NAME_COUNT_MAX
|
||||
NEL3D_APPDATA_LOD_BLEND_OUT = NEL3D_APPDATA_LOD_BLEND_IN+1
|
||||
NEL3D_APPDATA_LOD_COARSE_MESH = NEL3D_APPDATA_LOD_BLEND_OUT+1
|
||||
|
||||
fn lowercase instring =
|
||||
(
|
||||
local upper, lower, outstring
|
||||
upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
lower="abcdefghijklmnopqrstuvwxyz"
|
||||
|
||||
outstring = copy instring
|
||||
|
||||
for iii = 1 to outstring.count do
|
||||
(
|
||||
jjj = findString upper outstring[iii]
|
||||
if (jjj != undefined) then
|
||||
outstring[iii] = lower[jjj]
|
||||
else
|
||||
outstring[iii] = instring[iii]
|
||||
)
|
||||
return outstring -- value of outstring will be returned as function result
|
||||
)
|
||||
|
||||
fn uppercase instring =
|
||||
(
|
||||
local upper, lower, outstring
|
||||
upper="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||
lower="abcdefghijklmnopqrstuvwxyz"
|
||||
|
||||
outstring = copy instring
|
||||
|
||||
for iii = 1 to outstring.count do
|
||||
(
|
||||
jjj = findString upper outstring[iii]
|
||||
if (jjj != undefined) then
|
||||
outstring[iii] = upper[jjj]
|
||||
else
|
||||
outstring[iii] = instring[iii]
|
||||
)
|
||||
return outstring -- value of outstring will be returned as function result
|
||||
)
|
||||
|
||||
-- Add xrefs as dependencies
|
||||
fn dependxref root =
|
||||
(
|
||||
sceneName = maxFilePath + maxFileName
|
||||
|
||||
for i = 1 to xrefs.getXRefFileCount(root) do
|
||||
(
|
||||
curxref = xrefs.getXRefFile i root
|
||||
NelToolLoggerWriteDepend "BUILD" "*" curxref.filename -- not sure if full filepath...
|
||||
dependxref curxref
|
||||
)
|
||||
)
|
||||
|
||||
-- Lowercase node names etc, temporary until another full conversion run over the max files is done
|
||||
fn lowercasenodes =
|
||||
(
|
||||
allNodes = $*
|
||||
|
||||
for node in allNodes do
|
||||
(
|
||||
-- Lowercase the node name
|
||||
node.name = lowercase(node.name)
|
||||
|
||||
-- Lowercase all LOD node name references
|
||||
lodCount = getAppData node NEL3D_APPDATA_LOD_NAME_COUNT
|
||||
if (lodCount != undefined) then
|
||||
(
|
||||
lodCountNum = nodeCount as Integer
|
||||
for lod = 1 to lodCountNum do
|
||||
(
|
||||
lod = getAppData node (NEL3D_APPDATA_LOD_NAME + lod - 1)
|
||||
if (lod != undefined) then
|
||||
(
|
||||
setAppData node (NEL3D_APPDATA_LOD_NAME + lod - 1) lowercase(lod)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
-- Unhide category
|
||||
fn unhidecategory =
|
||||
(
|
||||
if (geometry.count > 0) then
|
||||
(
|
||||
unhide geometry[1]
|
||||
if (geometry[1].ishidden == true) then
|
||||
max hide object toggle
|
||||
)
|
||||
if (shapes.count > 0) then
|
||||
(
|
||||
unhide shapes[1]
|
||||
if (shapes[1].ishidden == true) then
|
||||
max hide shape toggle
|
||||
)
|
||||
if (lights.count > 0) then
|
||||
(
|
||||
unhide lights[1]
|
||||
if (lights[1].ishidden == true) then
|
||||
max hide light toggle
|
||||
)
|
||||
if (cameras.count > 0) then
|
||||
(
|
||||
unhide cameras[1]
|
||||
if (cameras[1].ishidden == true) then
|
||||
max hide camera toggle
|
||||
)
|
||||
if (helpers.count > 0) then
|
||||
(
|
||||
unhide helpers[1]
|
||||
if (helpers[1].ishidden == true) then
|
||||
max hide helper toggle
|
||||
)
|
||||
)
|
@ -0,0 +1,322 @@
|
||||
|
||||
|
||||
-- Some globals
|
||||
|
||||
NEL3D_APPDATA_ACCEL = 1423062561 -- type of accelerator : "32" = is not an accelerator and IS clusterized
|
||||
-- "0" = is not an accelerator and IS NOT clusterized (always visible)
|
||||
-- "1" = is an accelerator type PORTAL
|
||||
-- "2" = is an accelerator type CLUSTER
|
||||
-- "6" = is an accelerator type CLUSTER FATHER-VISIBLE
|
||||
-- "10" = is an accelerator type CLUSTER VISIBLE-FROM-FATHER
|
||||
-- "14" = is an accelerator type CLUSTER FATHER-VISIBLE and VISIBLE-FROM-FATHER
|
||||
-- "17" = is an accelerator type PORTAL DYNAMIC
|
||||
|
||||
NEL3D_APPDATA_DONOTEXPORT = 1423062565 -- do not export me : "undefined" = export me
|
||||
-- "0" = export me
|
||||
-- "1" = DONT export me
|
||||
|
||||
NEL3D_APPDATA_COLLISION = 1423062613
|
||||
NEL3D_APPDATA_COLLISION_EXTERIOR = 1423062614
|
||||
NEL3D_APPDATA_AUTOMATIC_ANIMATION = 1423062617
|
||||
|
||||
-- This node is n accelerator ?
|
||||
fn isAccelerator node =
|
||||
(
|
||||
accel = getappdata node NEL3D_APPDATA_ACCEL
|
||||
if (accel != undefined) then
|
||||
(
|
||||
if (accel == "0") or (accel == "32") then
|
||||
return false
|
||||
else
|
||||
return true
|
||||
)
|
||||
return false
|
||||
)
|
||||
|
||||
-- Must export this node ?
|
||||
fn isToBeExported node =
|
||||
(
|
||||
if (isAccelerator node) == true then
|
||||
return false
|
||||
|
||||
if ((classof node) == RklPatch) then
|
||||
return false
|
||||
|
||||
if ((classof node) == nel_ps) then
|
||||
return false
|
||||
|
||||
if ((classof node) == nel_pacs_cylinder) then
|
||||
return false
|
||||
|
||||
if ((classof node) == nel_pacs_box) then
|
||||
return false
|
||||
|
||||
doNotExport = getappdata node NEL3D_APPDATA_DONOTEXPORT
|
||||
if (doNotExport != undefined) then
|
||||
(
|
||||
if (doNotExport == "1") then
|
||||
return false
|
||||
)
|
||||
|
||||
doNotExport = getappdata node NEL3D_APPDATA_COLLISION
|
||||
if (doNotExport != undefined) then
|
||||
(
|
||||
if (doNotExport == "1") then
|
||||
return false
|
||||
)
|
||||
|
||||
doNotExport = getappdata node NEL3D_APPDATA_COLLISION_EXTERIOR
|
||||
if (doNotExport != undefined) then
|
||||
(
|
||||
if (doNotExport == "1") then
|
||||
return false
|
||||
)
|
||||
|
||||
return true
|
||||
)
|
||||
|
||||
-- Must export this node ?
|
||||
fn isAnimToBeExported node =
|
||||
(
|
||||
automaticAnimation = getappdata node NEL3D_APPDATA_AUTOMATIC_ANIMATION
|
||||
if (automaticAnimation == undefined) then
|
||||
return false
|
||||
if (automaticAnimation == "0") then
|
||||
return false
|
||||
|
||||
if (isAccelerator node) == true then
|
||||
return false
|
||||
|
||||
if ((classof node) == nel_pacs_cylinder) then
|
||||
return false
|
||||
|
||||
if ((classof node) == nel_pacs_box) then
|
||||
return false
|
||||
|
||||
doNotExport = getappdata node NEL3D_APPDATA_DONOTEXPORT
|
||||
if (doNotExport != undefined) then
|
||||
(
|
||||
if (doNotExport == "1") then
|
||||
return false
|
||||
)
|
||||
|
||||
doNotExport = getappdata node NEL3D_APPDATA_COLLISION
|
||||
if (doNotExport != undefined) then
|
||||
(
|
||||
if (doNotExport == "1") then
|
||||
return false
|
||||
)
|
||||
|
||||
doNotExport = getappdata node NEL3D_APPDATA_COLLISION_EXTERIOR
|
||||
if (doNotExport != undefined) then
|
||||
(
|
||||
if (doNotExport == "1") then
|
||||
return false
|
||||
)
|
||||
|
||||
return true
|
||||
)
|
||||
|
||||
-- Cast shadow ?
|
||||
fn isCastShadow node =
|
||||
(
|
||||
if (classof node == nel_ps) then
|
||||
return false
|
||||
|
||||
if (isAccelerator node) == true then
|
||||
(
|
||||
return false
|
||||
)
|
||||
else
|
||||
(
|
||||
return true
|
||||
)
|
||||
)
|
||||
|
||||
-- List the lod
|
||||
lod_array = #()
|
||||
|
||||
-- is a lod ?
|
||||
fn isLod node =
|
||||
(
|
||||
for i = 1 to lod_array.count do
|
||||
(
|
||||
if (lod_array[i] == node) then
|
||||
return true
|
||||
)
|
||||
return false
|
||||
)
|
||||
|
||||
-- have a coarse mesh ?
|
||||
fn haveCoarseMesh node =
|
||||
(
|
||||
-- Get lod count
|
||||
nodeCount = getappdata node NEL3D_APPDATA_LOD_NAME_COUNT
|
||||
if (nodeCount != undefined) then
|
||||
(
|
||||
-- For each lod
|
||||
nodeCountNum = nodeCount as Integer
|
||||
for lod = 1 to nodeCountNum do
|
||||
(
|
||||
-- Get the lod
|
||||
lod = getappdata node (NEL3D_APPDATA_LOD_NAME+lod-1)
|
||||
|
||||
-- Exist ?
|
||||
if (lod != undefined) then
|
||||
(
|
||||
-- Select a node
|
||||
nd = execute ("$'"+lod+"'")
|
||||
|
||||
-- Node exist ?
|
||||
if (nd != undefined) then
|
||||
(
|
||||
-- Is a coarse mesh ?
|
||||
if (getappdata nd NEL3D_APPDATA_LOD_COARSE_MESH == "1") then
|
||||
return true
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
return false
|
||||
)
|
||||
|
||||
fn runNelMaxExportSub =
|
||||
(
|
||||
sceneName = maxFilePath + maxFileName
|
||||
|
||||
-- Exported object count
|
||||
exported = 0
|
||||
|
||||
-- Add the lod
|
||||
for node in geometry do
|
||||
(
|
||||
-- Get lod count
|
||||
nodeCount = getappdata node NEL3D_APPDATA_LOD_NAME_COUNT
|
||||
if (nodeCount != undefined) then
|
||||
(
|
||||
-- For each lod
|
||||
nodeCountNum = nodeCount as Integer
|
||||
for lod = 1 to nodeCountNum do
|
||||
(
|
||||
-- Get the lod
|
||||
lod = getappdata node (NEL3D_APPDATA_LOD_NAME+lod-1)
|
||||
|
||||
-- Exist ?
|
||||
if (lod != undefined) then
|
||||
(
|
||||
-- Select a node
|
||||
try
|
||||
(
|
||||
nd = execute("$'"+lod+"'")
|
||||
)
|
||||
catch
|
||||
(
|
||||
NelToolLoggerWriteError "ERROR" "*" ("Error in Execute $'"+lod+"' from node "+node.name)
|
||||
nd = undefined
|
||||
)
|
||||
|
||||
-- Node exist ?
|
||||
if (nd != undefined) then
|
||||
(
|
||||
append lod_array nd
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
-- Select objects for shadows
|
||||
for node in geometry do
|
||||
(
|
||||
if (node.parent == undefined) then
|
||||
(
|
||||
-- Cast shadow ?
|
||||
if (isCastShadow node == true) then
|
||||
(
|
||||
-- Select this node
|
||||
selectmore node
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
-- Tag this file ?
|
||||
tagThisFile = true
|
||||
|
||||
-- Array of node to export
|
||||
array_node = #()
|
||||
|
||||
-- Add geometry
|
||||
for node in geometry do
|
||||
append array_node node
|
||||
|
||||
-- Add shapes
|
||||
for node in shapes do
|
||||
append array_node node
|
||||
|
||||
-- For each node
|
||||
for node in array_node do
|
||||
(
|
||||
-- It is root ?
|
||||
if (node.parent == undefined) then
|
||||
(
|
||||
-- Is not a skeleton ?
|
||||
if (node.name != "Bip01") then
|
||||
(
|
||||
-- Can be exported ?
|
||||
if (isToBeExported node == true) then
|
||||
(
|
||||
-- Not a lod ?
|
||||
if ((isLod node) == false) then
|
||||
(
|
||||
-- Output directory
|
||||
if (haveCoarseMesh node) == true then
|
||||
output = ("%OutputDirectoryWithCoarseMesh%/" + (node.name) + ".shape")
|
||||
else
|
||||
output = ("%OutputDirectoryWithoutCoarseMesh%/" + (node.name) + ".shape")
|
||||
|
||||
try
|
||||
(
|
||||
-- Export the shape
|
||||
if (NelExportShapeEx node output %ShapeExportOptShadow% %ShapeExportOptExportLighting% "%OutputDirectoryLightmap%" %ShapeExportOptLightingLimit% %ShapeExportOptLumelSize% %ShapeExportOptOversampling% true false %ShapeExportOptLightmapLog%) == true then
|
||||
(
|
||||
exported = exported + 1
|
||||
)
|
||||
else
|
||||
(
|
||||
NelToolLoggerWriteError "ERROR" "*" "Failed exporting shape " + node.name + ".shape"
|
||||
)
|
||||
)
|
||||
catch
|
||||
(
|
||||
NelToolLoggerWriteError "ERROR" "*" "Fatal error exporting shape " + node.name + ".shape"
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
-- Export default animations
|
||||
for node in objects do
|
||||
(
|
||||
-- Can export it ?
|
||||
if (isAnimToBeExported node) == true then
|
||||
(
|
||||
-- Anim output directory
|
||||
output = ("%OutputDirectoryAnim%/" + (node.name) + ".anim")
|
||||
|
||||
-- Export the animation
|
||||
if (NelExportAnimation #(node) output false) == false then
|
||||
(
|
||||
NelToolLoggerWriteError "ERROR" "*" "Exporting animation " + node.name + ".anim"
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
-- Nothing exported
|
||||
if exported == 0 then
|
||||
(
|
||||
-- Warning
|
||||
NelToolLoggerWriteError "WARNING" "*" "No shape exported"
|
||||
)
|
||||
)
|
Loading…
Reference in New Issue