UnityShader的基础语法

unity3d学习交流群913755380

UnityShader的基础语法

pragma

主要内容:

编译指令示例/含义
#pragma vertex name替换name,来指定Vertex Shader函数、Fragment Shader函数。
#pragma fragment name替换name,来指定Vertex Shader函数、Fragment Shader函数。
#pragma target name替换name(为2.0、3.0等)。设置编译目标shader model的版本。
#pragma multi_compile name替换name定义宏。#if defined (A)… #endif,如果宏声明,则执行定义内的代码。声明宏的方法:获取shader所在材质mat,mat.EnableKeyword(“name”)和mat.DisableKeyword(“name”)对宏A进行定义和移除。

ComputeScreenPos:位于UnityCG.cginc中,用于将裁剪空间坐标范围从[-w,w]映射到[0,w](不做透视除法,直接插值),像素着色器中用的时候一般除以w映射到[0,1]作为纹理(比如深度纹理)的uv值;

tex2Dproj:与tex2D相似,不过输入的uv一般是上面ComputeScreenPos计算出的值,用的时候要除以w做个映射;

UNITY_PROJ_COORD:处理平台差异,一般直接返回输入的值;

SAMPLE_DEPTH_TEXTURE:位于HLSLSupport.cginc,一般用于获取深度纹理的颜色,直接输入uv;

SAMPLE_DEPTH_TEXTURE_PROJ:基本同上,不过输入的uv也是上面ComputeScreenPos计算出的值,内部用tex2Dproj实现;

LinearEyeDepth:unity中,我们从深度图中获取的值一般不能直接使用(一般是一个与观察空间的z值倒数线性相关的值),因此需要将其转化到观察空间的z值来使用,这个函数就是这个作用;

Linear01Depth:将上述得到的z值映射到[0,1]范围;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值