着色器中的 GPU 高度图雕刻
GPU Heightmap sculpting in shader
我已经在 CPU、
上成功完成了雕刻实施
请提供一些有关如何在 GPU 上执行此操作的指南……
我已将雕刻代码移至顶点着色器,但雕刻未在顶点着色器中累积并且无法修改顶点着色器中的位置……请告诉我如何……
if (SculptMode.x == 1)//Raise
{
float dist = length(int2(PickedPoint.xz) - input.position.xz);
if (dist <= BrushRadius.x)
{
PositionOffset += (BrushRadius.y * (cos(PI * dist / float(BrushRadius.x)) + 1.0f) * 0.5f) * DeltaTime.x * 10.0f;
input.position.y = PositionOffset;
}
}
我正在为它使用 RWTexture2D ...
if (SculptMode.x == 1)//Raise
{
float dist = length(uint2(PickedPoint.xz) - input.position.xz);
if (dist <= BrushRadius.x)
{
PositionOffset[int2(input.position.xz)] += BrushRadius.y * smoothstep(0, BrushRadius.x, BrushRadius.x - dist) * DeltaTime.x * 10.0f;
}
}
但我的雕刻仍然处于尖峰状...
然后
input.position.y = PositionOffset[int2(input.position.xz)];
虽然我不能肯定地说,但看起来您的问题可能是您没有达到某些像素。如果你展示整个着色器以及你在哪里发送它,我也许可以确认。您在纹理中索引点的方式可能是整个问题。
我认为可能出现的另一个问题是您正在从相同的数据结构(输入)读取和写入 - 虽然您只从 x 和 z 读取,并且只写入 y,但这仍然会造成麻烦,因为xyz 仍然是单个元素的一部分,它会同时设置。
将实现更改为完全不同的方法,这不会起作用,因为我认为这种量化正在发生,因为三角形之间共享顶点并且雕刻调整多次应用于同一顶点,这就是尖峰的原因......
我已经在 CPU、
上成功完成了雕刻实施请提供一些有关如何在 GPU 上执行此操作的指南……
我已将雕刻代码移至顶点着色器,但雕刻未在顶点着色器中累积并且无法修改顶点着色器中的位置……请告诉我如何……
if (SculptMode.x == 1)//Raise
{
float dist = length(int2(PickedPoint.xz) - input.position.xz);
if (dist <= BrushRadius.x)
{
PositionOffset += (BrushRadius.y * (cos(PI * dist / float(BrushRadius.x)) + 1.0f) * 0.5f) * DeltaTime.x * 10.0f;
input.position.y = PositionOffset;
}
}
我正在为它使用 RWTexture2D ...
if (SculptMode.x == 1)//Raise
{
float dist = length(uint2(PickedPoint.xz) - input.position.xz);
if (dist <= BrushRadius.x)
{
PositionOffset[int2(input.position.xz)] += BrushRadius.y * smoothstep(0, BrushRadius.x, BrushRadius.x - dist) * DeltaTime.x * 10.0f;
}
}
但我的雕刻仍然处于尖峰状...
然后
input.position.y = PositionOffset[int2(input.position.xz)];
虽然我不能肯定地说,但看起来您的问题可能是您没有达到某些像素。如果你展示整个着色器以及你在哪里发送它,我也许可以确认。您在纹理中索引点的方式可能是整个问题。
我认为可能出现的另一个问题是您正在从相同的数据结构(输入)读取和写入 - 虽然您只从 x 和 z 读取,并且只写入 y,但这仍然会造成麻烦,因为xyz 仍然是单个元素的一部分,它会同时设置。
将实现更改为完全不同的方法,这不会起作用,因为我认为这种量化正在发生,因为三角形之间共享顶点并且雕刻调整多次应用于同一顶点,这就是尖峰的原因......