优化WebGL中Z-Fighting(Depth-Fighting)的一个小技巧

29 篇文章 2 订阅
7 篇文章 0 订阅

由于GPU计算数据(存储数据)的精度问题, Z-Fighting在实时渲染中很常见。解决Z-Fighting有很多小技巧,这里说一个小技巧在WebGL运行环境下优化这类问题,尤其是在多Pass多重材质的应用场景中。

如下方式写顶点shader就能防止Z-Fighting问题。


#version 300 es

precision mediump float;

layout(location = 0) in vec3 a_vs;
layout(location = 1) in vec2 a_uvs;

uniform mat4 u_objMat;
uniform mat4 u_viewMat;
uniform mat4 u_projMat;

out vec2 v_uv;

vec4 localPosition;
vec4 worldPosition;
vec4 viewPosition;

void main() {

    localPosition = vec4(a_vs.xyz,1.0);
    worldPosition = u_objMat * localPosition;
    viewPosition = u_viewMat * worldPosition;
    gl_Position = u_projMat * viewPosition;
    v_uv = a_uvs.xy;

}

上述代码,使用了全局变量。

效果如下图:

 如果用如下形式代码,则会出现Z_Fighting问题:


#version 300 es

precision mediump float;

layout(location = 0) in vec3 a_vs;
layout(location = 1) in vec2 a_uvs;

uniform mat4 u_objMat;
uniform mat4 u_viewMat;
uniform mat4 u_projMat;

out vec2 v_uv;

void main() {

    vec4 lpos = vec4(a_vs.xyz,1.0);
    vec4 wpos = u_objMat * lpos;
    vec4 vpos = u_viewMat * wpos;
    gl_Position = u_projMat * vpos;
    v_uv = a_uvs.xy;

}

上述代码,使用了局部变量。

有Z-Fighting的效果如下图:

 renderDoc查看结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
webgl-fingerprint-defende.crx 是一个浏览器扩展文件,它的作用是提供WebGL指纹防御功能。WebGL是一种用于在网页浏览器渲染3D图形的技术,而指纹则是通过收集浏览器和计算机的信息来识别用户身份的一种方法。 通常,浏览器会从操作系统和硬件收集一些信息来创建一个独特的指纹识别码。这个识别码可以随着浏览器的使用而变化,因此可以用作用户识别。然而,一些网站可能会滥用这种技术来跟踪用户的在线行为,侵犯用户隐私。 webgl-fingerprint-defende.crx 文件可以帮助用户保护自己的隐私,防止被WebGL指纹识别出来。它通过修改浏览器的WebGL指纹数据,使之变得随机或无法识别。这样,即使网站尝试使用WebGL指纹进行用户跟踪,也无法准确识别用户的真实身份。 使用 webgl-fingerprint-defende.crx 文件可以有效地防止被WebGL指纹追踪,保护用户的个人隐私。它的安装和使用也非常简单,只需将文件添加到浏览器的扩展管理页面即可。然后,在用户浏览网页时,该扩展将自动激活并对WebGL指纹进行保护。 需要注意的是,虽然这个扩展可以有效防止WebGL指纹追踪,但在使用时仍需注意个人隐私的其他方面。同时,由于浏览器和WebGL技术的不断更新和演变,扩展的效果可能会有所变化。因此,保持扩展的更新和关注相关的隐私保护措施是很重要的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值