cull/clip distance example

 

http://www.gamedev.net/topic/578866-d3d10-how-to-increase-maxcount-of-sv_clipdistance/

The D3D#_CLIP_OR_CULL_DISTANCE_* values are #defines in the d3d11.h header file. For distance count the value is 8 and for element count the value is 2. This means you can have any number of clip or cull values provide that their sum is 8 or less and that they must be fit into 2 vec4 registers.
 
In D3D10+ you have to code the math yourself in the shader to put the vertex through the plane equation and then store the resulting distance value in one of the registers. Values greater than or equal to zero should not be clipped/culled. The values you provide will be interpolated so that each pixel is clipped appropriately.
 
Here is an example, using just cull distance.
 


cbuffer ClipPlanes

{

        float4 planes[6];

};

 

struct VS_OUT

{

        float4 pos : SV_Position;

        float4 clips[2] : SV_CullDistance;

};

 

VS_OUT vsmain( float4 pos : SV_Position )

{

        VS_OUT vsout = (VS_OUT)0;

        vsout.pos = pos;

 

        for( uint i = 0; i < planes.Length; ++i )

        {

                ((float[8])vsout.clips)[i] = dot( planes[i].xyz, pos.xyz  ) - planes[i].w;

        }

 

        return vsout;

}

 

下面D3D文档中对ClipDistance和CullDistance的描述。gpu将会在体元装配阶段进行这些clip和cull操作。

image
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity的Cull是一种优化技术,作用是在场景渲染时排除掉不可见的物体。在实时渲染中,计算机需要处理大量的几何数据和纹理,而很多物体在相机视锥体内是不可见的,但仍然需要进行渲染计算,浪费了计算资源。 Unity的Cull通过早期剔除(Frustum Culling)和视锥体剔除(Occlusion Culling)来解决这个问题。早期剔除是基于相机的视锥体,将在视锥体外部或被其他物体遮挡的物体排除在渲染列表之外,从而节省了渲染的开销。视锥体剔除是对视锥体内物体的进一步处理,根据场景中相机视角的不同,确定哪些物体会被遮挡,可以在渲染前将这些被遮挡物体完全排除。 使用Unity的Cull能够大幅提高渲染的效率和性能,尤其是在复杂的场景中。通过排除不可见物体,可以降低CPU和GPU的负载,提高帧率,同时减少了内存和带宽的使用。这对于移动平台尤为重要,因为它们通常有限的计算和电池资源。 在开发中,可以通过在Inspector面板中启用Unity的Cull选项来开启此功能。在需要进行早期剔除和视锥体剔除的物体上,设置相应的参数,以确保只有可见的物体参与渲染过程。需要注意的是,为了正确应用Cull技术,需要合理设置相机视锥体的大小和位置,以及物体的碰撞体和遮挡关系。 总而言之,Unity的Cull是一项非常实用的优化技术,能有效处理场景中的不可见物体,在提高渲染效率、性能和资源利用方面发挥着重要作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值