栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 游戏开发 > 其他

Unity Shader | 入门—程序(一)

其他 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Unity Shader | 入门—程序(一)

创建shader( 如下 )

一、Shader Lab基本结构

//此处shader的名字不要求和文件名一致
Shader "Chichi/01-myshader"{
	
	//(在面板显示,可调节)属性
    Properties{
		//属性 _Color("属性名",类型) = (r,g,b,a)
		//在shader语言中必须再自定义一次它显示的属性名
		_Color("_Color",Color) = (1,1,1,1)
    }

	
    SubShader{
		//一个pass块相当于一个功能方法(至少一个)
		Pass{
		//此处编写shader代码(也能写HLSLPROGRAM)
			CGPROGRAM
			//使用CG语言编写shader代码
			ENDCG
		}		
    }
	//用来指定一个已经存在的Shader(当上述方案显卡都无法执行时的后备方案)
    FallBack "VertexLit"	    //有一个指定的_Color,注意重名
}

( 补充说明 )

二、属性(Properties{})的几种类型

_Colour("Colour",Color) = (1,1,1,1)        //float4

_Vector("Vector",Vector) = (1,2,3,4)       //float4
//Color和Vector本质上是一种类型

_Int("Int",Int) = 3233                                //float

_Float("Float",Float)  = 4.5                      //float
//Shader里面只有float没有double,不用加f 

_Range("Range",Range(1,11)) = 6         //float
//Range本支上相当于做了范围限制的Float

_2D("Texture",2D) = "white"{}                  //sampler2D
//不指定图片时默认颜色white

_Cube("Cube",Cube) = "white"{}             //samplerCube
//立方体纹理——天空盒子

_3D("Texture",3D) = "black"{}                  //sampler3D

三、使用CG语言编写shader代码(pass块中)

Pass{
			CGPROGRAM
			//使用CG语言编写shader代码
			//需要重新对上述属性定义,但是不用再赋默认值(会自动取到)		
			
            //fixed4 _Colour
            float4 _Colour;
			float4 _Vector;
			float3 t1;
			half2 t;
            float _Int;
			float _Float;
			float _Range;
			sampler2D _2D;
			samplerCube _Cube;
			sampler3D _3D;		
			ENDCG
	}		

四、制作一个可运行的简易Shader

顶点函数:以建模中心为原点,对渲染物体的顶点进行几何变换( 每个顶点被函数处理 ),使其从模型空间转换到剪裁(屏幕)空间

片元函数:一个模型对应若干像素(即片元),函数对每个像素点的颜色进行处理,并返回一个颜色值

顶点函数和片元函数的方法名、返回值、参数都不是固定的,而且是被系统自动调用的,无需自己调用

Shader "Chichi / 02 - myshader can Run"{
	//Properties 可以没有
	SubShader{
		Pass{
			CGPROGRAM
			
#pragma vertex vert		//顶点函数(函数名自定义)		
#pragma fragment frag	//片元函数(函数名自定义)
			// 参数(v): POSITION →固定语义:把顶点坐标传递给参数
			// 方法() : SV_POSITION →固定语义:返回值是剪裁空间下的顶点坐标
			float4 vert(float4 v : POSITION) : SV_POSITION {
                //矩阵和position的乘法运算
				float4 pos = mul(UNITY_MATRIX_MVP,v);
				return pos;							
			}
			//返回颜色
			fixed4 frag() : SV_Target {
				return fixed4(0.5,0.5,1,0.5);
			
			}

			ENDCG
		}
	}
	Fallback "VertexLit"
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/902131.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号