HLSL 偏导数 ddx / ddy

2023-11-19

HLSL ddx / ddy

  在光栅化的时刻,GPUs会在同一时刻并行运行很多Fragment Shader,但是并不是一个pixel一个pixel去执行的,而是将其组织在2x2的一组pixels分块中,去并行执行。

  偏导数就正好是计算的这一块像素中的变化率。从下图可以看出来ddx 就是右边的像素块的值减去左边像素块的值,而ddy就是下面像素块的值减去上面像素块的值。其中的x,y代表的是屏幕坐标。

    

偏导数的应用

1、LOD的确定。

  

  大家应该都知道mipmap 的用处,但是可能并不知道mipmap的核心在选择到底用那一块mipmap的level时,靠的就是偏导数。屏幕空间的贴图UV偏导数过大的时候代表贴图离我们过远,就会选择低等级的mipmap。

  比如,原图的LOD=1,次大的LOD=2,依此类推。

  

  在Shader中使用tex2D(tex, uv)的时候相当于在GPU内部展开成下面:
    

tex2D(sampler2D tex, float4 uv)
{
    float lod = CalcLod(ddx(uv), ddy(uv));
    uv.w= lod;
    return tex2Dlod(tex, uv);
}

2、计算法线。

  如果调用ddx(Pos),和ddy(Pos)这个代表求出相邻的2个像素块之间坐标的差值,即下面图中的红色和绿色2个矢量,而这2个矢量都在这个三角形的平面上,那么执行 normalize( cross(ddx(pos),ddy(pos)) ) 就求出的面的法线。

  但是这里要注意,在HlSL上面,或者Unity上面要写成normalize( cross(ddy(pos),ddx(pos)) ),不然法线是反向的。这个是由于左右手坐标系引起的。

void surf (Input IN, inout SurfaceOutput o)

{

o.Albedo = normalize(cross(ddy(IN.worldPos),ddx(IN.worldPos)));

}

  

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;

}

  

  左边是直接显示图片,右边是在图片上面加上x和y的偏导数。

 【fwidth

  This function computes the following: abs(ddx(x)) + abs(ddy(x)).

  

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HLSL 偏导数 ddx / ddy 的相关文章

  • Unity学习笔记(一)—— 基础知识

    一 基础知识 1 开发团队组成 2 unity特点 图形界面 所见即所得 入门简单 支持C 比OC C 更友好 js 国内外资源丰富 因为使用的人多 跨平台性好 PC端 移动端等 对VR AR的支持最完善 3 成功案例 游戏 炉石传说 神庙
  • unity工程崩溃资源找回

    1 Unity死机未保存场景 当你在Unity中编辑场景 突然死机时 可以在项目文件目录中找到Temp文件夹 双击文件夹 找到 Backupscenes文件夹 把后缀为 backup的文件后缀改为 unity 然后拖进Unity的Proje
  • 【Unity】按Esc进入操作菜单

    本文章是基于如下视频的自我总结 https www youtube com watch v JivuXdrIHK0 步骤如下 1 在Canvas 界面添加一个Panel Panel中添加一个按钮 调整按钮的大小为合适大小 调整字体的大小为合
  • Unity3d获得android和ios设备的唯一标识

    android为mac地址 ios为advertisingIdentifier 函数都比较简单 网上也搜得到 我也就不多说了 主要是对于我们没做过安卓和IOS开发的人来说 整合进工程有各种的问题 我也就直接上网盘了点击打开链接 代码包里看得
  • java中Keytool的使用总结

    java中Keytool的使用总结 2011 02 26 15 30 15 分类 在申请Android Map API Key的时候使用到了java中Keytool 下面转一篇介绍java中Keytool的文章 http blog csdn
  • unity实现鼠标右键控制视角

    主要实现的功能是相机跟随主角 鼠标右击移动后 相机的视角会旋转 思路 在主角里创建空的子物体 把相机绑在空物体上 通过旋转空物体来实现视角的旋转 要把相机调整到适当位置 代码如下 public float rotateSpeed 100 设
  • Unity3D的四种坐标系

    1 World Space 世界坐标 我们在场景中添加物体 如 Cube 他们都是以世界坐标显示在场景中的 transform position可以获得该位置坐标 2 Screen Space 屏幕坐标 以像素来定义的 以屏幕的左下角为 0
  • Unity3d中脚本无法编译问题(Monodevelop)

    使用Monodevelop打开脚本 编译时报错 具体错误忘记了 原因是 net框架引起 升级到 net框架4 5后解决
  • 所有像素的高效像素着色器总和

    如何使用 HSLS 像素着色器有效计算图像中所有像素的总和 我对 Pixel Shader 2 0 感兴趣 我可以将其作为 WPF 着色器效果进行调用 有一个更简单的解决方案 不使用着色器 将图像加载为纹理 创建 mipmap 链并读回最后
  • 用于计算像素数的着色器

    我正在寻找一个着色器 CG 或 HLSL 它可以计算红色像素或我想要的任何其他颜色的数量 你可以这样做原子计数器在片段着色器中 只需测试输出颜色 看看它是否在一定的红色容差范围内 如果是 则增加计数器 绘制调用之后 您应该能够读取 CPU
  • swift 无法将 .m3u8 文件保存到图库

    我使用下面的方法下载我的视频并将其保存到图库 使用 mp4 可以正常工作 但是当更改为 m3u8 时 它总是失败 func downloadVideoLinkAndCreateAsset videoLink String fileName
  • Unity万向节死锁解决方案(2023/12/4)

    1 万向节死锁无法解决 这是因为它的特性就是如此 就像玻璃杯就是玻璃 这不可否认 别钻牛角尖昂 2 大多数情况下欧拉角足够用 例如 CF 摄像机不可能绕z轴旋转 x轴旋转也不会超过九十度 因为那样人物的腰子会被扭断 塔防游戏 保卫萝卜 吃鸡
  • 如何在C#项目中使用VS2012的自动HLSL编译?

    http blogs msdn com b chuckw archive 2012 05 07 hlsl fxc and d3dcompile aspx http blogs msdn com b chuckw archive 2012 0
  • 一次性渲染到完整的 3D 渲染目标

    使用 DirectX 11 我创建了一个可以绑定为渲染目标的 3D 体积纹理 D3D11 TEXTURE3D DESC texDesc3d texDesc3d Usage D3D11 USAGE DEFAULT texDesc3d Bind
  • 游戏开发常见操作梳理之NPC任务系统

    多数游戏存在任务系统 接下来介绍通过NPC触发任务的游戏制作代码 using System Collections using System Collections Generic using UnityEngine
  • 游戏开发常见操作梳理系列之——玩家信息的显示系统

    在游戏中 有不少游戏在左上角会出现玩家的头像和等级以及血量 这就是玩家的信息显示系统 那么这些是如何制作的呢 接下来我将讲讲代码的操作 其它操作我会在其它笔记中一一说明 敬请期待 信息的显示相当简单就是控制一些UI 然后在其它系统里面填写相
  • 游戏开发常见操作梳理之小地图的制作

    游戏中一般存在小地图系统 实际上就是设置一个新的摄像机放置在玩家的正上方 然后在小地图上显示新摄像机看见的东西就可以了 在小地图上一般存在放大地图和缩小地图的按钮可以方便放大和缩小地图 这些操作是如何实现的呢 接下来直接上核心代码 usin
  • 游戏开发常见操作系列之敌人系统的开发一(U3D)

    在开发游戏的过程中 我们常常会出现一些敌人攻击我们玩家 并且实现掉血以及死亡的现象 敌人还会源源不断地生成 这是怎么制作的呢 接下来为大家提供方法 其中使用了NGUI 后续会更新其它方法 敬请期待 使用HUDText实现扣血时显示文本 直接
  • 了解 dFdX 和 dFdY 的基础知识

    我读过很多关于行为的描述dFdX n and dFdY n 并且相信我仍然能够掌握学校的偏导数 我不明白的是 在最简单的示例中 n 来自哪里 读取glsl内置函数dFdx n and dFdy n 除了数学之外 没有任何背景 我会将它们解释
  • 在 HLSL 中绘制超级椭圆

    更新 关于如何使用超级公式绘制一个的答案在最后 I need to draw a rounded rectangle such as this one using a SuperEllipse http en wikipedia org w

随机推荐

  • Bootstrap-Table简单使用

    Bootstrap Table Bootstrap table 是一款基于 Bootstrap 的 jQuery 表格插件 功能比较完备 能够实现数据异步获取 编辑 排序等一系列功能 最可贵的是 只需要一些简单的配置就可以实现一个功能完备的
  • IDE + ChatGPT,这款编辑器真的做到可以自动写代码了!

    前言 Cursor 是集成了 GPT 4 的 IDE 工具 目前免费并且无需 API Key 支持 Win Mac Linux 平台 可以按要求生成代码 或者让 AI 帮助优化代码 分析代码 Cursor目前已经集成了openai的GPT
  • 月入过万——网店推广实战方法(第2版)

    月入过万 网店推广实战方法 第2版 本书以淘宝网为例 结合各种案例全面介绍了网店推广宣传的各种方法 手把手教读者如何运用这 些方法来增加网店的客流量和成交量 这些方法也同样适合于拍拍等网店 对其内容详细阅读
  • C++ 每个学生的数据包括:学号、姓名、3门课的成绩...

    1 每个学生的数据包括 学号 姓名 3门课的成绩 3门课的平均分 3门课的总分是 学生类的数据成员 实现以下功能 1 从键盘输入10个学生数据 2 打印出10个学生各课程的平均分 3 输出总分最高分同学的所有信息 Student h inc
  • 电商APP开源

    电商APP开源 https github com myxh CoolShopping 效果demo CoolShopping 一个仿拉手团购的购物App 采用Bmob后台实现短信验证码注册 登录 收藏 订单管理 自动更新等功能 数据抓取自拉
  • 数据结构--排序之快速排序

    个人主页 你帅你先说 欢迎点赞 关注 收藏 既选择了远方 便只顾风雨兼程 欢迎大家有问题随时私信我 版权 本文由 你帅你先说 原创 CSDN首发 侵权必究 快速排序基本思想及其代码实现 快速排序是Hoare于1962年提出的一种二叉树结构的
  • C++连接Mysql查询结果中文乱码问题

    在写项目时需要用到mysql数据库 使用select查询时查询结果中文全部变为问号 但是在Sql中查询结果正常 解决方案 MYSQL my fd mysql init NULL msyql query my fd set names utf
  • 电子元器件学习笔记2:电容器

    电容器 1 概述 电容器是一个电子元件 用于存储电荷和能量 它由两个导体板和介质组成 介质层位于两个导体板之间 当电容接入电路时 负电荷被存储在导体板上 并在两板之间产生电场 电容器的单位是法拉 F 一个法拉等于存储一库伦电荷所需的电势差为
  • JAVA中 成员变量和和实例变量一样吗

    Java语言支持的变量类型有 局部变量 成员变量 类变量 不一样的 例如 public class A String id 实例变量 private String Tel 实例变量 private int size 实例变量 private
  • SIP与RTP综合应用(转)

    SIP是一个会话协议 很多大企业都在用 通信行业的一个标准 其业务逻辑比较 简单地来说如下 User Agent Server REGISTER gt lt 401 407 Unauthorized REG 带上用户口令 gt 200 OK
  • java单元测试覆盖率(clover+testng)

    1 testng 介绍 TestNG是一个旨在简化各种测试需求的测试框架 从单元测试 将一个类与其他类分开测试 到集成测试 对由多个类 几个程序包甚至几个外部框架组成的整个系统进行测试 开源免费 基于以maven组件的形式 引入项目 需要修
  • 分享维基百科里的深度学习简介

    简介 编辑 深度学习框架 尤其是基于人工神经网络的框架可以追溯到1980年福岛邦彦提出的新认知机 2 而人工神经网络的历史更为久远 1989年 燕乐存 Yann LeCun 等人开始将1974年提出的标准反向传播算法 3 应用于深度神经网络
  • 【Electron-Vue】构建桌面应用(41)- Electron程序第一次启动时会有短暂的空白页面

    使用Electron开发的时候 会发现安装后第一次启动会出现短暂的空白大概是1 3秒不等 起初是以为在创建窗口的时候会去加载html页面 在加上vue组件的渲染 导致在启动的时候会出现几秒的空白页面 然后渲染之后 就能正常显示 之后的下次启
  • 数据分析整体框架之落地全流程讲解

    小飞象 交流会 人生没有四季 只有两季 努力就是旺季 不努力就是淡季 内部交流 11期 数据分析整体框架 之落地全流程 data analysis 分享人 刘珍珍 数据分析的目的是把隐藏在杂乱无章的数据背后的信息集中和提炼出来 总结出研究对
  • 突破自定义View性能瓶颈

    在Android应用程序中 自定义View是一个非常常见的需求 自定义View可以帮助您创建独特的UI元素 以满足您的应用程序的特定需求 然而 自定义View也可能会导致性能问题 特别是在您的应用程序需要处理大量自定义View的情况下 在本
  • ssm分离增删改查总结

    1后台api 知识点 spring核心 springMVC MyBatis SSM整合实质 service中要访问到mapper 要求mapper代理的对象要交给spring容器 mybatis的事务管理能力弱 事务管理交给spring 搭
  • QT模拟鼠标事件,实现点击双击移动拖拽等

    之前有涉及过一个远程桌面控制的项目 需要传一些指令给远程的电脑 实现简单的桌面点击 移动 拖拉等功能 当时没有时间实现得很好 今天又研究了一下 故此记录 虽然我用的是QT 但核心涉及的还是系统的API 所以其他平台应该也是一样的 废话不多说
  • 决战k8s,Kubernetes、Master节点部署组件,部署kube-proxy、测试、部署Dashboard(Web UI)、超细详解 ,安装篇③完结篇

    文章目录 下面这些操作在master节点完成 创建kubeconfig文件 创建kube proxy kubeconfig文件 下面这些操作在node节点完成 俩个节点上面拉取镜像 systemd管理kubelet组件 部署kube pro
  • 软件测试金融测试岗位,本人亲面

    网上银行转账是怎么测的 设计一下测试用例 回答思路 宏观上可以从质量模型 万能公式 来考虑 重点需要测试转账的功能 性能与安全性 设计测试用例可以使用场景法为主 先列出转账的基本流和备选流 然后设计场景 最后根据场景设计数据 实际面试中需要
  • HLSL 偏导数 ddx / ddy

    HLSL ddx ddy 在光栅化的时刻 GPUs会在同一时刻并行运行很多Fragment Shader 但是并不是一个pixel一个pixel去执行的 而是将其组织在2x2的一组pixels分块中 去并行执行 偏导数就正好是计算的这一块像