UnityShader基础知识

前言

之前学过一段时间的shader,但是是从看视频学的,这样会导致基础知识不牢固,看了,就是看了而已,不从理解上去学习,
终究只是短时的记忆而已,很容易就忘记,因为基础知识的学习,就显得更加重要了,以前实现shader需求,都是从网上抄抄shader,随便改改,也没有去理解每个实现的意义,结果就是知识上并没有长进;因此呢,打算实打实的从基础开始,巩固巩固;从理解上去学习新知识;好好啃书… 此篇作为自己的学习笔记;

概念渲染流水线:

 需要经历四大阶段:
 应用阶段,几何阶段,光栅阶段,测试阶段
 测试阶段分为 模板测试,深度测试

概念流水线的完整描述

在这里插入图片描述

在ShaderLab中的关系

应用阶段相对于shaderlba里的 a2v (applydata to vertex); 
指的是传递给顶点着色器的 模型的应用数据;
几何阶段相对于shaderlab里的  vertex;
光栅化阶段相对于 shaderlab里的 frament;

关于Shader中应用阶段中数据:

模型空间下的 顶点信息,法线信息,切线信息,纹理信息等等....
Unity里有给内置的Struct appdata_full,它可以用于顶点着色器的输入;
它是Unity的内置 cginc文件,路径在 Editor\2018.1.9f2\Editor\Data\CGIncludes下,
下,可以看到很多内置的CG 文件;

中文完整解释

截图取的是UnityShader入门精要

UnityCG内置文件的描述

以下的数据可以作为 应用数据 传递给 顶点着色器,作为 顶点着色器的输入;

在这里插入图片描述
CPU与GPU之间的通信:在这里插入图片描述

GPU流水线

在这里插入图片描述

Unity ShaderLab 结构

Shader "Custom/SpecularVertexLevel" {
	Properties {
	}
	SubShader {
		Tags{"xxx"="xxx"}
		pass
		{
			Tags{"xxx"="xxx"}
			CGPROGRAM
			ENDCG
			
		}

	}
	FallBack "Diffuse"
}

Properties

语义块定义,属性是来用作为用户输入的一部分
在这里插入图片描述

属性类型

在这里插入图片描述

变量关系

可以在CGPROGRAM 里 声明 取得该变量
在这里插入图片描述

Subshader

如果Subshader不能在目标平台上使用,Unity就会 用备胎, 这个备胎就是FallBack “xxxx” 可以是 任意存在的ShaderName

Tags

用字符键值对来表示,中间用空格 隔开
在这里插入图片描述

状态设置 (RenderStep)

在这里插入图片描述
以上的RenderStep 和Tags 如果不是在Pass里写的,那么 它们将会应用到每个pass中

pass 可以 存在多个,有时候为了适应 不同的平台需要写不同的pass

pass

在这里插入图片描述

CGPROGRAM

在这里插入图片描述
在CGPROGRAM 里 经常要 定义一些 结构体,来存储 应用传递给顶点着色器的数据,a2v , 以及 顶点着色器传递给片元着色器的 数据,v2f
这些结构体的声明,必须要有个语义的声明,它表达了这个参数的含义。
和 cg/hlsl 编程 里的语义是 一样的;

a2v 语义 , 应用数据
在这里插入图片描述
在这里插入图片描述
这里的0 ,1 ,2… 可以被认为是一个存储该类型的 变量
v2f 顶点着色器传递给 片元作色器的 语义
在这里插入图片描述
片元作色器函数 用的语义;
SV_Target 这个语义表示 输出值将会存储到渲染目标 里;

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值