BZ易风

导航

 

混合命令(Blend)

语法

Blend <SrcFactor> <DstFactor>

SrcFactor, DstFactor叫做混合因子

最终的混合结果

新颜色 * SrcFactor + 旧颜色 * DstFactor

新颜色:当前Pass块计算出来的颜色

旧颜色:当前颜色缓冲区的颜色或上一个Pass块计算出的颜色

混合因子的参数

One:1

Zero:0

SrcColor:当前计算出来的颜色

SrcAlpha:当前计算出来的透明度

DstColor:当前颜色缓冲区的颜色或上一个Pass块计算的颜色

DstAlpha:当前颜色缓冲区的透明度或上一个Pass块计算的透明度

OneMinusSrcColor:1 - SrcColor

OneMinusSrcAlpha:1 - SrcAlpha

OneMinusDstColor:1 - DstColor

OneMinusDstAlpha:1 - DstAlpha

例如:Blend One One

假设当前Pass计算的颜色是(1,0,0,1),上一个Pass块计算的颜色是(0,1,0,1)

混合结果 = (1,0,0,1) * 1 + (0,1,0,1) * 1 = (1,1,0,1)

颜色运算法则

color1:(r1, g1, b1, a1)

color2:(r2, g2, b2, a2)

color1 + color2  :(r1 + r2, g1 + g2, b1 + b2, a1 + a2)

color1 - color2 :(r1 - r2, g1 - g2, b1 - b2, a1 - a2)

color1 * color2:(r1 * r2, g1 * g2, b1 * b2, a1 * a2)

1 - color1:(1 - r1, 1- g1, 1 - b1, 1 - a1)

1 + color1:(1 + r1, 1 + g1, 1 + b1, 1 + a1)

1 * color1:(1 * r1, 1 * g1, 1 * b1, 1 * a1)

多个Pass块

所有的Pass都会执行,如果没有特殊的Blend命令,那么最终颜色以最后一个Pass计算出来的为准

顶点/片元着色器

语法使用的Cg语言的规范,Unity支持HLSL语言

组成

顶点函数

片元函数

渲染管线

应用程序阶段(CPU)

CPU与内存通信获取物体的顶点数据(顶点坐标,法线,切线,纹理坐标(uv坐标))

顶点坐标,法线,切线都是物体本身的模型空间下物体坐标系

将数据组成一个图元传递到GPU中,进入几何阶段

几何阶段(GPU)

变换坐标:将模型空间下的顶点坐标转换到裁剪与屏幕空间

      通过矩阵进行转换

对CPU传递来的数据处理完毕后,传递下一个光栅化阶段

顶点函数在几何阶段由GPU自动调用

光栅化阶段(GPU)

根据上一个阶段传递来的数据,计算最终像素颜色

片元函数在光栅化阶段由GPU自动调用

属性类型与Cg类型的对应关系

属性Color

fixed4  float4

属性Vector

fixed4  float4

属性float

float

属性Range

float

属性2D

sampler2D

属性Cube

samplerCUBE

语义

应用程序到顶点函数的语义

修饰顶点函数的参数的

POSITION

模型空间下的顶点坐标

float4

NORMAL

模型空间下的顶点的法线

float3

TANGENT

模型空间下的顶点的切线

float4

TEXCOORD<0-N>

顶点的纹理坐标,也叫UV坐标

TEXCOORD0:第1套纹理坐标

float2

UV坐标的取值范围:0-1

COLOR

顶点颜色

fixed4

顶点函数到片元函数的语义

修饰顶点函数的返回值与片元函数的参数的

SV_POSITION

裁剪与屏幕空间下的坐标

必须语义,顶点函数的返回值必须有该语义

float4

NORMAL

通常是指法线

非必须语义

float3

COLOR0

通常指颜色

非必须语义

fixed4

COLOR1

通常指颜色

非必须语义

fixed4

TEXCOORD<0-N>

纹理坐标

非必须语义

片元函数的输出语义

修饰片元函数的返回值

SV_Target:渲染目标的颜色

坐标空间

模型坐标空间

模型轴心点为原点

轴向受模型的角度所影响

世界坐标空间

世界的中心点为原点

观察坐标空间

摄像机为原点

轴向受摄像机的角度所影响

Unity中的观察坐标系是右手坐标系

原点是摄像机,x轴正方向摄像机的右方,y轴正方向摄像机的上方,z轴正方向是摄像机的后方

裁剪与屏幕坐标空间

切线空间

Unity的内置矩阵

UNITY_MATRIX_MVP

模型空间 -> 屏幕空间

UNITY_MATRIX_M

模型空间 -> 世界空间

UNITY_MATRIX_V

世界空间 -> 观察空间

UNITY_MATRIX_P

观察空间 -> 屏幕空间

UNITY_MATRIX_MV

模型空间 -> 观察空间

UNITY_MATRIX_VP

世界空间 -> 屏幕空间

纹理采样

模型的顶点都有一套或多套纹理坐标,也叫UV坐标

图片都有一个纹理坐标系,图片的左下角为纹理坐标系的(0,0)点,图片的右上角为(1,1),图片的右下角(1,0),图片的左上角(0,1),图片的中心位置(0.5,0.5)

所谓纹理采样,就是使用模型的顶点的UV坐标,去图片的纹理坐标系中查找对应的图片的位置,该纹理的颜色就是采样得到的颜色,那么该顶点就应该显示采样得到的颜色

Tiling

对顶点UV的缩放

与顶点的UV做乘法运算

Offset

对顶点UV的偏移

与顶点的UV做加法运算

2方连续与4方连续

2方连续贴图

左右两侧能进行无缝衔接的贴图

上下两侧能进行无缝衔接的贴图

4方连续贴图

左右两侧,上下两侧同时能进行无缝衔接的贴图

Cg函数

几何函数

 

 数学函数

 

纹理函数

posted on 2021-03-24 17:52  BZ易风  阅读(164)  评论(0编辑  收藏  举报