Unity3D ----- 代码控制shader的自发光参数(摄像机黑白特效下)

这两天研究了下shader的一些属性,做了个黑白特效摄像机下投影的cube的demo。
 
1.设置摄像机
首先摄像机上特效可以通过导入unity自带的特效包Grayscale脚本挂载到摄像机上来实现,也可自己写脚本设置。
导入的路径:Assets—Import Package — Effects。
我没有导包,自己写的:
 
// 编辑模式下运行
[ExecuteInEditMode]
public class CameraEffect : MonoBehaviour
{
    #region Variables
    public Shader curShader;
    [Range(-1.0f,1.0f)]
    public float grayScaleAmount = 1.0f;
    private Material curMaterial;
    #endregion
    
    #region Properties
    public Material material 
    {
        get {
            if (curMaterial == null) 
            {
                curMaterial = new Material(curShader);
                curMaterial.hideFlags = HideFlags.HideAndDontSave;
            }
            return curMaterial;
        }
    }
    #endregion

    void Start () 
    {
        if (SystemInfo.supportsImageEffects == false) 
        {
            enabled = false;
            return;
        }
        
        if (curShader != null && curShader.isSupported == false) 
        {
            enabled = false;
        }
    }

    void OnRenderImage (RenderTexture sourceTexture, RenderTexture destTexture)
    {
        if (curShader != null) 
        {
            material.SetFloat("_LuminosityAmount", grayScaleAmount);
            Graphics.Blit(sourceTexture, destTexture, material);
        } else {
            Graphics.Blit(sourceTexture, destTexture);
        }
    }

    // 便于回收
    void OnDisable () 
    {
        if (curMaterial != null) 
        {
            DestroyImmediate(curMaterial);
        }
    }
}

 

 
2.摄像机Shader
自己写就需要自己写个shader,这个shader就是设置颜色为黑白灰色
 
代码:
Shader "Custom/ShaderCamera" {
    Properties {
        _MainTex ("Base (RGB)", 2D) = "white" {}
        _LuminosityAmount ("GrayScale Amount", Range(0.0, 1.0)) = 1.0
    }
    SubShader {
        Pass {
            CGPROGRAM
            #pragma vertex vert_img
            #pragma fragment frag
            
            #include "UnityCG.cginc"
            
            uniform sampler2D _MainTex;
            fixed _LuminosityAmount;
            
            fixed4 frag(v2f_img i) : COLOR
            {
                fixed4 renderTex = tex2D(_MainTex, i.uv);
                
                float luminosity = 0.299 * renderTex.r + 0.587 * renderTex.g + 0.114 * renderTex.b;
                fixed4 finalColor = lerp(renderTex, luminosity, _LuminosityAmount);
                
                return finalColor;
            }
            
            ENDCG
        }
    }
    FallBack "Diffuse"
}

 

 
 
3.设置cube的材质shader
 
给cube附一个材质,自己编写shader,主要通过改变“Emission”属性的参数值来调节自发光的颜色。
cube的shader代码如下:
 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/wangsaiws/p/5168129.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值