게임/Unity3D

[Unity3D][Shader] 텍스쳐와 Alpha값에 대한 고찰

Binceline 2012. 11. 1. 18:23

FBX 파일과 .tga 텍스쳐를 받고 유니티에 띄우고 쉐이더는 텍스쳐를 투명값만 조정하는 기능의 쉐이더인 Unlit의 Transparent를 썼는데, 각도에 따라 모델의 일부분이 투명하게 되길래 놀랬다. 이 쉐이더는 완벽하게 Alpha값을 걸러내진 못하는 것 같다..

그리고 얇은 옷가지 같은 모델이 있을 때, 한 쪽에서만 볼 수 있게 제작된 모델이라면 다음의 UnlitAlpha 쉐이더를 사용하면 해결된다.

(아직 쉐이더를 제대로 해보진 않았으므로 잘 모르겠지만.. 뜯어본 결과 Cull off가 안 되어있었고, ZWrite라는게 꺼져있었다. 그리고 여러가지 다른 점이 있지만, 쉐이더 공부할 때 분석해 보아야겠다.)

이 쉐이더는 조명의 영향을 받지 않으며, 텍스쳐의 투명값을 조정하고 폴리곤의 앞, 뒤 둘 다 볼 수 있게 한다.(Cull off 기능) 2D 게임의 스프라이트에서도 자주 쓰인다.  다음은 UnlitAlpha 쉐이더의 설명이다.


UnlitAlpha

Author: Neil Carter (NCarter)

Description

This shader is useful for sprites and other billboards that shouldn't be affected by lighting and should be visible from both sides. Note that alpha testing is used instead of 

blending, which means partial transparency is not possible - texels are either completely opaque or completely transparent. On the other hand, it's much faster than 

blending.

Usage

Place this shader somewhere in your Assets folder hierarchy, create a material which uses it and apply it to the relevant objects.

ShaderLab - UnlitAlpha.shader

Invalid language.

You need to specify a language like this: <source lang="html4strict">...</source>

Supported languages for syntax highlighting:

 [Expand


Shader "UnlitAlpha"
{
    Properties
    {
        _Color ("Main Color", Color) = (1,1,1,1)
        _MainTex ("Base (RGB) Trans. (Alpha)", 2D) = "white" { }
    }

    Category
    {
        ZWrite On
        Alphatest Greater 0.5
        Cull Off
        SubShader
        {
            Pass
            {
                Lighting Off
                SetTexture [_MainTex]
                {
                    constantColor [_Color]
                    Combine texture * constant, texture * constant 
                } 
            }
        } 
    }
}


참고 : http://wiki.unity3d.com/index.php/UnlitAlpha

반응형