Unity - A计划(永久有效期) 扫二维码继续学习 二维码时效为半小时

(199评价)
价格: 3040.00元

属性块介绍

 

(顶点,片元)Shader一共分为2大块

1、Properties - 属性块

2、SubShader - SubShader块

(统称为语义块)

 

属性块 :

属性块 声明的变量 会体现在Unity面板中。

属性块中写的只是我们要在Unity中展示的属性,而真正定义变量实在SubShader中

(例如:_MainTex ("Texture",2D) = "white"{ })

_MainTex : 变量名(在Shader中使用)

"Texture" : 体现在Unity检视面板 中的 名称

2D : 类型(2D图片)

“white”: 默认值(白色)

 

属性块常用基本类型 :

_Int ( "Int" ,Int ) = 2

_Float ( "Float" ,  float ) = 1.5

_Range ( "Range" , range ( 0.0 , 2.0 )) = 1.0

_MainTex ( "Texture" , 2D ) = " white " { }

_color("Color",color) = (1,1,1,1)

_vector("Vector",Vector)=(1,2,3,4)

_cube("Cube",cube)="white"{}

_3D("3D",3D) = "black"{}

 

 

[展开全文]
pilishen000 · 2021-10-30 · 0

 

1、命令缓冲区(Command Buffer)

 

2、固定函数渲染流水线(Fixed-Function Pipeline)简称固定管线

 

3、Shader

Gpu流水线上一些可高度编程的阶段,例如一些着色器 (顶点着色器、片元着色器等)由着色器编译出的代码,可以在GPU上运行。依靠着色器我们可以控制流水线上渲染的细节。

[展开全文]
pilishen000 · 2021-10-27 · 0

总结

 

本ke复盘之前学习内容

[展开全文]
pilishen000 · 2021-10-27 · 0

CG 数据类型

CG通常采用动态编译的方式(也支持静态编译)

动态编译可以理解为,我们在游戏运行时,把Shader代码修改了,在回到引擎中我们发现挂载该Shader的物体效果会发生变化。

 

Cg 数据类型(共7种)

float 32位

half 16位

int 32位

fixed 12位

bool 布尔数据

sampler 纹理   (共6种)

(sampler,sampler1D,sampler2D,sampler3D,samplerCUBE,samplerRECT)

*DirectX profiles 不支持samplerRECT

pc端 float / half / fixed 无差异。

因为pc端都把 half / fixed 都换算成float来计算。

 

手机端 float / half / fixed 还是有区别的。

[展开全文]
pilishen000 · 2021-10-27 · 0

Shader平台差异

 

宏的讲解。(坐标是否翻转)

 

OpenGL (写法更随意)

平台会自动补全

例:float4 v = float4(0);

 

DX(写法更严谨)

例:float4 v = float4(0,0,0,0);

[展开全文]
pilishen000 · 2021-10-26 · 0

调试工具

 

2种方法。

1:将颜色在顶点着色器 或 片元着色器 中 输出出去,来验证效果。

2: 使用 Frame Debug

(Window-Analysis-Frame Debugger)

Enable:理解为截屏

 

顶点色在Shader中的体现

例子:

o.color = v.color;

 

[展开全文]
pilishen000 · 2021-10-26 · 0

顶点着色器输出语义 + 片元着色器输出语义

 

 

顶点着色器输出结构体中常用语义

SV_POSITION (裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。等同于DX9中的POSITION)

COLOR0 (通常用于输出第一组顶点颜色,不是必须。)

COLOR1  (通常用于输出第二组顶点颜色, 不是必须。 )

TEXCOORD0 - TEXCOORD7 (通常用于输出纹理坐标,不是必须。 )

 

片元着色器输出时常用语义

SV_Target  (输出值将会储存到渲染目标(render target)中。等同于DX9中COLOR语义。)

[展开全文]
pilishen000 · 2021-10-26 · 0

顶点着色器输入语义

语义:

可以理解为是一个标记。

最终也就是让Shader知道在哪里读数据,并且把数据输出到哪里。

例如:

struct a2v

{

    float4 texcoord : TEXCOORD0

}

上面a2v输入结构体中的语义   :TEXCOORD0

就是将第一套uv存储在变量 texcoord 中

 

如果在输出结构体v2f中我们仍然可以用

:TEXCOORD0  (即使输入结构体a2v中已经有:TEXCOORD0了我们仍然可以使用)这是因为

语义的另一个功能就是寄存器。

 

 

:SV_POSITION

(顶点着色器后使用)

例:float4 vert ( float4 v : POSITION ) : SV_POSITION

:SV_TARGET

(片元着色器后使用)

例:fixed4 frag ( ) :SV_TARGET

以上2种语义是特殊语义,不能乱用。

有时候我们能看见 SV_POSITION &  SV_TARGETSV 被写成了 POSITION &  TARGET 这是因为在DX10 之后引入了一个叫系统数值的语义。 这时候POSITION & TARGET 就有了他自己的目的需要去做的事情。所以我们就用SV_POSITION &  SV_TARGETSV

如果不使用 SV_POSITION &  SV_TARGETSV 而用 POSITION &  TARGET 我们会发现在PS4上会出错。

我们理解为在DX10 之后为了兼容某些硬件,我们引入了新的语义 SV_POSITION &  SV_TARGETSV 而 SV_POSITION &  SV_TARGETSV 是包含  POSITION &  TARGET。

 

 

 

顶点着色器输入结构体种的语义笔记

:POSITION 

(模型空间中的顶点位置,通常是float4类型)

:  NORMAL 

(顶点法线,通常是float3类型)

:TANGENT 

(顶点切线,通常是float4类型)

TEXCOORDn

( 顶点的纹理坐标,TEXCOOD0表示第一组uv坐标纹理通常是float2 , float4类型 )

(Shader Model2 & 3 可以支持最多 8 个TEXCOORD)

(Shader Model4 & 5 可以支持最多 16 个TEXCOORD)

COLOR 

(顶点颜色,通常是fixed4类型)

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]
pilishen000 · 2021-10-25 · 0

Shader库中的输入输出结构体

 

1/

.cginc文件 可以被加载进我们的Shader中

例如

写如下代码在CGPROGRAM中,加载UnityCG.cginc文件

#iclude "UnityCG.cginc"

这样我们就可以直接使用“Unity CG.cginc”文件内的变量和方法了。

 

 

2/

UnityShaderUtiilities.cginc

UnityShaderVariables.cginc

以上俩个.cginc文件是默认被加载进Shader中的。

[展开全文]
pilishen000 · 2021-10-25 · 0

属性控制

内容概要

1/属性快

Properties

_MainTex("Texture",2D) = "white"{ }

_Color("Color",Color) = (1,1,1,1)

}

定义的属性块需要在CGPROGRAM中再次进行定义

 

.xyzw   和 .rgba 是一样的。

 

当我们的一个变量是3维的(例如:float3 color)

那么我们需要用一个3维的去与他相乘,(例如:color *= _Color.rgb),如果用非3维的向量去与之相乘会报错。

 

 

 

 

 

 

 

[展开全文]
pilishen000 · 2021-10-22 · 0

输出结构体

构造函数a2v的命名

a: application 应用

2:to 到

v: vert 顶点着色器

 

构造函数v2f的命名

v: vert 顶点着色器

2:to 到

f:frag 片元着色器

 

 

本节概要

Shader中2个构造函数名字的含义。

2个构造函数中各个成员语义的意义。

顶点着色器返回值和写法讲解。

如何将区间(-1,1)转变为(0,1)。

 

 

[展开全文]
pilishen000 · 2021-10-19 · 0

Shader 输入结构体

:SV_TARGET(是渲染到RenderTarget中,RenderTarget是默认的缓存叫做帧缓存)

:POSITION(语义:输入的模型顶点信息)

:SV_POSOTION(语义:顶点输出之后的裁剪空间的顶点信息)

以上三种都是CG,HLSL中的语义,语义是告诉程序,我们输入的是什么。

例如:顶点着色器的参数(float4 v:POSITION)

float4告诉我们这是一个4维的变量。

:POSITION告诉我们这是输入的模型顶点信息。

 

理解a2v结构体,这个a2v名字可以随便命名,但是要确保和地下顶点着色器中的参数名字保持一直。

结构体中的每一个成员,都需要有一个语义去标注。

 

理解 vert( ) 方法 的结构:

  1/返回值float4是被 :SV_POSITION语义标注的

  代表裁剪空间顶线信息。

  2/参数a2v 是一个结构体,考虑到可能要输入大量的模型空间的信息。例如,顶点信息,法线信息,uv信息等,固使用结构体来作为方法参数。

 

[展开全文]
pilishen000 · 2021-10-19 · 0

ab = x1x2 + y1y2

[展开全文]
路西法 · 2021-06-30 · 0

ab = |a||b|cos&

几何意义:用于求两个向量的夹角

cos&

正为锐角

0为垂直

负为钝角

[展开全文]
路西法 · 2021-06-30 · 0

Pass中Tags独有属性

LightMode 定义该pass通道在Unity渲染流水中的角色

RequireOptions 满足某些条件时才渲染该Pass通道

 

[展开全文]
路西法 · 2021-06-28 · 0

Render设置

Cull off/back/front 选择渲染哪个面

ZTest Always/Less Greater/LEqual/GEqual/NotEqual 深度测试

ZWrite off/on深度写入

Blend SrcFactor DstFactor 混合

LOD //不同情况下使用bu

[展开全文]
路西法 · 2021-06-28 · 0

Tags 标签

Queue //渲染顺序

RenderType //着色器替换功能

DisableBatching //是否进行合批

ForceNoShadowCasting //是否投射阴影

IgnoreProjector //受不受Projector的影响,通常用于透明物体

CanUseSpriteAltas //是否用于图片的shader,通常用于UI

PreviewType //用作shader面板预览的类型

[展开全文]
路西法 · 2021-06-28 · 0

subshader语义块

Tags

[展开全文]
路西法 · 2021-06-28 · 0

unity属性类型

Int

float

Range(x,y):范围值

Color

Vector (x,y,z,w)

2D

Cube

3D

 

 

 

[展开全文]
路西法 · 2021-06-28 · 0

应用阶段-几何阶段-光栅化阶段

cpu应用阶段:

[展开全文]
路西法 · 2021-06-28 · 0