最近学习unityshader,做了一些随笔
1.HLSL Tool For Visual Studio VS shander插件
2.要获取正确的光照颜色,#pragram multi_fwdbase
3.line01depth是世界空间线性深度值(112)
lineEyeDepthView视觉空间线性深度值
COMPUTER EYEDEPTH是屏幕空间深度值
4.屏幕空间采样用tex2Dproj uv是屏幕坐标
5.植物一般使用aphatest,不适用apha混合
6.关于纹理grappass{“name”} name一样的纹理抓取会执行一次,一 般纹理抓取放在透明物体中,保证所有的物体渲染完毕
7.command buffer 是在渲染的任何阶段取出颜色缓存的值
8.unity三套纹理坐标
1.v.texcoord 模型UV坐标
2.v.texcoord1 lightmap采样坐标
3.v.texcoord2 动态lightmap采样坐标
DynamicLightmap是对应着Lighting->Realtime LightMaps,然后 Lightmap对应着Lighting->Baked LightMaps
9.视角坐标系
O.ray = UnityObjectToViewPos(i.vertex);得出的位置方向是沿z轴的正方向,视角坐标系是唯一的右手坐标系
摄像机的前方是Z轴的负方向,为了统一计算UnityObjectToViewPos(i.vertex)*float3(-1,-1,1);
10.计算屏幕空间UV 先在顶点shader中o.uv = UnityObjectToClipPos(i.vertex);转到裁剪空间
第二部在片源shader中进行齐次除法uv = i.uv.xy/i.uv.w
11.深度纹理采样 depth = SAMPLE_DEPTH_TEXTURE(_CameraDepthTexture,uv);前向渲染需要在摄像机上开启深度
延迟渲染不需要
12.阴影随距离远近消失 project setting ->qulity-> shadows->shadowDistance
13.shader源码 Editor->DAta->CGIncludes
14.透明物体加影子 FallBack"Transparent/Cutout/VertexLit"
15.NoramlMap采样后得到物体坐系标下的法线,再转到世界空间坐标系下
16.纹理采样精度不够的的时候 _mainTex_FLOAT 后面加_float提高精度