반응형

참고  -http://book.naver.com/bookdb/book_detail.nhn?bid=7525807

 

Properties 개념 익히기

-       셰이더 프로그래머가 직접 규격에 맞춰 GUI 요소를 셰이더 코드에 빠르게 추가할 수 있다. Properties 블록에서 선언한 프로퍼티는 셰이더 코드에서 값, 색상, 그리고 텍스쳐를 변경하는 데 사용할 수 있다.

           Properties

           {

                     _EmissiveColor ("Emissive Color", Color) = (1,1,1,1)

                     _AmbientColor ("Ambient Color" , Range(0,10)) = 2

                     _MySliderValue ("This is a Slider", Range(0,10)) = 2.5

           //         변수 이름          인스펙터GUI이름   타입      기본값

           }

 

프로퍼티 타입 정리

Range(min, max)

최솟값부터 최댓값까지의 범위를 float프로퍼티의 슬라이더를 만든다.

Color

Inspector탭에 Color =(float , float, float, float)를 선택할 수 있는 색상 견본을 만든다.

2D

셰이더로 드래그할 수 있는 텍스쳐 견본을 만든다.

Rect

2의 승수가 아닌 텍스쳐 견본을 만든다. 2D GUI 요소와 같은 기능을 한다.

Cube

Inspector 탭에서 셰이더로 드래그할 수 있는 큐브맵(cube map) 견본을 만든다.

Float

Inspector 탭에 슬라이더가 아닌 float 값을 만든다.

Vector

방향, 색상을 만들 수 있는 4개의 float 프로퍼티를 만든다.

 

 

 

http://docs.unity3d.com/Manual/SL-Properties.html

 

SubShader 개념 익히기

_EmissiveColor , _AmbientColor, _MySliderValue 값을 SubShader{}에서 사용하기 위해서는 프로퍼티의 변수 이름과 똑 같은 이름으로 새로운 변수 3개를 만들어야 한다. 이렇게 하면 동일한 데이터로 작업할 수 있도록, 기존 변수와 새 변수 사이에 자동으로 링크를 설정한다.

                     float4 _EmissiveColor;

                     float4 _AmbientColor;

                     float _MySliderValue;

 

Surf 개념 익히기

SubShader 에서 변수를 만들면, surf{} 함수에서 값을 사용할 수 있다.

c = pow((_EmissiveColor + _AmbientColor), _MySliderValue);  

 

Properties , SubShader , Surf에 대한 세 가지 개념만 확립하면 디퓨즈 컴퍼넌트를 요구하는 셰이더를 만들기 위한 기반이 확립된다.

 

 

세 가지의 기본적인 사항을 파악하고 아래의 코드를 작성하면 기본적인 셰이더를 만들 수 있다.

Shader "Custom/BasicShader" {

Properties

 {

  _EmissiveColor ("Emissive Color", Color) = (1,1,1,1)

  _AmbientColor ("Ambient Color" , Color) = (1,1,1,1)

 _MySliderValue ("This is a Slider", Range(0,10)) = 2.5

 }

SubShader {

 Tags { "RenderType"="Opaque" }

LOD 200

                    

 CGPROGRAM

#pragma surface surf Lambert

 

float4 _EmissiveColor;

float4 _AmbientColor;

float _MySliderValue;

 

 struct Input {

                  float2 uv_MainTex;

                 };

 

 void surf (Input IN, inout SurfaceOutput o) {

 float4 c;

c = pow((_EmissiveColor + _AmbientColor), _MySliderValue);                               

 o.Albedo = c.rgb;

 o.Alpha = c.a;

 }

ENDCG

 }

 FallBack "Diffuse"

}

 

반응형
반응형

http://acegikmo.com/shaderforge/

CG 스크립트 없이 쉐이더 편집을 가능하게 해주는 플러그인

최근 교육 받고 있는데 언리얼 쉐이더와 맞먹을정도로 편하네요~

홈페이지를 가보면 쉐이더를 눈으로 쉽게 알수 있도록 구성해 놨습니다.

쉐이더 공부하기에 매우 좋은 사이트~!

반응형
반응형

1. Sebastien LagardePBS -> 언리얼4 물리기반의 기초가 되는 이론

2. Ambient Light의 이해

  • a가 물체 A에 부딪혀, 반사되어진 빛 a가 물체 B에 다시 부딪혔을 때, a는 물체 B에 대하여 환경광(Ambient Light)라고 할 수 있다.

    이런 빛을 다른 말로 간접광이라고도 하는데, 물체 B에게 빛 a는 간접적인 빛이기 때문이다. 이런 특성으로 인하여, 한 물체에 환경광은 복잡하게 부딪히게 되며, 여러 방향에서 발견되어 진다.  어찌보면 물체의 전반적인 부위에 평균적인 환경 광량 만큼 물체에 부딪히게 되는 것이다.

    http://nizainar.tistory.com/tag/3ds%20max

     

3. Phong 쉐이딩의 이해

  • 1975년 퐁 뷰이통에 의해 개발된 기술이다. 3차원 그래픽에서 각각의 화소 컬러에 조명에 기초하여 음영이 있는 표면을 계산한다. 퐁 쉐이딩은 면 단위가 아닌 화소 단위로로 오브젝트를 렌더링 하므로 텍스쳐의 질감, 반사 투명도, 범프등의 효과를 정교하게 반영한다. 폴리곤으로 구성되어 있는 각진 면을 부드럽게 처리하는데 효과적이다.

  • 고러드 쉐이딩의 업그레이드 버전. 정점들 사이의 표면 노말들을 하나의 표면 노말로 분해하여 면의 모든 픽셀에 대한 노말을 계산

  • http://cglink.com/terms/1085

     

4. 램버트 쉐이더의 이해

  • 퐁쉐이더는 사물에는 좋지만, 사람에게 쓰이기엔 부족한게 많은 쉐이더이다.

    그래서 등장한 것이 램버트 쉐이더이다. 밸브에서 개발했으며 하프라이프에 처음 사용되었다.

  • Dot(L,N)이 됩니다. L은 라이트 벡터, N은 법선 벡터를 말합니다. 이 둘을 dot프로덕트하면 램버트 라이팅이 된다. 법선 벡터(노말맵)가 곱해지면서 표면에 굴곡진 라이팅이 생성됐습니다.

  • 이 쉐이더의 가장 큰 문제점은 명암차가 너무 뚜렷하다는 것입니다.

  • 이러한 단점을 처리한 것이 바로 하프 램버트입니다. 램버트에 0.5를 곱해 평준화 시킨 다음 0.5를 더해서 x축으로 들어 올리는 겁니다. Dot(L,N) *0.5f + 0.5f

  • 하지만, 하프 램버트에도 단점이 있다. 명이 너무 넓고 암이 너무 좁습니다. , 음영 콘트라스트가 거의 없습니다. 이것을 해결하기 위해 추가된 것이 계수입니다.

    하프 램버트를 몇 번 제곱해서 콘트라스트를 올려 주는 겁니다.

    Pow((dot(L, N) *0.5f + 0.5F, n)   스몰n은 임의의 계수이며 일반적으로 4이다.

    http://donggas90.blog.me/100133823753


--------------------------- 아래부터 물리 기반 렌더러의 이론들--------------------------- 


5. Oren-Nayar 조명 모델이란..(물리 기반 렌더링에서 가장 중요한 이론!!)

http://www.gamedevforever.com/93  a반드시 필독요망!!!

  • Lambertdiffuse model은 모든 방향에서 같은 복사량을 취하게 된다는 가정을 깔고 있으며, 플라스틱이나 모래와 같이 반들반들한 표면을 가진 재질에 적합하다고 할 수 있습니다. 하지만, 현실세계에서 거친 표면을 가진 재질들이 많이 있지요.

  • Oren-Nayar Model의 공식을 유도할 때 사용되는 거친 표면(roughbess Surface)이라는 것은 서로 다른 각도를 가진 Torrance Sparrow에 의해 제안된 미세면(microfacet)들의 집합으로서 설명될 수 있습니다.

    여기에서 미세면의 표면은 길고 대칭적인 V 자 형태의 굴곡(cavity)으로 구성된다고 가정합니다. 또한, cavity는 두 개의 평면의 면으로 구성됩니다.

    면의 거친 정도는 경사진 면의 분산을 위한 확률 함수로 결정되는데, 보통 Gaussian distribution 이 사용됩니다.

 

6. 프레넬(Fresnel)에 대한 이해 (물리 기반 렌더러에 사용되는 이펙트 효과)

  • 투명하게 반사되는 물질이라 하더라도 시야각이 얕으면 투명함이 사라지는 효과를 말합니다.(광택이 되어 있는 마루바닥..?) 수학적으로는 되게 복잡한 이론인데 간단히 설명하면 물이 깨끗한 호수가에 서서 바로 아래를 내려다 보면 바닥이 다 보입니다. 하지만 멀리서 바라보면 호수물이 거울 반사처럼 반사됩니다. 이것이 프레넬 효과

  • 스마트폰을 비스듬하게 볼때와 정면에서 볼때의 차이점을 이해하자.

    http://www.gamedevforever.com/35

 

7. Blinn-Phong Specular (물리기반 렌더러에 사용되는 스펙큘러)

    http://ikpil.com/641

    http://blog.naver.com/tepet/140064908839

    http://blog.naver.com/imalone1/70088285161

    짐 블린이 시그라프 98에서 발표한 블린 퐁 쉐이딩.

    쉽게 말해 퐁 방정식과 블린 방정식을 합쳐서 장점만 취한 쉐이딩

 

8. 각 물체 별 거칠기와 미세 표면(Oren-Nayar의 수식을 뒷받침하는 물리기반 렌더러에 기초적인 이론)

    각 물체에는 거칠기와 미세표면이 존재한다.

    그것들을 수식화하여 표현하는 것이 물리기반 렌더링

http://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=14&ved=0CFQQFjAN&url=http%3A%2F%2Fjournal.kap.or.kr%2Finc%2Fdownload.php%3Fpubyear%3D2006%26volume%3D44%26issue%3D4%26f_name%3Dkap44-4-9.pdf%26convert%3DY&ei=H7lyVejBEc3h8AX9z4GAAw&usg=AFQjCNEnjYKatrxb_5f3BzaGe_Tn5mU9lQ&bvm=bv.95039771,d.dGc&cad=rjt

  • 참고 문헌(티타늄의 미세표면 구조 논문)


9. Image Base Lighting(물리 기반 렌더러의 라이트 방식)

주로 프리렌더링에서 gi용으로 사용하는 hdri를 생각하면 쉽게 이해할 수 있다.(멘탈레이.. 브이레이..등등)

베이스로 삼는 이미지의 색상만이 아니라 밝기 자체를 광원으로 처리하는 방식이다.

멘탈레이, 브이레이 등등..을 생각하면 이해가 빠를 듯 합니다.

 

10. 에너지 보존 법칙 -> 매우 중요!!(물리 기반 렌더링의 기본이 되는 이론)

  • 열역학 제 1법칙. 물리기반 렌더링의 근간이 되는 법칙.

  • http://www.kmlee.com/bbs/view.php?id=free&no=1117

  • 에너지 보존은 PBR렌더링 솔루션에서 중요한 역할을 합니다. 이것은 표면에 의해 반사되는 빛의 총 량은 이 것이 받는 빛의 총 량보다 작다고 주장합니다. 다른 말로, 표면에서 반사되는 빛은 절대로 표면에 충돌하기 전의 빛보다 강할 수 없다는 말입니다.

    아티스트로서 우리는 에너지 보존을 컨트롤할 걱정은 하지 않아도 됩니다. 에너지 보존이 쉐이더에 의해서 알아서 된다는 사실은 PBR의 좋은 측면 중 하나입니다. 이것은 물리기반 모델의 부분 중 하나이며 우리에게 물리보다 아트에 집중할 수 있게 해줍니다.

11. 디퍼드 렌더링이란?(참고만 하세요~시험 안나옴)

  • 디퍼드 라이트는 라이트와 그림자에 특화된 렌더링 패스입니다.

  • 모든 라이트가 퍼 픽셀로 계산되며, 이것은 그것들이 노말맵 등등과도 인터렉티브하게 작동된다는 것을 의미합니다.

  • 단점 : 리얼안티알리아싱이 지원 안됨. 반투명 오브젝트는 제어 안됨. 블린 봉 라이트만 지원. 모든 라이트는 같은 방법으로 계산되어 버린다. 각각의 오브젝트를 드라마틱한 다른 라이팅 모델로 계산할 수 없다.

  • 황군 사이트 참조 http://hwanggoon.tistory.com/18

     

12. 물리 기반 렌더링에 도움 받기 위한 참고 사이트(빨간색 부분들만 잘 보셔도 이해가 빠를거에요~)

http://www.slideshare.net/jalnaga/ndc13ndc-2013-udk-19999169

  • 물리 기반 렌더러의 기본 이론정리(카페가입 필수 및 강추)

http://cafe.naver.com/unrealfx/7128

  • 2014 NDC 발표 자료

http://www.slideshare.net/jooeunpark501/ndc2015-1

  • 쉐이더의 기본 이론(김포프)

http://kblog.popekim.com/2011/11/01-part-1.html

 


13. 쉐이더의 발전 흐름 계보

퐁 쉐이더 ?> 램버트 쉐이더(하프라이프) = 블린 퐁 쉐이더(98년 시그라프) -> 물리기반 쉐이더   --> 기억해 주심 좋을 듯^^

시대가 흐를수록 쉐이더가 좋아졌다고 하기 보다 기존 쉐이더들의 장점을 극대화 시켜 물리기반으로 정확히 계산하는 오차를 줄여왔다고 할 수 있다.

다시 한번 얘기하지만, 물리 기반 렌더러가 완벽한 렌더는 아니다. 실사 기반에서와 콘솔 게임(PC게임)에서는 톡톡히 역량을 발휘하지만, 카툰식이나 모바일에서는 아직 제 역할을 기대하기 힘든 수준이다. 그러나 항상 콘솔 -> PC게임 -> 모바일로 기술이 계승 되듯이 언젠가는 모바일의 물리 기반 렌더링 기술이 급속히 발달할 것이라 예상되며 언리얼도 모바일에서 다이렉트 라이트등 물리기반의 효과를 극대화 하기 위해 무단히 노력 중에 있다. 

 

반응형

+ Recent posts