LearnOpenGL学习笔记——视差贴图

LearnOpenGL——法线贴图、视差贴图学习笔记 我们将观察方向变化到切线空间中,所以P向量的x和y分量会与表面切线和副切线对齐,由于切线和副切线向量与表面纹理坐标的方向相同,我们可以用P的x和y元素作为纹理坐标的偏移量。目前,如果我们让平面竖直面对我们,此时效果正常,因为法线贴图中的法线方向指向z正方向并且平面的法线也指向z轴正方向。将法线向量的x、y、z元素储存到纹理中,代替颜色的r、g、b元素,因为法线向量的范围在[-1,1],所以我们要先将其映射到[0,1],变换为RGB颜色元素。法线向量从z轴方向也有向其他方向的偏差,颜色也就发生了轻微的变化。 阅读详情

视差贴图

视差贴图和法线贴图都是通过贴图上的信息在不增加模型表面顶点的情况下,来表现出物体表面的凹凸感的方法。

法线贴图是通过给每个像素上添加不同法线信息,从而改变光照着色的计算结果来达到模拟凹凸的效果。而视差贴图则是通过给每个像素添加上高度或深度信息,在贴图进行采样的时候,根据高度信息和视点方向对采样的 UV 坐标进行一定的偏移,来达到模拟凹凸的效果。

视差贴图属于位移贴图(Displacement Mapping)技术的一种,它对根据储存在纹理中的几何信息对顶点进行位移或偏移。一种实现的方式是比如有1000个顶点,根据纹理中的数据对平面特定区域的顶点的高度进行位移。这样的每个纹理像素包含了高度值纹理叫做高度贴图。一张简单的砖块表面的高度贴图如下所示:
在这里插入图片描述
整个平面上的每个顶点都根据从高度贴图采样出来的高度值进行位移,根据材质的几何属性平坦的平面变换成凹凸不平的表面。例如一个平坦的平面利用上面的高度贴图进行置换能得到以下结果:
在这里插入图片描述
置换顶点有一个问题就是平面必须由很多顶点组成才能获得具有真实感的效果,否则看起来效果并不会很好。一个平坦的表面上有1000个顶点计算量太大了。我们能否不用这么多的顶点就能取得相似的效果呢?事实上,上面的表面就是用6个顶点渲染出来的(两个三角形)。上面的那个表面使用视差贴图技术渲染,位移贴图技术不需要额外的顶点数据来表达深度,它像法线贴图一样采用一种聪明的手段欺骗用户的眼睛。视差贴图背后的思想是修改纹理坐标使一个fragment的表面看起来比实际的更高或者更低,所有这些都根据观察方向和高度贴图。为了理解它如何工作,看看下面砖块表面的图片:
在这里插入图片描述

这里粗糙的红线代表高度贴图中的数值的立体表达,向量V¯代表观察方向。如果平面进行实际位移,观察者会在点B看到表面。然而我们的平面没有实际上进行位移,观察方向将在点A与平面接触。视差贴图的目的是,在A位置上的fragment不再使用点A的纹理坐标而是使用点B的。随后我们用点B的纹理坐标采样,观察者就像看到了点B一样。

这个技巧就是描述如何从点A得到点B的纹理坐标。视差贴图尝试通过对从fragment到观察者的方向向量V¯进行缩放的方式解决这个问题,缩放的大小是A处fragment的高度。所以我们将V¯的长度缩放为高度贴图在点A处H(A)采样得来的值。下图展示了经缩放得到的向量P¯:
在这里插入图片描述
我们随后选出P¯以及这个向量与平面对齐的坐标作为纹理坐标的偏移量。这能工作是因为向量P¯是使用从高度贴图得到的高度值计算出来的,所以一个fragment的高度越高位移的量越大。

这个技巧在大多数时候都没问题,但点B是粗略估算得到的。当表面的高度变化很快的时候,看起来就不会真实,因为向量P¯最终不会和B接近,就像下图这样:
在这里插入图片描述
视差贴图的另一个问题是,当表面被任意旋转以后很难指出从P¯获取哪一个坐标。我们在视差贴图中使用了另一个坐标空间,这个空间P¯向量的x和y元素总是与纹理表面对齐。如果你看了法线贴图教程,你也许猜到了,我们实现它的方法,是的,我们还是在切线空间中实现视差贴图。

将fragment到观察者的向量V¯转换到切线空间中,经变换的P¯向量的x和y元素将于表面的切线和副切线向量对齐。由于切线和副切线向量与表面纹理坐标的方向相同,我们可以用P¯的x和y元素作为纹理坐标的偏移量,这样就不用考虑表面的方向了。
实现视差贴图
我们将使用一个简单的2D平面,在把它发送给GPU之前我们先计算它的切线和副切线向量;和法线贴图教程做的差不多。我们将向平面贴diffuse纹理、法线贴图以及一个位移贴图。这个例子中我们将视差贴图和法线贴图连用。因为视差贴图生成表面位移了的幻觉,当光照不匹配时这种幻觉就被破坏了。法线贴图通常根据高度贴图生成,法线贴图和高度贴图一起用能保证光照能和位移想匹配。
你可能已经注意到,上面链接上的那个位移贴图和教程一开始的那个高度贴图相比是颜色是相反的。这是因为使用反色高度贴图(也叫深度贴图)去模拟深度比模拟高度更容易。下图反映了这个轻微的改变:
在这里插入图片描述
我们再次获得A和B,但是这次我们用向量V¯减去点A的纹理坐标得到P¯。我们通过在着色器中用1.0减去采样得到的高度贴图中的值来取得深度值,而不再是高度值,或者简单地在图片编辑软件中把这个纹理进行反色操作,就像我们对连接中的那个深度贴图所做的一样。
位移贴图是在像素着色器中实现的,因为三角形表面的所有位移效果都不同。在像素着色器中我们将需要计算fragment到观察者到方向向量V¯所以我们需要观察者位置和在切线空间中的fragment位置。法线贴图教程中我们已经有了一个顶点着色器,它把这些向量发送到切线空间,所以我们可以复制那个顶点着色器:

#version 330 core
layout (location = 0) in vec3 position;
layout (location = 1) in vec3 normal;
layout (location = 2) in vec2 texCoords;
layout (location = 3) in vec3 tangent;
layout (location = 4) in vec3 bitangent;

out VS_OUT {
    vec3 FragPos;
    vec2 TexCoords;
    vec3 TangentLightPos;
    vec3 TangentViewPos;
    vec3 TangentFragPos;
} vs_out;

uniform mat4 projection;
uniform mat4 view;
uniform mat4 model;

uniform vec3 lightPos;
uniform vec3 viewPos;

void main()
{
    gl_Position      = projection * view * model * vec4(position, 1.0f);
    vs_out.FragPos   = vec3(model * vec4(position, 1.0));   
    vs_out.TexCoords = texCoords;    

    vec3 T   = normalize(mat3(model) * tangent);
    vec3 B   = normalize(mat3(model) * bitangent);
    vec3 N   = normalize(mat3(model) * normal);
    mat3 TBN = transpose(mat3(T, B, N));

    vs_out.TangentLightPos = TBN * lightPos;
    vs_out.TangentViewPos  = TBN * viewPos;
    vs_out.TangentFragPos  = TBN * vs_out.FragPos;
}

在这里有件事很重要,我们需要把position和在切线空间中的观察者的位置viewPos发送给像素着色器。
在像素着色器中,我们实现视差贴图的逻辑。像素着色器看起来会是这样的:

#version 330 core
out vec4 FragColor;

in VS_OUT {
    vec3 FragPos;
    vec2 TexCoords;
    vec3 TangentLightPos;
    vec3 TangentViewPos;
    vec3 TangentFragPos;
} fs_in;

uniform sampler2D diffuseMap;
uniform sampler2D normalMap;
uniform sampler2D depthMap;

uniform float height_scale;

vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir);

void main()
{           
    // Offset texture coordinates with Parallax Mapping
    vec3 viewDir   = normalize(fs_in.TangentViewPos - fs_in.TangentFragPos);
    vec2 texCoords = ParallaxMapping(fs_in.TexCoords,  viewDir);

    // then sample textures with new texture coords
    vec3 diffuse = texture(diffuseMap, texCoords);
    vec3 normal  = texture(normalMap, texCoords);
    normal = normalize(normal * 2.0 - 1.0);
    // proceed with lighting code
    [...]    
}

我们定义了一个叫做ParallaxMapping的函数,它把fragment的纹理坐标和切线空间中的fragment到观察者的方向向量为输入。这个函数返回经位移的纹理坐标。然后我们使用这些经位移的纹理坐标进行diffuse和法线贴图的采样。最后fragment的diffuse颜色和法线向量就正确的对应于表面的经位移的位置上了。我们来看看ParallaxMapping函数的内部:

vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir)
{ 
    float height =  texture(depthMap, texCoords).r;    
    vec2 p = viewDir.xy / viewDir.z * (height * height_scale);
    return texCoords - p;    
}

这个相对简单的函数是我们所讨论过的内容的直接表述。我们用本来的纹理坐标texCoords从高度贴图中来采样,得到当前fragment的高度H(A)。然后计算出P¯,x和y元素在切线空间中,viewDir向量除以它的z元素,用fragment的高度对它进行缩放。我们同时引入额一个height_scale的uniform,来进行一些额外的控制,因为视差效果如果没有一个缩放参数通常会过于强烈。然后我们用P¯减去纹理坐标来获得最终的经过位移纹理坐标。
有一个地方需要注意,就是viewDir.xy除以viewDir.z那里。因为viewDir向量是经过了标准化的,viewDir.z会在0.0到1.0之间的某处。当viewDir大致平行于表面时,它的z元素接近于0.0,除法会返回比viewDir垂直于表面的时候更大的P¯向量。所以,从本质上,相比正朝向表面,当带有角度地看向平面时,我们会更大程度地缩放P¯的大小,从而增加纹理坐标的偏移;这样做在视角上会获得更大的真实度。
有些人更喜欢不在等式中使用viewDir.z,因为普通的视差贴图会在角度上产生不尽如人意的结果;这个技术叫做有偏移量限制的视差贴图(Parallax Mapping with Offset Limiting)。
最后的纹理坐标随后被用来进行采样(diffuse和法线)贴图,下图所展示的位移效果中height_scale等于0.1
在这里插入图片描述
这里你会看到只用法线贴图和与视差贴图相结合的法线贴图的不同之处。因为视差贴图尝试模拟深度,它实际上能够根据你观察它们的方向使砖块叠加到其他砖块上。

在视差贴图的那个平面里你仍然能看到在边上有古怪的失真。原因是在平面的边缘上,纹理坐标超出了0到1的范围进行采样,根据纹理的环绕方式导致了不真实的结果。解决的方法是当它超出默认纹理坐标范围进行采样的时候就丢弃这个fragment:

texCoords = ParallaxMapping(fs_in.TexCoords,  viewDir);
if(texCoords.x > 1.0 || texCoords.y > 1.0 || texCoords.x < 0.0 || texCoords.y < 0.0)
    discard;

在这里插入图片描述

陡峭视差映射

当我们的视线方向和平面接近平行的时候,我们看过去的时候会产生一些问题,陡峭的地方产生不正确的结果。
在这里插入图片描述
陡峭视差映射(Steep Parallax Mapping)是视差映射的扩展,原则是一样的,但不是使用一个样本而是多个样本来确定向量P¯到B。即使在陡峭的高度变化的情况下,它也能得到更好的结果,原因在于该技术通过增加采样的数量提高了精确性。

陡峭视差映射的基本思想是将总深度范围划分为同一个深度/高度的多个层。从每个层中我们沿着P¯方向移动采样纹理坐标,直到我们找到一个采样低于当前层的深度值。看看下面的图片:
在这里插入图片描述
我们从上到下遍历深度层,我们把每个深度层和储存在深度贴图中的它的深度值进行对比。如果这个层的深度值小于深度贴图的值,就意味着这一层的P¯向量部分在表面之下。我们继续这个处理过程直到有一层的深度高于储存在深度贴图中的值:这个点就在(经过位移的)表面下方。

这个例子中我们可以看到第二层(D(2) = 0.73)的深度贴图的值仍低于第二层的深度值0.4,所以我们继续。下一次迭代,这一层的深度值0.6大于深度贴图中采样的深度值(D(3) = 0.37)。我们便可以假设第三层向量P¯是可用的位移几何位置。我们可以用从向量P3¯的纹理坐标偏移T3来对fragment的纹理坐标进行位移。你可以看到随着深度曾的增加精确度也在提高。

为实现这个技术,我们只需要改变ParallaxMapping函数,因为所有需要的变量都有了:

vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir)
{ 
    // number of depth layers
    const float numLayers = 10;
    // calculate the size of each layer
    float layerDepth = 1.0 / numLayers;
    // depth of current layer
    float currentLayerDepth = 0.0;
    // the amount to shift the texture coordinates per layer (from vector P)
    vec2 P = viewDir.xy * height_scale; 
    vec2 deltaTexCoords = P / numLayers;
  
    [...]     
}   

我们先定义层的数量,计算每一层的深度,最后计算纹理坐标偏移,每一层我们必须沿着P¯的方向进行移动。

然后我们遍历所有层,从上开始,直到找到小于这一层的深度值的深度贴图值:

// get initial values
vec2  currentTexCoords     = texCoords;
float currentDepthMapValue = texture(depthMap, currentTexCoords).r;

while(currentLayerDepth < currentDepthMapValue)
{
    // shift texture coordinates along direction of P
    currentTexCoords -= deltaTexCoords;
    // get depthmap value at current texture coordinates
    currentDepthMapValue = texture(depthMap, currentTexCoords).r;  
    // get depth of next layer
    currentLayerDepth += layerDepth;  
}

return texCoords - currentTexCoords;

这里我们循环每一层深度,直到沿着P¯向量找到第一个返回低于(位移)表面的深度的纹理坐标偏移量。从fragment的纹理坐标减去最后的偏移量,来得到最终的经过位移的纹理坐标向量,这次就比传统的视差映射更精确了。

有10个样本砖墙从一个角度看上去就已经很好了,但是当有一个强前面展示的木制表面一样陡峭的表面时,陡峭的视差映射的威力就显示出来了:
在这里插入图片描述

视差遮蔽映射(TODO)

总结

1.视差贴图也是为了使得视觉更加真实
2.视差贴图其实是计算遮挡关系,因为我们从实际眼睛看到的是A,但是因为有视差的原因,需要视线在B点的时候就看不下去(这里是因为高度导致的遮挡)。那么我们需要计算的就是,如何从A点找出B纹理采样点

vec2 ParallaxMapping(vec2 texCoords, vec3 viewDir)
{ 
    float height =  texture(depthMap, texCoords).r;    
    vec2 p = viewDir.xy / viewDir.z * (height * height_scale);
    return texCoords - p;    
}

在这里插入图片描述
3.陡峭视差映射
在这里插入图片描述

https://learnopengl-cn.github.io/05%20Advanced%20Lighting/05%20Parallax%20Mapping/

Learn OpenGL 26 视差贴图 视差贴图(Parallax Mapping)技术和法线贴图差不多,但它有着不同的原则。和法线贴图一样视差贴图能够极大提升表面细节,使之具有深度感。它也是利用了视错觉,然而对深度有着更好的表达,与法线贴图一起用能够产生难以置信的效果。视差贴图和光照无关,我在这里是作为法线贴图的技术延续来讨论它的。需要注意的是在开始学习视差贴图之前强烈建议先对法线贴图,特别是切线空间有较好的理解。视差贴图属于位移贴图(Displacement Mapping)技术的一种,它对根据储存在纹理中的几何信息对顶点进行位移或偏移。 阅读详情

相关推荐

【OpenGL】LearnOpenGL学习笔记25 - 法线贴图 NormalMap

LearnOpenGL学习笔记 - 法线贴图 NormalMap

Duo1J的随笔 1327

openGL中关于顶点的法线、切线、副切线

openGL系列文章目录 前言 我们在openGL中绘制球体,或者圆环体的时候,经常可以到法线、切线、副切线这几个词,一脸疑惑,特别是副切线,这时什么鬼? 一、法线(normal) 物体模型由成百上千个平坦的三角形围成.三角形上附加纹理的方式来增加额外细节. 提升真实感. 但是近看时,就有问题了.变成平面.缺乏细节.原因: 物体表面并非平坦的. 而是表示出无数(凹凸不平的)细节.如果以光的视角来看这个问题:是什么使表面被视为完全平坦的表面来照亮? 这时就需要法线 法线定义 三维平面的法线是垂直于该平面的三维

aoxuestudy的专栏 5918

Learn OpenGL 笔记6.6 Parallax Mapping(视差贴图)

Parallax Mapping视差贴图是一种类似于法线贴图的技术,但基于不同的原理。 Parallax Mapping视差贴图与 displacement mapping位移贴图(看样子是得位移顶点了)技术系列密切相关,这些技术基于存储在纹理中的几何信息来置换或偏移顶点。一种方法是取一个大约有 1000 个顶点的平面,并根据纹理中的一个值来置换每个顶点,该值告诉我们平面在该特定区域的高度。这种包含每个纹素高度值的纹理称为高度图。从简单砖表面的几何属性派生的示例高度图看起来有点像这样: 当跨越平面时

u013617851的博客 1062

视差贴图

1. 视差贴图 Parallax Mapping 1.1 视差贴图 理论介绍 1.1.1 位移贴图 — Displacement Mapping 1.1.2 法线贴图 – Normal Mapping 1.1.3 视差贴图 — Parallax Mapping 1.2 视差贴图 代码实现 1.3 示例代码 1.4 存在的问题 2. 浮雕贴图 Relief Mapping 2.1 浮...

u014767384的博客 3184

OpenGL 视差贴图 Parallax Mapping

OpenGL 视差贴图 Parallax Mapping视差贴图 Parallax Mapping简介视差贴图陡峭视差映射视差遮蔽映射 视差贴图 Parallax Mapping简介 视差贴图(Parallax Mapping)技术和法线贴图差不多,但它有着不同的原则。和法线贴图一样视差贴图能够极大提升表面细节,使之具有深度感。它也是利用了视错觉,然而对深度有着更好的表达,与法线贴图一起用能够产生难以置信的效果。视差贴图和光照无关,我在这里是作为法线贴图的技术延续来讨论它的。需要注意的是在开始学习视差贴图之

希望我的博客,能帮上你解决学习中工作中所遇到的问题 905

OpenGL Shader:法线贴图实例编程

通过加载模型的法线贴图,我们可以在渲染过程中模拟出物体表面的微小细节,从而增强视觉效果。当然,实际应用中可能涉及更多的光照计算和材质属性,但这个示例代码可以作为一个入门点,让你开始使用法线贴图技术。首先,让我们了解一下法线贴图的基本原理。在本文中,我们将探讨如何在OpenGL着色器中实现法线贴图效果,并提供相应的源代码。在顶点着色器中,我们将模型的顶点位置、纹理坐标、法线和切线作为输入属性,并将它们传递给片段着色器。使用上述着色器,我们还需要加载模型的纹理和法线贴图,并将它们绑定到相应的纹理单元上。

DevRevolt的博客 176

【OpenGL】LearnOpenGL学习笔记26 - 视差贴图 Parallax Map

LearnOpenGL学习笔记 - 视差贴图 Parallax Map

Duo1J的随笔 1333

Swift Package Manager (SPM) 创建并集成本地库

Swift Package Manager (SPM) 在macOS 项目中创建并集成的完整步骤

征战无悔人生 1423

LearnOpenGL学习笔记—高级光照 05:视差贴图

LearnOpenGL学习笔记—高级光照 05:视差贴图1 引入1.1 偏移方法一1.2 偏移方法二2 视差贴图3 陡峭视差映射4 视差遮蔽映射5 代码 本节对应官网学习内容:视差贴图 结合英文原站,中文站,以及个人实践进行描述(这一节英文原站描述有一些不合理之处,进行了更正)。 1 引入 视差贴图(Parallax Mapping)是一种类似于法线贴图的技术,但是基于不同的原理。 就像法线贴图一样,它是一种可以显着提高纹理表面的细节并赋予其深度感的技术。 虽然也是一种错觉,但视差贴图在传达深度感方面要好得

清清!的博客 2402

OneNet平台MQTT连接避坑指南:C语言Token计算实战(附完整代码)

本文详细解析了OneNet平台MQTT连接中的Token计算机制,提供了C语言实现的完整代码和实战指南。通过HMAC算法和Base64编码,开发者可以高效生成安全凭证,避免常见连接问题,适用于物联网设备开发。

weixin_29193359的博客 461

如何制作Mike21溢油模型围油栏文件

这段时间群友在做海洋环评的做了一个MIKE21的溢油模型,溢油模型其实也是ECOLAB模块的应用,而在海上发生溢油事件的时候,为防止溢油对海洋生态的破坏,经常使用的一种手段就是使用围油栏技术将溢油控制在一定范围并进行处理。今天小编就给大家说说在MIKE21里怎么实现围油栏文件的制作

zhuzhujiayoua的博客 1329

learnOpenGL 5.4 视差贴图

高度贴图 视差贴图要用到一副利用R通道储存片元高度的高度贴图,模拟在看到凹凸面的视差。 如图所示,如果这是一个3D的模型,我们沿黄线方向看到的应当是B点,如果是平面则会看到A点。按着这个逻辑,我们只要在贴图的A点显示B的内容,就可以假乱真,用平面贴图达到3D的效果。 所以,我们要做的工作,就是计算出B点,用它替换A点。 顺便一提,视差贴图一般与法线贴图一同使用,相辅相成。 视差计算 深度比高度更容易模拟,所以我们通常使用深度贴图取反来代替高度图。 寻找B点的过程如图所示,从T0点出发,将深度分成N份逐

qq_43533956的博客 296

S32K314 EB配置MCAL全模块讲解【Autosar——1 MCU模块详解】持续更新中

FIRC(fast internal RC Oscillator) :高速内部时钟,固定48MHZ;SIRC(Slow Internal RC Oscillator):低速内部时钟,固定32KHZ;FXOSC(Fast Crystal Oscillator Digital Controller):高速外部晶振(8-40MHZ),根据原理图选型进行配置;SXOSC():外部低速外部时钟,固定输入32.768KHZ;PLL_PHIn_CLK:时钟倍频锁相环时钟范围(640-1280MHZ);

qq_40488886的博客 1781

视差贴图--learnOpenGL

视差贴图

Navigated的博客 552

51单片机IAP技术详解:从原理到实战,实现远程程序自更新

在嵌入式系统开发中,程序更新是产品维护和功能迭代的核心需求。传统方式依赖外部烧录器,操作繁琐且无法远程进行。IAP(在应用中编程)技术则从原理层面解决了这一难题,它允许单片机在运行过程中通过特定接口(如串口)动态修改自身的Flash程序存储器。这项技术的核心价值在于赋予设备远程升级和自主维护的能力,极大地延长了产品生命周期并降低了维护成本。其典型应用场景包括智能家居控制器、工业数据采集模块和远程仪表等部署后不便拆卸的设备。本文以经典的51单片机(如STC89C52)为例,深入剖析IAP的实现,其中Bootl

weixin_29161719的博客 404

EDEM基础操作指南

EDEM(Enhanced Discrete Element Method)是一种用于模拟颗粒物料行为的软件工具。它可以模拟颗粒的碰撞、流动、堆积等过程,广泛应用于颗粒物料工程、振动筛分、堆垛机械、矿山开采等领域。本文将介绍EDEM的基础操作步骤,并提供相应的源代码示例。以上是EDEM的基础操作步骤。通过创建EDEM项目、定义颗粒材料、导入几何模型、设置边界条件、创建颗粒流场和运行模拟,您可以开始模拟颗粒物料的行为并进行相应的分析和优化。请根据您的具体需求和场景进行相应的参数设置和功能调用。

TrDelphi的博客 5293

LearnOpenGL笔记——五、高级光照:“法线贴图”和”视差贴图“

五、高级光照:“法线贴图”和“视差贴图” 5.4 法线贴图 以光照算法的视角考虑的话,只有一件事决定物体的形状,这就是垂直于它的法线向量 砖块表面只有一个法线向量,表面完全根据这个法线向量被以一致的方式照亮 如果每个fragment都是用自己的不同的法线会怎样?这样我们就可以根据表面细微的细节对法线向量进行改变;这样就会获得一种表面看起来要复杂得多的幻觉: 这种每个fragment使用各自的法线,替代一个面上所有fragment使用同一个法线的技术叫做法线贴图(normal mapping)或凹凸贴图(

weixin_44478658的博客 805

登临科技Goldwasser加速卡Python SDK实战:从环境配置到YOLOv5模型性能压测

本文详细介绍了登临科技Goldwasser加速卡的Python SDK实战指南,从环境配置到YOLOv5模型性能压测的全过程。通过驱动安装、SDK环境搭建、模型转换与推理优化等步骤,帮助开发者高效利用AI加速卡提升深度学习模型性能。重点分享了批量推理压测技巧和常见问题解决方案,助力开发者充分发挥Goldwasser加速卡的算力优势。

weixin_29035147的博客 300

LearnOpenGL-笔记-其十一

又到了介绍法线贴图的地方,我感觉我已经写了很多遍了...法线贴图用最简单的话来介绍的话,就是通过修改贴图对应物体表面的法线来修改光照效果,从而在不修改物体实际几何形状的前提下实现不同于物体几何形状的视觉效果。因此对于法线贴图来说,最重要的内容就是去修改法线贴图对于物体表面的法线。这是我们在物体的片元着色器实现的内容,就是根据法线贴图的内容更换法线。

lastXuanGod的博客 1126

【数字图像处理第四版课后习题答案】第2章 数字图像基础(含英文原版)

如图 P2.3 所示,视网膜图像中与点相对应的直径 x 是由类似的三角形得到的。即得出 x = 0.085d。根据第 2.1 节中的讨论,并结合一些自由解释,我们可以将眼窝视为一个方形传感器阵列,拥有大约 337,000 个元素,这相当于一个大约 580×580 个元素的阵列。假设元素间距相等,则在 1.5 毫米长的直线上有 580 个元素和 579 个空间,共计 1,159 个。换句话说,如果一个点的直径 d<1.3×10-6 m,或者 d<15.3×10 m,眼睛就无法检测到这个点。

weixin_56463218的博客 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

LearnOpenGL 学习笔记 高级光照

phong 模型中的高光项在视线方向和反射方向角大于 90 度时,反射项变为 0这导致了奇怪的效果因此现在计算一个半程向量,他是光线的方向向量和观察向量加到一起,并将结果正规化(Normalize)当视线正好与(现在不需要的)反射向量对齐时,半程向量就会与法线完美契合。所以当观察者视线越接近于原本反射光线的方向时,镜面高光就会越强。现在,不论观察者向哪个方向看,半程向量与表面法线之间的夹角都不会超过90度(除非光源在表面以下)。它产生的效果会与冯氏光照有些许不同,但是大部分情况下看起来会更自然一点,特别是低

hijackedbycsdn的博客 626

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【learnOpenGL】凹凸映射+Qt做的小Demo

(Parallax Mapping),模拟表面位移(Displacement),存储的是表面模型局部海拔高度的强度值(Intensity),颜色越深越凹,颜色越浅越凸。(Steep Parallax Mapping)通过增加采样数量提高精确性,是视差映射的扩展,采用多个样本来确定纹理偏移,即使在高度变化陡峭的情况下,也能得到不错的效果。(Parallax Occlusion Mapping)和陡峭视差映射的原则相同,但不是用触碰的第一个深度层的纹理坐标,而是在触碰之前和之后,在深度层之间进行线性插值。

qq_40621963的博客 567

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

LearnOpenGL——高级光照(中)

LearnOpenGL高级光照,法线映射、视差映射、HDR、泛光

qq_52179126的博客 609

LearnOpenGL 笔记(三)-高级光照

十五、Blinn-Phong 冯氏光照不仅对真实光照有很好的近似,而且性能也很高。但是它的镜面反射会在一些情况下出现问题,特别是物体反光度很低时,会导致大片(粗糙的)高光区域。 出现这个问题的原因是观察向量和反射向量间的夹角不能大于90度。 左图中是我们熟悉的冯氏光照中的反射向量,而右图中,视线与反射方向之间的夹角明显大于90度,这种情况下镜面光分量会变为0.0。引入了Blinn-Phong着色模型它对镜面光模型的处理上有一些不同。 Blinn-Phong模型不再依赖于反射向量,而是采用了所

qq_41061477的博客 1678

VS下用C++实现的简单3D射击游戏(附游戏文件与源工程代码)

记不得什么时候开始感兴趣写游戏代码了。开始的时候就只是写一些简单的小游戏,打台球,开小车,走迷宫,用一些2Dgraphics库,完成每个小作品后都很开心。后来一想,在现在的计算机设备条件下,2D太简陋了,于是开始着手做一个3D赛车游戏。说是赛车,实际上也就只有一辆小车。模型简陋而且贴图粗糙。但做完之后还是很开心的。毕竟,修改修改美工,多写点运动控制代码,也勉强算个小游戏。 然后,就想到开始做这个

qq_27412995的博客 2万+

LearnOpenGL——高级光照(七)HDR

HDR(高动态范围)渲染技术通过使用浮点帧缓冲存储超出[0.0,1.0]范围的颜色值,解决了传统LDR渲染中高亮区域细节丢失的问题。当多个亮光源导致颜色值超过1.0时,HDR允许保留完整的亮度信息,再通过色调映射将其转换为显示器可显示的LDR范围。文章介绍了两种色调映射算法:Reinhard算法均匀分布亮度值,而曝光算法通过调整曝光参数控制明暗区域表现。实现上,需创建GL_RGB16F等格式的浮点帧缓冲,在渲染管线后期应用色调映射和Gamma校正。这项技术能更真实地表现光照强度差异(如太阳与闪光灯),为场景

QQ805009795的博客 642
上一篇: Docker指南
下一篇: LearnOpenGL学习笔记——HDR
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值