How to recreate this 3D2D effect [video]

I’m trying to create the effect seen at 1:01 and 1:20 in this video:

The area around the object is purple, it’s like a purple circle. To make this in GMod I guess I would have to use 3D2D, but how do I actually make it a circle, and if possible, animate it like in the video?

You are better off my using a model for that.

I can’t model.
Also it needs to be able to boldy and noticeably change color, and Entity:SetColor() doesn’t always give the brightest shades.

use material “models/debug/debugwhite” or one with UnlitGeneric.

Still, I have no idea how to make and compile a model, especially a 2d-looking superflat one.

Are you familiar with any modeling programs? Because if you know how to make a model for that in blender I could tell you how to compile it.

I don’t know the first thing about modelling programs.

Why not just use some quads and a gradient material?

local h = Vector( 0, 0, height )
local ang = vector_up:Angle( )

for i = 0, numfaces - 1 do
  local a, b, c, d

  a = ang:Right( ) * width
  ang:RotateAroundAxis( ang:Up( ), 360 / numfaces )

  b = ang:Right( ) * width

  c = a + h
  d = b + h

  render.DrawQuad( b, d, c, a, ring_color )

Entirely untested, and I’m unsure if it automatically creates the opposite face or not.

Set the material before doing this, and make sure it has $vertexalpha and $vertexcolor set to 1. Then, just control the alpha to make it fade/pulse.

A model would be better for performance, especially if you want to have a higher number of faces for a smoother ring, and even more so if more than a few are going to be visible at once.

Just in case you don’t know how to implement it…Just

local BMat = Material( "sprites/light_glow02_add" )

	local pos = LocalPlayer():GetPos() + Vector(0,0,16)
	local height = 32
	local width = 24
	local quality = 16

	local ang = Vector(0,1,0):Angle()

	for i = 0, quality - 1 do
  		local a, b, c, d

  		a = pos + ang:Right( ) * width
  		ang:RotateAroundAxis( ang:Up( ), 360 / quality )

  		b = pos + ang:Right( ) * width

  		c = a + Vector(0,0,height)
  		d = b + Vector(0,0,height)

  		render.DrawQuad( b, d, c, a, Color(255,255,255) )
  		render.DrawQuad( b, d, c, a, Color(255,255,255) )

Thanks to kogitsune of course