void setFlareBillboard( inout mat4 _MODELVIEW_MATRIX, inout mat3 _MODELVIEW_NORMAL_MATRIX, mat4 _VIEW_MATRIX, mat4 _MAIN_CAM_INV_VIEW_MATRIX, mat4 _MODEL_MATRIX, vec3 scale, vec2 _screenOffsetScale ) { _MODELVIEW_MATRIX = _VIEW_MATRIX * mat4( _MAIN_CAM_INV_VIEW_MATRIX[ 0 ], _MAIN_CAM_INV_VIEW_MATRIX[ 1 ], _MAIN_CAM_INV_VIEW_MATRIX[ 2 ], _MODEL_MATRIX[ 3 ] ); vec3 viewPosition = _MODELVIEW_MATRIX[ 3 ].xyz; viewPosition.xy += viewPosition.xy * _screenOffsetScale; _MODELVIEW_MATRIX[ 3 ].xyz = viewPosition; float scaleX = length( _MODEL_MATRIX[ 0 ].xyz ) * scale.x; float scaleY = length( _MODEL_MATRIX[ 1 ].xyz ) * scale.y; float scaleZ = length( _MODEL_MATRIX[ 2 ].xyz ) * scale.z; _MODELVIEW_MATRIX = _MODELVIEW_MATRIX * mat4( vec4( scaleX, 0.0, 0.0, 0.0 ), vec4( 0.0, scaleY, 0.0, 0.0 ), vec4( 0.0, 0.0, scaleZ, 0.0 ), vec4( 0.0, 0.0, 0.0, 1.0 ) ); _MODELVIEW_NORMAL_MATRIX = mat3( _MODELVIEW_MATRIX); }