// Token: 0x060034C6 RID: 13510 RVA: 0x000E6928 File Offset: 0x000E4B28 private void OnPreRender() { if (!SystemInfo.supportsInstancing) { this.UseInstancing = false; } if (this._albedoRenderTarget == null || this._camera.allowHDR != this._camLastKnownHDR) { this._camLastKnownHDR = this._camera.allowHDR; this._albedoRenderTarget = new RenderTargetIdentifier[] { BuiltinRenderTextureType.GBuffer0, this._camLastKnownHDR ? BuiltinRenderTextureType.CameraTarget : BuiltinRenderTextureType.GBuffer3 }; } DecaliciousRenderer.CreateBuffer(ref this._bufferDeferred, this._camera, "Decalicious - Deferred", CameraEvent.BeforeReflections); DecaliciousRenderer.CreateBuffer(ref this._bufferUnlit, this._camera, "Decalicious - Unlit", CameraEvent.BeforeImageEffectsOpaque); DecaliciousRenderer.CreateBuffer(ref this._bufferLimitTo, this._camera, "Decalicious - Limit To Game Objects", CameraEvent.AfterGBuffer); this._bufferLimitTo.Clear(); this.DrawLimitToGameObjects(this._camera); this._bufferDeferred.Clear(); this.DrawDeferredDecals_Albedo(this._camera); this.DrawDeferredDecals_NormSpecSmooth(this._camera); this._bufferUnlit.Clear(); this.DrawUnlitDecals(this._camera); foreach (KeyValuePair <Material, HashSet <Decal> > keyValuePair in this._deferredDecals) { keyValuePair.Value.Clear(); } foreach (KeyValuePair <Material, HashSet <Decal> > keyValuePair in this._unlitDecals) { keyValuePair.Value.Clear(); } this._limitToGameObjects.Clear(); }
// Token: 0x060034C9 RID: 13513 RVA: 0x000E6EE0 File Offset: 0x000E50E0 private void DrawDeferredDecals_Albedo(Camera cam) { if (this._deferredDecals.Count == 0) { return; } this._bufferDeferred.SetRenderTarget(this._albedoRenderTarget, BuiltinRenderTextureType.CameraTarget); foreach (KeyValuePair <Material, HashSet <Decal> > keyValuePair in this._deferredDecals) { Material key = keyValuePair.Key; Dictionary <Material, HashSet <Decal> > .Enumerator enumerator; keyValuePair = enumerator.Current; HashSet <Decal> value = keyValuePair.Value; int count = value.Count; int num = 0; foreach (Decal decal in value) { if (decal != null && decal.DrawAlbedo) { if (this.UseInstancing && !decal.UseLightProbes) { this._matrices[num] = decal.transform.localToWorldMatrix; this._fadeValues[num] = decal.Fade; this._limitToValues[num] = (decal.LimitTo ? ((float)decal.LimitTo.GetInstanceID()) : float.NaN); num++; if (num == 1023) { this._instancedBlock.Clear(); this._instancedBlock.SetFloatArray("_MaskMultiplier", this._fadeValues); this._instancedBlock.SetFloatArray("_LimitTo", this._limitToValues); DecaliciousRenderer.SetLightProbeOnBlock(RenderSettings.ambientProbe, this._instancedBlock); this._bufferDeferred.DrawMeshInstanced(DecaliciousRenderer._cubeMesh, 0, key, 0, this._matrices, num, this._instancedBlock); num = 0; } } else { this._directBlock.Clear(); this._directBlock.SetFloat("_MaskMultiplier", decal.Fade); this._directBlock.SetFloat("_LimitTo", decal.LimitTo ? ((float)decal.LimitTo.GetInstanceID()) : float.NaN); if (decal.UseLightProbes) { SphericalHarmonicsL2 probe; LightProbes.GetInterpolatedProbe(decal.transform.position, decal.GetComponent <MeshRenderer>(), out probe); DecaliciousRenderer.SetLightProbeOnBlock(probe, this._directBlock); } this._bufferDeferred.DrawMesh(DecaliciousRenderer._cubeMesh, decal.transform.localToWorldMatrix, key, 0, 0, this._directBlock); } } } if (this.UseInstancing && num > 0) { this._instancedBlock.Clear(); this._instancedBlock.SetFloatArray("_MaskMultiplier", this._fadeValues); this._instancedBlock.SetFloatArray("_LimitTo", this._limitToValues); DecaliciousRenderer.SetLightProbeOnBlock(RenderSettings.ambientProbe, this._instancedBlock); this._bufferDeferred.DrawMeshInstanced(DecaliciousRenderer._cubeMesh, 0, key, 0, this._matrices, num, this._instancedBlock); } } }
void OnWillRenderObject() { #if UNITY_EDITOR // Need to set the light probe usage for legacy (< Decalicious 1.4) decals, // only do it in editor to not affect game performance. MeshRenderer mr = GetComponent <MeshRenderer>(); mr.lightProbeUsage = LightProbeUsage.BlendProbes; #endif if (Camera.current == null) { return; } DecaliciousRenderer renderer = Camera.current.GetComponent <DecaliciousRenderer>(); if (renderer == null) { renderer = Camera.current.gameObject.AddComponent <DecaliciousRenderer>(); } if (!renderer.isActiveAndEnabled) { return; } if (Fade <= 0.0f) { return; } if (Material == null) { return; } if (Material == null) { RenderMode = DecalRenderMode.Invalid; } else if (Material.shader == _deferredShader) { RenderMode = DecalRenderMode.Deferred; } else if (Material.shader == _unlitShader) { RenderMode = DecalRenderMode.Unlit; } else { RenderMode = DecalRenderMode.Invalid; } #if UNITY_5_6_OR_NEWER Material.enableInstancing = renderer.UseInstancing; #endif renderer.Add(this, LimitTo); }
public override void OnInspectorGUI() { base.OnInspectorGUI(); #if UNITY_5_5_OR_NEWER DecaliciousRenderer renderer = target as DecaliciousRenderer; bool supportsInstancing = SystemInfo.supportsInstancing; if (supportsInstancing) { renderer.UseInstancing = EditorGUILayout.Toggle("Use Instancing?", supportsInstancing && renderer.UseInstancing); } else { EditorGUILayout.HelpBox("Your GPU does not support instancing. Try updating your drivers.", MessageType.Warning); } #else EditorGUILayout.HelpBox("Instanced decals require Unity 5.5 or newer. Consider updating your Unity version if performance is bad.", MessageType.Warning); #endif }
// Token: 0x060034C0 RID: 13504 RVA: 0x000E6608 File Offset: 0x000E4808 private void OnWillRenderObject() { if (this.Fade <= 0f) { return; } if (this.Material == null) { return; } if (Camera.current == null) { return; } if (this.Material == null) { this.RenderMode = Decal.DecalRenderMode.Invalid; } else if (this.Material.shader == this._deferredShader) { this.RenderMode = Decal.DecalRenderMode.Deferred; } else if (this.Material.shader == this._unlitShader) { this.RenderMode = Decal.DecalRenderMode.Unlit; } else { this.RenderMode = Decal.DecalRenderMode.Invalid; } DecaliciousRenderer decaliciousRenderer = Camera.current.GetComponent <DecaliciousRenderer>(); if (decaliciousRenderer == null) { decaliciousRenderer = Camera.current.gameObject.AddComponent <DecaliciousRenderer>(); } this.Material.enableInstancing = decaliciousRenderer.UseInstancing; decaliciousRenderer.Add(this, this.LimitTo); }