多相机和自定义粒子shader

本篇记录的杂乱,想写一点东西但又感觉没什么可写,就把两个内容简要放到一起了

(一)多相机相关

(1)UI相机使用Gamma工作, 场景相机使用Linear工作:
Gamma下的混合:
Linear下的混合: 在这里插入图片描述(2)分离相机分辨率 和 FrameBuffer, 可以手动设置相机分辨率
场景使用缩放后的分辨率,UI使用正常的分辨率

多相机的应用
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述(2)
这里重点说明 DepthOnly:
Depth 这里指的是相机的深度:(实际就是只清除深度)

这时我希望,球能无论什么情况都要被渲染出来,这时就Depth only就可以了,这里深度指的摄像机深度。首先给球和立方体建立不同Layer,然后我们再新建一个摄像机,选择Depth only。摄像机Depth数值大于刚刚主摄像机,设置Culling Mask单 单是球的layer。这样球就会出现在立方体的前面。这就是Depth only的功能了。再看小效果如下图:
在这里插入图片描述在这里插入图片描述

(3)Dont Clear: 不清空任何数据,在上一帧的基础上继续绘制:

在这里插入图片描述
(4)相机的 渲染对象 和 对象阴影分离: 可以在不渲染对象的情况下,单独渲染对象的阴影
自定义管线就是控制力强的一批
在这里插入图片描述将相机结果应用到RenderTexture, renderTexture 设置到UI上的混合模式,
由原来的 SrcAlpha OneMinusSrcAlpha, 公式:最终颜色 = 源颜色 * 源透明值 + 目标颜色*(1 - 源透明值)
改为 One OneMinusSrcAlpha 公式:最终颜色 = 源颜色 + 目标颜色*(1 - 源透明值)

说到相机间混合: 想到了直接把 场景相机在Linear空间, UI相机在Gamma空间 两个 不同的处理方式来混合,下次再说吧

git工程链接








(二)自定义粒子shader:
(1) 实现 用自定义参数控制实现效果 参数作用于随着粒子的生命周期

在这里插入图片描述
在这里插入图片描述
所以在上面的初始化Input的过程:

struct Attributes
{
    // 顶点色
    float4 color : COLOR;
    #if defined(_FLIPBOOK_BLENDING)
        float4 baseUV : Texcoord0;
        float4 flipbookBlend : Texcoord1;
        //float3 custom1 = Texcoord1.yzw;
    #else
        float2 baseUV : Texcoord0;
    #endif
    
    float3 positionOS : POSITION;
    
    // 通过顶点数据 提供该渲染对象的索引
    UNITY_VERTEX_INPUT_INSTANCE_ID
};
struct Varyings
{
#if defined(_VERTEX_COLORS)
    float4 color : VAR_COLOR;
#endif

#if defined(_FLIPBOOK_BLENDING)
    float3 flipbookUVB : VAR_FLIPBOOK;
    float3 custom1 : VAR_CUSTOM;
#endif
    float4 positionCS : SV_POSITION;
    float2 baseUV : VAR_BASE_UV;
    UNITY_VERTEX_INPUT_INSTANCE_ID
};
Varyings UnlitPassVertex(Attributes input)
{
    Varyings output;   
    // 提取渲染对象的索引,并且存储到其它实例宏 所依赖的全局静态变量中
    UNITY_SETUP_INSTANCE_ID(input);    
    // 将索引 转换存储,在片元中还要适用
    UNITY_TRANSFER_INSTANCE_ID(input,output);
    float3 positionWS = TransformObjectToWorld(input.positionOS);
    output.positionCS = TransformWorldToHClip(positionWS);
    output.baseUV = TransformBaseUV(input.baseUV.xy);
    
    #if defined(_FLIPBOOK_BLENDING)
        output.flipbookUVB.xy = TransformBaseUV(input.baseUV.zw);
        output.flipbookUVB.z = input.flipbookBlend.x;
        output.custom1 = input.flipbookBlend.yzw;
    #endif
    
    
#if defined(_VERTEX_COLORS)    
    output.color = input.color;
#endif
    return output;
}

这样就把 custom1的变量,传输到fragment中
更重要的是 : custom1的值 是可以随着粒子的生命周期变化!!!
取决于你传入什么样的格式:
在这里插入图片描述这样就可以丰富粒子的变化形式了
参考阅读

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值