본문으로 바로가기

Surface shader compile parameter

category Technical Report/Unity Shader 2014. 11. 18. 13:53
반응형

Surface shader compile

 # pragma surface surfaceFunction lightingModel [optionalparams]



  surfaceFunction - Cg로 작성된 Surface Shaders의 함수. void surf(Input IN, inout SurfaceOutput o)라는 함수를 가지는 것을 의미하며. 여기에서 Input은 미리 정의한 구조체. Input은 surface 함수가 필요로 하는 텍스처 좌표와 추가 자동 변수를 포함해야 한다.
  

lightModel - 사용하는 라이팅 모델을 설정한다. 내장 라이팅 모델은 Lambert와 BlinnPhong, 물리기반인 Standard와 StandardSpecular가 있다.






#pragma optional params


    alpha or alpha:auto - Will pick fade-transparency (same as alpha:fade) for simple lighting functions, and premultiplied transparency (same as alpha:premul) for physically based lighting functions.
  

    alpha:fade - 전통적인 fade 투명방식으로 설정.


    alpha:premul - 미리 곱해진 알파 투명도를 설정


    alphatest:VariableName - 알파 테스팅 모드, transparent-cutout 셰이더에 사용. Cutoff 값은 변수 이름에 따름


    keepalpha - By default opaque surface shaders write 1.0 (white) into alpha channel, no matter what’s output in the Alpha of output struct or what’s returned by the lighting function. Using this option allows keeping lighting function’s alpha value even for opaque surface shaders.
    decal:add - Additive decal shader (e.g. terrain AddPass). This is meant for objects that lie atop of other surfaces, and use additive blending.
    decal:blend - Semitransparent decal shader. This is meant for objects that lie atop of other surfaces, and use alpha blending.


alphatest:VariableName : 알파 테스팅 모드, transparent-cutout 셰이더에 사용. Cutoff 값은 변수 이름에 따름

vertex:VertexFunction :
커스텀 버텍스 모드. 버텍스 셰이더 추가 모드


finalcolor:ColorFunction : 파이널 컬러 커스텀 모드

exclude_path:prepass, 또는 exclude_path:forward : 디퍼드나 포워드 렌더링 둘중 하나의 패스를 제거해 한쪽으로만 가게 할 수 있다.

addshadow : 그림자 생성과 수집 패스를 추가. 절차적인 버텍스 애니메이션이 그림자에 영향을 미치도록 커스텀 버텍스 수정 함수와 함께 사용.

dualforward : 포워드 방식에 듀얼 라이트맵을 사용.

fullforwardshadows : 포워드 랜더링 방식에서 모든 그림자 유형을 지원.

decal:add : additive 방식의 데칼 셰이더

decal:blend : 반투명한 데칼 셰이더

softvegetation : Soft Vegetation 옵션을 사용할 경우에만 표면 셰이더가 렌더링 되게 한다.

Noambient : 앰비언트 라이팅이나 SH라이트가 적용되지 않게 함

novertexlights : 포워드 렌더링에서 SH나 vertex light가 가동되지 않게 함

nolightmap : 셰이더가 라이트맵을 지원하지 않게 만든다


nodirlightmap : directional lightmap을 지원하지 않게 한다

noforwardadd : 포워드 렌더링 가산 패스를 비활성화한다. 그 결과 셰이더는 하나의 디렉셔널 라이트를 완전히 지원하고, 나머지 라이트는 버텍스 단위 또는 SH 방식으로 처리된다. 셰이더를 가볍게 만든다.

approxview : 픽셀이 아니라 버텍스 단위로 단위화된 시선 방향 벡터를 계산한다. 처리가 빨라지지만 카메라가 오브젝에 근접할 경우 시선방향의 계산이 부정확할 수 있다.

halfasview : 시선 방향 대신 하프 디렉션 벡터를 라이팅 함수에 전달한다. 하프 디렉션은 벡터는 버텍스 단위로 연산되고 단위화 된다. 빠르지만 정확도가 떨어진다.


Unlit : nolighting 방식의 diffuse shader 사용. Lambert조명을 unlit로 치환하여 아래 구문을 첨가


// fixed4 LightingUnlit (SurfaceOutput s, half3 lightDir, half atten) {

          return fixed4(s.Albedo,1);
         }



반응형