unity shader 入门精要(冯乐乐著) 读书笔记(一)

unity shader(初识ShaderLab)

cpu —————— gpu
利用缓冲区(ram)cpu会存储一些网格,也就是把一次需要渲染的东西拆分出来,然后发送给gpu使用(draw call),gpu就会完成一次渲染。
使用批处理可以减少cpu的draw call数量,避免cpu过载而gpu陷入等待

unity中的shader

unity中一共提供了4种shader模版供我们选择:
standard surface shader:包含标准光照模型的表面着色器模版
unlit shader:不包含光照(但包含雾效)的基本的顶点/片元着色器
image effect shader:实现各种屏幕后处理效果
compute shader:提供了典型的表面着色器的实现方法
(现在似乎多了一个光线追踪着色器

单独的shader无法发挥作用,需要和材质结合起来使用

unityshader的基础:shaderlab 一个高层级的抽象 方便对于shader的控制

unityshader的结构

  1. 命名
    这个shader的名字会由一串字符串来定义,可以使用“/”来控制shader在材质选择中出现的位置,例如“Custom/MyShader”

  2. 材质和unity shader的桥梁:Properties
    Properties的语义块包含了一系列属性
    Properties{
    Name (“display name”, PropertyType) = DefaultValue
    }
    所支持的属性类型(name所对应的模块)在 p30
    这些属性定义后会在材质的面板中出现并且可以直接设置拖动 或者给予相应默认值

  3. SubShader
    每一个shader都至少要有一个
    在加载时unity会扫描所有语句块然后选择最合适的,不然会选择Fallback所指定的untiyshader

在这个语句块中,定义了一系列Pass以及可选择的状态[RenderSetup]和标签[Tags]

状态在 p31 中可以查找并根据情况设置添加
标签块在 p32 页中可以查找,并根据情况设置添加
而Pass需要使用的标签在 p33 页中可以查找并根据情况设置添加

为了提高复用性,可以使用其他shader中的Pass 利用语句“UsePass“MyShader/必须使用大写形式””

除了普通Pass外还支持一些特殊的Pass
UsePass
GrabPass

  1. Fallback
    相当于后路
    如果所有SubShader都无法使用,那么就会使用此Shader

unity shader的形式

  1. 表面着色器(可编程管线):实质是对顶点片元着色器的抽象 p34
    使用过程经过极大简化
    与光源等高消耗的效果挂钩 使用时需特别注意移动端的表现
    使用 Cg/HLSL 语言进行编写

  2. 顶点/片元着色器(可编程管线):类似于c++更加复杂,但是灵活性更高
    使用 Cg/HLSL 语言进行编写

  3. 固定函数着色器:对于陈旧设备适用的简单着色器
    完全使用 ShaderLab 的语法进行编写

unity shader并不等于一个传统意义上的shader

Cg/HLSL语言是区别于ShaderLab的 另一个世界,一般包含在
CGPROGRAM与ENDCG之间
unity会将Cg转化为对应平台的代码,这样就不会在切换平台时重新编译
可以对其进行展开 看到编译后到代码 也可以自定义选择需要适配的平台

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值