/// <summary> /// Construct a <see cref="RenderMeshDescription"/> using defaults from the given /// <see cref="Renderer"/> and <see cref="Mesh"/> objects. /// </summary> /// <param name="renderer">The renderer object (e.g. a <see cref="MeshRenderer"/>) to get default settings from.</param> /// <param name="mesh">The mesh to use and get default bounds from.</param> /// <param name="sharedMaterials">The list of materials to render the entity with. /// If the list is null or empty, <see cref="Renderer.GetSharedMaterials"/> will be used to obtain the list. /// An explicit list can be supplied if you have already called <see cref="Renderer.GetSharedMaterials"/> previously, /// or if you want to use different materials.</param> /// <param name="subMeshIndex">The sub-mesh of the mesh to use for rendering. The corresponding material index /// from <see cref="sharedMaterials"/> will be used as the material for that sub-mesh.</param> public RenderMeshDescription( Renderer renderer, Mesh mesh, List <Material> sharedMaterials = null, int subMeshIndex = 0) { Debug.Assert(renderer != null, "Must have a non-null Renderer to create RenderMeshDescription."); Debug.Assert(mesh != null, "Must have a non-null Mesh to create RenderMeshDescription."); if (sharedMaterials is null) { sharedMaterials = new List <Material>(capacity: 10); } if (sharedMaterials.Count == 0) { renderer.GetSharedMaterials(sharedMaterials); } Debug.Assert(subMeshIndex >= 0 && subMeshIndex < sharedMaterials.Count, "Sub-mesh index out of bounds, no matching material."); var motionVectorGenerationMode = renderer.motionVectorGenerationMode; var needMotionVectorPass = (motionVectorGenerationMode == MotionVectorGenerationMode.Object) || (motionVectorGenerationMode == MotionVectorGenerationMode.ForceNoMotion); RenderMesh = new RenderMesh { mesh = mesh, material = sharedMaterials[subMeshIndex], subMesh = subMeshIndex, layer = renderer.gameObject.layer, castShadows = renderer.shadowCastingMode, receiveShadows = renderer.receiveShadows, needMotionVectorPass = needMotionVectorPass, }; RenderingLayerMask = renderer.renderingLayerMask; FlipWinding = false; MotionMode = motionVectorGenerationMode; var staticLightingMode = RenderMeshUtility.StaticLightingModeFromRenderer(renderer); var lightProbeUsage = renderer.lightProbeUsage; LightProbeUsage = (staticLightingMode == StaticLightingMode.LightProbes) ? lightProbeUsage : LightProbeUsage.Off; }
private Material ConfigureHybridLightMapping( Entity entity, EntityManager entityManager, Renderer renderer, Material material) { #if USE_HYBRID_LIGHT_MAPS var staticLightingMode = RenderMeshUtility.StaticLightingModeFromRenderer(renderer); if (staticLightingMode == StaticLightingMode.LightMapped) { var lightMapRef = m_LightMapConversionContext.GetLightMapReference(renderer); if (lightMapRef != null) { Material lightMappedMaterial = m_LightMapConversionContext.GetLightMappedMaterial(material, lightMapRef); entityManager.AddComponentData(entity, new BuiltinMaterialPropertyUnity_LightmapST() { Value = renderer.lightmapScaleOffset }); entityManager.AddComponentData(entity, new BuiltinMaterialPropertyUnity_LightmapIndex() { Value = lightMapRef.LightMapIndex }); entityManager.AddSharedComponentData(entity, lightMapRef.LightMaps); return(lightMappedMaterial); } } #endif return(null); }