DrawProcedualで複数の三角形を描画
3角形を3つ表示
using UnityEngine; public class DrawProcedualTrianglesTest : MonoBehaviour { public Shader shader; public Material material; private void OnRenderObject() { if (material == null) { material = new Material(shader); } material.SetPass(0); Graphics.DrawProcedural(MeshTopology.Triangles, 3 * 3, 1); } }
SV_VertexIDは頂点のIDであることを利用したオフセット。
Shader "Unlit/PointTopologyTest" { Properties { _Color ("Color", Color) = (1,0,0,1) } SubShader { Tags { "Queue"="Transparent" "RenderType"="Transparent" } LOD 100 Blend SrcAlpha OneMinusSrcAlpha Pass { CGPROGRAM #pragma target 4.5 #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { uint vertexId : SV_VertexID; }; struct v2f { float4 position : SV_POSITION; }; static float4 positions[3] = { float4(0,1,0,1), float4(1,0,0,1), float4(-1,0,0,1) }; half4 _Color; v2f vert (appdata v) { v2f o; float4 offset = positions[v.vertexId / 3]; o.position = UnityObjectToClipPos(positions[v.vertexId % 3] + offset); return o; } fixed4 frag (v2f i) : SV_Target { return _Color; } ENDCG } } }