成都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 } } } }

  如果这个问题您有解决方案还望不吝赐教

kisence

潮落江平未有风。