unity shader 常用内置函数变量和语义

Unity Shader光照与变换函数
本文介绍了Unity Shader中用于处理光照及坐标变换的函数。包括从模型空间到世界空间的法线转换、获取不同空间下的观察方向和光照方向等。同时提到了一些常用的矩阵和变量如模型世界投影矩阵及环境光等。

函数:
float3 UnityObjectToWorldNormal(float3 norm) 把法线方向从模型空间转换到世界空间中
float3 WorldSpaceViewDir(float4 v) 返回模型空间点到摄像机的观察方向
float3 UnityWorldSpaceViewDir(float4 v) 返回世界空间中的点到摄像机的观察方向
float3 ObjSpaceViewDir(float4 v) 返回模型空间点到摄像机的观察方向
float3 WorldSpaceLightDir(float4 v) 返回模型空间点到光源的光照方向
float3 UnityWorldSpaceLightDir() 返回世界空间点到光源的方向
float3 ObjSpaceLightDir(float4 v) 返回模型空间点到光源的光照方向
float3 UnityObjectToWorldNormal(float3 norm) 把法线方向从模型空间转换到世界空间中
float3 UnityObjectToWorldDir(float3 dir) 把方向矢量从模型空间变换到世界空间中
float3 UnityWorldToObjectDir(float3 dir) 把方向矢量从世界空间转换到模型空间中
矩阵:
UNITY_MATRIX_MVP 模型世界投影矩阵
变量:
UNITY_LIGHTMODEL_AMBIENT 环境光
_LightColor0 光源颜色和强度信息
_WorldSpaceLightPos0 光源方向(不能处理复杂的光源类型)
unity_ObjectToWorld 模型转世界矩阵
unity_WorldToObject 与上相反

语义:
POSITION:指定顶点位置坐标值
SV_POSITION:标识经过顶点着色器变换后的顶点坐标
TEXCOORD:文理坐标,为pixel shader提供纹理颜色
TEXCOORD0,TEXCOORD1表示两层UV,有时候会有多个贴图贴在一处
TANGENT:顶点的切线方向

变量定义:
_Color (“Main Color”, Color) = (1,1,1,1)
_BumpMap(“Normal Map”, 2D) = “bump” {}
_Density (“Density”, Range(2,50)) = 30

Unity Shader语义是一种用于定义着色器代码中变量的标识符。它们可以提供有关变量的更多信息,例如变量的作用、数据类型使用方式。使用着色器语义可以使着色器代码更加简洁、易于阅读,并增加可维护性可扩展性。 在Unity中,着色器语义常用于顶点着色器片段着色器中。在顶点着色器中,通过使用语义变量,可以将模型空间下的顶点位置转换为裁剪空间下的位置,并对其他语义变量进行计算赋值。 在代码中,UnityObjectToClipPos函数被用来进行模型空间到裁剪空间的转换。这个函数Unity内置的函数,它将模型空间下的坐标转换为裁剪空间下的坐标。具体实现方式可能会因Unity版本平台而有所不同,但使用方法是一致的。 除了顶点着色器,语义还可以在片段着色器中使用。比如,在一个完整的代码案例中,我们可以使用纹理坐标法线语义来对表面进行着色。在表面着色器函数中,我们可以将纹理坐标主纹理的颜色值赋值给表面输出结构体,还可以将法线向量从世界空间变换到切线空间,并对其他表面输出结构体的变量进行计算赋值。 总之,Unity Shader语义为我们提供了一种方式来定义使用着色器代码中的变量,使其更具可读性可维护性,并且能够方便地与其他着色器渲染管线进行交互,同时也可以更方便地与外部程序进行交互。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值