스토리지
[5.7] CubeMap 본문
큐브맵(Cubemap) 은 환경에 대한 반사를 나타내는 여섯 개의 사각형 텍스처 컬렉션입니다. 여섯 개의 사각형은 오브젝트를 둘러싸는 가상 큐브면을 형성합니다. 각각의 면은 월드 축의 방향을 따른 뷰를 나타냅니다 (위, 아래, 좌, 우, 앞, 뒤). 큐브맵은 오브젝트의 반사나 “주변 환경”을 캡처하는 데 사용됩니다.
docs.unity3d.com/kr/2018.4/Manual/class-Cubemap.html
큐브맵 - Unity 매뉴얼
큐브맵(Cubemap) 은 환경에 대한 반사를 나타내는 여섯 개의 사각형 텍스처 컬렉션입니다. 여섯 개의 사각형은 오브젝트를 둘러싸는 가상 큐브면을 형성합니다. 각각의 면은 월드 축의 방향을 따
docs.unity3d.com
Shader "Custom/Test"
{
Properties
{
_MainTex ("Albedo (RGB)", 2D) = "white" {}
_BumpTex ("Albedo (RGB)", 2D) = "bump" {}
_Cube ("Cube Map", Cube) = "" {}
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Lambert
sampler2D _MainTex;
sampler2D _BumpTex;
samplerCUBE _Cube;
struct Input
{
float2 uv_MainTex;
float2 uv_BumpTex;
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);
// Normal 맵을 적용하기 위해 - 픽셀 당 Normal Map을 기반으로 반사벡터를 얻음.
float4 ref = texCUBE(_Cube, WorldReflectionVector(IN, o.Normal));
o.Albedo = c.rgb * 0.9;
o.Emission = ref.rgb * 0.7;
o.Alpha = c.a;
}
ENDCG
}
FallBack "Diffuse"
}
docs.unity3d.com/kr/530/Manual/SL-SurfaceShaders.html
유니티 - 매뉴얼: 서피스 쉐이더 작성
서피스 쉐이더 작성 라이팅과 상호 작용하는 쉐이더 기술은 복잡합니다. 각종 라이트, 각종 그림자 옵션, 각종 렌더링 패스(포워드 및 지연 렌더링)가 있으며, 쉐이더는 그 복잡성을 처리해야 합
docs.unity3d.com
1. Skybox 바꾸기
2. Shader에서 CubeData 받아오기
Type은 Cube
3. Cube 적용하기
texCube 함수로 Cube값을 받아온다.
developer.download.nvidia.com/cg/texCUBE.html
texCUBE
Name texCUBE - performs a texture lookup in a given CUBE sampler and, in some cases, a shadow comparison. May also use pre computed derivatives if those are provided. Synopsis float4 texCUBE(samplerCUBE samp, float3 s) float4 texCUBE(samplerCUBE samp, floa
developer.download.nvidia.com
o.Normal로 Bump Map을 넣었으면 일반적으로 Bump Map을 삽입할 수 없다.
그래서 WorldReflectionVector(IN, o.Normal)이란 함수로 따로 처리를 해주어야한다.
그리고 이에 따른 Input 구조체에 여러가지 멤버가 있다.
- float3 viewDir - 뷰 방향을 포함합니다. 패럴랙스 이펙트, 림 조명 등의 컴퓨팅에 사용합니다.
- float4와 COLOR 시맨틱 - 보간된 버텍스당 컬러를 포함합니다.
- float4 screenPos - 반사 또는 스크린 공간 효과를 위한 스크린 공간 포지션을 포함합니다. GrabPass에는 적합하지 않습니다. ComputeGrabScreenPos 함수를 사용하여 커스텀 UV를 직접 계산해야 합니다.
- float3 worldPos - 월드 공간 포지션을 포함합니다.
- float3 worldRefl - 표면 셰이더가 o.Normal에 기록하지 않는 경우 월드 반사 벡터를 포함합니다. 예를 들어 리플렉트-디퓨즈(Reflect-Diffuse) 셰이더가 있습니다.
- float3 worldNormal - 표면 셰이더가 o.Normal에 기록하지 않는 경우 월드 노멀 벡터를 포함합니다.
- float3 worldRefl; INTERNAL_DATA - 표면 셰이더가 o.Normal에 기록하는 경우 월드 반사 벡터를 포함합니다. 픽셀당 노멀 맵을 기반으로 반사 벡터를 얻으려면 WorldReflectionVector (IN, o.Normal)를 사용해야 합니다. 예를 들어 리플렉트-범프드(Reflect-Bumped) 셰이더가 있습니다.
- float3 worldNormal; INTERNAL_DATA - 표면 셰이더가 o.Normal에 기록하는 경우 월드 노멀 벡터를 포함합니다. 픽셀당 노멀 맵에 기반한 노멀 벡터를 얻으려면 WorldNormalVector (IN, o.Normal)를 사용해야 합니다.
'Unity > Shader' 카테고리의 다른 글
[5.10] Cube Map 연습 (0) | 2021.05.10 |
---|---|
[5.8] 토요일 Shader 연습 (0) | 2021.05.08 |
[5.7] Warped Diffuse (0) | 2021.05.07 |
[5.7] 밝기에 따른 영역 나누기 (0) | 2021.05.07 |
[5.7] 외곽선 연습 (0) | 2021.05.07 |