void Update()
        {
            time += Time.deltaTime * AnimateSpeed;

            float value = Mathf.Sin(time) * RangeValue + Mathf.Cos(randomValue + time * 0.7f) * RangeValue;

            RendererMaterial.SetFloat(TextureProperty, value + PropertyInitValue);
        }
Пример #2
0
        internal RendererMaterial GetMaterial(int materialId)
        {
            if (materialId >= Materials.Count)
            {
                return(RendererMaterial.GetDefault());
            }

            return(Materials[materialId]);
        }
        void Start()
        {
            GetRendererMaterial();

            Color newColor = Color.HSVToRGB(Random.Range(HueRange.x, HueRange.y), Random.Range(SaturationRange.x, SaturationRange.y), Random.Range(ValueRange.x, ValueRange.y));

            newColor.a = Random.Range(AlphaRange.x, AlphaRange.y);

            RendererMaterial.SetColor(TextureProperty, newColor);
        }
Пример #4
0
        public InternalMesh(Mesh meshData, RendererMaterial material)
        {
            SetMesh(meshData);
            if (material == null)
            {
                throw new InvalidOperationException();
            }

            Materials.Add(material);
        }
        private void Update()
        {
            Color newColor = RendererMaterial.GetColor(shaderParamName);

            newColor = FColorMethods.ChangeColorAlpha(newColor, newColor.a - Time.deltaTime * FadeSpeed);

            RendererMaterial.SetColor(shaderParamName, newColor);

            if (newColor.a <= 0f)
            {
                GameObject.Destroy(gameObject);
            }
        }
Пример #6
0
        public override void Init()
        {
            if (Mesh == null)
            {
                return;
            }

            if (Mesh.Materials.Any(m => m.CastShadow))
            {
                UsePipeline <PointShadowRenderPipeline>();
                UsePipeline <DirectionalShadowRenderPipeline>();
            }

            if (PrimaryRenderPipeline == null)
            {
                PrimaryRenderPipeline = Context.PrimaryRenderPipeline;
            }

            if (_MaterialTmp != null)
            {
                Mesh.Material = _MaterialTmp;
                _MaterialTmp  = null;
            }

            if (Mesh.Materials.All(m => m.RenderPipeline == null))
            {
                UsePipeline(PrimaryRenderPipeline);
            }

            VaoList.Clear();
            if (Mesh.HasData)
            {
                foreach (var materialId in Mesh.MaterialIds)
                {
                    var m = Mesh.GetMaterial(materialId);
                    UsePipeline(m.RenderPipeline);
                    m.CreateShaders();

                    var data = Mesh.GetMeshData(materialId);
                    var vao  = new VertexArrayObject(data.BindLayoutToShader(m.Shader));
                    vao.SetData(data);
                    VaoList.Add(new VertexArrayObjectMaterial
                    {
                        Vao      = vao,
                        Material = m,
                    });
                }
            }
        }
Пример #7
0
        /// <summary>
        /// Tiling material to given parameters and scale of game object's transform.
        /// </summary>
        private void TileMaterialToScale()
        {
            if (RendererMaterial == null || ObjectRenderer == null)
            {
                return;
            }

            Vector2 newScale = ScaleValues;

            newScale.x *= transform.localScale.x;
            newScale.y *= transform.localScale.z;

            RendererMaterial.SetTextureScale("_MainTex", newScale);
            ObjectRenderer.material = RendererMaterial;
        }
Пример #8
0
 public StaticInternalMesh(Mesh meshData, RendererMaterial material) : base(meshData, material)
 {
 }
Пример #9
0
        internal virtual void SyncChanges()
        {
            // if (Shader == null)
            //     Shader = new Shader("Shaders/forward.vert", "Shaders/forward.frag");
            // if (DefGeometryShader == null)
            //     DefGeometryShader = new Shader("Shaders/deferred-gbuffer.vert", "Shaders/deferred-gbuffer.frag");
            // if (ShadowShader == null)
            //     ShadowShader = new Shader("Shaders/shadow-directional.vert", "Shaders/shadow-directional.frag", "Shaders/shadow-directional.geom");
            // if (CubeShadowShader == null)
            //     CubeShadowShader = new Shader("Shaders/shadow-cube.vert", "Shaders/shadow-cube.frag", "Shaders/shadow-cube.geom");

            DiffuseTexture?.Sync();
            SpecularTexture?.Sync();

            if (RendererMaterial == null)
            {
                RendererMaterial = new RendererMaterial();

                if (Shader == null)
                {
                    Shader = new Shader("Shaders/forward.vert", "Shaders/forward.frag");
                }
                if (DefGeometryShader == null)
                {
                    DefGeometryShader = new Shader("Shaders/deferred-gbuffer.vert", "Shaders/deferred-gbuffer.frag");
                }

                if (DiffuseTexture != null || SpecularTexture != null)
                {
                    Defines.Add("USE_VERTEX_UV", "1");
                }
                if (UseVertexColor)
                {
                    Defines.Add("USE_VERTEX_COLOR", "1");
                }
                if (ReceiveShadow && Renderer.Current.UseShadows)
                {
                    Defines.Add("USE_SHADOW", "1");
                }

                RendererMaterial.Shader            = new RendererShader(Shader.VertexShaderPath, Shader.FragmentShaderPath, Shader.GeometryShaderPath, true, Defines);
                RendererMaterial.DefGeometryShader = new RendererShader(DefGeometryShader.VertexShaderPath, DefGeometryShader.FragmentShaderPath, DefGeometryShader.GeometryShaderPath, true, Defines);

                RendererMaterial.CreateShaders();
            }

            var mat = RendererMaterial;

            if (DiffuseTexture == null)
            {
                mat.DiffuseMap   = InternalTextureManager.White;
                mat.DiffuseColor = Color;
            }
            else
            {
                mat.DiffuseMap   = DiffuseTexture.RendererTexture;
                mat.DiffuseColor = Color;
            }

            if (SpecularTexture == null)
            {
                mat.SpecularMap      = InternalTextureManager.White;
                mat.SpecularStrength = SpecularStrength;
            }
            else
            {
                mat.SpecularMap      = SpecularTexture.RendererTexture;
                mat.SpecularStrength = 1.0f;
            }
            mat.CastShadow = CastShadow;

            mat.Ambient        = Ambient;
            mat.Shininess      = Shininess;
            mat.UseVertexColor = UseVertexColor;

            var pipelineType = PipelineType;

            if (pipelineType == PipelineType.Default)
            {
                if (UseTransparency || !ReceiveShadow)
                {
                    pipelineType = PipelineType.Forward;
                }
            }

            switch (pipelineType)
            {
            case PipelineType.Default:
                mat.RenderPipeline = RenderContext.Current.PrimaryRenderPipeline;
                break;

            case PipelineType.Forward:
                mat.RenderPipeline = RenderContext.Current.GetPipeline <ForwardRenderPipeline>();
                break;

            case PipelineType.Deferred:
                mat.RenderPipeline = RenderContext.Current.GetPipeline <DeferredRenderPipeline>();
                break;

            case PipelineType.Screen:
                mat.RenderPipeline = RenderContext.Current.GetPipeline <ScreenPipeline>();
                break;
            }

            foreach (var param in Parameters.Values)
            {
                if (param.HasChanges)
                {
                    param.HasChanges = false;
                    switch (param.Type)
                    {
                    case ParamterType.Bool:
                        mat.Shader.SetBool(param.Name, (bool)param.Value);
                        mat.DefGeometryShader.SetBool(param.Name, (bool)param.Value);
                        break;

                    case ParamterType.Int:
                        mat.Shader.SetInt(param.Name, (int)param.Value);
                        mat.DefGeometryShader.SetInt(param.Name, (int)param.Value);
                        break;

                    case ParamterType.Float:
                        mat.Shader.SetFloat(param.Name, (float)param.Value);
                        mat.DefGeometryShader.SetFloat(param.Name, (float)param.Value);
                        break;

                    case ParamterType.Vector2:
                        mat.Shader.SetVector2(param.Name, (Vector2)param.Value);
                        mat.DefGeometryShader.SetVector2(param.Name, (Vector2)param.Value);
                        break;

                    case ParamterType.Vector3:
                        mat.Shader.SetVector3(param.Name, (Vector3)param.Value);
                        mat.DefGeometryShader.SetVector3(param.Name, (Vector3)param.Value);
                        break;

                    case ParamterType.Vector4:
                        mat.Shader.SetVector4(param.Name, (Vector4)param.Value);
                        mat.DefGeometryShader.SetVector4(param.Name, (Vector4)param.Value);
                        break;

                    case ParamterType.Matrix4:
                        mat.Shader.SetMatrix4(param.Name, (Matrix4)param.Value);
                        mat.DefGeometryShader.SetMatrix4(param.Name, (Matrix4)param.Value);
                        break;
                    }
                }
            }
        }
Пример #10
0
        void Update()
        {
            Vector2 newOffset = RendererMaterial.GetTextureOffset(TextureProperty) + OffsetSpeed * Time.deltaTime;

            RendererMaterial.SetTextureOffset(TextureProperty, newOffset);
        }
Пример #11
0
 public void SetMaterial(string name, RendererMaterial material)
 {
     material.WriteToShader(name, this);
 }