public static void Mask(Light2D light, LightCollider2D id, Material material, LayerSetting layerSetting) { if (id.InLight(light) == false) { return; } foreach (LightColliderShape shape in id.shapes) { SkinnedMeshRenderer skinnedMeshRenderer = shape.skinnedMeshShape.GetSkinnedMeshRenderer(); if (skinnedMeshRenderer == null) { return; } List <MeshObject> meshObject = shape.GetMeshes(); if (meshObject == null) { return; } if (skinnedMeshRenderer.sharedMaterial != null) { material.mainTexture = skinnedMeshRenderer.sharedMaterial.mainTexture; } else { material.mainTexture = null; } Vector2 position = shape.transform2D.position - light.transform2D.position; Vector2 pivotPosition = shape.GetPivotPoint() - light.transform2D.position; material.color = LayerSettingColor.Get(pivotPosition, layerSetting, id.maskEffect, id.maskTranslucency); material.SetPass(0); GLExtended.DrawMesh(meshObject, position, id.mainShape.transform2D.scale, shape.transform2D.rotation); material.mainTexture = null; } }
public static void Draw(Light2D light, Vector2 position, Material material, float z) { float rotation = light.transform.rotation.eulerAngles.z + (Mathf.PI / 4) * Mathf.Rad2Deg; float size = light.size; size = Mathf.Sqrt(((size * size) + (size * size))); Vector3 matrixPosition = new Vector3(position.x, position.y, z); Quaternion matrixRotation = Quaternion.Euler(0, 0, rotation); Vector3 matrixScale = new Vector3(size, size, 1); if (light.IsPixelPerfect()) { GLExtended.DrawMesh(GetMeshPixelPerfect(light), matrixPosition, matrixScale, rotation); } else { GLExtended.DrawMesh(GetMesh(), matrixPosition, matrixScale, rotation); } }
public static void Draw(LightRoom2D id, Camera camera) { Material material = Lighting2D.materials.GetMask(); Vector2 position; Vector2 offset = -camera.transform.position; switch (id.shape.type) { case LightRoom2D.RoomType.Collider: List <MeshObject> meshObjects = id.shape.GetMeshes(); if (meshObjects == null) { return; } //Vector3 matrixPosition = new Vector3(id.transform.position.x, id.transform.position.y, z); //Quaternion matrixRotation = Quaternion.Euler(0, 0, id.transform.rotation.eulerAngles.z); //Vector3 matrixScale = new Vector3(id.transform.lossyScale.x, id.transform.lossyScale.y, 1); //Graphics.DrawMeshNow(meshObject.mesh, Matrix4x4.TRS(matrixPosition, matrixRotation, matrixScale)); material.color = id.color; material.mainTexture = null; material.SetPass(0); position = id.transform.position; position += offset; GLExtended.DrawMesh(meshObjects, position, id.transform.lossyScale, id.transform.rotation.eulerAngles.z); break; case LightRoom2D.RoomType.Sprite: UnityEngine.SpriteRenderer spriteRenderer = id.shape.spriteShape.GetSpriteRenderer(); if (spriteRenderer == null) { return; } Sprite sprite = spriteRenderer.sprite;; if (sprite == null) { return; } material.mainTexture = sprite.texture; material.color = id.color; position = id.transform.position; position += offset; Rendering.Universal.Sprite.FullRect.Draw(id.spriteMeshObject, material, spriteRenderer, position, id.transform.lossyScale, id.transform.eulerAngles.z); break; } material.color = Color.white; material.mainTexture = null; }
static public void DrawPass(SpriteMeshObject spriteMeshObject, SpriteRenderer spriteRenderer, Vector2 pos, Vector2 size, float rotation) { GLExtended.DrawMesh(spriteMeshObject.GetTiledMesh().GetMesh(spriteRenderer), pos, size, rotation); }
static public void Draw(SpriteMeshObject spriteMeshObject, Material material, SpriteRenderer spriteRenderer, Vector2 pos, Vector2 size, float rotation) { material.SetPass(0); GLExtended.DrawMesh(spriteMeshObject.GetTiledMesh().GetMesh(spriteRenderer), pos, size, rotation); }
public static void MaskNormalMap(Light2D light, LightCollider2D id, Material material, LayerSetting layerSetting) { if (id.InLight(light) == false) { return; } Texture normalTexture = id.bumpMapMode.GetBumpTexture(); if (normalTexture == null) { return; } float rotation; material.SetTexture("_Bump", normalTexture); foreach (LightColliderShape shape in id.shapes) { MeshRenderer meshRenderer = id.mainShape.meshShape.GetMeshRenderer(); if (meshRenderer == null) { return; } List <MeshObject> meshObjects = id.mainShape.GetMeshes(); if (meshObjects == null) { return; } if (meshRenderer.sharedMaterial != null) { material.mainTexture = meshRenderer.sharedMaterial.mainTexture; } else { material.mainTexture = null; } Vector2 position = shape.transform2D.position - light.transform2D.position; Vector2 pivotPosition = shape.GetPivotPoint() - light.transform2D.position; material.color = LayerSettingColor.Get(pivotPosition, layerSetting, id.maskEffect, id.maskTranslucency); float color = material.color.r; switch (id.bumpMapMode.type) { case NormalMapType.ObjectToLight: rotation = Mathf.Atan2(light.transform2D.position.y - shape.transform2D.position.y, light.transform2D.position.x - shape.transform2D.position.x); rotation -= Mathf.Deg2Rad * (shape.transform2D.rotation); material.SetFloat("_LightRX", Mathf.Cos(rotation) * 2); material.SetFloat("_LightRY", Mathf.Sin(rotation) * 2); material.SetFloat("_LightColor", color); break; case NormalMapType.PixelToLight: material.SetFloat("_LightColor", color); rotation = shape.transform2D.rotation * Mathf.Deg2Rad; Vector2 sc = shape.transform2D.scale; sc = sc.normalized; material.SetFloat("_LightX", Mathf.Cos(rotation) * sc.x); material.SetFloat("_LightY", Mathf.Cos(rotation) * sc.y); material.SetFloat("_Depth", id.bumpMapMode.depth); if (id.bumpMapMode.invertX) { material.SetFloat("_InvertX", -1); } else { material.SetFloat("_InvertX", 1); } if (id.bumpMapMode.invertY) { material.SetFloat("_InvertY", -1); } else { material.SetFloat("_InvertY", 1); } break; } material.SetPass(0); GLExtended.DrawMesh(meshObjects, position, id.mainShape.transform2D.scale, shape.transform2D.rotation); material.mainTexture = null; } }