셰더의 49번째 부분을 할 시간이 얼마 남지 않았어요.
쉐더를 할 시간이 얼마 안 남았어요.
하마터면 Shader를 할 뻔했다.쉐더를 할 시간이 많지 않을 것 같아서요.
100부까지 열심히 하겠습니다.10년이 걸려도 돼요.
100편의 글을 배웠다면 초보자라도 이해할 수 있을 것 같아요.
이렇게 하는 거야.
※ 초보자는 필기 레벨로 기록
기술 보도로는 도움이 안 될 것 같습니다.
미리 준비하다
아래 참조
Shader 파트 1Unite 2017 애니메이션을 볼 때가 많지 않아요. (기초지식~종이 스크레이퍼로 색깔 바꾸기)
데모
윤활등은 바로 이런 물건이다.
림은'연'이라는 뜻인 듯 가장자리 부분에서 빛이 나는데 이것이 바로 윤활등이다.
Shader 샘플
Shader "Custom/Rim"
{
Properties
{
_TintColor("Tint Color", Color) = (0,0.5,1,1)
_RimColor("Rim Color", Color) = (0,1,1,1)
_RimPower("Rim Power", Range(0,1)) = 0.4
}
Category
{
Tags
{
"Queue" = "Transparent"
"RenderType" = "Transparent"
}
Blend SrcAlpha OneMinusSrcAlpha
SubShader
{
Pass
{
ZWrite On
ColorMask 0
}
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
float4 _TintColor;
float4 _RimColor;
float _RimPower;
struct appdata_t
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
float3 normal : NORMAL;
};
struct v2f
{
float4 vertex : SV_POSITION;
float2 uv : TEXCOORD0;
float3 world_pos : TEXCOORD1;
float3 normalDir : TEXCOORD2;
};
v2f vert(appdata_t v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.world_pos = mul(unity_ObjectToWorld, v.vertex).xyz;
//法線を取得
o.normalDir = UnityObjectToWorldNormal(v.normal);
return o;
}
fixed4 frag(v2f i) : SV_Target
{
//カメラのベクトルを計算
float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.world_pos.xyz);
//法線とカメラのベクトルの内積を計算し、補間値を算出
half rim = 1.0 - saturate(dot(viewDirection, i.normalDir));
//補間値で塗分け
float4 col = lerp(_TintColor, _RimColor, rim * _RimPower);
return col;
}
ENDCG
}
}
}
}
saturate는 0~1의 범위 내에서 파라미터를 납부한다.법방향과 카메라의 벡터는saturate로 0~1을 넣고 이동할 수 있는 조명의 도분 삽입 값을 계산한다.
법선과 카메라 벡터가 직선이면 내적은 0이고 방향이 같으면 1로 돌아간다.
【참조 링크】: Shader의 31번째 부분에 내적을 사용할 때가 거의 없어요.
아래의 보도는 지도를 이해하기 매우 쉽다.
【참조 링크】: 윤활등
Reference
이 문제에 관하여(셰더의 49번째 부분을 할 시간이 얼마 남지 않았어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kento_o/articles/63ed1cb3fd069b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)