#pragma target 4.5 #define UNITY_MATERIAL_LIT #pragma multi_compile _ WRITE_NORMAL_BUFFER struct ps_input { SV_POSITION_QUALIFIERS float4 pos : SV_POSITION; float2 uv : TEXCOORD1; float4 posWS : TEXCOORD2; float4 sphereInfo : TEXCOORD3; UNITY_VERTEX_OUTPUT_STEREO VFX_VERTEX_OUTPUT_INSTANCE_INDEX }; #define VFX_VARYING_PS_INPUTS ps_input #define VFX_VARYING_POSCS pos #define VFX_VARYING_UV uv #define VFX_VARYING_POSWS posWS.xyz #define VFX_VARYING_SPHERECENTER sphereInfo.xyz #define VFX_VARYING_SPHERERADIUS sphereInfo.w #ifdef WRITE_NORMAL_BUFFER #define VFX_VARYING_SMOOTHNESS posWS.w #endif ${VFXBegin:VFXVertexAdditionalProcess} ${VFXHDRPLitFillVaryings} ${VFXEnd} ${VFXInclude("Shaders/ParticleSpheres/Pass.template")} #define SHADERPASS SHADERPASS_DEPTH_ONLY ${VFXIncludeRP("VFXLit.template")} #if VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION int _ObjectId; int _PassValue; #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING float4 _SelectionID; #endif #pragma fragment frag void frag(ps_input i #if defined(WRITE_NORMAL_BUFFER) && VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL , out float4 outNormalBuffer : SV_Target0 #else , out float4 outColor : SV_Target #endif , out float oDepth : DEPTH_OFFSET_SEMANTIC) { UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); VFXTransformPSInputs(i); float3 normalWS; VFXClipSphereAndGetDepthOffsetAndNormal(oDepth, normalWS, i); #if VFX_PASSDEPTH == VFX_PASSDEPTH_SELECTION outColor = float4(_ObjectId, _PassValue, 1.0, 1.0); #elif VFX_PASSDEPTH == VFX_PASSDEPTH_PICKING outColor = _SelectionID; #elif VFX_PASSDEPTH == VFX_PASSDEPTH_ACTUAL #ifdef WRITE_NORMAL_BUFFER VFXUVData uvData = (VFXUVData)0; VFXComputePixelOutputToNormalBuffer(i,normalWS,uvData,outNormalBuffer); #else outColor = (float4)0; #endif #else #error VFX_PASSDEPTH undefined #endif }