Unity+Shader入门精要-1. 入门shader

本文详细介绍了Unity中的几种基础和进阶shader,包括SimpleShader、FalseColor、Diffuse光照模型(逐顶点和逐像素)、BlinnPhong模型,以及如何通过法线和光照计算高光效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天开始正式整合学习的shader内容。

Simple Shader

主要介绍了大概的shader格式。

Shader "Unity Sgaders Book/Chapter 5/Simple Shader" //shader名
{
    Properties
    {
        //声明color类型的属性
        _Color("Color Tint", Color) = (1.0,1.0,1.0,1.0)
    }
    SubShader
    {
        Pass
        {
            Tags{"LightMode" = "ForwardBase"}
            CGPROGRAM
            #pragma vertex vert //顶点着色器函数
            #pragma fragment frag //片元着色器函数
            fixed4 _Color; //定义color类型

            //模型空间的输入顶点信息
            struct a2v {
                float4 vertex:POSITION; //模型空间的顶点坐标
                float3 normal:NORMAL;//模型空间的法线方向
                float4 texcoord:TEXCOORD0;//模型的第一套纹理坐标
            };

            //齐次裁剪空间的输出顶点信息
            struct v2f {
                float4 pos : SV_POSITION;//裁剪空间的顶点坐标
                fixed3 color : COLOR0;//颜色信息
            };

            //输入模型空间的顶点信息,经过顶点着色器函数,输出齐次裁剪空间的顶点信息
            v2f vert(a2v v){
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);
                o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5);
                return o;
            }

            //输入齐次裁剪空间的顶点信息(经过插值之后),输出顶点颜色信息
            fixed4 frag(v2f i) : SV_Target
            {
                fixed3 c = i.color;
                c *= _Color.rgb;
                return fixed4(c,1.0);
            }
            ENDCG
        }
    }
}

其主要意义在于通过模型法线获取不同参数,从而在材质面板中(材质面板默认显示球体,球体上每一个顶点的法线都不一样)显示一个颜色拾取器。效果如下图所示:

False Color

假彩色图像(false-color image)用于可视化一些数据,以方便对shader进行调试。即将想要的数据映射到[0-1]区间,作为颜色输出到屏幕上,然后通过屏幕上显示的像素颜色来判断这个值是否正确。通常用于debug。shader代码如下:

Shader "Unity Sgaders Book/Chapter 5/False Color"
{
    SubShader
    {
        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            #include "UnityCG.cginc"

            struct v2f
            {
                float4 pos:SV_POSITION;
                fixed4 color : COLOR0;
            };
        
            v2f vert(appdata_full v)
            {
                v2f o;
                o.pos = UnityObjectToClipPos(v.vertex);

                //可视化法线方向
                o.color = fixed4(v.normal * 0.5 + fixed3(0.5,0.5,0.5),1);

                //可视化切线方向
                //o.color = fixed4(v.tangent * 0.5 + fixed3(0.5,0.5,0.5),1);
                
                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值