본문 바로가기
3DMAX/Script

맥스 스크립트 첫 작업물~ 메쉬 LOD 변환툴

by tartist 2015. 12. 14.

 

1.메쉬 LOD 변환툴


- LOD를 적용할 메쉬를 선택하여 수치를 정하여 메쉬를 변환시켜주는 툴입니다.

 

1. 툴 화면

 

2. 비대칭 실행시 적용화면 - 원본 오브젝트의 50퍼센트의 LOD를 적용하여 비대칭 메쉬를 새로 생성합니다.


 

 3. 대칭 실행시 적용 화면 - 원본 오브젝트의 50퍼센트의 LOD를 적용하여 대칭 메쉬를 새로 생성합니다.

 

- 이 스크립트 제작을 통해 배운 내용

1. if문의 사용법 숙지(조건문)

2. roll과 button을 사용하여 메뉴 창 생성하는 법

3. 오브젝트의 모디파이의 속성을 제어하는 방법

  

코드 원문

global TEST

rollout noskin "스킨없을때"
 
(
 spinner noskin1 "버텍스수치" range:[0,100,50] type:#integer
 button btn1 "비대칭"
 button btn2 "대칭"
 
 
 on btn1 pressed do
 (
  if selection.count != 1 then
  (
   messagebox "한개만 선택하세요"
   return 0
  )
  
  if $.modifiers[#skin] == undefined then
  
  (
   local VF = noskin1.value
   
   a= $
   copyobj = copy$
   select copyobj
   
   --modPanel.setCurrentObject $.baseObject
   modPanel.addModToSelection (MultiRes ()) ui:on
   $.modifiers[#MultiRes].reqGenerate = on
   $.modifiers[#MultiRes].vertexPercent = VF
   maxOps.CollapseNodeTo $ 1 off
   
   clearselection()
   
   delete a
   
   select copyobj
  )   
  else
  (
   messagebox "스킨없애시오"
   return 0
  )
  
 )
 ----------스킨 없고 대칭 일때-------------------
 on btn2 pressed do
 (
  if selection.count != 1 then
  (
   messagebox "한개만 선택하세요"
   return 0
  )
  
  if $.modifiers[#skin] == undefined then
  
  (
   local VF = noskin1.value
   
   
   a= $
   copyobj = copy$
      
   
   ---헬퍼박스 생성----
   Box lengthsegs:1 widthsegs:1 heightsegs:1 length:5000 width:5000 height:5000  pos:[0,0,0]  name:"Helper_Box"
   select $Helper_Box
   max rotate
   toolMode.coordsys #local
   rotate $(angleaxis -90 [0,1,0])
   move $ [-0.1,0,0]
   macros.run "Modifier Stack" "Convert_to_Poly"
   
  
   select copyobj
   
   modPanel.addModToSelection (Vol__Select ()) ui:on
   $.modifiers[#Vol__Select].level = 1
   $.modifiers[#Vol__Select].volume = 3
   $.modifiers[#Vol__Select].node = $Helper_Box
   modPanel.addModToSelection (Edit_Poly ()) ui:on
   subobjectLevel = 1
   max delete
   maxOps.CollapseNode $ off 
   modPanel.addModToSelection (MultiRes ()) ui:on
   $.modifiers[#MultiRes].reqGenerate = on
   $.modifiers[#MultiRes].vertexPercent = VF
   modPanel.addModToSelection (symmetry ()) ui:on
   $.modifiers[#Symmetry].threshold = 0
   maxOps.CollapseNode $ off
    
   clearselection()
   
   delete a 
   delete $Helper_Box
      
   select copyobj
  )   
  else
  (
   messagebox "스킨없애시오"
   return 0
  )
    
 )

)


----------------스킨있을때-------------------------------------

rollout yeskin "스킨있을때"
 
(
 spinner yeskin1 "버텍스수치" range:[0,100,50] type:#integer
 button btn3 "비대칭"
 button btn4 "대칭"
 
 on btn3 pressed do
 (
  if selection.count != 1 then
  (
   messagebox "한개만 선택하세요"
   return 0
  )
  
  if $.modifiers[#skin] != undefined then
  (
   local VF = yeskin1.value
   
   a= $
   copyobj = copy$
   select copyobj
   
   $.modifiers[#Skin].Enabled = off
   modPanel.setCurrentObject $.baseObject
   modPanel.addModToSelection (MultiRes ()) ui:on
   $.modifiers[#MultiRes].reqGenerate = on
   $.modifiers[#MultiRes].vertexPercent = VF
   maxOps.CollapseNodeTo $ 2 on
   $.modifiers[#Skin].Enabled = on
   
   clearselection()
   
   delete a
   
   select copyobj
  )  
 
  else
  (
   messagebox "스킨을 넣으세요"
  )
 
 )
  
 ------------스킨 있고 대칭 일때---------------------------------------------------------------
 on btn4 pressed do
 (
  if selection.count != 1 then
  (
   messagebox "한개만 선택하세요"
   return 0
  )
  
  if $.modifiers[#skin] != undefined then
  
  (
   local VF = yeskin1.value
   
   
   a= $
   copyobj = copy$
      
   
   ---헬퍼박스 생성----
   Box lengthsegs:1 widthsegs:1 heightsegs:1 length:5000 width:5000 height:5000  pos:[0,0,0]  name:"Helper_Box"
   select $Helper_Box
   max rotate
   toolMode.coordsys #local
   rotate $(angleaxis -90 [0,1,0])
   move $ [-0.1,0,0]
   macros.run "Modifier Stack" "Convert_to_Poly"
   
  
   select copyobj
   
   $.modifiers[#Skin].Enabled = off
   modPanel.setCurrentObject $.baseObject
   modPanel.addModToSelection (Vol__Select ()) ui:on
   $.modifiers[#Vol__Select].level = 1
   $.modifiers[#Vol__Select].volume = 3
   $.modifiers[#Vol__Select].node = $Helper_Box
   modPanel.addModToSelection (Edit_Poly ()) ui:on
   subobjectLevel = 1
   max delete
   maxOps.CollapseNodeTo $ 2 off
   modPanel.setCurrentObject $.baseObject
   modPanel.addModToSelection (MultiRes ()) ui:on
   $.modifiers[#MultiRes].reqGenerate = on
   $.modifiers[#MultiRes].vertexPercent = VF
   modPanel.addModToSelection (symmetry ()) ui:on
   $.modifiers[#Symmetry].threshold = 0
   maxOps.CollapseNodeTo $ 2 on
   $.modifiers[#Skin].Enabled = on
    
   clearselection()
   
   delete a 
   delete $Helper_Box
      
   select copyobj
  )   
  else
  (
   messagebox "스킨을 달라"
   return 0
  )
 )
  
)


TEST = newrolloutfloater "공부용 LOD시스템" 200 200

addrollout noskin TEST
addrollout yeskin TEST