GPU Gems1 - 25 用纹理贴图进行快速过滤宽度的计算

这章介绍在片元shader中计算导数近似值的技术。这个技术把特别的值载入纹理mipmap的每个级别,以特殊的方式使用纹理映射硬件,计算出导数的结果,给出在屏幕上的像素间某个量的变化率。

Cg标准程序库提供ddx和ddy函数,计算任意关于x和y像素的导数,但是有些硬件不支持这些导数的计算(至少在写这本书的时候),本文提供了一个解决方案,可以基于纹理映射功能解决这个问题。

在程序纹理中需要特别注意shader的反走样,大致来说,不应该在单个点上计算程序函数的值,而是在面积上计算函数的平均值,更准确的说,就是要计算函数在当前像素和邻近像素之间的平均值。

a没有反走样,不能表现水平方向上的高频细节。b把过于高频的细节图案中移走消除失真,计算出正确的过滤宽度是关键

 用导数函数计算过滤宽度:

float filterwidth(float2 v)
{float2 fw = max(abs(ddx(v)), abs(ddy(v)));return max(fw.x, fw.y);
}

用纹理计算过滤宽度:用函数tex2D()所做的纹理贴图查询,可以自动地对纹理查询进行反走样,即使真实纹理坐标的像素异常地变化,适当过滤的纹理值还是能在每个像素的地方返回。基于在相邻像素上所计算的纹理坐标,硬件可以为每个查询决定过滤的纹理面积。我们以这样一种方式进行纹理查询:(1)为特定的纹理坐标租选择mipmap级别(2)利用这一点决定过滤宽度

先将宽度信息写入纹理中

再从根据输入的uv信息读出宽度信息

uniform sampler2D filterMap;float filterwidth(float2 uv)
{float log2width = (255./16.) * tex2D(filterMap, uv).x;return exp2(-log2width);
}

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246283.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c#基础知识(1)

简介:C# 是一个现代的、通用的、面向对象的编程语言,它是由微软(Microsoft)开发的,由 Ecma 和 ISO 核准认可的。 程序结构:引用命名空间、命名空间、类、方法、属性、语句。 数据类型:bool、byt…

GPU Gems1 - 24 高质量的过滤

在一些应用中,高质量的过滤是至关重要的,可以用像素shader代码执行任何过滤。GPU着色程序不用于CPU的主要之处在于:一般来说,CPU数学操作比纹理访问更快,而在GPU中恰恰相反。图像过滤的目的很简单:对于给你…

2021-04-05

见缝插针小游戏 结束动画 我们的结束动画很简单,就是把画面放大,把背景改成红色,再有一个停顿就可以了 1、对于放大画面和修改背景颜色的操作,在这里可以直接修改相机设置 我们要获取到Hierarchy窗口中的Main Camera,…

GPU Gems1 - 26 OpenEXR图像文件格式与HDR(The OpenEXR Image File Format and HDR)

【章节概览】 这章中,大名鼎鼎的工业光魔公司的Florian Kainz、Rod Bogart和DrweHess介绍了OpenEXR标准,这是一种当时新的高动态范围图像(HDRI)格式,在计算机成像的顶级电影中正在快速推广。对于基于图像照明的开发者…

2021-04-08

unity入门教程 创建开始界面 在场景中创建画布Canvas,然后制作开始界面。 首先在Canvas下新建一个空物体,命名为StartWnd。然后在StartWnd下新建一个Image,命名为imgTitle,SourceImage使用main图片。然后在StartWnd下新建一个Butt…

ID Tech 5 中Megatexture针对地形的D3D9 基本实现原理

看GPU Gems2中的 使用基于GPU几何体裁剪图的地形渲染(Terrain Rendering Using GPU-Based Geometry Clipmaps)一文,对Clipmap技术不是理解很好,所以上网搜索一番,发现了这篇文章,实在是太棒的文章&#xff…

2021-04-12

异步传输(Asynchronous Transmission):异步传输模式(Asynchronous Transfer Mode,缩略语为ATM) 异步传输一般以字符为单位, 起始位:先发出一个逻辑”0”信号,表示传输字符的开始。 空闲位:处于逻…

[知乎] 开放世界游戏中的大地图背后有哪些实现技术?

今天看到的一篇关于大世界的技术文章,写的太好了,膜拜大佬。各位如果有时间一定要看看 原文:http://gulu-dev.com/post/2014-11-16-open-world#toc_10 一、程序技术篇:算法和架构(Programming Algorithms & Arch…

角色控制器

一、简介 角色控制器(Character Controller)主要用于对第三人称或第一人称游戏主角的控制。 二、基本概念 第三人称游戏中的这些控制器由于无规律可循,所以无法遵守固定的物理规则,例如,让某辆车每小时跑 90 英里,但是它可能会突…

unity声音组件AudioSource的使用

一、AudioSource组件 AudioSource是音频源组件,其作用就是用于播放音频剪辑(AudioClip)资源。组件属性 (1)AudioClip(音频剪辑):指定播放的音频文件。 (2)O…

GPU Gems2 - 2 使用基于GPU几何体裁剪图的地形渲染(Terrain Rendering Using GPU-Based Geometry Clipmaps)

【章节概览】 本章描述了一种通过顶点纹理实现的,基于GPU的几何体裁剪图(Geometry Clipmaps)技术。通过把地形几何体当做一组图像来处理,可以在GPU上执行几乎所有的计算,因此可以减少CPU的负载。且该技术较为容易实现…

协程

协程介绍 协同程序与线程差不多,也就是一条执行序列,拥有自己独立的栈,局部变量和指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。线程与协同程序的主要区别在于,一个具有多线程的程序可以同时运行几个…

球谐光照

一.原理 球谐光照实际上是一种对光照的简化,对于空间上的一点,受到的光照在各个方向上是不同的,也即各向异性,所以空间上一点如果要完全还原光照情况,那就需要记录周围球面上所有方向的光照。注意这里考虑的周围环境往…

overload、override、new解释

重载、重写、覆写,分别指的是overload、override、new。 一、override重写,是在子类中重写父类中的方法,两个函数的函数特征(函数名、参数类型与个数)相同。用于扩展或修改继承的方法、属性、索引器或事件的抽象或虚拟…

图像色调,饱和度,对比度等相关定义

RGB颜色模型 RGB颜色模型也就是我们最常用的三原色,红绿蓝。RGB颜色模型在混色时属于加法混色,RGB中每种颜色数值越高,色彩越明亮。RBG为(0,0,0)时为黑色,RGB为(255,255,255)时为白…

各Rendering Path技术以及其在Unity中的实现

Rendering Path其实指的就是渲染场景中光照的方式。由于场景中的光源可能很多,甚至是动态的光源。所以怎么在速度和效果上达到一个最好的结果确实很困难。以当今的显卡发展为契机,人们才衍生出了这么多的Rendering Path来处理各种光照。 一. 正向渲染Fo…

射线碰撞

Physics.Raycast 光线投射 1.一个静态的发射射线的方法,在场景中投下可与所有碰撞器碰撞的一条光线。 参数解释: origin:射线起始点 direction:射线方向 distance:射线长度 layerMask:只选定Layermask层内的碰撞器,其它层内碰撞器忽略。…

GPU Gems2 - 3 几何体实例化的内幕(Inside Geometry Instancing)

文章部分内容摘自 https://zhuanlan.zhihu.com/p/38411575 【章节概览】 本章讨论了在Direct3D中渲染一个几何体的许多独特实例(Instance)的技术细节问题,对几何体实例(Geometry Instancing)的技术内幕进行了分析。 【…

Unity所有移动方法总结

简介 在Unity3D中,有多种方式可以改变物体的坐标,实现移动的目的,其本质是每帧修改物体的position。 通过Transform组件移动物体 Transform 组件用于描述物体在空间中的状态,它包括 位置(position), 旋转(rotation)和…

GPU Gems2 - 4 分段缓冲(Segment Buffering)

文章参照该文 https://zhuanlan.zhihu.com/p/38411575 【章节概览】 本章介绍了一项可以明显减少一个显示帧中渲染的批次数目的技术——分段缓冲(segment buffering),以及其改进。 【核心要点】 分段缓冲(segment buffering&…