当前位置:   article > 正文

unity shader入门(一) 基本结构和变量声明_unity shader bool怎么声明

unity shader bool怎么声明


前言

本文所有内容来自
unity5shader着色器入门教程

Unity中shader相关的结构

Mesh filter组件:存储一个Mesh(网格。模型由哪些三角面组成,组成正方形还是圆形还是什么)
Mesh Renderer组件:渲染一个模型的外观
Material贴图(可以没有,可以是一个单纯的颜色)
shader(反光程度、光滑程度)

什么是openGL和DirectX

图像应用编程接口,用来进行渲染的。
应用程序会把shader和渲染命令传递给openGL或DX进行解析,然后控制GPU进行渲染。

GLSL是OpenGL的shader语言
HLSL是DirectX的shader语言(微软)
CG是跨平台的语言,在上面两种平台上都可以运行(nvidia)

unity shader的分类

在unity中对CG进行了一层封装,使用的是ShaderLab。

  1. 表面着色器 surface shader(比较简单 是对其他的着色器的封装)(光源多的时候适合用这个)
  2. 顶点/片元着色器 vertex/fragment shader(更基础 能实现的效果更多)
  3. 固定函数着色器 fixed function shader(已经被弃用)

编写一个unity shader

shader的基本结构

shader 和 meterial都是可以自己创建的
双击自己创建的shader就可以为其编写代码
shader基本结构如下

Shader "lhy/MyShader"{//这里指定shader的名字 不一定和文件名保持一致

	Properties{
		//属性(对标C#上的int、float之类
		_Color("_Color",Color)=(1,1,1,1)//第二个参数是属性的类型,是必须这么写的 前面带_的则是我们自定义的名称
		

	}

	SubShader{
		//子shader可以有很多个 用来控制效果的 用来在不同的显卡上运行 显卡会运行它能找到的第一个支持的效果
		Pass{//至少有一个pass块 (类似于C#中的方法
			CGPROGRAM//也可能是HLSLPROGRAM
			//使用CG语言编写shader代码


			ENDCG

		
		}
	}

	Fallback "VertexLit"//当上面的效果都不支持的时候,会使用这个默认效果 直接指定名字就可以了


}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

shader的property类型

	Properties{
		//属性(对标C#上的int、float之类

		//color类型
		//一个小point:capsule使用的是fallback效果时,当你把下面这个东西命名为_Color的时候,会发现你修改这个颜色,capsule的颜色也会跟着变,这是因为VertexLit里也用了一样的名称
		_Color("_Color",Color)=(1,1,1,1)//第一个参数是会在unity里面显示的名称 第二个参数是属性的类型,是必须这么写的 前面带_的则是我们自定义的名称
		
										
		//向量类型
		_Vector("Vector",Vector)=(1,2,3,4)

		//整数类型
		_Int("Int",Int)=32432
		//小数类型
		_Float("Float",Float)=2.4

		//range类型
		_Range("Range",Range(1,11))=6

		//图片类型
		_2D("Texture",2D)="white"{}//不指定图片的情况下是白色的图片

		//cube类型 (天空是一个立方体,六面上可以贴图
		_Cube("Cube",Cube) = "white"{}

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

	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29

在subshader中再次声明要用到的property

		SubShader{
		//子shader可以有很多个 用来控制效果的 用来在不同的显卡上运行 显卡会运行它能找到的第一个支持的效果
		Pass{//至少有一个pass块 (类似于C#中的方法
			CGPROGRAM//也可能是HLSLPROGRAM
			//使用CG语言编写shader代码
			float4 _Color;//要在这里使用上面的properties时,需要重新定义,名字要对应(subshader里面的color对应的是float4属性 它会自动获得上面的默认值
			float4 _Vector;
			float _Int;
			float _Float;
			float _Range;
			samplerCube _Cube;
			sampler2D _2D;
			sampler3D _3D;

			ENDCG
		}
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

float和half和fixed的区别:都是小数,float是32位,half是16位(-6万到6万),fixed是11位(-2万到2万)。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号