Example #1
0
        private void Update()
        {
            brush.Brush3D_Radius = transform.lossyScale.x * 0.7f;

            foreach (PaintingCollision col in paintingOn)
            {
                PlaytimePainter p = col.painter;
                if (brush.IsA3Dbrush(p))
                {
                    StrokeVector v = col.vector;
                    v.posTo = transform.position;
                    brush.Paint(v, p);
                }
            }
        }
 public override void AfterGPUStroke(PlaytimePainter p, BrushConfig br, StrokeVector st, BrushType type)
 {
     if (br.IsA3Dbrush(p) && p.IsAtlased())
     {
         Shader.SetGlobalVector(PainterDataAndConfig.BRUSH_ATLAS_SECTION_AND_ROWS, new Vector4(0, 0, 1, 0));
     }
 }
 public override void BeforeGPUStroke(PlaytimePainter pntr, BrushConfig br, StrokeVector st, BrushType type)
 {
     if (br.IsA3Dbrush(pntr) && pntr.IsAtlased())
     {
         var ats = GetAtlasedSection();
         Shader.SetGlobalVector(PainterDataAndConfig.BRUSH_ATLAS_SECTION_AND_ROWS, new Vector4(ats.x, ats.y, atlasRows, 1));
     }
 }
Example #4
0
        void Paint()
        {
            RaycastHit hit;

            if (Physics.Raycast(new Ray(transform.position, transform.forward), out hit))
            {
                var painter = hit.transform.GetComponentInParent <PlaytimePainter>();

                if (painter != null)
                {
                    if ((painter.skinnedMeshRendy != null) && (brush.IsA3Dbrush(painter) == false))
                    {
                        painter.UpdateColliderForSkinnedMesh();

                        bool colliderDIsabled = !painter.meshCollider.enabled;
                        if (colliderDIsabled)
                        {
                            painter.meshCollider.enabled = true;
                        }


                        if (!painter.meshCollider.Raycast(new Ray(transform.position, transform.forward), out hit, 99999))
                        {
                            Debug.Log("Missed the Mesh Collider");
                            if (colliderDIsabled)
                            {
                                painter.meshCollider.enabled = false;
                            }
                            return;
                        }

                        if (colliderDIsabled)
                        {
                            painter.meshCollider.enabled = false;
                        }
                    }

                    StrokeVector v = new StrokeVector(hit, false);


                    brush.Paint(v, painter.SetTexTarget(brush));
                }
            }
        }
Example #5
0
        public virtual void AfterStroke(PlaytimePainter pntr, BrushConfig br, StrokeVector st)
        {
            pntr.AfterStroke(st);

            if (!br.IsSingleBufferBrush() && !br.IsA3Dbrush(pntr))
            {
                TexMGMT.UpdateBufferSegment();
            }

            if ((br.useMask) && (st.mouseUp) && (br.randomMaskOffset))
            {
                br.maskOffset = new Vector2(UnityEngine.Random.Range(0f, 1f), UnityEngine.Random.Range(0f, 1f));
            }

            foreach (var p in pntr.plugins)
            {
                p.AfterGPUStroke(pntr, br, st, this);
            }
        }
        void Paint(Collision collision, PaintingCollision pCont)
        {
            if (brush.IsA3Dbrush(pCont.painter))
            {
                StrokeVector v = pCont.vector;
                v.posTo = transform.position;
                if (v.mouseDwn)
                {
                    v.posFrom = v.posTo;
                }
                brush.Paint(v, pCont.painter);
            }
            else
            {
                if (collision.contacts.Length > 0)
                {
                    var cp = collision.contacts[0];



                    RaycastHit hit;
                    Ray        ray = new Ray(cp.point + cp.normal * 0.1f, -cp.normal);

                    if (collision.collider.Raycast(ray, out hit, 2f))
                    {
                        StrokeVector v = pCont.vector;

                        v.uvTo = hit.textureCoord;
                        if (v.mouseDwn)
                        {
                            v.uvFrom = v.uvTo;
                        }

                        brush.Paint(pCont.vector, pCont.painter.SetTexTarget(brush));
                    }
                }
            }
        }
Example #7
0
        public void Shader_BrushCFG_Update(BrushConfig brush, float brushAlpha, float textureWidth, bool RendTex, bool texcoord2, PlaytimePainter pntr)
        {
            var brushType = brush.Type(!RendTex);

            bool is3Dbrush = brush.IsA3Dbrush(pntr);
            bool isDecal   = (RendTex) && (brushType.IsUsingDecals);

            Color c = brush.colorLinear.ToGamma();

#if UNITY_EDITOR
            //      if (isLinearColorSpace) c = c.linear;
#endif

            Shader.SetGlobalVector("_brushColor", c);

            Shader.SetGlobalVector("_brushMask", new Vector4(
                                       brush.mask.GetFlag(BrushMask.R) ? 1 : 0,
                                       brush.mask.GetFlag(BrushMask.G) ? 1 : 0,
                                       brush.mask.GetFlag(BrushMask.B) ? 1 : 0,
                                       brush.mask.GetFlag(BrushMask.A) ? 1 : 0));

            if (isDecal)
            {
                Shader_UpdateDecal(brush);
            }

            if (brush.useMask && RendTex)
            {
                Shader.SetGlobalTexture("_SourceMask", Data.masks.TryGet(brush.selectedSourceMask));
            }

            Shader.SetGlobalVector("_maskDynamics", new Vector4(
                                       brush.maskTiling,
                                       RendTex ? brush.Hardness : 0, // y - Hardness is 0 to do correct preview for Texture2D brush
                                       (brush.flipMaskAlpha ? 0 : 1)
                                       , 0));

            Shader.SetGlobalVector("_maskOffset", new Vector4(
                                       brush.maskOffset.x,
                                       brush.maskOffset.y,
                                       0,
                                       0));

            Shader.SetGlobalVector("_brushForm", new Vector4(
                                       brushAlpha                             // x - transparency
                                       , brush.Size(is3Dbrush)                // y - scale for sphere
                                       , brush.Size(is3Dbrush) / textureWidth // z - scale for uv space
                                       , brush.blurAmount));                  // w - blur amount

            brushType.SetKeyword(texcoord2);

            if (texcoord2)
            {
                Shader.EnableKeyword(PainterDataAndConfig.BRUSH_TEXCOORD_2);
            }
            else
            {
                Shader.DisableKeyword(PainterDataAndConfig.BRUSH_TEXCOORD_2);
            }

            brush.BlitMode.SetKeyword().SetGlobalShaderParameters();

            if (brush.BlitMode.GetType() == typeof(BlitModeSamplingOffset))
            {
                Shader.EnableKeyword("PREVIEW_SAMPLING_DISPLACEMENT");

                Shader.DisableKeyword("PREVIEW_ALPHA");
                Shader.DisableKeyword("PREVIEW_RGB");
            }
            else
            {
                Shader.DisableKeyword("PREVIEW_SAMPLING_DISPLACEMENT");
                BlitModeExtensions.SetShaderToggle(TexMGMTdata.previewAlphaChanel, "PREVIEW_ALPHA", "PREVIEW_RGB");
            }

            if ((RendTex) && (brush.BlitMode.UsingSourceTexture))
            {
                Shader.SetGlobalTexture("_SourceTexture", Data.sourceTextures.TryGet(brush.selectedSourceTexture));
            }
        }