简介: 现在写着色器是真的感恩 IDE 提供的语法支持,不然版本一换,函数一变,那叫一个头疼,我目前用来写着色器的 IDE 是 Rider 直接就可以自动跳转方法定义,在更早之前使用的 sublimtext 装上 unity shader 和 hlsl 的插件就可以实现方法的自动跳转。
我就想知道目前的 unity shader 里的内置属性和函数有哪些,做一个全局了解,那今日就说一下
unity版本: 2022.3.54f1c1
管线: URP
跳转用的工具
- Rider 直接编辑着色器就可以自动补全相关函数和代码,也可以自动跳转到内置函数和属性的定义,我用的版本还有 ai 编程助手,按下回车都有可能把方法给你补全
- SumblimeText需要安装 Unity shader 、 HLSL 插件,也可以做到跳转内置函数和属性的定义,不过这个至少要打开shaderlab的文件夹,不是很智能,感觉就是全局的文件搜索与匹配,跳转有时候得自己选哪一个,没有Rider 舒服,所以强烈推荐 Rider
预览方式
内置函数预览
以 TransformObjectToWorld() 为例,我们在 Rider 内直接 Ctrl+鼠标左键点击,就可以跳转到 SpaceTransforms 文件,里面全是类似的空间转换函数,不得不说,shaderlab 的代码重构的越来越干净整洁规整了。
内置参数预览
以 _ProjectionParams为例,我们在 Rider 内直接 Ctrl+鼠标左键点击,就可以跳转到 UnityInput 文件,里面有很多内置属性什么屏幕参数,深度参数,投影参数,转换矩阵
常接触的几个文件
Core RP Library
Packages/com.unity.render-pipelines.core/ShaderLibrary/SpaceTransforms.hlsl 空间转换函数
Packages/com.unity.render-pipelines.core/ShaderLibrary/SphericalHarmonics.hlsl 球谐的编解码与转换函数
Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl real 类型的定义在这里,优化过的高速三角函数,数据的判断,纹理LOD level 的计算工具,线性深度的转换函数,terrain 的深度纹理编解码,还有一些不大常用的安全函数,例如安全除法,安全归一化
Packages/com.unity.render-pipelines.core/ShaderLibrary/GlobalSamplers.hlsl 预设的 SamplerState 指令
Packages/com.unity.render-pipelines.core/ShaderLibrary/ParallaxMapping.hlsl 常用视差计算函数
Universal RP
介绍几个有很多函数或属性我们都在用,却又了解补全的文件。
Packages/com.unity.render-pipelines.universal/ShaderLibrary/Input.hlsl 一些全局的输入属性,输入结构体,灯光参数,多光源等
Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl 自带的光照计算逻辑
Packages/com.unity.render-pipelines.universal/ShaderLibrary/UnityInput.hlsl 一些全局的输入属性, mvp 矩阵, time, 球谐等
Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl 常用处理输入数据的函数,归一化,类型判断,视角数据,深度转换,编码、解码等