undeclared identifier ‘UNITY_PREV_MATRIX_M‘ - Unity Shader自己写URP,引用内部 hlsl

碰到这样的问题,居然非常淡定

这个链接里说了问题:

一个哥们A问,为什么include urp common.hlsl 提示莫名其妙

另一个哥们B说,这个issue 说了,可能是这个原因(也没正面答)

从issue我们知道:

(问题出在12.0.0 2021年-01月更新的版本,添加了_PREV_MATRIX_M这两个宏)

为了? motion vector Rendering?我们甚至不知道这个是TMD Vector渲染是做啥的

还只是为了,GPUInstance

结果,就是新版本 12.0之后,2021年过年回来,就不能直接调用内部的 hlsl

链接

https://www.reddit.com/r/Unity3D/comments/12gqxbc/undeclared_shader_defines/

居然发现在搜索栏,这里,直接输入,相当于全局搜索,可以查到所有相关,可方便阅读代码

解决方法

//就是很粗暴的添加 define 引用
//公共方法库
#ifndef CUSTOM_COMMON_INCLUDED
#define CUSTOM_COMMON_INCLUDED
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Common.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/CommonMaterial.hlsl"
#include "UnityInput.hlsl"
//定义一些宏取代常用的转换矩阵
#define UNITY_MATRIX_M unity_ObjectToWorld
#define UNITY_MATRIX_I_M unity_WorldToObject
#define UNITY_MATRIX_V unity_MatrixV				//这些定义,估计也是被替换掉,很可能不生效
#define UNITY_MATRIX_VP unity_MatrixVP				//这些定义,估计也是被替换掉,很可能不生效
#define UNITY_MATRIX_P glstate_matrix_projection 	//这些定义,估计也是被替换掉,很可能不生效

//这里不行:#define UNITY_PREV_MATRIX_M (float4x4)0

//获取值的平方
float Square (float v) {
	return v * v;
}

#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/UnityInstancing.hlsl"
#define UNITY_PREV_MATRIX_I_M (float4x4)0
#define UNITY_PREV_MATRIX_M (float4x4)0
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/SpaceTransforms.hlsl"
#endif

结果没提示出错了

后续有什么隐藏问题不确定,至少是不出错了

上一篇:React 的 useId 怎么使用


下一篇:VSCODE驯服日记(四):配置SFML图形环境