UnityShader基础

UnityShader概述

材质和UnityShader

UnityShader定义了渲染所需的各种代码、属性和指令,而材质则允许我们调节这些属性,并将其最终赋给相应的模型。

 

Unity中的材质


Unity中的材质需要结合一个GameObject的Mesh或者Partical Systems组件来工作。

 

Unity中的Shader


一个单独的Unity Shader 是无法发挥任何作用的,它必须和材质结合起来。

Standard Surface Shader会产生一个包含了标准光照模型的表面着色器模板
Unlit Shader 不包含光照的基本的顶点/片元着色器
Image Effect Shader 屏幕后处理效果
Comput Shader 利用GPU的并行性来进行一些与常规渲染流水线无关的计算。

 

导入面板


Default maps 默认纹理

Surface Shader 是否是一个表面着色器

Fixed Function Shader 是否是一个固定函数着色器

Case Shadows 是否投射阴影

Render queue 渲染队列

Disable batching 是否关闭批处理

Properties 属性列表

 

UnityShader的基础:ShaderLab

所有的Unity Shader都是使用ShaderLab来编写

是一种说明性语言。

它使用一些嵌套在花括号内部的语义来描述一个UnityShader的文件结构

包含了许多渲染所需要的数据。

 

UnityShader的结构

Shader名字

Shader "Custom/MyShader"{}

Properties

包含一系列属性

这些属性为了在材质面板中能够方便地调整各种材质属性。

属性类型默认值地定义语法例子
Int number _Int("Int",Int) = 2
Float number _Float("Float",Float)=1.5
Range(min,max) number _Range("Range",Range(0,5))=3
Color (1,1,1,1) _Color("Color",Color) = (1,1,1,1)
Vector (1,1,1,1) _Vector("Vector",Vector)=(2,3,4,1)
2D ""{} _2D("2D",2D)=""{}
Cube ""{} _Cube("Cube",Cube)=""{}
3D ""{} _3D("3D",3D)="black"{}

为了在Shader中访问到这些属性,我们需要在CG代码片中定义和这些属性类型相匹配地变量。

 

SubShader

SubShader{

[Tages]

[RenderSetup]

Pass{}

}

每个Pass定义了一次完整的渲染流程

状态和标签同样可以在Pass声明。

不同的是,SubShader中的一些标签设置是特定的。

如果在SubShader进行了这些设置,那么将会用于所有的Pass

状态设置

Cull 、ZTest、ZWrite、Blend

SubShader的标签

Queue 、

RenderType、

DisableBatching、

ForceNoShadowCasting(控制该SubShader的物体是否会投射阴影)、IgnoreProjector(被设置为True,物体将不会受Projector的影响)、CanUseSpriteAtlas、

PreviewType

上述标签仅可以在SubShader中声明,不可在Pass块中声明。

Pass语义块

Pass{

[Name]

[Tags]

[RenderSetup]

}

Name

UserPass “NAME”

在使用UsePass命令时必须使用大写形式的名字

渲染状态设置和SubShader一样

Pass的标签

LightMode

RequireOptions

Fallback

Fallback “name”

Fallback off

Fallback 还会影响阴影的投射。

其他pass

UserPass 使用该命令来复用其他UnityShader中的Pass

GrabPass 该pass负责抓取屏幕并将结构存储在一张纹理中,以用于后续的Pass处理

Unity Shader的形式

尽管UnityShader可以做的事情非常多,但其最重要的任务还是指定各种着色器所需的代码。

这些着色器代码可以写在SubShader语义块中,也可以写在Pass语义块中。

表面着色器(Surface Shader)

顶点片元着色器

固定函数着色器

 
posted @   Apollonia  阅读(77)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示