找回密码
 注册帐号

扫一扫,访问微社区

脚本 有没有懂computeshader的大佬,我想做视锥体剔除

1
回复
161
查看
打印 上一主题 下一主题
[ 复制链接 ]
6蛮牛粉丝
1351/1500
排名
3287
昨日变化

24

主题

138

帖子

1351

积分

Rank: 6Rank: 6Rank: 6

UID
123454
好友
0
蛮牛币
1411
威望
0
注册时间
2015-9-22
在线时间
735 小时
最后登录
2019-9-26
50蛮牛币
我在用gpu实例化生成一堆cube,想将相机外的cube剔除掉
目前能做到用computeshader返回只有0,1的数组,1表示cube在视野内。
有没有大佬知道怎样做能不经过cpu直接筛选出在视野内的坐标,直接传递给Material的StructuredBuffer<float3> positionBuffer;
[C#] 纯文本查看 复制代码
#pragma kernel CSMain


RWStructuredBuffer<float3> instanceBuffer;
float4 _CameraFrustumPlanes[6];

RWStructuredBuffer<float> outbuffer;


float cullingTest(float3 ve3)
{
    float4 CameraDistances0 = float4(
			dot(_CameraFrustumPlanes[0].xyz, ve3) + _CameraFrustumPlanes[0].w,
			dot(_CameraFrustumPlanes[1].xyz, ve3) + _CameraFrustumPlanes[1].w,
			dot(_CameraFrustumPlanes[2].xyz, ve3) + _CameraFrustumPlanes[2].w,
			dot(_CameraFrustumPlanes[3].xyz, ve3) + _CameraFrustumPlanes[3].w
		);
	
    float4 CameraDistances1 = float4(
			dot(_CameraFrustumPlanes[4].xyz, ve3) + _CameraFrustumPlanes[4].w,
			dot(_CameraFrustumPlanes[5].xyz, ve3) + _CameraFrustumPlanes[5].w,
			0.0f,
			0.0f
		);

    if (all(CameraDistances0 >= -2)
		&& all(CameraDistances1 >= -2))
    {

        return 1;
    }
    else
    {

        return 0;
    }
}

[numthreads(12, 1, 1)]
void CSMain(uint3 id : SV_DispatchThreadID)
{
        outbuffer[id.x] = cullingTest(instanceBuffer[id.x]);
}



回复

使用道具 举报

0

主题

35

帖子

41

积分

Rank: 1

UID
331756
好友
2
蛮牛币
16
威望
0
注册时间
2019-9-15
在线时间
6 小时
最后登录
2019-9-24
沙发
2019-9-16 00:09:47 只看该作者
有没有大佬知道怎样做能不经过cpu直接筛选出在视野内的坐标,直接传递给Material的StructuredBuffer<float3>
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册帐号

本版积分规则