unity 多重纹理 绘制 shader处理

最近想把多个mesh上的纹理的绘制合并到一个mesh上,在处理shader时遇到了问题


使用纹理渲染模式公式实现正常的纹理叠加效果(SrcAlpha OneMinusSrcAlpha)并不能得到正常的效果

 公式为  

Factor    = SrcTextureA_Alpha

DstTexture  = SrcTextureA*Factor +SrcTextureB*(1 - Factor );

(A混合到B上)

得到的效果边缘会有黑色不能重合

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用ComputeShader来计算波形的值,并将结果传递到GPU上进行绘制。下面是一些简单的示例代码: 首先,需要定义一个ComputeShader: ```hlsl #pragma kernel CSMain RWTexture2D<float4> result; [numthreads(8, 8, 1)] void CSMain (uint3 id : SV_DispatchThreadID) { float x = (float)id.x / (float)result.GetWidth(); float y = (float)id.y / (float)result.GetHeight(); float value = sin(x * 10.0f) * cos(y * 10.0f); result[id.xy] = float4(value, value, value, 1.0f); } ``` 这个ComputeShader的作用是计算在屏幕上绘制一个波形图所需的值。在这个示例中,使用了sin和cos函数来计算波形的值,并将结果存储在一个float4类型的纹理中。 接下来,需要在C#代码中创建一个RenderTexture,并将其绑定到ComputeShader中: ```csharp public class WaveformRenderer : MonoBehaviour { public ComputeShader computeShader; public Material material; public int textureSize = 512; private RenderTexture waveformTexture; private void Start() { waveformTexture = new RenderTexture(textureSize, textureSize, 0, RenderTextureFormat.ARGBFloat); waveformTexture.enableRandomWrite = true; waveformTexture.Create(); int kernelHandle = computeShader.FindKernel("CSMain"); computeShader.SetTexture(kernelHandle, "result", waveformTexture); computeShader.Dispatch(kernelHandle, textureSize / 8, textureSize / 8, 1); material.SetTexture("_MainTex", waveformTexture); } private void OnRenderImage(RenderTexture source, RenderTexture destination) { Graphics.Blit(source, destination, material); } } ``` 在这个示例中,使用了一个Material来将计算出的纹理绘制到屏幕上。在Start()方法中,首先创建了一个RenderTexture,并将其设置为可写。然后将其绑定到ComputeShader中,并使用Dispatch()方法来执行ComputeShader。最后,将计算出的纹理存储在Material中,并在OnRenderImage()方法中将其绘制到屏幕上。 这就是一个简单的使用ComputeShader绘制波形图的示例。你可以根据自己的需求进行修改和扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值