コード例 #1
0
        private static void SetupLevelRenderer(Renderer renderer, ref LODLevel level)
        {
            renderer.shadowCastingMode          = level.ShadowCastingMode;
            renderer.receiveShadows             = level.ReceiveShadows;
            renderer.motionVectorGenerationMode = level.MotionVectorGenerationMode;
            renderer.lightProbeUsage            = level.LightProbeUsage;
            renderer.reflectionProbeUsage       = level.ReflectionProbeUsage;

            var skinnedMeshRenderer = renderer as SkinnedMeshRenderer;

            if (skinnedMeshRenderer != null)
            {
                skinnedMeshRenderer.quality = level.SkinQuality;
                skinnedMeshRenderer.skinnedMotionVectors = level.SkinnedMotionVectors;
            }
        }
コード例 #2
0
        private static MeshRenderer CreateLevelRenderer(string name, Transform parentTransform, Transform originalTransform, Mesh mesh, Material[] materials, ref LODLevel level)
        {
            var levelGameObject = new GameObject(name, typeof(MeshFilter), typeof(MeshRenderer));
            var levelTransform  = levelGameObject.transform;

            if (originalTransform != null)
            {
                ParentAndOffsetTransform(levelTransform, parentTransform, originalTransform);
            }
            else
            {
                ParentAndResetTransform(levelTransform, parentTransform);
            }

            var meshFilter = levelGameObject.GetComponent <MeshFilter>();

            meshFilter.sharedMesh = mesh;

            var meshRenderer = levelGameObject.GetComponent <MeshRenderer>();

            meshRenderer.sharedMaterials = materials;
            SetupLevelRenderer(meshRenderer, ref level);
            return(meshRenderer);
        }
コード例 #3
0
        private static SkinnedMeshRenderer CreateSkinnedLevelRenderer(string name, Transform parentTransform, Transform originalTransform, Mesh mesh, Material[] materials, Transform rootBone, Transform[] bones, ref LODLevel level)
        {
            var levelGameObject = new GameObject(name, typeof(SkinnedMeshRenderer));
            var levelTransform  = levelGameObject.transform;

            if (originalTransform != null)
            {
                ParentAndOffsetTransform(levelTransform, parentTransform, originalTransform);
            }
            else
            {
                ParentAndResetTransform(levelTransform, parentTransform);
            }

            var skinnedMeshRenderer = levelGameObject.GetComponent <SkinnedMeshRenderer>();

            skinnedMeshRenderer.sharedMesh      = mesh;
            skinnedMeshRenderer.sharedMaterials = materials;
            skinnedMeshRenderer.rootBone        = rootBone;
            skinnedMeshRenderer.bones           = bones;
            SetupLevelRenderer(skinnedMeshRenderer, ref level);
            return(skinnedMeshRenderer);
        }
コード例 #4
0
        private static Renderer CreateLevelRenderer(GameObject gameObject, int levelIndex, ref LODLevel level, Transform levelTransform, int rendererIndex, RendererInfo renderer, ref SimplificationOptions simplificationOptions, string saveAssetsPath)
        {
            var mesh = renderer.mesh;

            // Simplify the mesh if necessary
            if (level.Quality < 1f)
            {
                mesh = SimplifyMesh(mesh, level.Quality, simplificationOptions);

#if UNITY_EDITOR
                SaveLODMeshAsset(mesh, gameObject.name, renderer.name, levelIndex, mesh.name, saveAssetsPath);
#endif

                if (renderer.isNewMesh)
                {
                    DestroyObject(renderer.mesh);
                }
            }

            if (renderer.isStatic)
            {
                string rendererName = string.Format("{0:000}_static_{1}", rendererIndex, renderer.name);
                return(CreateStaticLevelRenderer(rendererName, levelTransform, renderer.transform, mesh, renderer.materials, ref level));
            }
            else
            {
                string rendererName = string.Format("{0:000}_skinned_{1}", rendererIndex, renderer.name);
                return(CreateSkinnedLevelRenderer(rendererName, levelTransform, renderer.transform, mesh, renderer.materials, renderer.rootBone, renderer.bones, ref level));
            }
        }