public override void PromoteMaterial(DaggerfallTerrain daggerfallTerrain, TerrainMaterialData terrainMaterialData) { // Get tileset material to "steal" atlas texture for our shader Material tileSetMaterial = DaggerfallUnity.Instance.MaterialReader.GetTerrainTilesetMaterial(GetGroundArchive(terrainMaterialData.WorldClimate)); // Assign textures terrainMaterialData.Material.SetTexture(TileUniforms.TileAtlasTex, tileSetMaterial.GetTexture(TileUniforms.TileAtlasTex)); terrainMaterialData.Material.SetTexture(TileUniforms.TilemapTex, terrainMaterialData.TileMapTexture); terrainMaterialData.Material.SetInt(TileUniforms.TilemapDim, MapsFile.WorldMapTileDim); }
/// <summary> /// Promote data to live terrain. /// This must be called after other processing complete. /// </summary> public void PromoteTerrainData() { // Basemap not used and is just pushed far away const float basemapDistance = 10000f; int heightmapDimension = dfUnity.TerrainSampler.HeightmapDimension; int detailResolution = heightmapDimension; // Ensure TerrainData is created Terrain terrain = GetComponent <Terrain>(); if (terrain.terrainData == null) { // Calculate width and length of terrain in world units float terrainSize = (MapsFile.WorldMapTerrainDim * MeshReader.GlobalScale); // Setup terrain data // Must set terrainData.heightmapResolution before size (thanks Nystul!) TerrainData terrainData = new TerrainData(); terrainData.name = "TerrainData"; terrainData.heightmapResolution = heightmapDimension; terrainData.size = new Vector3(terrainSize, dfUnity.TerrainSampler.MaxTerrainHeight, terrainSize); terrainData.SetDetailResolution(detailResolution, resolutionPerPatch); terrainData.alphamapResolution = detailResolution; terrainData.baseMapResolution = detailResolution; // Apply terrain data terrain.terrainData = terrainData; terrain.GetComponent <TerrainCollider>().terrainData = terrainData; terrain.basemapDistance = basemapDistance; terrain.heightmapPixelError = heightMapPixelError; } // Promote tileMap tileMapTexture.SetPixels32(TileMap); tileMapTexture.Apply(false); // Promote material var terrainMaterialData = new TerrainMaterialData(terrainMaterial, terrain.terrainData, tileMapTexture, currentWorldClimate); dfUnity.TerrainMaterialProvider.PromoteMaterial(this, terrainMaterialData); terrain.materialTemplate = terrainMaterial; // Promote heights Vector3 size = terrain.terrainData.size; terrain.terrainData.size = new Vector3(size.x, dfUnity.TerrainSampler.MaxTerrainHeight * TerrainScale, size.z); terrain.terrainData.SetHeights(0, 0, MapData.heightmapSamples); // Raise event RaiseOnPromoteTerrainDataEvent(terrain.terrainData); }
public override void PromoteMaterial(DaggerfallTerrain daggerfallTerrain, TerrainMaterialData terrainMaterialData) { Material tileMaterial = DaggerfallUnity.Instance.MaterialReader.GetTerrainTextureArrayMaterial(GetGroundArchive(terrainMaterialData.WorldClimate)); // Assign textures (propagate material settings from tileMaterial to terrainMaterial) terrainMaterialData.Material.SetTexture(TileTexArrUniforms.TileTexArr, tileMaterial.GetTexture(TileTexArrUniforms.TileTexArr)); terrainMaterialData.Material.SetTexture(TileTexArrUniforms.TileNormalMapTexArr, tileMaterial.GetTexture(TileTexArrUniforms.TileNormalMapTexArr)); terrainMaterialData.Material.SetTexture(TileTexArrUniforms.TileParallaxMapTexArr, tileMaterial.GetTexture(TileTexArrUniforms.TileParallaxMapTexArr)); terrainMaterialData.Material.SetTexture(TileTexArrUniforms.TileMetallicGlossMapTexArr, tileMaterial.GetTexture(TileTexArrUniforms.TileMetallicGlossMapTexArr)); terrainMaterialData.Material.SetTexture(TileTexArrUniforms.TilemapTex, terrainMaterialData.TileMapTexture); // Assign keywords (propagate material keywords from tileMaterial to terrainMaterial) AssignKeyWord(KeyWords.NormalMap, tileMaterial, terrainMaterialData.Material); AssignKeyWord(KeyWords.HeightMap, tileMaterial, terrainMaterialData.Material); AssignKeyWord(KeyWords.MetallicGlossMap, tileMaterial, terrainMaterialData.Material); }
public override void PromoteMaterial(DaggerfallTerrain daggerfallTerrain, TerrainMaterialData terrainMaterialData) { Material tileMaterial = DaggerfallUnity.Instance.MaterialReader.GetTerrainTextureArrayMaterial(GetGroundArchive(terrainMaterialData.WorldClimate)); // Assign textures (propagate material settings from tileMaterial to terrainMaterial) terrainMaterialData.Material.SetTexture(TileTexArrUniforms.TileTexArr, tileMaterial.GetTexture(TileTexArrUniforms.TileTexArr)); terrainMaterialData.Material.SetTexture(TileTexArrUniforms.TileNormalMapTexArr, tileMaterial.GetTexture(TileTexArrUniforms.TileNormalMapTexArr)); if (tileMaterial.IsKeywordEnabled(KeyWords.NormalMap)) { terrainMaterialData.Material.EnableKeyword(KeyWords.NormalMap); } else { terrainMaterialData.Material.DisableKeyword(KeyWords.NormalMap); } terrainMaterialData.Material.SetTexture(TileTexArrUniforms.TileMetallicGlossMapTexArr, tileMaterial.GetTexture(TileTexArrUniforms.TileMetallicGlossMapTexArr)); terrainMaterialData.Material.SetTexture(TileTexArrUniforms.TilemapTex, terrainMaterialData.TileMapTexture); }
public abstract void PromoteMaterial(DaggerfallTerrain daggerfallTerrain, TerrainMaterialData terrainMaterialData);