static public void Render(Light2D light) { float size = light.size; GL.PushMatrix(); if (light.IsPixelPerfect()) { Camera camera = Camera.main; float cameraRotation = LightingPosition.GetCameraRotation(camera); Matrix4x4 matrix = Matrix4x4.TRS(Vector3.zero, Quaternion.Euler(0, 0, cameraRotation), Vector3.one); float sizeY = camera.orthographicSize; float sizeX = sizeY * ((float)camera.pixelWidth / camera.pixelHeight); GL.LoadPixelMatrix(-sizeX, sizeX, -sizeY, sizeY); } else { GL.LoadPixelMatrix(-size, size, -size, size); } Rendering.Light.Main.Draw(light); GL.PopMatrix(); }
public static void SetPass(Light2D lightObject, LayerSetting layer) { light = lightObject; lightSize = Mathf.Sqrt(light.size * light.size + light.size * light.size); lightOffset = -light.transform2D.position; effectLayer = layer.shadowEffectLayer; objectOffset = Vector2.zero; effectPolygons.Clear(); softShadowObjects = layer.shadowEffect == LightLayerShadowEffect.SoftObjects; softShadow = softShadowObjects || layer.shadowEffect == LightLayerShadowEffect.SoftVertex; if (lightObject.IsPixelPerfect()) { Camera camera = Camera.main; Vector2 pos = LightingPosition.GetPosition2D(-camera.transform.position); drawOffset = light.transform2D.position + pos; } else { drawOffset = Vector2.zero; } if (layer.shadowEffect == LightLayerShadowEffect.Projected) { drawMode = 2; GenerateEffectLayers(); } else if (softShadow) { drawMode = 1; } else if (layer.shadowEffect == LightLayerShadowEffect.SpriteProjection) { drawMode = 3; } else { drawMode = 0; } }
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); } }
static public void Draw(Light2D light, Camera camera) { if (light.Buffer == null) { return; } if (light.isActiveAndEnabled == false) { return; } if (light.InAnyCamera() == false) { return; } Vector2 pos = LightingPosition.GetPosition2D(-camera.transform.position); Vector2 size = new Vector2(light.size, light.size); if (light.IsPixelPerfect()) { size = LightingRender2D.GetSize(camera); pos = Vector2.zero; } else { pos += light.transform2D.position; } Color lightColor = light.color; lightColor.a = light.color.a / 2; Material material = Lighting2D.materials.GetLight(); material.mainTexture = light.Buffer.renderTexture.renderTexture; material.SetColor("_TintColor", lightColor); Rendering.Universal.Texture.Draw(material, pos, size, 0); }
public static void Draw(Light2D light) { if (light == null) { return; } UnityEngine.Sprite lightSprite = light.GetSprite(); if (lightSprite == null) { return; } if (lightSprite.texture == null) { return; } Vector2 position = Vector2.zero; Vector2 size = new Vector2(light.size, light.size); float z = 0; Material material = Lighting2D.materials.GetMultiplyHDR(); material.mainTexture = lightSprite.texture; if (light.IsPixelPerfect()) { position = ShadowEngine.drawOffset; } if (light.applyRotation) { material.SetPass(0); material.color = Color.white; LightSprite.Sprite.Draw(position, size, light.transform.rotation.eulerAngles.z, z, light.spriteFlipX, light.spriteFlipY); material.color = Color.black; Bounds.Draw(light, position, material, z); } else { material.SetPass(0); material.color = Color.white; LightSprite.Sprite.Draw(position, size, 0, z, light.spriteFlipX, light.spriteFlipY); } if (light.spotAngle != 360) { Lighting2D.materials.GetAtlasMaterial().SetPass(0); GL.Begin(GL.TRIANGLES); GL.Color(Color.black); Angle.Draw(light, z); GL.End(); } }
public void UpdateLight(Light2D id, MeshMode meshMode) // Camera { if (meshModeMaterial != meshMode.materials) { meshModeMaterial = meshMode.materials; ClearMaterial(); } if (meshModeShader != meshMode.shader) { meshModeShader = meshMode.shader; ClearMaterial(); } Material[] materials = GetMaterials(); if (materials == null) { return; } if (id.IsPixelPerfect()) { Camera camera = Camera.main; Vector2 cameraSize = LightingRender2D.GetSize(camera); Vector2 cameraPosition = LightingPosition.GetPosition2D(-camera.transform.position); transform.position = new Vector3(cameraPosition.x, cameraPosition.y, id.transform.position.z); transform.localScale = new Vector3(cameraSize.x, cameraSize.y, 1); } else { transform.position = id.transform.position; transform.localScale = new Vector3(id.size, id.size, 1); } transform.rotation = Quaternion.Euler(0, 0, 0); // transform.rotation = id.transform.rotation; // only if rotation enabled if (id.Buffer != null && meshRenderer != null) { Color lightColor = id.color; lightColor.a = id.meshMode.alpha; for (int i = 0; i < materials.Length; i++) { if (materials[i] == null) { continue; } materials[i].SetColor("_TintColor", lightColor); materials[i].color = lightColor; materials[i].mainTexture = id.Buffer.renderTexture.renderTexture; } id.meshMode.sortingLayer.ApplyToMeshRenderer(meshRenderer); meshRenderer.sharedMaterials = GetMaterials(); meshRenderer.enabled = true; meshFilter.mesh = GetMeshLight(); } }