찾기
내용으로 건너뛰기
추적
문서의 이전 판을 선택했습니다!
저장하면 이 자료로 새 판을 만듭니다.
미디어 파일
======Surface Shader Lighting Examples====== 여기에 [[SL-SurfaceShaderLighting|''custom lighting models'']]의 [[SL-Surface Shaders|Surface Shaders]]의 예들이 있습니다. 일반적인 표면 쉐이더 예들이 [[SL-SurfaceShaderExamples|this page]]에 있습니다. Deferred 조명이 어떤 사용자 정의의 재질 당 조명 모델과 함께 제대로 작동하지 않기 때문에 대부분의 예에서 우리는 쉐이더가 포워드 렌더링만으로 컴파일하도록 만듭니다. =====Diffuse===== 우리는 내장된Lambert 조명 모델을 사용하는 쉐이더와 함게 시작할 것입니다: Shader "Example/Diffuse Texture" { Properties { _MainTex ("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType" = "Opaque" } CGPROGRAM #pragma surface surf Lambert struct Input { float2 uv_MainTex; }; sampler2D _MainTex; void surf (Input IN, inout SurfaceOutput o) { o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb; } ENDCG } Fallback "Diffuse" } 여기에 그것이 텍스쳐와 함게 그리고 실제 텍스쳐 없이 어떻게 보이는지 나타납니다 (씬에 하나의 방향성 있는 조명이 있습니다): \\ {{:unity3d:SurfaceShaderDiffuseTexture.png}} {{:unity3d:SurfaceShaderDiffuseNoTex.png}} 완전히 같은 것을 해보겠습니다. 그러나 내장된Lambert 조명을 사용하는 대신에 우리 스스로의 조명 모델을 씁니다. [[SL-SurfaceShaderLighting|Surface Shader Lighting Models]]은 우리가 써야할 필요가 있는 어떤 함수들 입니다. 여기에 간단한Lambert 가 있습니다. "shader part" 그 자체는 전혀 바뀌지 않았다는 것을 참고하세요: %gray%Shader "Example/Diffuse Texture" { %gray% Properties { %gray% _MainTex ("Texture", 2D) = "white" {} %gray% } %gray% SubShader { %gray% Tags { "RenderType" = "Opaque" } %gray% CGPROGRAM #pragma surface surf _SimpleLambert_ half4 LightingSimpleLambert (SurfaceOutput s, half3 lightDir, half atten) { half NdotL = dot (s.Normal, lightDir); half4 c; c.rgb = s.Albedo * _LightColor0.rgb * (NdotL * atten * 2); c.a = s.Alpha; return c; } %gray% struct Input { %gray% float2 uv_MainTex; %gray% }; %gray% sampler2D _MainTex; %gray% void surf (Input IN, inout SurfaceOutput o) { %gray% o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb; %gray% } %gray% ENDCG %gray% } %gray% Fallback "Diffuse" %gray%} 그래서 우리의 간단한 Diffuse 조명 모델이 ''LightingSimpleLambert'' 함수 입니다. 그것은 표면 normal과 조명 디렉션 사이에서 dot product를 수행하는 것에 의해 조명을 계산하고 빛의 감쇠와 색을 적용합니다. =====Diffuse Wrap===== 여기에Wrapped Diffuse – Diffuse 조명의 변형- 있습니다. 거기서 조명은 물체의 모서리를 둘써 감쌉니다. 표면을 흐트러뜨리는 효과를 가장하기에 유용합니다. 다시 표면 쉐이더 자체는 전혀 바뀌지 않았습니다. 우리는 그저 다른 조명 함수를 사용하고 있습니다. %gray%Shader "Example/Diffuse Wrapped" { %gray% Properties { %gray% _MainTex ("Texture", 2D) = "white" {} %gray% } %gray% SubShader { %gray% Tags { "RenderType" = "Opaque" } %gray% CGPROGRAM #pragma surface surf _WrapLambert_ half4 LightingWrapLambert (SurfaceOutput s, half3 lightDir, half atten) { half NdotL = dot (s.Normal, lightDir); half diff = _NdotL * 0.5 + 0.5_; half4 c; c.rgb = s.Albedo * _LightColor0.rgb * (diff * atten * 2); c.a = s.Alpha; return c; } %gray% struct Input { %gray% float2 uv_MainTex; %gray% }; %gray% sampler2D _MainTex; %gray% void surf (Input IN, inout SurfaceOutput o) { %gray% o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb; %gray% } %gray% ENDCG %gray% } %gray% Fallback "Diffuse" %gray%} {{:unity3d:SurfaceShaderDiffuseWrap.png}} {{:unity3d:SurfaceShaderDiffuseWrapNoTex.png}} =====Toon Ramp===== 여기에 표면이 조명과 normal 사이의 각도에 어떻게 반응하는지를 정의하는 텍스쳐 램프를 사용하는"Ramp" 조명 모델이 있습니다. 이것은Toon 조명을 포함해서 다양한 효과를 위해 사용될 수 있습니다. %gray%Shader "Example/Toon Ramp" { %gray% Properties { %gray% _MainTex ("Texture", 2D) = "white" {} __Ramp ("Shading Ramp", 2D) = "gray" {}_ %gray% } %gray% SubShader { %gray% Tags { "RenderType" = "Opaque" } %gray% CGPROGRAM #pragma surface surf _Ramp_ sampler2D _Ramp; half4 LightingRamp (SurfaceOutput s, half3 lightDir, half atten) { half NdotL = dot (s.Normal, lightDir); half diff = NdotL * 0.5 + 0.5; _half3 ramp = tex2D (_Ramp, float2(diff)).rgb;_ half4 c; c.rgb = s.Albedo * _LightColor0.rgb * ramp * (atten * 2); c.a = s.Alpha; return c; } %gray% struct Input { %gray% float2 uv_MainTex; %gray% }; %gray% sampler2D _MainTex; %gray% void surf (Input IN, inout SurfaceOutput o) { %gray% o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb; %gray% } %gray% ENDCG %gray% } %gray% Fallback "Diffuse" %gray%} {{:unity3d:SurfaceShaderToonRamp.png}} {{:unity3d:SurfaceShaderToonRampNoTex.png Attach:SurfaceShaderToonRampItself.png}} =====Simple Specular===== 여기에 단순한 반사 조명 모델이 있습니다. 그것은 내장된BlinnPhong이 실제로 하는 것에 꽤 간단합니다; 우리는 그것이 어떻게 되는지를 보여주기 위해서 여기에 그것을 놓습니다. %gray%Shader "Example/Simple Specular" { %gray% Properties { %gray% _MainTex ("Texture", 2D) = "white" {} %gray% } %gray% SubShader { %gray% Tags { "RenderType" = "Opaque" } %gray% CGPROGRAM #pragma surface surf SimpleSpecular half4 LightingSimpleSpecular (SurfaceOutput s, half3 lightDir, half3 viewDir, half atten) { half3 h = normalize (lightDir + viewDir); half diff = max (0, dot (s.Normal, lightDir)); float nh = max (0, dot (s.Normal, h)); float spec = pow (nh, 48.0); half4 c; c.rgb = (s.Albedo * _LightColor0.rgb * diff + _LightColor0.rgb * spec) * (atten * 2); c.a = s.Alpha; return c; } %gray% struct Input { %gray% float2 uv_MainTex; %gray% }; %gray% sampler2D _MainTex; %gray% void surf (Input IN, inout SurfaceOutput o) { %gray% o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb; %gray% } %gray% ENDCG %gray% } %gray% Fallback "Diffuse" %gray%} {{:unity3d:SurfaceShaderSimpleSpecular.png}} {{:unity3d:SurfaceShaderSimpleSpecularNoTex.png}} {{tag>유니티 unity}} * 출처: [[http://unitykoreawiki.com/index.php?n=KrMain.SL-SurfaceShaderLightingExamples|유니티코리아위키]] (CC BY-NC-SA 2.0)
2+1?
이 필드는 비어 있도록 유지하세요:
저장
미리 보기
취소
편집 요약
참고: 이 문서를 편집하면 내용은 다음 라이선스에 따라 배포하는 데 동의하는 것으로 간주합니다:
CC Attribution-Noncommercial-Share Alike 4.0 International
연결문서
유니티3D ( Unity3D )
Surface Shader Examples
Custom Lighting models in Surface Shaders
Writing Surface Shaders
Reference Manual
문서 도구
문서 보기
이전 판
연결문서
맨 위로
다크 모드로 보기
☀️
Toggle Menu
유니티3D ( Unity3D )
너두 고쳐두 됩니다.
사이트 도구
최근 바뀜
미디어 관리자
사이트맵
사용자 도구
등록
로긴
최근 수정된 문서
misuse_topical5
노박
unique_items
dinner_bell
deputy_beagle
ratslayer
one_for_my_baby
alerio
power_fist
제거됨
fixer
climb_ev_ry_mountain
companion
[장비 분실]
crashed_vertibird
brotherhood_t-51b_power_armor
marco
i_forgot_to_remember_to_forget
cateye