Beispiel #1
0
 public virtual void updateDistortedMap(PlanarMesh planarMesh = null)
 {
     if (lowerLayer != null)
     {
         lowerLayer.updateDistortedMap(planarMesh);
     }
 }
Beispiel #2
0
    public override void updateDistortedMap(PlanarMesh planarMesh = null)
    {
        if (lowerLayer != null)
        {
            lowerLayer.updateDistortedMap(planarMesh);
            if (colorMap != null)
            {
                if (lowerLayer.getColorMap() != null)
                {
                    if (distortedColorMap == null)
                    {
                        distortedColorMap = new Texture2D(lowerLayer.getColorMap().width, lowerLayer.getColorMap().height);
                    }
                    if (planarMesh == null)
                    {
                        planarMesh = new PlanarMesh();
                    }

                    drawingOver = true;
                    planarMesh.renderMapOver(colorMap, distortedColorMap, lowerLayer.getColorMap(), 0, getUsedPassesCount() - 1);
                }
                if (lowerLayer.getHeightMap() != null)
                {
                    if (distortedHeightMap == null)
                    {
                        distortedHeightMap = new Texture2D(lowerLayer.getHeightMap().width, lowerLayer.getHeightMap().height);
                    }
                    if (distortedNormalMap == null)
                    {
                        distortedNormalMap = new Texture2D(lowerLayer.getNormalMap().width, lowerLayer.getNormalMap().height);
                    }

                    Color[] combinedHeight = getColorMapPixels();
                    Color[] lowerHeight    = lowerLayer.getHeightMap().GetPixels();
                    for (int i = 0; i < combinedHeight.Length; i++)
                    {
                        float color = Mathf.Min(1, lowerHeight[i].r + combinedHeight[i].a);
                        combinedHeight[i] = new Color(color, color, color, 1);
                    }
                    distortedHeightMap.SetPixels(combinedHeight);
                    distortedHeightMap.Apply();

                    StampGenerator.printNormalMap(distortedNormalMap, distortedHeightMap);
                }
                setTextures();
            }
        }
        else if (colorMap != null)
        {
            setTextures();
        }
    }
    public override void init()
    {
        mesh3d = GetComponent <MeshFilter>().mesh;

        if (item == null)
        {
            return;
        }

        // generates raytraced maps from 3D object
        generator = new StampGenerator(item, itemResolution, stampRotation);

        // raytracing stamp textures from 3D object
        heightMap           = generator.getHeightMap();
        normalMap           = generator.getNormalMap();
        normalMapFromHeight = generator.getNormalMapFromHeight();
        edgeMap             = generator.getEdgeMap(new Color(.7f, .7f, .72f, 1), 15, 3);

        // creation of resusable textures that will be used on model
        distortedHeightMap = new Texture2D(textureResolution, textureResolution);
        distortedNormalMap = new Texture2D(textureResolution, textureResolution);
        distortedColorMap  = new Texture2D(textureResolution, textureResolution);

        planarMesh = new PlanarMesh(
            GetComponent <Transform>(),
            mesh3d,
            getArranger(),
            normalizationSteps,
            normalizationStrength,
            showingNormalization,
            neighbourRadius,
            detectOverlappingOnAllTriangles,
            detectOverlappingOnAllEdges,
            useStrength,
            alwaysBuildBestMesh);
    }
    public override void updateDistortedMap(PlanarMesh planarMesh = null)
    {
        if (block == 1 || block == 3)
        {
            return;
        }

        if (heightMap == null)
        {
            return;
        }

        if (multipleArrangers)
        {
            planarMesh = null;
        }
        if (planarMesh == null)
        {
            // prevents calculating mesh update in every layer
            planarMesh = this.planarMesh;
            planarMesh.updateMesh(mesh3d);
        }

        if (lowerLayer != null)
        {
            lowerLayer.updateDistortedMap(planarMesh);
        }
        int passShift = getUsedPassesCount() - 3;

        planarMesh.DEBUG_TRIANGLES = DEBUG_TRIANGLES;


        if (heightShift && lowerLayer != null && lowerLayer.getHeightMap() != null)
        {
            planarMesh.renderDistortedMap(heightMap, distortedHeightMap, lowerLayer.getHeightMap(), 0, passShift);
            planarMesh.renderDistortedMap(normalMap, distortedNormalMap, lowerLayer.getNormalMap(), 1, passShift);
        }
        else
        {
            planarMesh.renderDistortedMap(heightMap, distortedHeightMap, new Color(0, 0, 0, 1), 0, passShift);
            planarMesh.renderDistortedMap(normalMap, distortedNormalMap, new Color(.5f, .5f, 1, 1), 1, passShift);
        }

        Color bg = new Color(0, 0, 0, 0);

        if (DEBUG_TRIANGLES)
        {
            bg = new Color(1, 0, 0, 1);
        }

        if (lowerLayer != null)
        {
            if (lowerLayer.getHeightMap() != null && !heightShift)
            {
                // there is LayerDynamic below, we need tom merge into it looking at height of pixels

                planarMesh.renderDistortedMap(edgeMap, distortedColorMap, bg, 2, passShift);

                // merge lower layers into distorted maps
                bool[]    mask           = getMask();
                Color32[] combinedColor  = distortedColorMap.GetPixels32();
                Color32[] combinedHeight = distortedHeightMap.GetPixels32();
                Color32[] combinedNormal = distortedNormalMap.GetPixels32();
                Color32[] lowerColor     = getLowerLayerColorMapPixels();
                Color32[] lowerHeight    = getLowerLayerHeightMapPixels();
                Color32[] lowerNormal    = getLowerLayerNormalMapPixels();

                for (int i = 0; i < combinedColor.Length; i++)
                {
                    if (mask[i])
                    {
                        combinedColor[i]  = lowerColor[i];
                        combinedHeight[i] = lowerHeight[i];
                        combinedNormal[i] = lowerNormal[i];
                    }
                }
                distortedColorMap.SetPixels32(combinedColor);
                distortedColorMap.Apply();
                distortedNormalMap.SetPixels32(combinedNormal);
                distortedNormalMap.Apply();
                distortedHeightMap.SetPixels32(combinedHeight);
                distortedHeightMap.Apply();
            }
            else
            {
                // there is LayerStatic below, we can just draw color over it
                planarMesh.renderDistortedMap(edgeMap, distortedColorMap, lowerLayer.getColorMap(), 2, passShift);
            }
        }
        else
        {
            // there is nothing below, we can draw over nothing
            planarMesh.renderDistortedMap(edgeMap, distortedColorMap, bg, 2, passShift);
        }

        setTextures();

        if (block == 2)
        {
            block++;
        }
    }