1. Convert
- Cameras , Lights : 씬의 카메라 및 라이트를 익스포트 할 경우 이 옵션에 체크를
합니다.(보통 체크안함)
2. Textures Options Sub-panel
- Include in main NIF : 메인 NIF포멧에 포함시켜서 익스포트 할 때 체크
합니다.
이 옵션을 사용 하면 마스터 NIF파일은 완벽한 하나의 자가 공급 패키지가 됩니다. 모든 데이타가 하나의 포멧 파일로 합쳐지기
때문에 별도의 텍스처가 필요 없으며, 마스터 NIF파일 안의 텍스처는 공유됩니다.
자세한 사항은 게임브리오 헬프 파일을 참고 하시기 바랍니다.
- Save as separate NIFs : 텍스처 파일을 별개의 NIF로 익스포트 할 시 체크를
합니다.
이 옵션은 마스터 NIF가 제대로 로드되기 위해서 다른 NIF파일에 의존하게 만듭니다. 즉, 별개의 텍스처 NIF파일이 있어야
마스터 NIF 파일이 제대로 로드 된다는 것입니다.
씬의 각 고유한 텍스처는 자체적인 NIF파일에 저장되며, 별개로 익스포트 되어진 텍스처 NIF파일들은 여러 마스터
NIF 파일들 간에 공유 할 수 있습니다.
이 옵션은 부수적인 NIF텍스처 파일을 찾는 검색 시간으로 인해 콘솔에서 로딩하기에는 메인 NIF 텍스처보다 느릴 수 있습니다
- Original images : 텍스처를 원래의 이미지로 익스포트 할 시 체크합니다.
이 옵션은 마스터 NIF가 제대로 로드되는데 원본 이미지 파일에 의존하게 만듭니다.
각각의 고유한 이미지 파일은 텍스처가 공유되는 위치에 복사해야 하며, 이 작업은 max에서 제공하는 Resource
Collector
유틸리티를 통해 쉽게 처리할 수 있습니다. 그러나 지원되는 게임브리오 이미지 타입만 공유될 수 있으며, 지원되지 않는
타입은 NIF텍스처로 익스포트 될 것입니다.
이 방식의 또 다른 이점은 익스포트 후에도 이미지를 수정 할 수 있다는 점입니다.
이 옵션의 부수적인 NIF 텍스처 파일을 찾는 검색 시간으로 인해 콘솔에서 로딩하기에는 메인 NIF 텍스처 옵션보다 느릴 수
있습니다. 또한 랜더러가 이 이미지를 쓸 수 있으려면 중간 픽셀부터 만들어야 한다는 사실로 인해 메모리를 조각 낼 수도
있습니다.
- Original images VRAM : 이 옵션은 위에 나온 Original
images와 같으나 게임브리오 중간표현 없이 곧바로 렌더러
데이터에 로드되기 때문에 게임브리오에서 직접 지원하지 않는 이미지 형식을 사용 할 수 있으며 로드시간도 빨라지게 됩니다.
- Allow NPOT Tectures : 이 옵션을 체크하면 2의 제곱이 아닌 텍스처를 크기조정 없이
익스포트 할 수 있습니다.
2의 제곱이 아닌 텍스처는 갖가지 그래픽 카드에서 서로 다른 성능을 보이며 퍼포먼스에 나쁜 영향을 끼칠 수가 있으므로
보통 2의 제곱 텍스처를 사용하지 않는게 좋습니다.
이 옵션을 체크하지 않으면 기본적으로 익스포트가 2의 제곱이 아닌 텍스처를 발견 햇을 경우 그 텍스처의 크기는 2의 제곱에
가장 가까운 면적으로 줄어들고 경고 메세지가 나오게 됩니다.
이 옵션을 체크하면 익스포트가 발견된 2의 제곱이 아닌 모든 첵스처는 필러링모드가 pyramidal로 설정되어 있을지라도
Mipmap 지원이 없는 상태로 익스포트 됩니다.
1. Use App Time
- 애니메이션은 APP_TIME 애니메이션 타입을 사용하게 되고, 체크하지 않으면 APP_INIT를 사용하게 됩니다.
프로그래머가 APP_INIT를 사용해서 익스포트 해달라고 하지 않는 이상 기본적으로 체크를 해 놓습니다.
2. Use existing Biped keyframes instead of sampled
keyframes
- Character Studio는 바이패드 애니메이션에 TCB key를 사용하지만 불행이도 TCB파라미터 중 어느적도 익스포트 하지
못합니다. 이 때문에 Gamebryo 3ds max Plug-in은 키프레임을 Bezier key로 익스포트 합니다.
이 옵션을 체크하지 않으면 Gamebryo 3ds max Plug-in은 바이페트 애니메이션을 bone 별로 프레임 당 키 한개의
속도로
샘플링 할 것 입니다.
남아도는 키프레임은 삭제되지만 이 프로세스는 수많은 키프레임을 생성 할 수 있기에 일반적으로 컨버전 성능이
떨어지지 않는 이상 이 옵션을 사용 하는 것이 효과적입니다. 단, 애니메이션 컨버전 성능이 떨어질 경우에는 이 옵션을
체크하지 말아야 하며 보통 이 옵션을 체크하면 걸음걸이 동작은 비정상적으로 나오나 자유 형식 동장은 정상적으로 나옵니다.
3. Skin Weight Threshold %"수치"
- 스킨에 버텍스 당 이 "수치"%보다 적은 영향을 미치는 본의 가중치는 버려집니다.
이 기술은 스키닝 파티션의 갯수가 최적에 못 미치는 경우 유용하게 쓰이는데 이런 경우 퍼포먼스를 현저히 개선시킬 수
있습니다.
물론, 최종 스킨의 정확도가 떨어질 수는 있지만 대부분의 경우 5% 미만의 가중치는 최종 애니메이션에 거의 기여하지
못하기에 보통은 5%에서 시작됩니다.
1. Process Script
- 옆에 있는 드롭다운 리스트를 열면 알려진 모든 Process Script 가 나옵니다.
Process Script 는 씬 그래프를 어떤 방식으로 조작할 지를 정하는 플러그을 설정하는 것이므로 프로그래머와 상의 후
필요한 플러그인만을 적용 시킵니다.
예를 들어 겜브리오 엔진은 물리엔진으로서는 점수가 높지 않기 때문에 물리충돌은 다른 엔진으로 대체하는 경우가 있습니다.
해당 플러그인의 설정 수정이나 새로운 설정을 만들기 위해선 오른쪽의 Edit 버튼을 눌러 편집을 합니다.(밑에 설명)
2. File Export Script
- 이 드롭다운 리스트를 열면 알려지 모든 export script를 보여집니다.
자세한 사항은 겜브리오 헬프 파일을 참조.
3. Use original script template if available
- Max 파일을 로드했을 때 이 파일의 내부 스크립트 사본이 원래의 템플릿과 동기화 되지 않았을 경우 이 옵션을 체크하면
맥스파일에 저장된 임시 버전 대신에 원래의 템플릿 스크립트가 사용됩니다.
1. Platform
- 드롭 다운 리스트를 열면 익스포트 할 타깃 플랫폼을 선택 할 수 있습니다.
해당 타깃 플랫폼을 선택하면 이미지와 데이터의 특정 최적화와 관련하여 스크립트 동작이 바뀔 수 있습니다.
'Generic' 'Xbox 360' 'Platstation3' 'DX9' 가 있습니다.
프로그래머와 상의합니다.
2. Image file subdirectory
- 텍스처를 외부 NIF로 익스포트 할 때 활성화 되는 옵션으로 외부 NIF로 저장되어지는 서브 디렉터리를 선택하거나
다른 이름으로 저장되어지게 합니다.(쉽게 말해 텍스처NIF가 저장되어지는 폴더의 이름을 적는 곳)
3. Default content quality
- 외부 텍스처 NIF나 내부 텍스처로 익스포트 할 때 텍스처의 디폴트 퀄리티를 설정 할 수 있습니다.
별개의 설정을 하지 않은 모든 텍스처를 최종적으로 'Defaults~Palettized'로 만드는 것이며,
다른포멧파일(예:DXT5)로 익스포트 해야 한다면 메터리얼 텍스처탭에서 따로 설정을 해야 합니다.
4. Override Per-Texture Settings
- default content quality 옵션을 사용 할 때는 Gamebryo Shder에서 텍스처 포맷 타입에 대해 설정된
옵션들이
default로 Override 되지 않습니다.
따라서 이런 설정을 Override 하고 싶은 경우엔 이 옵션에 체크해야 합니다.
즉, DXT5(DDS포멧)으로 설정되어 있는 별개의 텍스처에 최종 익스포트 시 Default content quality에서 DXT1로
설정을
하여 익스포트 할 때 체크를 해제하면 개별적으로 설정되어있는 DXT5포멧으로 익스포트 되게 되며,
체크를 하면 최종설정인 Default content quality에서 DXT1포멧으로 익스포트 됩니다.
특정 조건이 아닌 이상 체크를 하지 않는 것이 좋습니다.
대부분은 DDS포멧의 DXT1으로 포멧을 하지만(용량이 적다) 알파값이 있으면 DDS포멧의 DXT3 ~ DXT5포멧으로 하는게
좋습니다. 또한, 특정 노멀맵의 경우는 DDS포멧인 DXT5로 설정해야 하는 경우도 있습니다.
☞ Process Script Edit 버튼을 클릭하면 나오는 창.
1. Current Script
- 현재 설정되어 있는 모든 스크립트가 나옵니다. 이 리스트 중에 선택된 항목은 다이얼로그의 나머지 부분에 있어
현 스크립트가 무엇인지 결정하게 됩니다. 각 템플릿 스크립트는 괄호 안에 그 스크립트가 로드된 소스 파일을 보여줍니다.
스크립트에서 괄호 다음에 '*'표시가 나온다면 유저가 세션에서 그 스크립트를 변경했음을 의미합니다.
2. New
- 새로운 스크립트를 생성합니다.
3. Save
- 현재 선택된 스크립트를 저장합니다.
4. Clone
- 기존의 스크립트를 바탕으로 새로운 스크립트를 생성합니다.
어떤 스크립트를 복제 할지 , 어떤 이름을 사용할지를 묻는 창이 나옵니다.
5. Rename
- 스크립트의 이름을 변경합니다.
6. Script Type
- 스크립트의 타입을 보여줍니다.
1. Known Plugins
- 알려진 모든 플러그인을 보여줍니다.
2. Plugin List for Current Script
- 현 스크립트에 적용되어 있는 플러그인을 보여줍니다.
플러그인에 나열되는 순서는 이들이 실행되는 순서이며, 리스트에 있는 플러그인을 여러개 복사할 수 있고,
각 복사본마다 서로 다른 파라미터를 지정할 수 있습니다.
3. Add Plugin
- 선택된 플러그인의 새로운 인트턴스를 현 스크립트에 추가힙니다.
4. Remove Plugin
- Plug-in List For Current Script 에 선택되어 있는 플러그인을 삭제합니다.
5. See Description
- Plug-in List For Current Script 에 선택되어 있는 플러그인에 대한 설명서를 불러냅니다.
6. Edit Plugin
- Plug-in List For Current Script 에 선택되어 있는 플러그인에 대한 편집창을 불러냅니다.
7. Move Up
- Plug-in List For Current Script 에 선택되어 있는 플러그인을 한단계 위로 올립니다.
8. Move Down
- Plug-in List For Current Script 에 선택되어 있는 플러그인을 한단계 아래로 내립니다.
◈ 플러그인 설명
- 해당 플러그인을 더블 클릭하거나 Edit Plugin 을 클릭하면 플러그인의 옵션창이
불러와집니다.
[ Scene Graph Optimization ]
- 메모리 오버헤드와 트래버스 시간을 줄이기 위해 Scene Graph를
Optimization(최적화)합니다.
이 플러그인에서 최적화 할 수 있는 옵션은 매우 많으며, 스킨 파티션과 NiBoneLODController가 올바르게
생성되려면 이 플러그인을 반드시 실행 시켜야 합니다.
1. Remove duplicate properties
- Scene(씬)에서 중복되는 모든 속성을 공유하게 됩니다. 기본적으로 체크되어야 하는 옵션입니다.
2. Remove bad NiTexturing properties
- 씬에서 이미지 데이터가 없는 NiTecturingProperty 속성과 존재하지 않는 텍스처 좌표를 사용하는
NiTecturingProperty속성을
제거합니다.
3ds max와 gamebryo 3ds max Plug-in간에 발생 할 수 있는 몇몇의 필요없는 상황을 정리 하므로 기본적으로
체크되어야
하는 옵션입니다.
3. Remove multi-material nodes
- 씬에서 multi-material 노드를 모두 지웁니다. 이들은 대개 필요
없으므로 지워도 됩니다.
4. Remove childless
nodes
- 씬에서 자식이 없는 노드를 모두 삭제합니다.
gamebryo는 씬그래프의 말단(leaf)노드만 렌더링 합니다. NiNode에는 가시적 지오메트리가 없으며 그에 따라
렌더링과도
관련이 없습니다 따라서 어플리케이션이 특별히 나중에 사용할 목적으로 보관해두지 않는 한 자식이 없는 노드는 전혀
쓸모가 없습니다. 이 함수는 오브젝트의 오버헤드를 줄이기 위해 씬에서 자식도 없고 쓰이지도 않는 모든 NiNode를 지웁니다.
단, 노드를 그대로 두고 싶다면 반드시 3ds max 유저 지성속성(User Difined)에 "NiOptimizeKeep"라는 태그를
달아놓아야
합니다.(대소문자 틀리면 적용 안됨)
5. Remove single-child nodes
- 씬에서 자식을 하나만 두고 있는 노드의 속성과 변환과 이름을 그 자식에게 전달하고 이 노드는 삭제해버립니다.
자식에 "NiOptimizeKeep" 태그가 달려있는 경우엔 이름이 전달되지 않습니다.
6. Merge sibling nodes
- 씬의 형제 노드를 통합합니다. '두 노드가 정확히 NiNode 타입의 형제 노드이며, 이 두 노드에 NiNode 타입의 부모가
있으며
똑같은 속성과 똑같은 visibility flag가 어태치 되어 있다' 라는 조건이 맞으면 이 두 노드는 통합 됩니다.
두 노드가 합쳐질 수 있고 서로 다른 변환을 지니면, 두 노드의 변환은 이들이 합쳐지기 전에 자식들에게 물려집니다.
7. Merge sibling NiTrishape objects
- 씬의 모든 형제 NiTriShape 객체를 통합합니다.
' 두 NiTriShape 객체에게 정확히 NiNode 타입인 공통의 부모가 있고 보유한 속성의 수가 같으며, 속성 포인터가
같고
텍스처 세트 수도 같다. 또한 타임 컨트롤러가 어태치 되어 있지 않고, NiTGeometryData 포인터가 서로 다르며
AppCulled
플래그 값이 같다. 두 NiTriShape 모두 버텍스, 노멀, 텍스처, 컬러를 갖거나 갖지 않는다 '
라는 조건이 맞으면 이 두 NiTriShape을 합칠 수 있습니다.
두 NiTriShape 중 어느 하나에라도 별도의 데이터가 어태치 되어 있으면 이 둘은 통합되지 않을 것입니다.
8. Do not merge alpha-blended NiTriShape objects
- 이 옵션을 체크하면 알파 블렌딩이나 sorter가 작동될 경우 NiAlphaProperty가 어태치된 노드들 사이에선 통합이
일어나지
않습니다.
9. Optimize NiTriShape objects
- degenerate triangle을 삭제하고 씬에 있는 모든 NitriShape의 버텍스를 축약시키는데, 이 객체들의 삼각형이
모두
degenerate되어 있는 경우라면 그 객체들을 지워버립니다.
10. Remove extra texture coordinate sets
- 씬의 지오메트리에서 현재의 노드나 상위 노드에 어태치된 NiTexturingProperty가 사용하지 않는 모든 텍스처 좌표
세트를
삭제합니다.
11. Remove unnecessary normals
- 필요없는 노멀을 재귀적으로 삭제합니다. 라이트가 없는 씬에서는 노멀을 삭제하지 않습니다.
12. Remove unnecessary NiVisControllers
- 씬에서 NiVisController의 키들이 모두 같은 visibility data를 가지고 있으면 그런
NiVisController를 모두 삭제하고
타깃의 visibility flag를 업데이트 합니다.
13. Remove unnecessary NiLookAtControllers
- NiLookAtController의 타깃이나 "Look At"에, 또는 씬 그래프에서 이들 위에
NiKeyframeController가 없으면 씬에서
NiLookAtController를 삭제합니다.
14. Remove hidden bone geometry
- 한 본의 자식이면서 AppCulled 플래그인 true인 NiGeometry를 씬에서 삭제합니다.
○ 게임을 실행 시키기 위해 노드가 필요한 경우에는 'Remove childless nodes' 'Remove
single-child nodes'
'Merge sibling nodes' 'Merge sibling NiTrishape objects' 의
체크를 해제합니다.
1. Reduce animation keys
- 씬에서 NiKeyframeController의 중복된 애니메이션 키를 줄입니다.]
"Tolerance"설정은 키가 여전히 중복되는 것으로 여겨지려면 이 키가 키의 양쪽에서 이루어지는 두
키 사이의 보간에서부터
얼마나 멀리까지 있어도 되는지의 비율을 지정하는 곳입니다.
2. Remove unnecessary extra data
- ectra data string이 비어있거나, 이 문자열에 임시적인 컨버전 목적으로 쓰이는 문자열만 들어 있는 경우 이를
삭제합니다.
Remove "NiOptimizeKeep"tags 옵션을 체크하면 문자열 "NiOptimizeKeep"와
"sgokeep"이 들어있는 extra data객체도
삭제됩니다.
1. Sory children of each node by NiTexturingProperty
- 각 노드의 자식을 속성 상태에 나와 있는 NiTexturingProperty의 어드레스에 따라 Sorting(소팅)합니다.
속성 상태에 NiTexturingProperty 객체가 없는 자식들이 먼저 Sorting 됩니다.
- 이 함수는 렌더링의 능률을 높이는 데에 다소 도움이 됩니다. 그러나 씬 그래프 구조를 유지해야 하는 제약으로 인해
최적화 될 수 있는 방식도 제한됩니다.
2. Remove all Object Names
- 씬의 모든 오브젝트와 메터리얼 속성에서 이름 문자열을 삭제합니다.
- 이 함수는 어플리케이션이 이름을 필요로 하지 않는 경우를 위해 제공됩니다. 이름을 삭제하면 메모리 오버헤드를 조금
줄일 수 있으나 같은 오브젝트의 이름이 있어야만 하는 클래스에선 문제를 일으킬 수 있으므로 이름이 필요없다고 확신되는
경우에만 이름을 삭제 하기 바랍니다.
3. Name all unnamed objects
- 씬에서 이름이 없는 오브젝트에 고유한 이름을 달아줍니다.
- 오브젝트들이 이름 없이 익스토프 되지 않게 해줍니다. 즉, 모든 오브텍트에 이름이 있어야 하는 경우에 사용합니다.
4. Skin and Bones Support
- 이 옵션은 각 플랫폼에 대해 어떤 타입의 스키닝 정보를 익스포트 할지를 지정합니다.
하드웨어(Hardware) 스키닝 정보를 익스포트할지 , 소프트웨어(Software) 스키닝 정보를 익스포트 할지 , 또는
둘다(Both)
익스포트할지를 고를 수 있습니다.
- 하드웨어 스키닝 정보만으로 익스포트 된 데이터세트는 하드웨어 스키닝을 지원하지 않는 그래픽 하드웨어에선 실행되지
않을 것입니다.
하드웨어와 소프트웨어 스키닝 정보 모두를 가지고 익스포트 된 데이터 세트는 실행될 때 하드웨어 가속 상태
(hardware accelerated)가 되나 하드웨어 스키닝을 지원하지 않는 그래픽 하드웨어에서도 여전히 구동될 수
있습니다.
- 스킨 파티션 당 bone의 갯수도 지정 할 수 있습니다.
5. Weld hardware skin partitions
- 스키닝된 모델에서 crack(균열)을 없앱니다.
- 하드웨어 가속 스키닝을 사용할 때 활성적일 수 있는 본의 개수가 제한되어 있기 때문에 하드웨어 가속 스키닝에 쓰이는
데이터 구조를 만들 땐 본과 버텍스 간의 상호작용을 무시해야 할 수 밖에 없게 됩니다.
이렇게 되면 만일 한 본의 영향이 어떤 삼각형에서는 무시되나 다른 오브젝트의 인접한 삼각형에서는 무시되지 않을 경우
서로 다른 게임브리오 오브젝트의 삼각형들이 공유하는 가장자리에 크랙(균열)이 생길 수 있는데 welding code는 이런
균열이
생긴 가장자리를 찾아내서 제거합니다.
이 welding이 일어나려면 두 오브젝트의 월드 변환이 동일해야 합니다.
◈ 이외에 여러가지 플러그인이 존재하며, 필요한 부분만 체크해서 적용시키는게 좋습니다.