コード例 #1
0
 // 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();
 }
コード例 #2
0
 // 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);
         }
     }
 }
コード例 #3
0
        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);
        }
コード例 #4
0
        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
        }
コード例 #5
0
        // 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);
        }