unify input and output be vec3