当前位置:网站首页>HDRP Custom Pass Shader 获取世界坐标和近裁剪平面坐标
HDRP Custom Pass Shader 获取世界坐标和近裁剪平面坐标
2022-08-11 09:08:00 【凌晨出没的东熊】
获取世界坐标
posInput的坐标需要再加上相机的坐标,蜜汁小小坑…
float3 ws = _WorldSpaceCameraPos + posInput.positionWS;

获取近裁剪平面坐标
用到函数 ComputeWorldSpacePosition()。
float3 nearPositionWS = ComputeWorldSpacePosition(posInput.positionNDC, 1, UNITY_MATRIX_I_VP);
nearPositionWS += _WorldSpaceCameraPos;
这个函数的内部实现当然还是用NDC坐标推世界空间坐标,但此处参数传入的是屏幕坐标UV。(虽然他命名成NDC- -,但实际上是屏幕坐标UV,左下角(0, 0) , 右上角(1, 1))
另外,此处近平面深度是1,远平面是0。
这篇链接详细推导了如何使用NDC坐标和深度推导世界空间坐标。上善若水_2019-根据深度信息重建屏幕像素在世界中的坐标-简书
在顶点着色器中实现
注释掉引用 CustomPassCommon.hlsl 的那一行,把 CustomPassCommon.hlsl 里面的内容复制到你的着色器中,解锁顶点着色器。
把顶点着色器中的代码更改成这样子
struct Varyings
{
float4 positionCS : SV_POSITION;
// 增加一个寄存器
float3 positionWS : TEXCOORD0;
UNITY_VERTEX_OUTPUT_STEREO
};
Varyings Vert(Attributes input)
{
Varyings output;
UNITY_SETUP_INSTANCE_ID(input);
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
// 注释掉
// output.positionCS = GetFullScreenTriangleVertexPosition(input.vertexID, UNITY_RAW_FAR_CLIP_VALUE);
// 改成
float2 uv = float2((input.vertexID << 1) & 2, input.vertexID & 2);
output.positionCS = float4(uv * 2.0 - 1.0, UNITY_RAW_FAR_CLIP_VALUE, 1.0);
float3 nearPositionWS = ComputeWorldSpacePosition(uv, 1, UNITY_MATRIX_I_VP);
nearPositionWS += _WorldSpaceCameraPos;
output.positionWS = nearPositionWS;
return output;
}
边栏推荐
- Software custom development - the advantages of enterprise custom development of app software
- PowerMock for Systematic Explanation of Unit Testing
- kali渗透测试环境搭建
- 【无标题】超时超时超时超时超时
- excel将数据按某一列值分组并绘制分组折线图
- 刷题错题录2-向上取整、三角形条件、字符串拼接匹配、三数排序思路
- 工业检测深度学习方法综述
- 自定义卷积核的分组转置卷积如何实现?
- Redis的客户端连接的可视化管理工具
- pycharm中绘图,显示不了figure窗口的问题
猜你喜欢
随机推荐
《价值》读书与投资
程序员是一碗青春饭吗?
第一次因没有找到iframe元素而怀疑selenium4是不是有bug?
golang string manipulation
2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号
Openlayers Aggregate Graph, Weight Aggregate Graph, and Aggregate Graph Click Events
kali渗透测试环境搭建
Detailed Explanation of the Level 5 Test Center of the Chinese Institute of Electronics (1)-string type string
Song of the Cactus - Massive Rapid Expansion (1)
dsu on tree(树上启发式合并)学习笔记
How to use QTableWidget
Getting Started with Kotlin Algorithms Calculating Prime Numbers and Optimization
canvas文字绘制(大小、粗体、倾斜、对齐、基线)
ASP.NET Core 6框架揭秘实例演示[32]:错误页面的集中呈现方式
基于 VIVADO 的 AM 调制解调(1)方案设计
新一代开源免费的轻量级 SSH 终端,非常炫酷好用!
基础SQL——DDL
pycharm中绘图,显示不了figure窗口的问题
Has legal counsel become a tasteless product of law firms?
redis模拟面试






![ASP.NET Core 6框架揭秘实例演示[32]:错误页面的集中呈现方式](/img/c9/93ab353c4908adaaae0da2cc3b6a3c.png)


