成都Unity 2017技术路演

  今天和小伙伴参加了Unity 2017技术路演,很可惜讲师讲的Shader和VR课程过于入门向了,并没有学到很多东西,倒是第一位讲师,提到的插件和Unity Service引起了我一些兴趣,如果Unity Cloud build好用,我就不需要再自己搭建集成构建环境了,而且集成支付和广告会也许会更加方便。

  会场照片:

  会场合影 会场合影   会场发的VR设备 会场小礼品   热闹的会场环境 照片1   讲师在帮我们解决问题 照片2

  还有一个值得一提的插曲
  我把公司项目遇到的一个实时阴影有时候会消失的BUG向讲师请教,讲师给出的建议是修改Unity原生的standard Shader加入一个支持光照贴图的Pass,结果我们尝试失败后再次向讲师请教,结果发现其实这条道路行不通,standard Shader在检视面板上的内容都是固定的,不能增加新的属性。
  然后退而求其次去修改原来的Shader,讲师似乎连MVP变换都不是很清楚,在各种方法尝试了一通之后,时间已经是下午5点半,于是我们只好提出告辞。

  这个BUG是这样的,场景的Shader如下,功能是使用光照贴图并接收实时阴影,使用了这个Shader的场景不能正常接收阴影,但是摄影机周围有standard Shader材质的物体时,又可以正常接受阴影。(所以目前我们用了一个非常hack的方法来解决这个问题,就是让我们投射阴影的主角身上挂一个很小的standard 材质的 Cube:)

  Shader如下:

Shader "Custom/MYlightmap" {
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _LightMap ("Lightmap (RGB)", 2D) = "black" {}
        _MainColor("Color",Color) = (1,1,1,1)
    }

    SubShader 
    {
        Pass
        {
            Tags{"queue" = "2100"}//晚于勇者投射阴影的队列
            tags{"LightMode" = "ShadowCaster"}
        }

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag
            // make fog work
            #pragma multi_compile_fog

            #include "UnityCG.cginc"
            #include "Lighting.cginc"
            #include "AutoLight.cginc"
            #pragma multi_compile_fwdbase

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
                half2 uv1:TEXCOORD1;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float2 light :TEXCOORD1;
                UNITY_FOG_COORDS(1)
                float4 vertex : SV_POSITION;
                LIGHTING_COORDS(2,3)
            };
            sampler2D _MainTex;
            sampler2D _LightMap;
            float4 _LightMap_ST;
            float4 _MainTex_ST;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                o.light = TRANSFORM_TEX(v.uv1,_LightMap);
                UNITY_TRANSFER_FOG(o,o.vertex);
                TRANSFER_VERTEX_TO_FRAGMENT(o)
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                fixed4 col = tex2D(_MainTex, i.uv);
                fixed4 lm = tex2D(_LightMap, i.light)*2;
                col.rgb *= lm.rgb;
                float atten= LIGHT_ATTENUATION(i);
                col.rgb *= atten;
                col.rgb *=  UNITY_LIGHTMODEL_AMBIENT * 6;
                return col;
            }
            ENDCG
        }
    }
 }
}

后记

  后来问题解决了,原来是Shader没有加lightMode所致。在shader上添加{"lightMode"= "forwardbase"}即可解决

kisence

潮落江平未有风。