打死都记不住的小知识点(持续更新ing...)

Shader

混合模式

Blend SrcFactor DstFactor  :SrcFactor 是源系数,DstFactor是目标系数,源系数是由片段着色器计算出来的Fragment_out,目标系数是之前累计的原色值,存储在帧缓冲中。

切线空间转换

切线空间到世界空间转换:

  float3 normalWorld = UnityObjectToWorldNormal(v.normal);
  float4 tangentWorld = float4(UnityObjectToWorldDir(v.tangent.xyz), v.tangent.w);
  half sign =v.tangent.w * unity_WorldTransformParams.w;//unity_WorldTransformParams相当于UNITY_UV_STARTS_AT_TOP定义的宏
  half3 binormal = cross(normalWorld , tangentWorld ) * sign;
  float3x3 tangentToWorld =half3x3(tangentWorld , binormal, normalWorld );

模型空间到到切线空间转换:

#define TANGENT_SPACE_ROTATION \\使用这个宏即可,在UnityCG.cginc中
float3 binormal = cross( normalize(v.normal), normalize(v.tangent.xyz) ) * v.tangent.w; \
float3x3 rotation = float3x3( v.tangent.xyz, binormal, v.normal )

}

渲染模式及变更

名称翻译注解对应关键字
Opaque不透明适用于所有的不透明的物体对应的下面的不开启
Cutout镂空alpha小于阀值clip掉_ALPHATEST_ON
Fade渐隐与Transparent的区别为高光反射会随着透明度而消失_ALPHATEST_ON
Transparent透明高光反射不会随透明而消失_ALPHAPREMULTIPLY_ON

Tips:如果想动态开启或者关闭某一个设定,开启对应的shader关键字,注意深度的处理,1,2都会进行深度写入,3,4不会进行深度写入

低精度渲染

#pragma fragmentoption ARB_precision_hint_fastest

渲染顺序规则

1.CameraDepth --从小到大
2.Sorting Layer(在Tags&Layer中设置,相当于mesh和canvas中的sortingLayer).
3.Order In Layer(相对于Sorting Layer的子排序,同一层时才有效,mesh中sortingOrder,Canvas的OrderInLayer)
4.RenderQueue

光照贴图-LightMode和DirectionalMode

这两个傻傻分不清楚,先看不同LightMode下,动静物体获取信息的来源。
下面动态物体简称D_,静态物体简称S_,InDis表示在ShadowDistance范围内,OutDis表示在ShadowDistance范围外,ShadowDistance在Quality–Shadows–ShadowDistance中设置。

在烘焙设置的LightMode只有:BakedIndirect、ShadowMask、Subtractive三种模式,但是我们再在ShadowMask模式中,通过Quality–ShadowsmaskMode新增一个DistanceShadowMask模式。

LightMode\数据D_直接光照S_直接光照D_间接光照S_间接光照D_接受的动态物体的投射阴影S_接受的动态物体的投射阴影D_接受的静态物体的投射阴影S_接受的静态物体的投射阴影
Baked Indirect实时光实时光Light Probes光照贴图InDis-实时阴影,OutDis-无InDis-实时阴影,OutDis-无InDis-实时阴影,OutDis-无InDis-实时阴影,OutDis-无
ShadowMask实时光实时光Light Probes光照贴图InDis-实时阴影,OutDis-无InDis-实时阴影,OutDis-无InDis-实时阴影,OutDis-LightProbs获取烘焙阴影InDis-实时阴影,OutDis-光照贴图
DistanceShadowMask实时光实时光Light Probes光照贴图InDis-实时阴影,OutDis-无InDis-实时阴影,OutDis-无LightProbs获取烘焙阴影光照贴图
Subtractive实时光光照贴图Light Probes光照贴图InDis-(平行光)实时阴影,OutDis-无InDis-(平行光)实时阴影,OutDis-无LightProbs获取烘焙阴影光照贴图

附录一份shader中关键对应的开启模式:
在这里插入图片描述
DirctionalMode:
1.Non-Directional:烘焙时,生成一套光照贴图,包换光照信息(颜色)。
2.Directional:生成两套光照贴图。一张保存光照信息,一张用来保存入射光的主要方向。
为什么要多弄一个图保存颜色,为了烘焙出法线的效果。

计算视空间顶点和摄像机的距离

    float zDist = dot(_WorldSpaceCameraPos - worldPos, UNITY_MATRIX_V[2].xyz);

摄像机和屏幕的内置参数

名称类型描述
_WorldSpaceCameraPosfloat3该摄像机在世界空间中的位置
_ProjectionParamsfloat4x=1.0(或-1.0,如果正在使用一个翻转的投影矩阵进行渲染),y=Near, z=Far, w=1.0+1.0/Far,其中Near和Far分别是近裁剪平面和远裁剪平面离摄像机的距离。
_ScreenParamsfloat4x=width, y=height, z=1.0+1.0/width, w=1.0+1.0/height, 其中width和height分别是该摄像机的渲染目标(render target)的像素宽度和高度。
_ZBufferParamsfloat4x=1-Far/Near, y=Far/Near, z=x/Far, w=y/Far, 该变量用于线性化Z缓存中的深度值。
unity_OrthoParamsfloat4x=width, y=height, z没有定义,w=1.0(该摄像机是正交摄像机)或w=0.0(该摄像机是透视摄像机),其中width和height是正交摄像机的宽度和高度。
unity_CameraProjectionfloat4x4该摄像机的摄影矩阵
unity_CameraInvProjectionfloat4x4该摄像机的摄像矩阵的逆矩阵
unity_CameraWorldClipPlanes[6]float4该摄像机的6个裁剪平面在世界空间下的等式,按如下顺序:左、右、下、上、近、远裁剪平面。

顶点输入w分量的含义

从数学上讲,三维空间里的缩放(含镜像)、旋转、斜切变换,可以用3×3的方阵进行,但是,平移变换必须用4×4的方阵进行,可根据线性代数法则,一个三维向量是不能用四阶方阵变换的,所以必须为三维向量补上一个分量,就是w。
对于三维空间的“点”来说,w为1;而对于“向量”来说,w为0;原因暂不详谈,所以你必须搞明白你的vec4表示的到底是点还是向量,这对于w的取值至关重要。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘培玉--大王

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值