unity shader学习练笔日记(一)

1、简单顶点/片元着色器

Shader "Unity Shaders Study/Day One/Simple Shader"
{
	Properties
	{
		//声明一个Color类型的属性
		_Color ("Color Tint", Color) = (1.0, 1.0, 1.0, 1.0)
	}

	SubShader
	{
		Pass
		{
			CGPROGRAM

			#pragma vertex vert
			#pragma fragment frag

			//在CG代码中,我们需要定义一个与属性名称和类型都匹配的变量
			fixed4 _Color;

			//使用一个结构体来定义顶点着色器的输入
			struct a2v
			{
				//POSITION  用模型空间的顶点坐标填充vertex变量
				float4 vertex : POSITION;
				//NORMAL  用模型空间的法线方向填充normal变量
				float3 normal : NORMAL;
				//TEXCOORD0  用模型的第一套纹理坐标填充texcood变量
				float4 texcood : TEXCOORD0;
			};		
			
			//使用一个结构体来定义顶点着色器的输出
			struct v2f
			{
				//SV_POSITION  pos里包含了顶点在裁剪空间中的位置信息
				float4 pos : SV_POSITION;
				//COLOR0  存储颜色信息
				fixed3 color : COLOR0;
			};

			//顶点着色器  输出结构中必须包含一个变量  SV_POSITION
			//SV_POSITION  顶点着色器的输出是裁剪空间中的顶点坐标
			v2f vert(a2v v)
			{
				//声明输出结构
				v2f o;
				//把顶点坐标从模型空间转换到裁剪空间
				o.pos = UnityObjectToClipPos(v.vertex);
				//v.normal包含了顶点的法线方向,其分量范围在[-1.0,1.0]
				//下面的代码把分量范围映射到了[0.0,1.0]
				//存储到o.color中传递给片元着色器
				o.color = v.normal * 0.5 + fixed3(0.5, 0.5, 0.5);
				return o;
			}

			//片元着色器
			//SV_Target  把输出颜色存储到一个渲染目标中
			fixed4 frag(v2f i) : SV_Target
			{
				fixed3 c = i.color;
				//使用_Color属性来控制输出颜色
				c *= _Color.rgb;
				//将插值后的颜色显示到屏幕上
				return fixed4(c, 1.0);
			}

			ENDCG
		}
	}
}

在这里插入图片描述
2、假彩色图像可视化模型数据

Shader "Unity Shaders Study/Day One/FalseColor"
{
    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.0);

                //可视化切线方向
                o.color = fixed4(v.tangent.xyz * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);

                //可视化副切线方向
                fixed3 binormal = cross(v.normal,v.tangent.xyz) * v.tangent.w;
                o.color = fixed4(binormal * 0.5 + fixed3(0.5, 0.5, 0.5), 1.0);

                //可视化第一组纹理坐标
                o.color = fixed4(v.texcoord.xy, 0.0, 1.0);

                //可视化第二组纹理坐标
                o.color = fixed4(v.texcoord1.xy, 0.0, 1.0);

                //可视化第一组纹理坐标的小数部分
                o.color = frac(v.texcoord);
                if(any(saturate(v.texcoord) - v.texcoord))
                {
                    o.color.b = 0.5;
                }
                o.color.a = 1.0;

                //可视化顶点颜色
                o.color = v.color;

                return o;
            }

            fixed4 frag(v2f i) : SV_Target
            {
                return i.color;
            }

            ENDCG
        }
    }
}

相关推荐

  1. 实习日记

    2024-04-03 07:54:06       6 阅读
  2. sklearn机器学习编程练习大全(

    2024-04-03 07:54:06       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-03 07:54:06       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-03 07:54:06       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-03 07:54:06       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-03 07:54:06       20 阅读

热门阅读

  1. 【Python进阶(五)】——模块搜索及工作目录

    2024-04-03 07:54:06       12 阅读
  2. Quill文档(四):使用Parchment克隆Medium

    2024-04-03 07:54:06       11 阅读
  3. 如何在 Ubuntu 12.04 上添加交换空间

    2024-04-03 07:54:06       12 阅读
  4. 抖音小程序中跳转页面怎么写?

    2024-04-03 07:54:06       20 阅读
  5. 全栈的自我修养 ———— uniapp中封装api请求

    2024-04-03 07:54:06       12 阅读
  6. vue-uniapp的页面参数

    2024-04-03 07:54:06       14 阅读
  7. 阿里云python-SDK配置

    2024-04-03 07:54:06       9 阅读