commandBuffer、hdr、msaa兼容性测试及后续

本文详述了一次针对Unity中的多重采样抗锯齿(MSAA)、高动态范围(HDR)以及CommandBuffer在不同设备上的兼容性测试。在华为P10上发现地形部分被截取和Sphere不显示的问题,经测试发现与CommandBuffer有关。文章介绍了如何在Unity中设置HDR和MSAA,并讨论了各种抗锯齿技术如SSAA、MSAA、FXAA和TXAA。此外,还提及了CommandBuffer在屏幕后处理如FXAA和TAA中的应用及其对性能的影响,以及在PC平台开启MSAA、HDR和Bloom时遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

测试场景

测试主要目的:msaa在不同平台上兼容性如何。
unity版本:2017.1.0f3.
这里写图片描述

在米4(adreno)测试性能:

这里写图片描述

在华为p10上出现场景中terrain有的地方被截取,sphere不显示的bug。

经过测试发现,去掉水上面挂的commandBUffer脚本,就不会出现这个问题。
下载unity官方自带的commandBuffer工程再开启msaa发现没问题。比较发现
在有commandBuffer的情况下,如果同时开启摄像机的hdr和msaa,不管是在线性空间下还是gamma空间下,则都会在p10上出现上述问题。

进一步确认问题:

这里写图片描述

这里写图片描述

上图中,玻璃的shader代码如下:

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

// Similar to regular FX/Glass/Stained BumpDistort shader
// from standard Effects package, just without grab pass,
// and samples a texture with a different name.

Shader "FX/Glass/Stained BumpDistort (no grab)" {
Properties {
    _BumpAmt  ("Distortion", range (0,64)) = 10
    _TintAmt ("Tint Amount", Range(0,1)) = 0.1
    _MainTex ("Tint Color (RGB)", 2D) = "white" {}
    _BumpMap ("Normalmap", 2D) = "bump" {}
}

Category {

    // We must be transparent, so other objects are drawn before this one.
    Tags { "Queue"="Transparent" "RenderType"="Opaque" }

    SubShader {

        Pass {
            Name "BASE"
            Tags { "LightMode" = "Always" }

CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile_fog
#include "UnityCG.cginc"

struct appdata_t {
    float4 vertex : POSITION;
    float2 texcoord: TEXCOORD0;
};

struct v2f {
    float4 vertex : POSITION;
    float4 uvgrab : TEXCOORD0;
    float2 uvbump : TEXCOORD1;
    float2 uvmain : TEXCOORD2;
    UNITY_FOG_COORDS(3)
};

float _BumpAmt;
half _TintAmt;
float4 _BumpMap_ST;
float4 _MainTex_ST;

v2f vert (appdata_t v)
{
    v2f o;
    o.vertex = UnityObjectToClipPos(v.vertex);
    #if UNITY_UV_STARTS_AT_TOP
    float scale = -1.0;
    #else
    float scale = 1.0;
    #endif
    o.uvgrab.xy = (float2(o.vertex.x, o.vertex.y*scale) + o.vertex.w) * 0.5;
    o.uvgrab.zw = o.vertex.zw;
    o.uvbump = TRANSFORM_TEX( v.texcoord, _BumpMap );
    o.uvmain = TRANSFORM_TEX( v.texcoord, _MainTex );
    UNITY_TRANSFER_FOG(o,o.vertex);
    return o;
}

sampler2D _GrabBlurTexture;
float4 _GrabBlurTexture_TexelSize;
sampler2D _BumpMap;
sampler2D _MainTex;

half4 frag (v2f i) : SV_Target
{
    // calculate perturbed coordinates
    // we could optimize this by just reading the x & y without reconstructing the Z
    half2 bump = UnpackNormal(tex2D( _BumpMap, i.uvbump )).rg;
    float2 offset = bump * _BumpAmt * _GrabBlurTexture_TexelSize.xy;
    i.u
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值