帧调试器FrameDebugger
又是一个好玩的小玩具好用的小工具呢!
可以通过Window → Analysis → Frame Debugger打开
然后点击左上角的Enable,就可以查看了
点击1打开或关闭Frame Debugger
滑动2一步一步查看渲染过程
点击3切换显示渲染效果和shader中的属性值(对于纹理,可以ctr + 鼠标左键查看大图)
点击4查看每个步骤的状态
目前只要知道这些就可以了,Frame Debugger的更多玩法详情见Unity User Manual (2019.4 LTS)Graphics Optimizing graphics performanceFrame Debugger
Unity中的光源
Unity中光源的属性
Light组件中的3个属性
- 颜色(Color)
- 强度(Intensity)
- 衰减(Attenuation):Unity光源的Inspector面板中,使用该光源可以照亮的半径Range来表示
以及Transform组件中的两个属性
- 位置(Position):与衰减、强度参数一起计算到达顶点的光照强度
- 方向(Direction):与到达顶点的光照强度、光照颜色等属性计算顶点接受的光照
上面的5个属性用一个可以调节亮度的手电筒来理解就再简单不过了:
- 颜色:手电筒的灯泡可以是白色,也可以是浅蓝色,还可以是骚气的绿色,它们打在物体上(比如白色的墙面)会有不同的效果
- 强度:手电筒可以调节不同的亮度档次,光打在物体上的效果也会不一样
- 衰减&位置:拿着手电筒靠近或远离物体,光打在物体上的效果也会不一样
- 方向:向左或右迈一大步,但手电筒还是打在之前的位置上,相当于改变了光照的方向,效果也会不一样
Unity中的4种光源类型
- 平行光(Directional Light)
最简单粗暴的光源:对所有点的方向、强度都一样,不受位置、衰减参数的影响
举例:太阳
影响属性:颜色、强度、角度 - 点光源(Point Light)
由空间球体定义,由一个点发出的、向所有方向延伸的光,不受角度属性影响
举例:蜡烛、星星点点的装饰灯
影响属性:颜色、强度、衰减(Inspector中,使用该光源可以照亮的区域的半径Range来表示)、位置 - 聚光灯(Spot Light)
在点光源的基础上,限制了光线发出的方向范围为一个锥形区域,需要额外计算来判断一个点是否在锥形区域内(是否被照亮)
举例:手电筒、舞台聚光灯
影响属性:颜色、强度、衰减、位置、方向、锥形区域打开的角度(Spot Angle) - 面光源(Area Light)
烘焙光源:只在烘焙时有效
在Unity的前向渲染中获得光源的属性
准备工作
SubShader{
Tags{
"RenderType" = "Opaque"}
Pass{
Tags{
"LightMode" = "ForwardBase"} // ForwardBase Pass
CGPROGRAM
#pragma multi_compile_fwdbase // 正确赋值一些内置变量
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
// ...
ENDCG
}
Pass{
Tags{
"LightMode" = "ForwardAdd"} // ForwardAdd Pass
Blend One One // 注意开启混合,否则之前的渲染结果会被覆盖
CGPROGRAM
#pragma multi_compile_fwdadd // 正确赋值一些内置变量
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
#include "AutoLight.cginc"
// ...
ENDCG
}
FallBack "Specular"
}
接下来看之前最常用到的平行光,在ForwardBase Pass中片元着色器的代码
fixed4 frag(v2f i) : SV_Target {
// 方向(平行光位置参数无效,_WorldSpaceLightPos0.w = 0,_WorldSpaceLightPos0.xyz中存储rotation)
fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);
fixed3 worldNormal =