当前位置: 首页 > news >正文

解答UnityShader学习过程中的一些疑惑(持续更新中)

一、坐标系相关

shader中会有几种空间:
模型空间:以物体自己为中心原点
世界空间:就是unity的世界坐标
观察空间(视图空间):以相机为中心的坐标系
裁剪空间:是一个4d空间,有x,y,z,w分量,x,y,z的范围,都是要在-w到w之间,否则会被裁剪。远处的物体的w值更大,靠近摄像机的w值更小.
NDC空间(归一化设备空间):这个是一个三维空间,有x,y,z分量。在对裁剪空间的x,y,z分别除以w,得到一个[-1,1]之间的坐标范围,这个归一化坐标就是NDC坐标

为什么要有这个w值呢?我们需要实现透视效果,即近大远小,实现的逻辑是将x,y,z分别除以w,在得到NDC空间
因为靠近相机的坐标w值更小,除以w后更大,坐标之间的差距越大,绘制出来的图像看起来越大;
远离摄像机的坐标w值更大,除以w后更小,坐标之间的差距越小,也就是汇聚于一点,这就使得物体看起来近大远小

二、坐标系在shader中的变化

在顶点着色器vert中,使用的是模型空间,在传入片元着色器之前,必须要先将这个模型坐标转换成裁剪空间下的坐标
这个转换过程是必须的,那么还要自己写转换,而不是shader自动做转换呢?因为我们可能会实现一些自定义效果,比如水面的波纹等效果

总结下坐标空间的通常用法如下:
模型空间:进入顶点着色器时传入的顶点坐标
世界空间:光照的坐标、光照的法线
裁剪空间:进入片元着色器时传入的坐标

相关文章:

  • 在 Spring Boot 中实现异常处理的全面指南
  • Callable Future 实现多线程按照顺序上传文件
  • 知识付费平台推荐及对比介绍
  • 更新日期自动填充
  • ESG跨境电商怎么样?esg跨境电商有哪些功用?
  • 【动手学大模型开发】使用 LLM API:ChatGPT
  • 使用Curl进行本地MinIO的操作
  • 30天通过软考高项-第六天
  • MTKAndroid12-13-开机应用自启功能实现
  • Vue 对话框出现时,为什么滚动鼠标还是能滚动底层元素
  • Spring系列四:AOP切面编程第三部分
  • 软件工程(一):黑盒测试与白盒测试
  • 如何在WordPress网站中设置双重验证,提升安全性
  • 打火机检测数据集VOC+YOLO格式925张1类别
  • 案例篇:如何用tcpdump和Wireshark识别潜在威胁
  • Finish技术生态计划: FinishRpc
  • 无线采发仪多通道 在结构健康与地质灾害监测中的应用 VS-Box振弦、温度及多信号采发仪
  • 【Vue.js】Vue3父子组件数据通信案例(基础案例)
  • Vue组件开发进阶:从通信原理到DOM异步更新实战
  • 【北京】昌平区某附小v3700存储双控故障维修案例
  • 外交部官方公众号发布视频:不跪!
  • “五一”假期,又有多地将向社会开放政府机关食堂
  • 一季度我国服务进出口总额19741.8亿元,同比增长8.7%
  • 文化润疆|让新疆青少年成为“小小博物家”
  • 日月谭天丨赖清德强推“脱中入北”是把台湾带向死路
  • 金融创新破局记:中小微企业转型背后的金融力量