쉐더를 해야 할 때가 많지 않아요. 72가지 색깔의 그림자를 받았어요.
쉐더를 할 시간이 얼마 안 남았어요.
하마터면 Shader를 할 뻔했다.쉐더를 할 시간이 많지 않을 것 같아서요.
100부까지 열심히 하겠습니다.10년이 걸려도 돼요.
100편의 글을 배웠다면 초보자라도 이해할 수 있을 것 같아요.
이렇게 하는 거야.
※ 초보자는 필기 레벨로 기록
기술 보도로는 도움이 안 될 것 같습니다.
미리 준비하다
아래 참조
Shader 파트 1Unite 2017 애니메이션을 볼 때가 많지 않아요. (기초지식~종이 스크레이퍼로 색깔 바꾸기)
데모
컬러 그림자를 받은 플랜을 배열해 봤어요.
결이 반영되어 약간의 무늬가 있습니다.
Shader 샘플
3
Shader "Custom/ColorfulShadow"
{
Properties
{
//ここに書いたものがInspectorに表示される
_MainColor("MainColor",Color) = (1,1,1,1)
_ShadowColor("ShadowColor",Color) = (0,0,0,1)
_ShadowTex("ShadowTexture", 2D) = "white" {}
_ShadowIntensity ("Shadow Intensity", Range (0, 1)) = 0.6
}
SubShader
{
CGINCLUDE
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
ENDCG
//メインカラーのパス
Pass
{
CGPROGRAM
//変数の宣言 Propertiesで定義した名前と一致させる
half4 _MainColor;
struct v2f
{
float4 pos : SV_POSITION;
};
v2f vert(appdata_base v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
return o;
}
half4 frag(v2f i) : COLOR
{
//RGBAにそれぞれのプロパティを当てはめてみる
return half4(_MainColor);
}
ENDCG
}
//影を塗りこむパス
Pass
{
Tags
{
"Queue"="geometry"
"LightMode" = "ForwardBase"
}
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma multi_compile_fwdbase
#include "AutoLight.cginc"
sampler2D _ShadowTex;
float4 _ShadowTex_ST;
float4 _ShadowColor;
float _ShadowIntensity;
//グローバル変数
float _ShadowDistance;
struct appdata
{
float4 vertex : POSITION;
float2 shadow_uv : TEXCOORD0;
float3 normal:NORMAL;
};
struct v2f
{
float2 shadow_uv : TEXCOORD0;
float4 pos : SV_POSITION;
float3 worldNormal:NORMAL;
float3 worldPos : WORLD_POS;
SHADOW_COORDS(1)
};
v2f vert(appdata v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
TRANSFER_SHADOW(o);
//タイリングとオフセットの処理
o.shadow_uv = TRANSFORM_TEX(v.shadow_uv, _ShadowTex);
//法線方向のベクトル
o.worldNormal = UnityObjectToWorldNormal(v.normal);
o.worldPos = mul(unity_ObjectToWorld, v.vertex);
return o;
}
float4 frag(v2f i) : COLOR
{
// カメラとオブジェクトの距離(長さ)を取得
// _WorldSpaceCameraPos:定義済の値 ワールド座標系のカメラの位置
float cameraToObjLength = clamp(length(_WorldSpaceCameraPos - i.worldPos), 0, _ShadowDistance);
//1つ目のライトのベクトルを正規化
float3 L = normalize(_WorldSpaceLightPos0.xyz);
//ワールド座標系の法線を正規化
float3 N = normalize(i.worldNormal);
//内積の結果が0以上なら1 この値を使って裏側の影は描画しない
float front = step(0, dot(N, L));
//影の場合0、それ以外は1
float attenuation = SHADOW_ATTENUATION(i);
//影の減衰率
float fade = 1 - pow(cameraToObjLength / _ShadowDistance, _ShadowDistance);
//影の色
float3 shadowColor = tex2D(_ShadowTex, i.shadow_uv) * _ShadowColor;
//影の場所とそれ以外の場所を塗分け
float4 finalColor = float4(shadowColor, (1 - attenuation) * _ShadowIntensity * front * fade);
return finalColor;
}
ENDCG
}
}
}
는 기본적으로 과거에 보도된 내용이다.[참조 링크]
Shader의 70번째 바이트용 Shader를 할 시간이 거의 없어요.
Shader 할 부분 71 그림자 받은 아욱용 Shader
섀도우의 색상을 텍스쳐의 샘플링 색상과 지정된 색상에 곱합니다.
이런 방법의 음영을 칠하는 것은 음영에서 개별적으로 설정할 수 있다는 장점이 있다.
각자 다른 소재에 부착된 플랜을 준비해 속성을 설정했다.
Reference
이 문제에 관하여(쉐더를 해야 할 때가 많지 않아요. 72가지 색깔의 그림자를 받았어요.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/kento_o/articles/907456dc65ccb0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)