gpt4 book ai didi

opengl - 用 fwidth 确定 miplevel

转载 作者:行者123 更新时间:2023-12-04 02:52:40 26 4
gpt4 key购买 nike

GLSL 函数 fwidth(p) 到底做了什么?

我知道它是这样实现的:

fwidth(p) = abs(dfdx(p)) + abs(dfdy(p)) 

但我不确定我是否明白了。

我在这里做一些基本的光线转换,并尝试计算所需的 miplevel。要找到 miplevel,请在光线撞击体积(在纹理空间中)的坐标上调用 fwidth。

// get 'derivate width' of sampling position
vec3 width = fwidth(current_position_in_texture_space * size_of_texture);
// get radius around current position in voxels
float range = length(width);


// calculate factor for interpolation (see below)
float factor = range / distance_from_camera_to_current_position;

在我的理解中,GLSL 将同步所有线程并计算与顶部和右侧相邻线程的导数。

在遍历期间我插值范围线性:

// during traversal
float new_range = distance_from_camera_to_current_position * factor;
// calculate mip level from voxel range
float level = log2(new_range);
// get new sampling stepsize
float stepsize = new_range * 0.5;

如果这是正确的级别,则应该是对当前位置进行采样所需的 mip 级别。但是目前体积采样步长太大了……尽管如果到相机的距离减小它会减小。

最佳答案

你做的事情有很多问题。

  • 为什么不让 GPU 自己选择正确的 miplevel?只需在踩踏位置上采样即可。

  • 您的缩放比例可能有误。

  • 让司机认真地为您选择合适的级别。

  • 思考三线性抽样的工作原理。然后考虑它如何适用于卷。

  • fwidth 不是确定 miplevel 的正确方法,即使您想要最近的一个。

  • 我有说让 GPU 进行多级选择吗?

  • fwidth 对于加快或减慢步进很有用

关于opengl - 用 fwidth 确定 miplevel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5911326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com