unity—shader简单编程(2)

本文详细介绍Unity Shader的编写过程,包括属性设置、SubShader结构、Pass应用及Cg代码编写。通过具体示例,解释如何使用UnityObjectToClipPos进行坐标变换,以及片元着色器的编程技巧。

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

https://blog.youkuaiyun.com/lfanyize/article/details/104087184
上一篇编写shader需要具备的知识储备,在这篇博客中如果有迷茫的可以去这里看一看

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "Custom/My_shader"
{
	//属性,可以在编辑器里面绑定和修改
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
		_Glossiness("Smoothness", Range(0,1)) = 0.5
		_Metallic("Metallic", Range(0,1)) = 0.0
	}
		SubShader{
			Pass{
				CGPROGRAM //插入Cg代码开始,必须有  然后指定shader的入口在哪里
				//Cg的语法与c、c#相似
				fixed4 _Color;//定义同样名字的变量
				sampler2D _MainTex;//定义同样名字的变量
			#pragma vertex my_vert//编译指令,将那个函数作为着色器的入口,在这里是my_vert函数
			//并且要告诉编译器,这是什么着色器  
			//顶点着色器的声明是  #pragma vertex+ 函数名称
			//顶点着色器的优点是控制灵活,缺点是无法参与光照计算			
			//片元着色器的声明是  #pragma fragment +函数名称
			//只有绑定了之后,编译的时候才会把上一个工位的position传过来(传到pos)
			//前面的那个POSITION是将上一个工位的位置绑定到pos上,第二个冒号是将修改后的pos传递到下一个工位
			//GPU渲染流程工位图在上一篇博客里面
			float4 my_vert(float4 pos :POSITION):POSITION//怎样获得的上一个工位的参数——》语义绑定
			{
				return UnityObjectToClipPos(pos);//将pos坐标变换到投影空间,然后传递到下一个工位
			}
			#pragma fragment my_frag//进行片元着色器的编程
			fixed4 my_frag(float2 uv:TEXCOORD0) :COLOR//第一套纹理也可以是第二套第三套,只需要将最后面的0修改即可
			{
				//return  fixed4(1.0, 0.0, 0.0, 1.0);
					return _Color;	//返回的这个是修改后的默认颜色值
				//return tex2D(_MainTex,uv);//前面是需要修改的纹理,后面是查找的像素坐标颜色,函数在上一篇博客中
			}
			//相当于四个float x、y、z、常量
			ENDCG //插入Cg代码结束,必须有,两者都存在了之后,在中间就可以编辑着色器代码
				//在子着色器中,必须要有通道属性,在通道属性中,只要有顶点着色器与片元着色器其中的一个,可以同时有两个
		}
	}
    FallBack "Diffuse"
}

实现效果
开始
在这里插入图片描述
运行
在这里插入图片描述
希望这篇博客可以对您有些启发,嗯,如果在这些代码中有看不懂的函数或者知识的话,可以去上一篇博客看一看https://blog.youkuaiyun.com/lfanyize/article/details/104087184

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值