Unity/수업내용
Unity Shader 21.05.07. 수업내용 - Cube Map
HappyFrog
2021. 5. 7. 18:24
가슴부위에 잘 보이는데, 잘 반사가 되고있다.
Cube텍스쳐는 samplerCUBE타입이며, worldRefl는 Input구조체의 기능이다. 또한, texCUBE는 texCUBE(큐브, float3)형식을 받는다. 그리고 Emission과 Albedo를 같이사용하여 더 밝게 출력된다.
알베도를 0으로 할당하고 범프맵까지 적용하니 반사도 잘 되고 텍스쳐도 잘 표현됐다.
나는 왜 가운데 출력값이 까맣게 나오는지 모르겠다
Shader "Custom/CubeMap"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_BumpTex ("BumpTexture", 2D) = "bump" {}
_Cube ("CubeMap", Cube) = "" {}
_Emission ("EmissionCoef", Float) = 0
_Albedo ("AlbedoCoef", Float) = 0
}
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 200
CGPROGRAM
#pragma surface surf Lambert
sampler2D _BumpTex;
sampler2D _MainTex;
samplerCUBE _Cube;
float _Emission;
float _Albedo;
struct Input
{
float2 uv_BumpTex;
float2 uv_MainTex;
float3 worldRefl;
float3 worldNormal;
INTERNAL_DATA
};
void surf (Input IN, inout SurfaceOutput o)
{
o.Normal = UnpackNormal(tex2D(_BumpTex, IN.uv_BumpTex));
fixed4 c = tex2D (_MainTex, IN.uv_MainTex);
float4 refl = texCUBE(_Cube, WorldReflectionVector(IN, o.Normal));
o.Albedo = c.rgb * _Albedo;
//o.Emission = IN.worldNormal;
float3 worldNormal = WorldReflectionVector(IN, o.Normal);
o.Emission = refl.rgb * _Emission;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}