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

Unity ddx与ddy

有关Unity的dx与dy的概念

引用的文章

1link
2link
3link
4link

有关概念

我们知道在光栅化的时刻,GPUs会在同一时刻并行运行很多Fragment Shader,但是并不是一个pixel一个pixel去执行的,而是将其组织在2x2的一组pixels分块中,去并行执行。而偏导数就正好是计算的这一块像素中的变化率。从上图可以看出来ddx 就是右边的像素块的值减去左边像素块的值,而ddy就是下面像素块的值减去上面像素块的值。其中的x,y代表的是屏幕坐标。
注意:偏导数ddx/y可以计算我们FragmentShader中任意的变量。向量,矩阵等等。

最终得出结论,2x2块中,4个像素的ddx共享一个值,4个像素的ddy共享一个值。ddx只与p(x,y)、p(x+1,y)有关,ddy只与p(x,y)、p(x,y+1)有关。无论ddx与ddy都与p(x+1,y+1)无关。

相关应用

1.Mipmap:(对UV求偏导的应用)

	ddx和ddy代表了相邻两个像素在设备坐标系当中的距离,据此可以判断应该使用哪一层的贴图LOD(如果贴图支持LOD,也就是MIPS)。这个距离越大表示三角形离开摄像机越远,需要使用更小分辨率的贴图;反之表示离开摄像机近,需要使用更高分辨率的贴图。也就是说,在开启贴图LOD功能的情况下,这两个值会被GPGPU的贴图单元自动参照,从而决定实际访问的MIPS层级

2.Flat Shader(对顶点做偏导的应用)

	通过对顶点的偏导数,就可以实现简单的顶点作色效果。而且不用顶点传入法线,也能求出模型的法线,原理如下:VertexShader,将顶点的Pos传入到FragmentShader中;在FragShader中,我们如果调用ddx(Pos),和ddy(Pos)这个代表求出相邻的2个像素块之间坐标的差值,即下面图中的红色和绿色2个矢量,而这2个矢量都在这个三角形的平面上,那么执行 normalize( cross(ddx(pos),ddy(pos)) ) 就求出的面的法线,但是这里要注意,在HlSL上面,或者Unity上面要写成normalize( cross(ddy(pos),ddx(pos)) ),不然法线是反向的。这个是由于左右手坐标系引起的。

3. 贴图勾边锐化(对贴图颜色求偏导的例子)

void surf (Input IN, inout SurfaceOutput o) {half4 c = tex2D(_MainTex, IN.uv_MainTex);//c += ddx(c)*2 + ddy(c)*2; //这行代码开启和关闭的效果o.Albedo = c.rgb;o.Alpha = c.a;
}
![效果图](https://img-blog.csdnimg.cn/062a035095c6416eba6dd107d9181fbc.png#pic_center)左边是直接显示图片,右边是在图片上面加上x和y的偏导数。
http://www.lryc.cn/news/181460.html

相关文章:

  • bootstrap.xml 和applicaiton.properties和applicaiton.yml的区别和联系
  • 基于被囊群优化的BP神经网络(分类应用) - 附代码
  • 我的第一个react.js 的router工程
  • XXPermissions权限请求框架
  • 远程代码执行渗透测试—Server2128
  • 阿里云关系型数据库有哪些?RDS云数据库汇总
  • Linux--socket编程--服务端代码
  • 安装Vue脚手架图文详解教程
  • 宠物医院必备,介绍一款宠物疫苗接种管理软件
  • 哈哈,我保研985了,之后会出一期保研经验分享
  • C++ 程序员入门之路——旅程的起点与挑战
  • C/C++ 数组面试算法题
  • 【pwn入门】用gdb实现第1个pwn
  • 用pyinstaller打包LGBM模型为ELF/EXE可执行文件
  • 软考中级—— 操作系统知识
  • 我们是否真的需要k8s?
  • 基于蜉蝣优化的BP神经网络(分类应用) - 附代码
  • 前端系列-1 HTML+JS+CSS基础
  • Learning Invariant Representation for Unsupervised Image Restoration
  • 1.4.C++项目:仿muduo库实现并发服务器之buffer模块的设计
  • AndroidStudio精品插件集
  • java图书管理系统
  • 大屏自适应容器组件-Vue3+TS
  • java图书信息管理
  • apache服务器出现No input file specified.解决方案
  • 你写过的最蠢的代码是?——全栈开发篇
  • 正点原子嵌入式linux驱动开发——TF-A初探
  • 【网安别学成开发】之——python篇
  • vue图片显示
  • S32K144 GPIO编程