经验证,原来ddx/ddy这两个操作,在forward rendering与deferred rendering中存在着微妙的应用区别。

在forward rendering中,GPU shader会自动地判断其2x2像素区域是否仅有部分落在当前绘制的三角面所覆盖的光栅化interpolate范围内。

而在dr中,当将ddx/ddy操作应用于一个render target(即NDC quad)时,GPU shader这一免费的“合法性校验”操作便失效了。用于计算ddx/ddy的2x2像素区域有可能一部分位于模型的三角面A、而另一部分则位于模型的三角面B。也就是说:参与ddx/ddy运算的像素,有可能超出了模型中同一三角面的插值范围,从而导致ddx/ddy得到错误的结果,进而导致模型edge上的artifacts。这一问题在dr中使用像素world(或view)坐标重建几何法线时(normalize(cross(ddx(posW), ddy(posW)))),尤为突出。

总结:ddx/ddy与forward rendering的兼容性更佳。使用ddx/ddy,切记一定要确保其2x2区域位于同一三角面的光栅化范围内,不能跨三角面。在deferred rendering中,GPU shader不会自动地保障上述前提成立,所以没有引入其他额外机制的前提下,宜避免使用ddx/ddy计算几何法线。

附图1:deferred rendering,使用ddx/ddy重建法线,注意到edge上存在artifacts

附图2:forward rendering,使用ddx/ddy计算法线,注意到不存在edge artifacts

经验证,原来ddx/ddy这两个操作,在forward rendering与deferred rendering中存在着微妙的应用区别。

在forward rendering中,GPU shader会自动地判断其2x2像素区域是否仅有部分落在当前绘制的三角面所覆盖的光栅化interpolate范围内。

而在dr中,当将ddx/ddy操作应用于一个render target(即NDC quad)时,GPU shader这一免费的“合法性校验”操作便失效了。用于计算ddx/ddy的2x2像素区域有可能一部分位于模型的三角面A、而另一部分则位于模型的三角面B。也就是说:参与ddx/ddy运算的像素,有可能超出了模型中同一三角面的插值范围,从而导致ddx/ddy得到错误的结果,进而导致模型edge上的artifacts。这一问题在dr中使用像素world(或view)坐标重建几何法线时(normalize(cross(ddx(posW), ddy(posW)))),尤为突出。

总结:ddx/ddy与forward rendering的兼容性更佳。使用ddx/ddy,切记一定要确保其2x2区域位于同一三角面的光栅化范围内,不能跨三角面。在deferred rendering中,GPU shader不会自动地保障上述前提成立,所以没有引入其他额外机制的前提下,宜避免使用ddx/ddy计算几何法线。

附图1:deferred rendering,使用ddx/ddy重建法线,注意到edge上存在artifacts

附图2:forward rendering,使用ddx/ddy计算法线,注意到不存在edge artifacts

关于ddx/ddy重建法线在edge边沿上的artifacts问题相关推荐

  1. Unity Shader - ddx/ddy偏导函数测试,实现:锐化、高度图、Flat shading应用、高度生成法线

    文章目录 ddx, ddy 说明 DirectX - ddx, ddy OpenGL - dFdx, dFdy 伪代码表示 可用它来做什么 简单的边缘突出应用 Shader 边缘突出-锐化-增加差值 ...

  2. HLSL 偏导数 ddx / ddy

    [HLSL ddx / ddy] 在光栅化的时刻,GPUs会在同一时刻并行运行很多Fragment Shader,但是并不是一个pixel一个pixel去执行的,而是将其组织在2x2的一组pixels ...

  3. hlsl函数 ddx ddy

    hlsl函数 ddx ddy 这两条指令用于对指定的寄存器,求其值在临近像素上的变化率,因为纹理坐标的梯度可以用来确定纹理当前被缩放的程度,可用该值来计算Mip层,另外它也可以用来计算Texel的跨越 ...

  4. C for Graphic:ddx/ddy

    最近有被群里好友问ddx/ddy的问题,本着帮助他人且提升自己的初衷,来一篇博客. ddx(a):returns approximate partial derivative with respect ...

  5. 在 Microsoft Edge 浏览器上安装 Vue 项目调试扩展插件 Vue-Devtools

    在 Microsoft Edge 浏览器上安装 Vue 项目调试扩展插件 Vue-Devtools Vue-Devtools 插件是一个 Vue 项目的调试插件 Microsoft Edge 浏览器是 ...

  6. 【关键字】ddx ddy 导数函数

    @[TOC] shader 关键字 原文链接:http://www.aclockworkberry.com/shader-derivative-functions/#footnote_3_1104 导 ...

  7. 如何获取edge浏览器上好看的高清主题壁纸

    今天在edge上看到了个还不错的主题,换上去的效果如下: 帅啊这个壁纸,所以想换到我的电脑桌面上,但是如何获取这种主题壁纸呢? 在浏览器首页  右键  -- 检查 -- 点击控制面板左上角的箭头,然后 ...

  8. Microsoft Edge浏览器上不了网,其他浏览器可以

    怀疑是VPN缘故,使用VPN后就可以上百度了.但是不科学. 最终解决: 打开设置-->隐私.搜索和服务 右侧鼠标滚到  安全性 当初抽风选了 谷歌的服务商,我们都访问不了这个服务商,怎么能用它. ...

  9. DCC - Photoshop - Nvidia NormalMapFilter - 法线生成工具 - 顺便测试 Unity URP 12.1 中的 Decal System

    文章目录 NVIDIA Texture Tools Exporter 下载.安装 法线生成素材图 扣干净无用像素 使用 NVIDIA Normal Map Filter 生成贴图 配置好 URP Re ...

最新文章

  1. not exists 跟not in 纪念一下
  2. 《因果科学周刊》第6期:领域自适应
  3. 2019年软件测试现状调查
  4. LeetCode Climbing Stairs
  5. 初识Entity Framework CodeFirst(3)
  6. Effective Java之慎用可变参数(四十二)
  7. 华为云hcip认证试题_首信AAA认证计费系统通过华为云兼容性认证,成为华为认证级ISV伙伴...
  8. 神剑仙缘java_异界修真-神剑仙缘
  9. 现代操作系统第三版高清.pdf中文版免费下载
  10. 排序数字英文字母交错,由小到大
  11. Java教程:Java String字符串和整型int的相互转换
  12. Android蓝牙开发浅析
  13. ACM程序设计选修课——1036: Hungar的菜鸟赛季(YY)
  14. Servlet chapter 2
  15. SoapUI:mock service的使用
  16. RK3568开发笔记-buildroot移远EC20模块调试记录
  17. sql server 2008完全卸载工具
  18. 未能连接到驱动人生服务器,更新显卡驱动提示“无法连接到Nvidia”,驱动人生来解决。...
  19. 生意宝,淘宝,唯品会,58同城,去哪儿背后的赚钱生意经(转)
  20. 详述 MySQL 中的行级锁、表级锁和页级锁

热门文章

  1. 大华的支持rtmp推流吗_RTSP安防摄像机(海康大华宇视等)如何推送到RTMP流媒体服务器进行直播...
  2. java 线程的join_多线程中join()
  3. word如何调整字间距离_大篇幅文字如何排版才能赏心悦目?
  4. 修改网页代码_网站建设中使用简洁规范代码的重要性
  5. python中debug有什么用途_Python debug 总结
  6. mysql5.7.11 linux_CentOS 7 中以命令行方式安装 MySQL 5.7.11 for Linux Generic 二进制版本教程详解...
  7. mysql 服务账号_MySql 账号管理
  8. java file用法_Java File 类的使用方法详解(转)
  9. SYBASE中生成所有建表语句的过程
  10. Flink学习笔记:搭建Flink on Yarn环境并运行Flink应用