Shader 투영 효과

4837 단어 UnityShader
원본 주소:http://www.redblack.cn/?p=147
가상 현실 에서 가끔 투영 효 과 를 사용 할 수 있다. 예 를 들 어 조명 을 벽 에 투사 하고 인물 의 그림자, 화염 투영 효과 등 은 다음 과 같다.
와 이 파이 에 서 는 유 니 티 에 투 영 된 쉐 이 더 를 만 드 는 방법 에 대한 글 이 올 라 왔 다.여 기 는 단지 주 의 를 가 져 오 는 동시에 자신의 이 해 를 더 할 뿐이다.
wiki:https://en.wikibooks.org/wiki/Cg_Programming/Unity/Projectors
유 니 티 에서 투영 을 어떻게 사용 하 는 지 설명 하 겠 습 니 다.
1. 먼저 gameobject 에 Projector 구성 요 소 를 추가 합 니 다. 이 구성 요 소 는 다음 과 같은 몇 가지 작업 을 수행 합 니 다.
(1) 투영 물 체 를 생 성 하 는 투영 행렬Projector, 그리고 이 uniform 을 소재 공 에 넣 습 니 다.
(2) 투영 행렬 을 통 해 생 성 된 원뿔 체 와 선택 한 그림 층 을 통 해 투영 을 그 려 야 할 물 체 를 선별 합 니 다.
(3) 투영 을 그 려 야 할 물 체 를 우리 가 설정 한 재질 공 을 통 해 다시 한 번 렌 더 링 하고 우리 가 shader 에 설정 한 혼합 모드 를 통 해 최종 색상 을 생 성 합 니 다.
2. 투영 재질 공 으로 사용 되 는 shader 를 새로 만 듭 니 다. 이 shader 의 원 리 는 투영 이 필요 한 물체 의 정점 을 투영 물체 의 좌표 공간 으로 바 꾸 는 것 입 니 다.프로젝터 앞 에 있 는 픽 셀 을 다시 그립 니 다.
코드 는 다음 과 같 습 니 다:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 Shader  "Unlit/Projector"   {     Properties {        _ShadowTex ( "Projected Image" , 2D) =  "white"   {}     }     SubShader {        Pass {           Blend One One  // 1:1           ZWrite Off  //           Offset -1, -1  // zbuff ,
            CGPROGRAM
            #pragma vertex vert           #pragma fragment frag
            uniform sampler2D _ShadowTex;
            // Projector           uniform float4x4 _Projector;
             struct   vertexInput {              float4 vertex : POSITION;              float3 normal : NORMAL;           };           struct   vertexOutput {              float4 pos : SV_POSITION;              float4 posProj : TEXCOORD0;  //           };
            vertexOutput vert(vertexInput input)           {              vertexOutput output;
               output.posProj = mul(_Projector, input.vertex);              output.pos = mul(UNITY_MATRIX_MVP, input.vertex);              return   output;           }
            float4 frag(vertexOutput input) : COLOR           {              if   (input.posProj.w > 0.0)  //              {                 // 0.1                 return   tex2D(_ShadowTex ,                    input.posProj.xy / input.posProj.w) * 0.1;                 // : return tex2Dproj(                 //    _ShadowTex, input.posProj);              }              else   //              {                 return   float4(0.0, 0.0, 0.0, 0.0);              }           }
            ENDCG        }     }     Fallback  "Projector/Light" }
3. 마지막 으로 투영 에 사용 되 는 스티커 의 warp mode 를 clamp 로 수정 합 니 다. 그렇지 않 으 면 투 영 된 물 체 는 순환 합 니 다.
0.3 의 비율 후 혼합 효 과 는 다음 과 같다.
더 알 아 보기:
http://blog.sina.com.cn/s/blog_471132920101hhsd.html

좋은 웹페이지 즐겨찾기