关于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这两个操作,在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问题相关推荐
- Unity Shader - ddx/ddy偏导函数测试,实现:锐化、高度图、Flat shading应用、高度生成法线
文章目录 ddx, ddy 说明 DirectX - ddx, ddy OpenGL - dFdx, dFdy 伪代码表示 可用它来做什么 简单的边缘突出应用 Shader 边缘突出-锐化-增加差值 ...
- HLSL 偏导数 ddx / ddy
[HLSL ddx / ddy] 在光栅化的时刻,GPUs会在同一时刻并行运行很多Fragment Shader,但是并不是一个pixel一个pixel去执行的,而是将其组织在2x2的一组pixels ...
- hlsl函数 ddx ddy
hlsl函数 ddx ddy 这两条指令用于对指定的寄存器,求其值在临近像素上的变化率,因为纹理坐标的梯度可以用来确定纹理当前被缩放的程度,可用该值来计算Mip层,另外它也可以用来计算Texel的跨越 ...
- C for Graphic:ddx/ddy
最近有被群里好友问ddx/ddy的问题,本着帮助他人且提升自己的初衷,来一篇博客. ddx(a):returns approximate partial derivative with respect ...
- 在 Microsoft Edge 浏览器上安装 Vue 项目调试扩展插件 Vue-Devtools
在 Microsoft Edge 浏览器上安装 Vue 项目调试扩展插件 Vue-Devtools Vue-Devtools 插件是一个 Vue 项目的调试插件 Microsoft Edge 浏览器是 ...
- 【关键字】ddx ddy 导数函数
@[TOC] shader 关键字 原文链接:http://www.aclockworkberry.com/shader-derivative-functions/#footnote_3_1104 导 ...
- 如何获取edge浏览器上好看的高清主题壁纸
今天在edge上看到了个还不错的主题,换上去的效果如下: 帅啊这个壁纸,所以想换到我的电脑桌面上,但是如何获取这种主题壁纸呢? 在浏览器首页 右键 -- 检查 -- 点击控制面板左上角的箭头,然后 ...
- Microsoft Edge浏览器上不了网,其他浏览器可以
怀疑是VPN缘故,使用VPN后就可以上百度了.但是不科学. 最终解决: 打开设置-->隐私.搜索和服务 右侧鼠标滚到 安全性 当初抽风选了 谷歌的服务商,我们都访问不了这个服务商,怎么能用它. ...
- DCC - Photoshop - Nvidia NormalMapFilter - 法线生成工具 - 顺便测试 Unity URP 12.1 中的 Decal System
文章目录 NVIDIA Texture Tools Exporter 下载.安装 法线生成素材图 扣干净无用像素 使用 NVIDIA Normal Map Filter 生成贴图 配置好 URP Re ...
最新文章
- not exists 跟not in 纪念一下
- 《因果科学周刊》第6期:领域自适应
- 2019年软件测试现状调查
- LeetCode Climbing Stairs
- 初识Entity Framework CodeFirst(3)
- Effective Java之慎用可变参数(四十二)
- 华为云hcip认证试题_首信AAA认证计费系统通过华为云兼容性认证,成为华为认证级ISV伙伴...
- 神剑仙缘java_异界修真-神剑仙缘
- 现代操作系统第三版高清.pdf中文版免费下载
- 排序数字英文字母交错,由小到大
- Java教程:Java String字符串和整型int的相互转换
- Android蓝牙开发浅析
- ACM程序设计选修课——1036: Hungar的菜鸟赛季(YY)
- Servlet chapter 2
- SoapUI:mock service的使用
- RK3568开发笔记-buildroot移远EC20模块调试记录
- sql server 2008完全卸载工具
- 未能连接到驱动人生服务器,更新显卡驱动提示“无法连接到Nvidia”,驱动人生来解决。...
- 生意宝,淘宝,唯品会,58同城,去哪儿背后的赚钱生意经(转)
- 详述 MySQL 中的行级锁、表级锁和页级锁
热门文章
- 大华的支持rtmp推流吗_RTSP安防摄像机(海康大华宇视等)如何推送到RTMP流媒体服务器进行直播...
- java 线程的join_多线程中join()
- word如何调整字间距离_大篇幅文字如何排版才能赏心悦目?
- 修改网页代码_网站建设中使用简洁规范代码的重要性
- python中debug有什么用途_Python debug 总结
- mysql5.7.11 linux_CentOS 7 中以命令行方式安装 MySQL 5.7.11 for Linux Generic 二进制版本教程详解...
- mysql 服务账号_MySql 账号管理
- java file用法_Java File 类的使用方法详解(转)
- SYBASE中生成所有建表语句的过程
- Flink学习笔记:搭建Flink on Yarn环境并运行Flink应用