반응형

Unity 125

0507 _ 툰쉐이더 _ 1pass로 음영 표시하기

새로 만들어서 텍스쳐 한장을 받는 스크립터를 만들어준다. 커스텀 라이팅을 해줍니다 . Shader "Custom/Test" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf _Toon noambient #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutput o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex); o.Alb..

0507 _ 툰쉐이더 _ 음영을 계단식 -> 2pass 로 외곽 만들어준다.

텍스쳐 한 장을 받는 쉐이더 스크립터를 만들어준다. Toon 으로 커스텀 라이트를 만들어준다. Shader "Custom/Test" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Toon noambient #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout SurfaceOutput o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex); o..

0507_ 외곽선 만들어보기

이미지한장을 받는 스크립터를 먼저 만들고 시작한다. 기본 램버트를 받는 스크립터로 ---- 이번에는 CG를 두 번 렌더링 할 것이다. 이것을 Two Pass 라고한다. 기본적으로 밑에 이렇게 넣고 채우면 된다. Shader "Custom/Test" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Lambert #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; void surf (Input IN, inout Surfac..

0507 _ Lim 라이트를 커스텀 라이트로 옮기기

기존에 했던(블린퐁에서 스펙큘러 만들기)걸 재사용해서 LightingTest 부분만 수정할 것이다. --- 디퓨즈 컬러 만들기 //램버트 적용 float3 diffColor; float ndotl = dot(s.Normal, lightDir); diffColor = ndotl * s.Albedo * _LightColor0.rgb * atten; 디퓨즈 (빛 정보 감쇠까지 가지는 컬러를 만들어준다.) 스펙큘러 적용된 컬러 만들기 //스펙큘러 적용 float3 specColor; float3 H = normalize(viewDir + lightDir); float spec = dot(H,s.Normal); specColor = spec * _SpecCol.rgb; 림 컬러 적용 //Rim 적용 float3 ..

0506_ Lambert에서 BlinnPhong 스펙큘러 만들기

이미지 한 장을 받는 것을 만들어준다. ---- 블린퐁 조명을 만들기 위해서는 공식이 존재한다. 반사 벡터를 구하는 공식 (리플렉션 구하는 공식) R = 2 N(L * N) - L 이 공식이다. 이건 반사 벡터 구하는거고 우리는 좀더 간략하게 된, 블린 퐁 공식을 사용할 것이다. 하프 백터 = V + I 하프 벡터를 노멀라이즈를 해준다. (방향만) 구한 하프벡터에서 n 벡터와 Dot 연산을 해준다. ------ 일단 완전 기본적인 램버트의 라이트를 만들어준다. 커스텀 라이트로 Shader "Custom/Phong" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _Normal ("Normal", 2D) = "Normal" {} } SubShader ..

0506_ 홀로그램 만들기

텍스처 한 장을 받는 쉐이더 작성 Lambert 적용 프레넬 공식 적용 (rim 라이트 공식) Rim 까지 만들어 놓기 Shader "Custom/Holo" { Properties { _MainTex ("Albedo (RGB)", 2D) = "white" {} _RimColor("Color", Color) = (1,1,1,1) _RimPow("Pow", Range(0,10)) = 0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM #pragma surface surf Lambert #pragma target 3.0 sampler2D _MainTex; float _RimPow; float4 _RimColor; struct Input { flo..

0506 _ RIM 라이트 표현하기

RIM 라이트 (겉에 붙는 라이트) 반사율을 적용하는 공식 Franel 공식 --- 먼저 한장만 받는 걸 만들고. 환경광을 없애준다 라이트는 스탠다드가 아닌 램버트로 바꾸고 알베도를 0으로 해서 검정색으로 만든다 --- Input 구조체에 ViewDir 바라 보는 방향 Unity - Manual: Writing Surface Shaders (unity3d.com) Unity - Manual: Writing Surface Shaders Vertex and fragment shader examples for the Built-in Render Pipeline Surface Shaders and rendering paths Writing Surface Shaders In the Built-in Render P..

0506_유니티 그래픽스 라이트 연산에 대하여

노멀, 표면이 바라보는 정방향 라이트가 때리는 방향과 받는 오브젝트의 노멀값을 계산을 해서 빛을 표현해주는 것 물체가 있으면 표면이 있고, 표면이 있으면 노멀 (방향이 존재) 노멀과 빛의 방향이 직각 서로 닿아 있지 않으면, 제일 어둡게 나온다. 조명의 백터 표면의 백터 서로 마주보고 잇으면 제일 밝다 90도 직각을 이루고 있으면 제일 어둡다. 색상에서는 float2(0.5, 0.5) 는 회색 UV에서는 위치 중간 즉, 숫자(수치) : 색상, 위치, 방향이 될 수 있다. ----- 정육면체에서는 꺽이는 부분은 90도가 될 수 있으므로 나중에 우리는 부분을 중간값을 넣을것이다 (보간 기법) ---- 버텍스 또한 각자의 노멀을 가지고 있다 . ----- 노멀벡터 - 조명벡터 = 가장 밝은 쪽 표현하기 위해서..

0504 _ 라이트에 따른 쉐이더 // 노멀 및 여러맵 넣었을 때 차이점

라이트! 스탠다드 셰이더 예전부터 지원하던 스탠다드 셰이더, 기본적인 물리기반 셰이더이고 자동으로 계산을 해준다. 정도만 알고있으면 된다. 라이트에 따른 쉐이더 Lambert 스펙큘러가 없음, 구조체 SurfaceOutput 구조체 사용 BlinnPhong 스펙큘러 공식이 들어가 있음, 조금 더 스펙큘러 공식을 단순화 시킨것 스펙큘러 공식은 보는 각도에 따라 계산된 특정 색의 라이트 동그라미로 표시 구조체 SurfaceOutput 구조체 사용 Standard 물리기반 쉐이더, 주변환경을 반사해서 스펙큘러 구현 SurfaceOutputStandard / SurfaceOutputStandardSpecular 구조체로 사용 ---- 1. 램버트 사용 램버트 일 경우 , 스펙큘러, 글로스니스를 지원하지 않는다...

반응형