欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

unity shader 学习笔记

程序员文章站 2024-02-14 09:46:04
...

最近学习unity shader,做一些笔记以免自己忘记了,供以后查阅,参考文章

https://zhuanlan.zhihu.com/unityTA

https://blog.csdn.net/qq_35759688/article/details/72705634

感谢。

本次主要记录了渲染管线和shader的基本数据类型

//渲染流水线
//应用阶段, 几何阶段, 光栅化阶段
//
//	应用阶段(CPU实现):
//		将数据加载到显存中,如顶点的位置信息、法线方向、顶点颜色、纹理坐标
//		设置渲染状态
//		调用DrawCall
//
//	几何阶段(GPU实现):
//		顶点着色器:实现顶点的空间变换、顶点着色等 <可完全编程>
//		曲面着色器:可选着色器,用于细分图元
//		几何着色器:可选着色器,用于执行图元的着色操作,或者用于产生更多的图元
//		裁剪:将不在摄像机视野内的顶点裁减掉,并剔除某些三角形的面片<可配置>,例如可以使用自定义的裁剪平面来配置裁剪区域,也可以通过指令控制裁剪三角图元的正面或者背面
//		屏幕映射:负责把每个图元的坐标转化到屏幕坐标中
//	光栅化阶段(GPU实现):
//		三角形设置:计算三角形网格数据,得到三角形网格对像素的覆盖情况,即计算三角形每条边上的像素坐标
//		三角形遍历:检查每个像素是否被一个三角形覆盖,如果覆盖则生成一个片元
//		片元着色器:完成重要的渲染过程<完全可编程>
//		逐片元操作:决定片元的可见性
//	渲染绘图管线流程:
//		顶点变化:通过一系列的坐标系转换,将模型的顶点在摄像机前进行位移,并最终投影到摄像机的投影屏幕上(顶点的坐标变换,逐顶点雾化,材质属性和光照处理)
//		面处理:面的组装、截取和剔除(背面剔除、视椎剔除、遮挡剔除)
//		光栅化:将以向量为基本结构的面转换成一个一个的点阵形式的像素
//		像素处理:对每个像素进行着色、对像素贴上贴图、行程最后的画面
//
Shader "Test/TestUnlitShader"//路径前加上前缀Hidden/表示隐藏shader,不能通过材质下拉列表找到该shader
{
	Properties// 属性,可以没有该模块
	{
		//[Attribute]_Name ("Display Name",Type) = Default Value
		//[Attribute]:属性标记,非必选项,可有多个
		//_Name:属性名,默认规则以下划线开头
		//Display Name:显示在材质面板上的名字
		//Type:属性类型,常见属性类型有:{
		//									Color, 颜色
		//									Int, 整型
		//									Float, 浮点类型
		//									Vector, 四维树
		//									2D, 2D纹理
		//									3D, 3D纹理
		//									Cube, 立方体
		//								}
		//Default Value:默认值

		[Header(Test Shader Properties)]//在材质面板显示一行标题, 英文字母,数字,下划线
		[Space]//插入空行
		_Color0 ("test Color0", Color) = (1, 1, 1, 1)
		[Space(10)] //插入指定行数
		[HideInInspector]//隐藏属性,如果上面没有属性显示,标题和空行也会隐藏
		_Color1 ("test Color1", Color) = (1, 1, 1, 1)
		[HDR]_Color2 ("test Color2", Color) = (1, 1, 1, 1) //HDR可以使颜色亮度超过1,配合镜头Bloom效果做出物体泛光的视觉效果
		_TestInt("test Int", Int) = 5
		_TestFloat("test Float", Float) = 1.123 //注意:浮点数后面不能带有 f 标识,和C#有区别

		_TestRange("test Range", Range(0, 5)) = 4
		[PowerSlider(2)]_testPowerSlider0("test power slider", Range(0, 1)) = 0.5 //指数型滑动条,在材质面板上显示非线性滑动条,value为指数, 值越大滑动条的曲度变化越大。值为1时不改变
		[IntRange]_testIntRange("test IntRange", Range(0, 5)) = 1 //范围内滑动取整数

		[Toggle]_testToggle("test Toggle", Range(0, 1)) = 1 //开关,开关开启,shader关键词值为:"property name"+_"ON",
		[Toggle(ENABLE_FANCY)] _Fancy ("Fancy?", Float) = 0 //重新指定shader关键词为开关关键词

		[Enum(UnityEngine.Rending.CullMode)]_testEnum0("test Enum", Float) = 1 //枚举, 该处使用了unity内置枚举类,shader关键词:"property name"+"_"+"枚举名称(大写)"
		[Enum(Off, 0, On, 1)]_testDefEnum("test Def Enum", Float) = 1 //枚举,自定义枚举类
		[KeywordEnum(None, Add, Multiply)]_testKeyWordEnum0("test keyword enum0", Float) = 1 //关键字枚举
		[KeywordEnum(N, A, M)]_testKeyWordEnum3("test keyword enum3", Float) = 1

		_testVector("test Vector", Vector) = (0, 0, 0, 0)

		_test2DTex("test Tex", 2D) = "black" {} //2D纹理,默认值有{white, black, gray, bump(法线贴图)}  Tiling:贴图重复度, Offset:贴图偏移值
		[NoScaleOffset]_testNoScaleOffset("test no scale offset", 2D) = "gray" {} //2D纹理,隐藏 Tilling 和 Offset 属性
		[Normal]_testNormal("test Normal Tex", 2D) = "white" {} //限制为法线贴图

		_test3DTex("test 3D Tex", 3D) = "" {} //3D纹理
		_testCube("test cube", Cube) = "" {} //立方体,其值为Cubemap,六面体纹理,例如天空盒立方体贴图
	}
	SubShader
	{
		Pass
		{
		}
	}
	fallBack "Diffuse"
	CustomEditor "EditorName"
}

在材质面板显示效果:

unity shader 学习笔记

相关标签: unity shader