【Godot】教你实现完美的3D模型描边

shader_type canvas_item;

uniform float width: hint_range(0.0, 10.0);
uniform vec4 color: hint_color;

void fragment() {
    vec4 textureColor = texture(TEXTURE, SCREEN_UV, 0.0);
    if (textureColor.a == 0.0){
        bool isFinish = false;
        vec2 screen = width * SCREEN_PIXEL_SIZE;
        for (float x = -screen.x; x <= screen.x && !isFinish; x += SCREEN_PIXEL_SIZE.x) {
            for (float y = -screen.y; y <= screen.y && !isFinish; y += SCREEN_PIXEL_SIZE.y) {
                vec4 textureOutline = texture(TEXTURE, SCREEN_UV + vec2(x, y), 0.0);
                if ( textureOutline.a != 0.0) {
                    COLOR = color;
                    isFinish = true;
                }
            }
        }
        if (!isFinish) {
            COLOR = vec4(0, 0, 0, 0);
        }
    } else {
        COLOR = vec4(0, 0, 0, 0);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容