1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- Shader "Immersal/Point Cloud"
- {
- Properties
- {
- }
- SubShader
- {
- Cull Off
- Tags{ "RenderType" = "Opaque" }
- LOD 100
- Pass
- {
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #pragma target 3.0
- #include "UnityCG.cginc"
- float _PointSize;
- fixed _PerspectiveEnabled;
- fixed4 _PointColor;
- struct Vertex
- {
- float3 vertex : POSITION;
- };
- struct VertexOut
- {
- float psize : PSIZE;
- float4 center : TEXCOORD0;
- half size : TEXCOORD1;
- UNITY_FOG_COORDS(0)
- };
- VertexOut vert(Vertex vertex, out float4 outpos : SV_POSITION)
- {
- VertexOut o;
- outpos = UnityObjectToClipPos(vertex.vertex);
- o.psize = lerp(_PointSize, _PointSize / outpos.w * _ScreenParams.y, step(0.5, _PerspectiveEnabled));
- o.size = o.psize;
- o.center = ComputeScreenPos(outpos);
- UNITY_TRANSFER_FOG(o, o.position);
- return o;
- }
-
- fixed4 frag(VertexOut i, UNITY_VPOS_TYPE vpos : VPOS) : SV_Target
- {
- fixed4 c = _PointColor;
- float4 center = i.center;
- center.xy /= center.w;
- center.xy *= _ScreenParams.xy;
- float d = distance(vpos.xy, center.xy);
- if (d > i.size * 0.5) {
- discard;
- }
- UNITY_APPLY_FOG(input.fogCoord, c);
- return c;
- }
- ENDCG
- }
- }
- }
|