상세 컨텐츠

본문 제목

툰붐 스토리보드프로 스크립트 2탄! 3D 오브젝트 사용한 패널 찾기

툰붐

by gyaree 2024. 6. 10. 14:50

본문

반응형

3D 사용한 패널 리스트 텍스트 파일

 

툰붐 스토리보드 프로에서 기본 제공하는 스크립트.

TB_3DReport.js 스크립트의 기능은 다음과 같습니다.

이 스크립트는 스토리보드 프로 프로젝트 또는 샷, 패널에서 사용된 3D 에셋 목록을 생성하는 스크립트입니다.

 

기능:

  • 사용자에게 3D 에셋 보고서를 파일에 출력할지 묻는 옵션 제공
  • 보고서 범위 선택 (프로젝트 전체, 특정 샷, 특정 패널)
  • 선택된 범위 내에서 모든 패널을 검사하여 3D 레이어 사용 여부 파악
  • 3D 에셋이 사용된 패널 목록 생성
  • 보고서 형식 만들기 (짧은 요약 메시지와 전체 보고서 메시지)
  • 짧은 요약 메시지는 최대 라인 수 제한 적용
  • 사용자는 3D 애셋 리포트를 파일로 저장할 수도 있습니다.
  • 리포트는 최대 40줄까지 표시됩니다. 만약 40줄을 초과하는 경우, 메시지 로그에서 전체 리포트를 확인할 수 있습니다.

 

코드 설명

  1. 최대 라인 수 설정: maxNumLines 변수는 짧은 요약 메시지에 표시할 최대 라인 수를 설정합니다.
  2. 대화 상자 생성: Dialog 객체를 생성하여 사용자가 출력 옵션과 정렬 기준을 선택할 수 있도록 합니다.
  3. 옵션 설정:
    • "Output to File" 체크박스를 추가하여 파일로 출력할지 여부를 선택합니다.
    • 3D 데이터를 프로젝트, 샷 또는 패널 단위로 나누어 목록화할 수 있는 라디오 버튼을 추가합니다.
     
  4. 선택된 옵션 처리: 사용자가 선택한 옵션에 따라 3D 데이터를 목록화할 패널을 수집합니다.
  5. 보고서 생성:
    • 각 패널의 각 레이어를 검사하여 3D 레이어가 있는지 확인합니다.
    • 3D 모델이 있는 경우 해당 패널의 정보를 보고서에 추가합니다.
  6. 결과 출력:
    • MessageBox를 통해 요약된 메시지를 표시합니다.
    • 전체 보고서는 MessageLog에 기록됩니다.
    • 파일 출력 옵션을 선택한 경우, 지정된 파일에 전체 보고서를 저장합니다.
     

TB_3DReport.js 스크립트 팝업 창

 

 

TB_3DReport.js 스크립트 내용.

/*
-------------------------------------------------------------------------------
Name:		TB_3DReport.js

Description:	Creates a report listing all 3D assets used.

Usage:	        
        
Author:		Lori Sponagle

Created:	v01 2015/08/15
            
Copyright:   (c) Toon Boom Animation 2015
 
-------------------------------------------------------------------------------
*/

function list3dAssets()
{

  var maxNumLines = 40;  ---->>> 최대 라인 수 (짧은 요약 메시지에 표시할 최대 라인 수를 설정합니다.)
  var d = new Dialog;
  d.title = "3D Asset Report";

  var cb = new CheckBox;
  cb.text = "Output to File";
  cb.checked = false;
  d.add( cb);

  var gOption = new GroupBox;
  gOption.title = "List all 3D asssets by : "
  d.add( gOption );

  var perProject = new RadioButton;
  perProject.text = "per Project";
  
  var perShot = new RadioButton;
  perShot.text = "per Shot";

  var perPanel = new RadioButton;
  perPanel.text = "per Panel";
  
  perProject.checked = true;
  
  gOption.add( perProject );
  gOption.add(perShot);
  gOption.add(perPanel);
   
  var rc = d.exec();
  if ( rc )
  {
    var outFile="";
    if ( cb.checked == true )
    {
        outFile = FileDialog.getSaveFileName("", "Please specify the 3D report filename.");
    }
    //System.println( outFile );
    var panelList = new Array(0);
    var sb = new StoryboardManager;

    // Collect the desired panelList
    if ( perProject.checked )
    {
      var nbPanels = sb.numberOfPanelsInProject();
      for ( var i = 0; i < nbPanels;  ++i )
        panelList.push( sb.panelInProject(i) );
    }
    else if ( perShot.checked )
    {
      var selMgr = new SelectionManager;
      var sceneSel = selMgr.getSceneSelection();
      if ( sceneSel.length > 0 )
      {
        var sceneId = sceneSel[0];
        var nbPanels = sb.numberOfPanelsInScene( sceneId );
        for ( var i = 0; i < nbPanels;  ++i )
          panelList.push( sb.panelInScene(sceneId, i) );
      }
    }
    else
    {
      var selMgr = new SelectionManager;
      var panelSel = selMgr.getPanelSelection();
      if ( panelSel.length > 0 )
      {
        var panelId = panelSel[0];
        panelList.push( panelId);
      }
    }

    // Format the report
    //
     
    var foundLength = 0;

    if ( panelList.length > 0 )
    {
      var lm = LayerManager();
      var fullMessage = "";
      var shortMessage = "";

      for ( var i =0; i < panelList.length; ++ i )
      { 
        var panelId = panelList[i];
        for ( var j = 0; j < lm.numberOfLayers( panelId) ; ++j )
        {  

          if ( lm.is3DLayer( panelId, j ) )
          {
            foundLength +=4;
            panelReport = "Scene "  + sb.nameOfScene( sb.sceneIdOfPanel( panelId)) +
                               " Panel " + sb.nameOfPanel( panelId ) + " has 3D object : " 
                               +  "\n" + lm.getLayerDrawingName( panelId, j, true ) + "\n\n" ;
            fullMessage += panelReport;

            if ( foundLength < maxNumLines )
            {
                shortMessage +=  panelReport;
            }
          }
        }       
      }      
    }

    if ( foundLength == 0 )
       fullMessage = shortMessage = "No 3D assets found";
   
    if ( foundLength < maxNumLines )
       MessageBox.information( shortMessage);
    else
    {
        shortMessage += "List is truncated. See Message Log for full report.\n"
        MessageBox.information(shortMessage);
    }

    MessageLog.trace( fullMessage);

    if ( outFile != "" )
    {
         var report= new File(outFile);
         report.open(2);
         report.write( fullMessage );
         report.close();    
    }
  }
}

 

복집한 프로젝트에서 3D를 사용한 씬과 패널을 쉽게 찾을 수 있다면 수정을 해야 할 경우 작업이 편리한 이점이 있습니다. 

아무래도 3D 데이터라서 시스템에 과부하가 걸리는 일이 발생할지도 모릅니다. 아래와 같이 데이터가 많은 프로젝트라면 더더욱.

 

 

  • 아래 장면은 마이크 모리스 씨의  Race Around The Moon의 한 장면입니다. 

3D 오브젝트가 화면을 꽉 채우는 샷인만큼 무거운 데이터로 인해 저사양 컴퓨터에서는 조금 버벅거리는 현상이 발생합니다. 이 프로젝트에서 3D는 이 씬 뿐만 아니라 다은 씬과 패널에도 상당히 많이 사용되고 있습니다.

 

이렇게 다양한 씬과 패널에 사용한 3D 오브젝트를 찾고 싶을 때, TB_3DReport.js 스크립트를 사용합니다.

스토리보드 프로 스크립트를 불러오는 방법은 "툰붐 스토리보드프로 스크립트 1탄!"을 참고하세요.

  • "Output to File" - 3D 리스트를 텍스트 포맷으로 저장
  • per Project
  • per Shot
  • per Panel

 

 

per Panel을 선택했을 때.

 

해당 패널에 사용된 3D 오브젝트의 정보가 표시됩니다.

 

 

Output to File을 선택하고 per Project를 선택했을 때.

 

저장할 장소를 선택하는 팝업 창에서 파일 이름을 입력하고 save를 클릭합니다.

팝업 창에 리스트가 표시되고 OK 버튼을 클릭하면 파일로 저장됩니다.

저장한 파일을 오픈하면 3D 오브젝트가 사용된 씬과 패널을 쉽게 찾을 수 있습니다.


2024.06.07 - [툰붐] - 툰붐 스토리보드프로 스크립트 1탄! 패널 익스포트 비트맵 이미지

 

툰붐 스토리보드프로 스크립트 1탄! 패널 익스포트 비트맵 이미지

선택한 패널을 바로 비트맵 이미지로 익스포트하는 스크립트. 스토리보드 프로에서 작업하는 패널을 바로 비트맵 이미지로 익스포트하고 싶을 때, 스토리보드프로는 스크립트 기능을 제공합

webtoonboom.tistory.com

 

반응형

관련글 더보기