[Unity] 서피스 면도기와 세그먼트 면도기의 차이점을 쉽게 정리했습니다.
개시하다
Unity 면도기에 대한 이해를 높이기 위해 서피스 면도기와 세그먼트 면도기의 차이점을 간략하게 정리했습니다.
Surface 및 부스러기 페이지
서피스 면도기
서피스 면도기를 사용하면 조명과 섀도우를 고려한 면도기를 간단하게 쓸 수 있다.
정점 농담기
복잡한 일을 하려면 이 컨실러를 사용하세요.
이것은 서피스 면도기보다 코드가 더 복잡합니다.
Unlit 면도기와 ImageEffect 면도기가 여기에 포함되어 있습니다.
양자 의 작법 이 다르다
필자는 이 면도기들이 어떤 차이가 있는지 잘 몰라서 자신의 방식에 따라 간단하게 작법의 차이를 총결하였다.
주요 차이점
구체적으로는 다음과 같다.다른 것도 있을지도 몰라요.
・번역 지도의 작법이 다르다
• 패스 블록 유무
구조체 데이터의 쓰기 방식이 다르다
・vertex 은폐 함수 없음
・vertex 농담 함수 쓰기의 차이
세션 차폐 함수의 쓰기 방식이 다르다
• 쓰기의 기술 방법의 차이
편역 지도의 작법이 다르다
서피스 면도기의 경우
아래의 작법은 다음과 같다.
디렉토리를 컴파일하는 쓰기 방법 중 하나#pragma surface surf Standard fullforwardshadows vertex vert
편역한 문법의 2#pragma surface surf Standard fullforwardshadows
#pragma vertex vert
서피스 농담자에서는 농담 함수를 지정할 때 조명 모델을 지정해야 합니다.
샘플 중 Standard는 조명 모형입니다.
참조: https://docs.unity3d.com/jp/540/Manual/SL-SurfaceShaders.html
세그먼트 마스크의 경우
아래의 작법은 다음과 같다.
디렉토리를 컴파일하는 방법#pragma vertex vert
#pragma fragment frag
참조: https://docs.unity3d.com/jp/540/Manual/SL-ShaderPrograms.html
패스 블록 유무
서피스 면도기의 경우
• 패스를 쓸 줄 모른다
세그먼트 마스크의 경우
· 패스를 써야 합니다
• 다중 패스 기술 가능
참조: https://docs.unity3d.com/jp/540/Manual/SL-Pass.html
구조체 데이터의 쓰기 방법이 다르다
서피스 면도기의 경우
밑글씨
구조 데이터의 설명struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
};
참조: https://docs.unity3d.com/jp/540/Manual/SL-SurfaceShaders.html
세그먼트 마스크의 경우
밑글씨
구조 데이터의 설명struct v2f {
half3 worldRefl : TEXCOORD0;
float4 pos : SV_POSITION;
};
그런 의미를 써야 한다.
참조: https://docs.unity3d.com/jp/540/Manual/SL-VertexFragmentShaderExamples.html
vertex 음영 함수 유무
서피스 면도기의 경우
vertex 그림자 함수 안 써도 돼요.
세그먼트 마스크의 경우
vertex 그림자 함수 쓰기
vertex 음영 함수 쓰기
서피스 면도기의 경우
밑글씨
vertex 음영 함수 쓰기void vert (inout appdata_full v) {
v.vertex.xyz += v.normal * _Amount;
}
vertex 음영 함수 쓰기 2void myvert (inout appdata_full v, out Input data)
{
UNITY_INITIALIZE_OUTPUT(Input,data);
float4 hpos = UnityObjectToClipPos(v.vertex);
hpos.xy/=hpos.w;
data.fog = min (1, dot (hpos.xy, hpos.xy)*0.5);
}
가장 큰 특징은 계산 결과를 구조 데이터에 저장하는 것이다.
참조: https://docs.unity3d.com/Manual/SL-SurfaceShaderExamples.html
세그먼트 마스크의 경우
아래의 작법은 다음과 같다.
vertex 음영 함수 쓰기v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
vertex 음영 함수 쓰기 2v2f vert (float4 vertex : POSITION, float3 normal : NORMAL)
{
v2f o;
o.pos = UnityObjectToClipPos(vertex);
o.worldPos = mul(_Object2World, vertex).xyz;
o.worldNormal = UnityObjectToWorldNormal(normal);
return o;
}
계산 결과를 구조 데이터로 되돌려 주는 것이 가장 큰 특징이다.
참조: https://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html
서버 면도기 함수
서피스 면도기의 경우
서버 면도기 함수 쓰기 1void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
}
서버 면도기 함수 쓰기 2void surf (Input IN, inout SurfaceOutput o) {
clip (frac((IN.worldPos.y+IN.worldPos.z*0.1) * 5) - 0.5);
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
}
계산 결과를 구조 데이터에 저장하는 것이 특징이다.
참조: https://docs.unity3d.com/Manual/SL-SurfaceShaderExamples.html
세그먼트 마스크의 경우
세션 차폐 함수의 쓰기 1fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
col *= i.diff;
return col;
}
세션 차폐 함수의 문법 2fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
fixed shadow = SHADOW_ATTENUATION(i);
fixed3 lighting = i.diff * shadow + i.ambient;
col.rgb *= lighting;
return col;
}
계산 결과를 컬러 값으로 복원하는 것이 특징이다.
참조: https://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html
작문 묘사 방법의 차이
서피스 면도기의 경우
다음 매개 변수만 지정하면 기록을 기술할 수 있습니다.
서피스 차광기의 조명 예#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);
c.a = s.Alpha;
return c;
}
참조: https://docs.unity3d.com/jp/540/Manual/SL-SurfaceShaderLightingExamples.html
세그먼트 마스크의 경우
스스로 글을 쓰고 처리해야 한다.
참조: https://docs.unity3d.com/ja/540/Manual/SL-VertexFragmentShaderExamples.html
기타
apdata 정보
apdata의 공식 이름은 Application to Vertex Shader Structure인 것 같습니다.
참조: http://wiki.unity3d.com/index.php?title=Shader_Code#Application_to_Vertex_Shader_Structure_.28appdata.29
v2f 정보
v2f의 정식 이름은 Vertex Shader to Fragment Shader Structure인 것 같습니다.
참조: http://wiki.unity3d.com/index.php?title=Shader_Code#Vertex_Shader_to_Fragment_Shader_Structure_.28v2f.29
최후
필자는 면도기에 대한 지식이 천박해서 잘못된 점이 있을 수 있다.
만약 잘못을 발견하면 저에게 알려 주세요.
참조 링크
유닛 마스크의 기초를 배워봤기 때문에 열의를 가지고 정리를 해봤습니다.
http://tips.hecomi.com/entry/2014/03/16/233943
Shader Code - Unify Community Wiki
http://wiki.unity3d.com/index.php?title=Shader_Code#Application_to_Vertex_Shader_Structure_.28appdata.29
[Unity] Vertex/Fragment shader에 일반적인 조명과 음영을 적용한 샘플
http://qiita.com/edo_m18/items/ee4b9018e860c11199b0
Reference
이 문제에 관하여([Unity] 서피스 면도기와 세그먼트 면도기의 차이점을 쉽게 정리했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/05eb20e230f3ebe2b19f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
서피스 면도기
서피스 면도기를 사용하면 조명과 섀도우를 고려한 면도기를 간단하게 쓸 수 있다.
정점 농담기
복잡한 일을 하려면 이 컨실러를 사용하세요.
이것은 서피스 면도기보다 코드가 더 복잡합니다.
Unlit 면도기와 ImageEffect 면도기가 여기에 포함되어 있습니다.
양자 의 작법 이 다르다
필자는 이 면도기들이 어떤 차이가 있는지 잘 몰라서 자신의 방식에 따라 간단하게 작법의 차이를 총결하였다.
주요 차이점
구체적으로는 다음과 같다.다른 것도 있을지도 몰라요.
・번역 지도의 작법이 다르다
• 패스 블록 유무
구조체 데이터의 쓰기 방식이 다르다
・vertex 은폐 함수 없음
・vertex 농담 함수 쓰기의 차이
세션 차폐 함수의 쓰기 방식이 다르다
• 쓰기의 기술 방법의 차이
편역 지도의 작법이 다르다
서피스 면도기의 경우
아래의 작법은 다음과 같다.
디렉토리를 컴파일하는 쓰기 방법 중 하나#pragma surface surf Standard fullforwardshadows vertex vert
편역한 문법의 2#pragma surface surf Standard fullforwardshadows
#pragma vertex vert
서피스 농담자에서는 농담 함수를 지정할 때 조명 모델을 지정해야 합니다.
샘플 중 Standard는 조명 모형입니다.
참조: https://docs.unity3d.com/jp/540/Manual/SL-SurfaceShaders.html
세그먼트 마스크의 경우
아래의 작법은 다음과 같다.
디렉토리를 컴파일하는 방법#pragma vertex vert
#pragma fragment frag
참조: https://docs.unity3d.com/jp/540/Manual/SL-ShaderPrograms.html
패스 블록 유무
서피스 면도기의 경우
• 패스를 쓸 줄 모른다
세그먼트 마스크의 경우
· 패스를 써야 합니다
• 다중 패스 기술 가능
참조: https://docs.unity3d.com/jp/540/Manual/SL-Pass.html
구조체 데이터의 쓰기 방법이 다르다
서피스 면도기의 경우
밑글씨
구조 데이터의 설명struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
};
참조: https://docs.unity3d.com/jp/540/Manual/SL-SurfaceShaders.html
세그먼트 마스크의 경우
밑글씨
구조 데이터의 설명struct v2f {
half3 worldRefl : TEXCOORD0;
float4 pos : SV_POSITION;
};
그런 의미를 써야 한다.
참조: https://docs.unity3d.com/jp/540/Manual/SL-VertexFragmentShaderExamples.html
vertex 음영 함수 유무
서피스 면도기의 경우
vertex 그림자 함수 안 써도 돼요.
세그먼트 마스크의 경우
vertex 그림자 함수 쓰기
vertex 음영 함수 쓰기
서피스 면도기의 경우
밑글씨
vertex 음영 함수 쓰기void vert (inout appdata_full v) {
v.vertex.xyz += v.normal * _Amount;
}
vertex 음영 함수 쓰기 2void myvert (inout appdata_full v, out Input data)
{
UNITY_INITIALIZE_OUTPUT(Input,data);
float4 hpos = UnityObjectToClipPos(v.vertex);
hpos.xy/=hpos.w;
data.fog = min (1, dot (hpos.xy, hpos.xy)*0.5);
}
가장 큰 특징은 계산 결과를 구조 데이터에 저장하는 것이다.
참조: https://docs.unity3d.com/Manual/SL-SurfaceShaderExamples.html
세그먼트 마스크의 경우
아래의 작법은 다음과 같다.
vertex 음영 함수 쓰기v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
vertex 음영 함수 쓰기 2v2f vert (float4 vertex : POSITION, float3 normal : NORMAL)
{
v2f o;
o.pos = UnityObjectToClipPos(vertex);
o.worldPos = mul(_Object2World, vertex).xyz;
o.worldNormal = UnityObjectToWorldNormal(normal);
return o;
}
계산 결과를 구조 데이터로 되돌려 주는 것이 가장 큰 특징이다.
참조: https://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html
서버 면도기 함수
서피스 면도기의 경우
서버 면도기 함수 쓰기 1void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
}
서버 면도기 함수 쓰기 2void surf (Input IN, inout SurfaceOutput o) {
clip (frac((IN.worldPos.y+IN.worldPos.z*0.1) * 5) - 0.5);
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
}
계산 결과를 구조 데이터에 저장하는 것이 특징이다.
참조: https://docs.unity3d.com/Manual/SL-SurfaceShaderExamples.html
세그먼트 마스크의 경우
세션 차폐 함수의 쓰기 1fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
col *= i.diff;
return col;
}
세션 차폐 함수의 문법 2fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
fixed shadow = SHADOW_ATTENUATION(i);
fixed3 lighting = i.diff * shadow + i.ambient;
col.rgb *= lighting;
return col;
}
계산 결과를 컬러 값으로 복원하는 것이 특징이다.
참조: https://docs.unity3d.com/Manual/SL-VertexFragmentShaderExamples.html
작문 묘사 방법의 차이
서피스 면도기의 경우
다음 매개 변수만 지정하면 기록을 기술할 수 있습니다.
서피스 차광기의 조명 예#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);
c.a = s.Alpha;
return c;
}
참조: https://docs.unity3d.com/jp/540/Manual/SL-SurfaceShaderLightingExamples.html
세그먼트 마스크의 경우
스스로 글을 쓰고 처리해야 한다.
참조: https://docs.unity3d.com/ja/540/Manual/SL-VertexFragmentShaderExamples.html
기타
apdata 정보
apdata의 공식 이름은 Application to Vertex Shader Structure인 것 같습니다.
참조: http://wiki.unity3d.com/index.php?title=Shader_Code#Application_to_Vertex_Shader_Structure_.28appdata.29
v2f 정보
v2f의 정식 이름은 Vertex Shader to Fragment Shader Structure인 것 같습니다.
참조: http://wiki.unity3d.com/index.php?title=Shader_Code#Vertex_Shader_to_Fragment_Shader_Structure_.28v2f.29
최후
필자는 면도기에 대한 지식이 천박해서 잘못된 점이 있을 수 있다.
만약 잘못을 발견하면 저에게 알려 주세요.
참조 링크
유닛 마스크의 기초를 배워봤기 때문에 열의를 가지고 정리를 해봤습니다.
http://tips.hecomi.com/entry/2014/03/16/233943
Shader Code - Unify Community Wiki
http://wiki.unity3d.com/index.php?title=Shader_Code#Application_to_Vertex_Shader_Structure_.28appdata.29
[Unity] Vertex/Fragment shader에 일반적인 조명과 음영을 적용한 샘플
http://qiita.com/edo_m18/items/ee4b9018e860c11199b0
Reference
이 문제에 관하여([Unity] 서피스 면도기와 세그먼트 면도기의 차이점을 쉽게 정리했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/05eb20e230f3ebe2b19f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#pragma surface surf Standard fullforwardshadows vertex vert
#pragma surface surf Standard fullforwardshadows
#pragma vertex vert
#pragma vertex vert
#pragma fragment frag
struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
};
struct v2f {
half3 worldRefl : TEXCOORD0;
float4 pos : SV_POSITION;
};
void vert (inout appdata_full v) {
v.vertex.xyz += v.normal * _Amount;
}
void myvert (inout appdata_full v, out Input data)
{
UNITY_INITIALIZE_OUTPUT(Input,data);
float4 hpos = UnityObjectToClipPos(v.vertex);
hpos.xy/=hpos.w;
data.fog = min (1, dot (hpos.xy, hpos.xy)*0.5);
}
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
v2f vert (float4 vertex : POSITION, float3 normal : NORMAL)
{
v2f o;
o.pos = UnityObjectToClipPos(vertex);
o.worldPos = mul(_Object2World, vertex).xyz;
o.worldNormal = UnityObjectToWorldNormal(normal);
return o;
}
void surf (Input IN, inout SurfaceOutput o) {
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
}
void surf (Input IN, inout SurfaceOutput o) {
clip (frac((IN.worldPos.y+IN.worldPos.z*0.1) * 5) - 0.5);
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
col *= i.diff;
return col;
}
fixed4 frag (v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
fixed shadow = SHADOW_ATTENUATION(i);
fixed3 lighting = i.diff * shadow + i.ambient;
col.rgb *= lighting;
return col;
}
#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);
c.a = s.Alpha;
return c;
}
apdata 정보
apdata의 공식 이름은 Application to Vertex Shader Structure인 것 같습니다.
참조: http://wiki.unity3d.com/index.php?title=Shader_Code#Application_to_Vertex_Shader_Structure_.28appdata.29
v2f 정보
v2f의 정식 이름은 Vertex Shader to Fragment Shader Structure인 것 같습니다.
참조: http://wiki.unity3d.com/index.php?title=Shader_Code#Vertex_Shader_to_Fragment_Shader_Structure_.28v2f.29
최후
필자는 면도기에 대한 지식이 천박해서 잘못된 점이 있을 수 있다.
만약 잘못을 발견하면 저에게 알려 주세요.
참조 링크
유닛 마스크의 기초를 배워봤기 때문에 열의를 가지고 정리를 해봤습니다.
http://tips.hecomi.com/entry/2014/03/16/233943
Shader Code - Unify Community Wiki
http://wiki.unity3d.com/index.php?title=Shader_Code#Application_to_Vertex_Shader_Structure_.28appdata.29
[Unity] Vertex/Fragment shader에 일반적인 조명과 음영을 적용한 샘플
http://qiita.com/edo_m18/items/ee4b9018e860c11199b0
Reference
이 문제에 관하여([Unity] 서피스 면도기와 세그먼트 면도기의 차이점을 쉽게 정리했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/r-ngtm/items/05eb20e230f3ebe2b19f
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
유닛 마스크의 기초를 배워봤기 때문에 열의를 가지고 정리를 해봤습니다.
http://tips.hecomi.com/entry/2014/03/16/233943
Shader Code - Unify Community Wiki
http://wiki.unity3d.com/index.php?title=Shader_Code#Application_to_Vertex_Shader_Structure_.28appdata.29
[Unity] Vertex/Fragment shader에 일반적인 조명과 음영을 적용한 샘플
http://qiita.com/edo_m18/items/ee4b9018e860c11199b0
Reference
이 문제에 관하여([Unity] 서피스 면도기와 세그먼트 면도기의 차이점을 쉽게 정리했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/r-ngtm/items/05eb20e230f3ebe2b19f텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)