public TAMImageDiagram Generate(TAMImageDiagram baseDiagram, TAMTone tone, TAMMipmapLevel mipmapLevel, int seed) { _strokesGenerator.ResetSeed(seed); _random = new System.Random(seed); var diagram = baseDiagram.Copy(); float currentCoverage = ComputeCoverage(diagram, mipmapLevel); float targetCoverage = _generationConfiguration.TargetCoverages[tone]; while (targetCoverage > currentCoverage) { List <RankedPossibleStroke> possibleStrokes = new List <RankedPossibleStroke>(); for (int i = 0; i < _generationConfiguration.TriesCount[mipmapLevel]; i++) { TAMStroke newStroke = _strokesGenerator.CreateRandomStroke(new Vector2(_random.Next(), _random.Next()), tone); RankedPossibleStroke rankedNewStroke = RankStroke(newStroke, diagram); possibleStrokes.Add(rankedNewStroke); } var bestStroke = possibleStrokes.OrderBy(p => p.Rank).First(); diagram.AddStroke(bestStroke.Stroke); currentCoverage = ComputeCoverage(diagram, mipmapLevel); } return(diagram); }
public TAMStroke CreateRandomStroke(Vector2 center, TAMTone tone) { var size = (float)_random.Next(); var length = Mathf.Lerp(_generationConfiguration.StrokeLengthRange.x, _generationConfiguration.StrokeLengthRange.y, size); length += (float)_random.NextBetween(_generationConfiguration.StrokeHeightJitterRange.x, _generationConfiguration.StrokeLengthJitterRange.y); var height = Mathf.Lerp(_generationConfiguration.StrokeHeightRange.x, _generationConfiguration.StrokeHeightRange.y, size); height += (float)_random.NextBetween(_generationConfiguration.StrokeHeightJitterRange.x, _generationConfiguration.StrokeHeightJitterRange.y); float rotation; if (tone.StrokeOrientation == TAMStrokeOrientation.Horizontal) { rotation = (float)_random.NextBetween(-1, 1) * _generationConfiguration.MaxRotationJitter; } else if (tone.StrokeOrientation == TAMStrokeOrientation.Vertical) { // strokes vertical rotation = (float)_random.NextBetween(-1, 1) * _generationConfiguration.MaxRotationJitter + Mathf.PI / 2; } else { if (_random.NextBoolean()) { rotation = (float)_random.NextBetween(-1, 1) * _generationConfiguration.MaxRotationJitter; } else { rotation = (float)_random.NextBetween(-1, 1) * _generationConfiguration.MaxRotationJitter + Mathf.PI / 2; } } return(new TAMStroke(center, height, length, rotation, _lastId++)); }
public void Start0() { var tonesCount = 5; var levelsCount = 5; TaskUtils.SetGlobalMultithreading(false); var tones = TAMTone.CreateList(tonesCount, new Dictionary <int, TAMStrokeOrientation>() { { 0, TAMStrokeOrientation.Horizontal }, { 3, TAMStrokeOrientation.Vertical }, { 5, TAMStrokeOrientation.Both } }); var levels = TAMMipmapLevel.CreateList(levelsCount); var fileManager = new TAMPackFileManager(); var soleImagesPack = fileManager.Load(@"C:\mgr\tmp\tam1\", tones, levels); var generator = new TAMArrayGenerator(); var tex2DArray = generator.Generate(soleImagesPack, tones, levels); var go = GameObject.CreatePrimitive(PrimitiveType.Plane); var material = new Material(Shader.Find("Custom/Debug/TextureArrayLod")); material.SetTexture("_MainTex", tex2DArray); go.GetComponent <MeshRenderer>().material = material; MyAssetDatabase.CreateAndSaveAsset(tex2DArray, "Assets/Generated/TAM1.asset"); }
public TAMImageDiagram Generate(TAMImageDiagram diagram, TAMTone tone, TAMMipmapLevel mipmapLevel, int seed) { List <Vector2> currentPoints = diagram.Strokes.Select(c => c.Center).ToList(); var newPoints = _sampler.Generate(_configuration.GenerationCount, _configuration.ExclusionZoneValues[tone][mipmapLevel], seed, currentPoints); return(new TAMImageDiagram(diagram.Strokes.Union(newPoints.Select(c => _strokesGenerator.CreateRandomStroke(c, tone))).ToList())); }
private TAMImageDiagram GetPreviousToneImageDiagram(TAMTone tone, TAMMipmapLevel mipmapLevel) { if (tone.IsLowestTone) { return(TAMImageDiagram.CreateEmpty()); } else { return(_columns[tone.LowerTone][mipmapLevel]); } }
public static List <TAMTone> CreateList(int count, Dictionary <int, TAMStrokeOrientation> orientationByToneIndex) { var outList = new List <TAMTone>(); TAMTone lastTone = null; for (int i = 0; i < count; i++) { var orientation = orientationByToneIndex.OrderByDescending(c => c.Key).First(c => c.Key <= i).Value; var newTone = new TAMTone(orientation, lastTone); outList.Add(newTone); lastTone = newTone; } return(outList); }
public void StartDiagram() { var tonesCount = 4; var levelsCount = 4; TaskUtils.SetGlobalMultithreading(false); var tones = TAMTone.GenerateList(tonesCount, 3, 4); var levels = TAMMipmapLevel.CreateList(levelsCount); var tamPackGenerator = new TAMPackGenerator(); var msw = new MyStopWatch(); msw.StartSegment("Gen"); var pack = tamPackGenerator.GenerateTamPack(GenerateDiagramConfiguration(tones, levels, 0.7f), true, Object.FindObjectOfType <ComputeShaderContainerGameObject>()); Debug.Log(msw.CollectResults()); var fileManager = new TAMPackFileManager(); fileManager.Save(@"C:\mgr\tmp\tam2\", tones, levels, pack); }
public TAMTone(TAMStrokeOrientation strokeOrientation, TAMTone lowerTone = null) { _strokeOrientation = strokeOrientation; _lowerTone = lowerTone; }
private void AddNewImageDiagram(TAMImageDiagram template, TAMTone tone, TAMMipmapLevel mipmapLevel) { _columns[tone][mipmapLevel] = template; }
private TAMImageDiagram GenerateNewImageDiagram(TAMImageDiagram baseImageDiagram, TAMTone tone, TAMMipmapLevel mipmapLevel, int seed) { return(_imageDiagramGenerator.Generate(baseImageDiagram, tone, mipmapLevel, seed)); }