Unity Shader第一章(开篇)

        好久没有写博客了,一直被各种事情所耽搁(其实就是懒)。好了,废话不多说,这回又开新坑了,预计100年内完。这一次写Shader主要还是为了自己以后忘掉某些知识点,(本人很笨的好不好,属于过目就忘完全不记得以前干过什么)我会以一个新手来写这个Shader教程(你自己就是一个新手好不好)。

        我学shader的时候都是很散的教学,前面还是新手教学,后面就是超复杂的例子,完全不会好不好,国内好多Shader教程要不内容比较分散,要不就是跨度非常大,对与向我这样的新手很不友好。国外的教程吗......完全看不懂啊。

        接下开就是正题了,对了,如果你是shader大神你就可以右上了,看我写的东西就是在浪费生命。

Shader的原理

        我不会说一些GPU向CPU传递什么什么的东西,这些我一个都不说。想要知道的话自己去搜,有很多。

Shader的一些基础  
       unity shadr简单来说分为两类,
  • 表面着色器(Surface Shader)-----unity为你做了大部分的工作,只需要简单的写写即可实现很多不错的效果。但可以实现的功能没有顶点片元着色器的多。
  • 定点片元着色器(Fragment Shader)-----可以做的事情更多,但相对的也比较难写。
Shader程序的基本结构

        虽然这是一个入门篇,但我不会介绍表面着色器,所以上来就是定点片元着色器。

先看看语法的基本结构把

Shader "顺/基本结构"{//这里定义Shader的名字,可以随便起
	Properties{
		//这里写属性,可以没有

	}


	//SubShader可以写很多个	 显卡运行效果的时候,从第一个SunShader开始,如果第一个SubShader里面的效果都可以实现运行,那么就使用第一个SubShader,如果显卡这个SunShader里面某些效果它实现不了,它会自动去运行下一个SubShader
	SubShader{
		//至少有一个Pass块
		Pass{
			//在这里编写Shader代码 HLSLPROGRAM

			CGPROGRAM
			//使用CG语言来编写Shader代码

			ENDCG
		}
	}

	Fallback "Diffuse"    //当上面的所有的SubShader显卡都不支持就启用Fallback的着色器。这就是一个备用方案,可以没有

}
我的第一个Shader
    
Shader "顺/我的第一个Shader"{

	Properties{
	
	}

	SubShader{
		Pass{
			
			CGPROGRAM

			//顶点函数 这里只是声明了,定点函数的函数名
			//基本作用是完成定点坐标从模型空间到裁剪空间的转换(从游戏环境转换到视野相机屏幕上)
			#pragma vertex vert

			//片元函数这里只是声明了,片元函数的函数名
			//基本作用 返回模型对应的屏幕上的每一个像素的颜色值
			#pragma fragment frag

			float4 vert(float4 v : POSITION) : SV_POSITION{//通过语义告诉系统,我这个参数是干嘛的,比如POSITION是告诉我系统我需要定点坐标
			//SV_POSITION这个语义用来解释说明返回值,意思是返回值是裁剪空间下的顶点坐标
			return UnityObjectToClipPos(v);

			}


			fixed4 frag() : SV_Target{
				return fixed4(0.54,0.45,0.98,1);    //这里返回的是一个颜色值RGBA,你可以改变参数来改变颜色,参数范围变化是0到1
			}

			ENDCG
		}
	}


	Fallback "Diffuse"
}

上面写的“Properties{ }”可以删除,现在还没用到,以后会用到的。

累了,下次在写,有时间的话,会在一对上面的东东细讲的。

猜你喜欢

转载自blog.csdn.net/weixin_39872308/article/details/80019356