/// <summary> /// Postprocesses materials while you are importing a SpeedTree 8 asset. Call from OnPostprocessSpeedTree in a MaterialPostprocessor. /// </summary> /// <param name="speedtree">The GameObject Unity creates from this imported SpeedTree.</param> /// <param name="stImporter">The asset importer used to import this SpeedTree asset.</param> /// <param name="finalizer">Render pipeline-specific material finalizer.</param> public static void PostprocessSpeedTree8Materials(GameObject speedtree, SpeedTreeImporter stImporter, MaterialFinalizer finalizer = null) { LODGroup lg = speedtree.GetComponent <LODGroup>(); LOD[] lods = lg.GetLODs(); for (int l = 0; l < lods.Length; l++) { LOD lod = lods[l]; bool isBillboard = stImporter.hasBillboard && (l == lods.Length - 1); int wq = Mathf.Min(stImporter.windQualities[l], stImporter.bestWindQuality); foreach (Renderer r in lod.renderers) { // Override default motion vector generation mode pending // proper motion vector integration in SRPs. r.motionVectorGenerationMode = MotionVectorGenerationMode.Camera; foreach (Material m in r.sharedMaterials) { float cutoff = stImporter.alphaTestRef; ImportNewSpeedTree8Material(m, wq, isBillboard); if (finalizer != null) { finalizer(m); } } } } }
public void OnPostprocessSpeedTree(GameObject speedTree) { context.DependsOnCustomDependency("srp/default-pipeline"); if (RenderPipelineManager.currentPipeline is HDRenderPipeline) { SpeedTreeImporter stImporter = assetImporter as SpeedTreeImporter; SpeedTree8MaterialUpgrader.PostprocessSpeedTree8Materials(speedTree, stImporter, HDSpeedTree8MaterialUpgrader.HDSpeedTree8MaterialFinalizer); } }
public void Apply(AssetImporter originalImporter, string assetPath, Property[] properties) { SpeedTreeImporter importer = (SpeedTreeImporter)originalImporter; for (int i = 0; i < properties.Length; i++) { var property = properties [i]; switch (property.name) { case "scaleFactor": importer.scaleFactor = float.Parse(property.value); break; case "alphaTestRef": importer.alphaTestRef = float.Parse(property.value); break; case "enableSmoothLODTransition": importer.enableSmoothLODTransition = bool.Parse(property.value); break; case "animateCrossFading": importer.animateCrossFading = bool.Parse(property.value); break; case "billboardTransitionCrossFadeWidth": importer.billboardTransitionCrossFadeWidth = float.Parse(property.value); break; case "fadeOutWidth": importer.fadeOutWidth = float.Parse(property.value); break; case "userData": importer.userData = property.value; break; case "assetBundleName": importer.assetBundleName = property.value; break; case "assetBundleVariant": importer.assetBundleVariant = property.value; break; case "name": importer.name = property.value; break; case "hideFlags": importer.hideFlags = (HideFlags)System.Enum.Parse(typeof(HideFlags), property.value, true); break; } } }
// SpeedTree private void OnPreprocessSpeedTree() { SpeedTreeImporter speedTreeImporter = assetImporter as SpeedTreeImporter; if (speedTreeImporter == null) { return; } Debug.Log("树模型导入前"); }
public void OnPostprocessSpeedTree(GameObject speedtree) { SpeedTreeImporter stImporter = assetImporter as SpeedTreeImporter; SpeedTree8MaterialUpgrader.PostprocessSpeedTree8Materials(speedtree, stImporter, HDSpeedTree8MaterialUpgrader.HDSpeedTree8MaterialFinalizer); }