유니티 쉐이더 fragment shader 기본 코드

Shader "testShader"
{
Properties 
{
_MainTex ("Base (RGB)", 2D) = "white" {}
}
SubShader 
{
Tags { "RenderType"="Opaque" }
LOD 200
pass
{
CGPROGRAM
//// 유니티에서 지원하는 기본 함수들을 인클루드 합니다. appdata_###은 여기에 정의 되어있음.
#include "UnityCG.cginc"
#pragma vertex vert
#pragma fragment frag
sampler2D _MainTex;
uniform fixed4 _MainTex_ST;

////픽셀 쉐이더로 보낼 값들을 정의할 구조체
struct v2f
{
float4 pos:POSITION;
float2 uv:TEXCOORD0;
};
v2f vert (appdata_full v) 
{
////////////버텍스 쉐이더부분.

////구조체 초기화. 
//// 구조체에 정의된 값에 null 값을 두면 에러가 뜨는 경우가 있어서 이렇게 한번에 초기화 시켰지만
//// 특정 플랫폼에선 구조체 강제 캐스팅에서 에러가 뜨는 경우있음. 
v2f o=(v2f)0;


/////////////버텍스를 화면에 찍어주는 부분  v.vertex 가 input값.
////////////////UNITY_MATRIX_MVP는 worldViewProjection의 행렬
////////// opengl과 좌표계가 같음.
///////http://docs.unity3d.com/410/Documentation/Components/SL-BuiltinStateInPrograms.html
/////이곳 참조.

o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
///////////// 픽셀쉐이더로 uv주소를 넘기는 부분. 
////////o.uv = v.texcoord; 로 해도 무방하지만 텍스쳐 엑스폼을 가져 오기위한 값은 _MainTex_ST
//////// TRANSFORM_TEX() 란 함수가 unitycg.cginc에 정의 되어있음.
/////#define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)
o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);
return o;
}

float4 frag (v2f i) : COLOR
{
/////////픽셀 쉐이더 부분.
/////tex2D는 버텍스쉐이더에서 가져온 버텍스의 텍스쳐varicoord에 해당하는 픽셀 컬러를 참조해옴. 
float4 result = tex2D (_MainTex, i.uv);
return result;
}
ENDCG
}
}
}


hlsl 함수는 
https://msdn.microsoft.com/ko-kr/library/windows/desktop/ff471376(v=vs.85).aspx 
이곳에 정의 되어있음.



유니티 fragment 쉐이더 베이스 코드입니다. 
main.cpp같은 느낌일까요.
틈틈히 초보를 위한 강좌도 올려 보도록 노력 해 볼게요.


덧글

  • 2016/02/16 09:22 # 답글 비공개

    비공개 덧글입니다.
  • 2016/02/16 09:36 # 비공개

    비공개 답글입니다.
댓글 입력 영역



메모장

Junhyuck Park
(PN/pakdragon,pakk)
MALE E-mail:pakdragon57@gmail.com