Advertisement
Guest User

Untitled

a guest
Mar 4th, 2019
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Shader "Custom/DotShader" {
  2.         SubShader{
  3.             Pass{
  4.                 Tags{ "RenderType" = "Transparent" "Queue" = "Transparent" "DisableBatching" = "true" }
  5.                 Blend SrcAlpha OneMinusSrcAlpha
  6.                 Cull Off
  7.                 ZTest Off
  8.                 ZWrite Off
  9.                 CGPROGRAM
  10.  
  11.             #include "UnityCG.cginc"
  12.             #pragma vertex vert
  13.             #pragma fragment frag
  14.             #pragma geometry geom
  15.             #pragma target 4.0
  16.  
  17.             struct PointData {
  18.                 float3 pos;
  19.                 half4 color;
  20.                 float size;
  21.             };
  22.  
  23.             StructuredBuffer<PointData> point_data;
  24.  
  25.             struct input {
  26.                 float4 pos : SV_POSITION;
  27.                 half4 color : COLOR;
  28.                 float size : SIZE;
  29.  
  30.             };
  31.  
  32.             struct g2f{
  33.                 float4 pos : SV_POSITION;
  34.                 half4 color : COLOR;
  35.             };
  36.  
  37.  
  38.             input vert(uint id : SV_VertexID){
  39.                 input o;
  40.                 o.pos = float4(point_data[id].pos, 0);
  41.                 o.color = point_data[id].color;
  42.                 o.size = point_data[id].size;      
  43.                 return o;
  44.             }
  45.            
  46.             [maxvertexcount(4)]
  47.             void geom(point input IN[1], inout TriangleStream<g2f> triStream){
  48.                 float3 vec = IN[0].pos.xyz;        
  49.                 float4 color = IN[0].color;
  50.  
  51.                 float3 up = normalize(UNITY_MATRIX_IT_MV[1].xyz);
  52.                 float3 right = normalize(UNITY_MATRIX_IT_MV[0].xyz);
  53.  
  54.                 float size = IN[0].size;
  55.  
  56.                 right = right * size;
  57.                 up = up * size;
  58.  
  59.                 g2f OUT;
  60.                 OUT.pos = UnityObjectToClipPos(vec -right -up);
  61.                 OUT.color = color;
  62.                 triStream.Append(OUT);
  63.  
  64.                 OUT.pos = UnityObjectToClipPos(vec -right + up);
  65.                 OUT.color = color;
  66.                 triStream.Append(OUT);
  67.  
  68.                 OUT.pos = UnityObjectToClipPos(vec + right -up);
  69.                 OUT.color = color;
  70.                 triStream.Append(OUT);
  71.  
  72.                 OUT.pos = UnityObjectToClipPos(vec + right + up);
  73.                 OUT.color = color;
  74.                 triStream.Append(OUT);
  75.             }
  76.  
  77.             float4 frag(g2f IN) : COLOR{
  78.                 return IN.color;
  79.             }
  80.  
  81.             ENDCG
  82.         }
  83.     }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement