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)); } }
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)); } } }
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)); } } } }
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)); } }