【Unity】Mesh를 AssetBundle 빌드하면 부가 정보가 깎여 버리는 건

사건



Unity에서 정점 알파가 추가 된 Mesh를 AssetBundlle 빌드하고로드하면 정점 알파가 사라지고 있다는 현상이 발생할 수 있습니다.



원인



PlayerSettings의 Optimize Mesh Data 옵션이 true로되어 있기 때문입니다.



htps : // 안수 r. 와우 4d. 코 m/쿠에 s치온/5985785 아 46다 fb521451bd85
위의 페이지에 따르면 Optimize Mesh Data는 다음과 같은 행동을합니다.

일반적으로 '메시 데이터 최적화' 옵션을 켜면 엔진이 게시 시 모든 메시 데이터를 반복적으로 처리하여 여분의 데이터를 삭제하고 데이터 크기를 줄일 수 있습니다. . 또한 "중복"데이터는 렌더링을 위해 Shader에서 필요하지 않은 데이터가 메쉬 데이터에 포함되어 있음을 의미합니다. 즉, 메쉬 데이터에 위치, uv, 법선, 색, 접선 등의 정점 데이터가 포함되어 있지만, 그 데이터가 메쉬 데이터에 위치, uv, 법선, 컬러, 탄젠트 등의 정점 데이터가 포함되어 있다 그리고 렌더링에 사용하는 셰이더에는 위치, uv, 법선 밖에 필요하지 않은 경우, 메쉬 데이터의 칼라와 탄젠트는 「중복」이며, 게임 공개시에 엔진에 의해 자동적으로 삭제됩니다.
이 옵션을 켜는 것은 양날의 칼이라는 점에 유의해야합니다. 개발 팀은 런타임 상황에서 셰이더 변경에 특히주의를 기울이는 것이 좋습니다. 더 많은 정점 속성에 액세스해야 하는 복잡한 셰이더를 런타임 중에 특정 GameObject로 바꿔야 하는 경우 엔진이 런타임에서 사용하는 메시 데이터를 제거하지 않도록 이러한 셰이더를 적절하게 Prefab에 마운트 한 다음 릴리스하는 것이 좋습니다.

즉, Unity는 이 옵션이 ON 상태에서 AssetBundle을 빌드하면 Prefab에서 사용되고 있는 Mesh, Material(Shader)를 정적 해석해 사용하지 않는 부가 정보를 Stripping한다는 것이라고 생각됩니다.

해결



하나의 AssetBundle 안에 정점 정보를 사용하는 Material을 첨부한 Prefab을 포함하도록 해 해결했습니다.

개선 전


개선 후


이렇게하면 Prefab에서 사용하는 Mesh 및 Shader가 구문 분석되고 Shader에서 사용되는 정점 정보는 빌드 중에 남아 있습니다.
그러나이 경우에도 Prefab에 붙은 Shader에서 사용하지 않는 정점 정보는 Stripping되어 버리므로주의하십시오.

런타임에서 Shader를 전환하여 각각 다른 정점 정보를 사용하는 등의 용도라면 상당히 불편하기 때문에 필요에 따라 Optimize Mesh Data 는 무효로 하는 것도 개미라고 생각합니다.
(라고 하는지, 트러블의 기초가 될까라고 생각하기 때문에 특히 필요하지 않으면 무효로 해 두는 것이 좋은 것이 아닐까 생각합니다)

좋은 웹페이지 즐겨찾기