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

(197评价)
价格: 4431.00元

二维坐标系旋转

 

 

(根据上图的推到)

将坐标系顺时针旋转后,求得点坐标为:

x` = x cos角度 + y sin角度

y` = y cos角度 - x sin角度

 

将坐标逆时针旋转后,求得点坐标为:

x = x` cos负角度 + y` sin负角度

y = y` cos负角度 - x` sin 负角度

 

( 坐标变换 顺时针 和 逆时针 的区别在于角度的正负 )

[展开全文]
pilishen000 · 2021-11-20 · 0

二维坐标系平移

 

二维坐标的平移,是平移坐标系。

o`p`(向量) 是 op(向量) 经过 oo`(向量)平移 后得到的。

op`(向量) 是 o`p`(向量)在 XOY坐标系中的呈现。

op`(向量) 坐标等于

x` = x + a

y` = y + b 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

二维单位向量

 

叉乘不符合交换律,俩个向量互换位子叉乘,得到的结果是不一样的。

 

单位向量:

模长等于一的向量。

 

 

求一个非零向量的单位向量:

 

(如何理解单位向量的计算公式)

单位向量是模长为1 ,有方向的,向量。

向量是有模长,有方向的。

用向量除以自身的模长,这样,向量的模就被化成1,方向不变。

 

 

零向量:

零向量长度为0

方向是任意方向

任何向量乘零向量都等于0

 

一个单位向量在平面直角坐标系上的坐标为(x,y) 根据勾股定理 和 单位向量模长为1 的特性 得  x(平方) + y(平方) = 1 。

斜率:  y / x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]
pilishen000 · 2021-11-15 · 0

二维向量的模

 

1、了解勾股定理

2、二维向量的模 = 根号下 ( 向量x的平方 + y的平方 )

3、通过Sin函数,计算向量沿X轴(顺时针/逆时针)的角度。= y / 斜角边

 

 

 

勾股定理

当我们知道三角形任意俩个边长,我们就能求出另外一个边长。

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]
pilishen000 · 2021-11-04 · 0

二维向量

 

二维向量 :

1、在数学上叫向量,在物理上叫矢量。

2、具有方向的线段叫做有向线段,以A为起点,B为终点的有向线段作为向量,可以记作 V = B - A

 

有向线段 和 向量 在一版数学研究中,向量是可以平移的,有向线段 是不可以平移的。

 

向量的计算

V= 箭头端点  -  末尾端点

上图中的向量 的计算 :

V = B - AV

V = ( -4 ,2 ) - ( 3 , 3) 

V = ( -7 , -1 )

 

蓝色向量 为平移后的 红色向量

(  向量具有平移的特点 )

( 向量只具有 长度 和 方向 )

( 不同的坐标系,向量的位子是不同的,所以向量没有坐标 )

 

 

 

 

 

 

 

 

 

 

[展开全文]
pilishen000 · 2021-11-02 · 0

二维坐标

 

1、笛卡尔坐标系

2、OpenGL  与 DirectX 进行屏幕映射时候使用的笛卡尔坐标系区别:

(OpenGL 屏幕左下角为 原点 )

(DirectX 屏幕左上角为原点)

3、简单介绍一下,2个二维坐标系的变换

[展开全文]
pilishen000 · 2021-11-02 · 0

Unity Shader介绍

本节理解 unityShader 与 ShaderLab 的关系

理解 ShaderLab 的组成

理解 Shader 

理解 Shader 与 UnityShader 的区别。

 

Unity 中的所有 Shaders 文件都使用名为“ShaderLab”的声明性语言编写

 

Unity Shader 相当于一种封装结构

而UnityShader里面的顶点,片元着色器是使用CG语言编写的,而整个结构是ShaderLab的格式。

 

Shader 和 UnityShader 在概念上还是不一样的

可以理解为,Shader 是一种流程  ,也是 在顶点,片元,曲面等着色器上可高度编程化的。我们需要把场景准备阶段,灯光,剔除等一系列操作均以代码来完成。

而UnityShader可以理解为是一种将 Shader 进一步封装。将Shader 中大部分需要用代码来完成的操作封装起来(例如:场景准备阶段等一系列操作)结构上以ShaderLab为编程格式 + 顶点,片元着色器以CG语言编写的 混合性语言。

 

 

 

 

 

 

 

 

[展开全文]
pilishen000 · 2021-11-02 · 0

UnityShader总结

[展开全文]
pilishen000 · 2021-11-01 · 0

SurfaceShader介绍

SurfaceShader 和  顶点片源Shader的区别:

1、SurfaceShader 无 Pass 块

2、

[展开全文]
pilishen000 · 2021-11-01 · 0

Pass介绍

 

1、Pass 通道组成

1、Name "Default" 

( Pass 块 名称 )

( 使用方法: 当我们在其他的 Shader 中想复用 该Pass块,我们就可以使用 Use 该 Pass 块名称 来复用该 Pass 块 )

( 我们在定义 Pass 通道名称的时候,名称可以有小写,但是当我们 Use 该 Pass 通道的时候,该名称需要全部大写 )

 

2、Tags { }

( Pass 块 标签 )

Pass 块内的 Tags 标签 除了拥有 SubShader 内的 Tags 标签项外,还拥有一些其他的项。

例如 :

“LightMode”=“ForwardBase”

光照模型 / 渲染方式  (前向渲染)

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

 

“RequireOptions” =  "SoftVegetation"

当满足该条件时候才能渲染该 Pass 通道。

等号 右面 书名号 内的值可以给多个,间隔用空格分隔

很少用到该项。

 )

 

3、Render 

( Pass 块 渲染设置 )

 

4、 CGPROGRAM  于 ENDCG

CG语言所写的代码,主要是顶点片元着色器。

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]
pilishen000 · 2021-11-01 · 0

渲染设置

 

Tags标签,如果写在SubShader 内,表示所有的Pass通道全部使用这个Tags标签

 我们也可以把Tags标签写在 每一个Pass通道块中,这样该Tags标签就服务于该Pass块。

如果 SubShader 写了 Tags 标签,同时 Pass块内也写了 Tags  标签,那么程序会执行 SubShader  内的 Tags 标签。

 

Render设置 和 Tags 标签一样,既可以写在 SubShader 块内,也可以写在 Pass 块内。

 

Render设置 :

1、Cull  off / back / front

( Cull 如果不写该项 渲染设置 ,那么Unity Shader 会默认裁剪物体背面。back )

( off : 关闭裁剪 物体俩面同时被渲染 )   

( back : 裁剪背面 物体背面不被渲染 )

( front : 裁剪前面 物体前面不被渲染 )

 

2、ZTest Always / Never / Less / Greater / LEqual / GEqual / Equal / NotEqual

( 深度测试 )

(默认 :LEqual  小于等于)

( Always : 总是通过测试 )

( Never : 总是不通过测试 )

( Less : 当前深度值 < 储存的深度值时通过 )

( Greater : 当前深度值 > 储存的深度值时通过 )

( LEqual : 当前深度值 <= 储存的深度值时通过 )

( GEqual : 当前深度值 >= 储存的深度值时通过 )

( Equal : 当前深度值 = 储存的深度值时通过 )

( NotEqual : 当前深度值 != 储存的深度值时通过 )

 

3、Zwrite off / on 

( 深度写入 )

( off : 关闭 )

( on : 开启 )

4、Blend 

(混合)

( SrcFactor : 源 )

( DstFactor : 目标 )

5、LOD 100

( 不同的手机类型,使用不同的LOD,可达到性能提升 )

(例如:低端机使用 : 10)

(高端机使用 :100)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[展开全文]
pilishen000 · 2021-11-01 · 0

Shader Tags 介绍

 

Tags 标签

 

Tags 标签的模式是

key = value 这种 键值的模式

 

Tags包含:

1、 (渲染顺序)

“ Queue ” = “ Transparent ” 

2、(渲染类型)

  " RenderType " = " Opaque "

该标签的作用是,可以在C#代码中去识别 工程中所有 Unity Shader 的 RenderType 的值 如果 一个 或 多个 UnityShader 中 RenderType的值与C#代码中识别的值相等 例如 " Opaque " 那么 我们可以将这些UnityShader与某个UnityShader 进行替换。

( 就是一个识别的作用 )

3、“ DisableBatching ”= " True "

( 是否合批 )

4、“ ForceNoShadowCasting " = " True "

( 是否投射阴影 )

5、“ IgnoreProjector " = " True "

( 赋予该 Shader 的物体受否受阴影的影响 )

(透明物体一般不希望被投射上其他物体  的阴影,所以该标签一般用于透明物体)

( Projector 是 Unity 中一个做阴影的东西 )

6、“ CanUseSpriteAltas ”= " False "

  ( 该UnityShader 是否作用于精灵图片上 )

(通常用于UI)

7、“ PreviewType ”= " Plane "

  ( Unity 预览视图 展示的形状类型 )

( 默认是球形 )

( “ PreviewType ”= " Plane " 该标签将Unit 预览试图从球形变成了一个面板 )

 ( 通常用于UI )

 

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

SubShader块介绍

 

SubShader包含以下几部分

 

//可写/可不写

Tags {  }

Cull off

ZTest Always

Zwrite off

Blend

LOD

 

 //必须写

Pass {  }

(一个SubShader中可以包含多个Pass通道,一般包含多个Pass通道的UnityShader是从第一个Pass 开始渲染,然后第二个,依次递推。)

(一版不建议使用多个Pass通道,因为每多一个Pass通道我们就要多耗费一个胶拷,这样会降低性能)

 

顶点片元着色器中使用的变量会在SubShader 下的 Pass通道中定义。

Pass通道中定义的变量名要和属性块中定义的名字相同,否则Unity监视面板中是无法控制的。

 

一个UnityShader中可以包含很多个SubShader块

Unity在加载这个Shader的时候,Unity会扫描所有的SubShader块选择第一个能在目标平台上运行的SubShader块,如果所有的SubShader块都不能运行,unity会选择Fallback 指定的Shader

Fallback 样式:

( Fallback "Legacy Shaders/Transparent/VertexLit" )

 

 

 

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

属性块介绍

 

(顶点,片元)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