[학원 Unity]/[게임 그래픽 프로그래밍]
09-02 수업내용 쉐이더 랜더링
롤링페이퍼
2024. 9. 2. 12:36
1. 랜더링
Shader "LearnShader/Test/MyShader"
{
Properties
{
// Properties 안에선 ; 을 사용하면 안된다.
_Color ("Color", Color) = (1,1,1,1)
_MainTex ("Albedo (RGB)", 2D) = "white" {}
// 여기선 log를 확인할 방법이 없어 인게임에서 결과로 색을 확인해야한다.
// 변수명(디스플레이 이름, 변수의 타입) = 기본값
_Darkness ("Darkness", Float)=0.1
_Brightness ("Brightness", Range(0.0, 1.0)) = 1
// Float4를 받는 인터페이스
_MyColor("Color", Color) = (1,1,1,1)
}
SubShader
{
Tags { "RenderType"="Opaque" }
CGPROGRAM
// 서핏 쉐이더에 픽셀을 결정하는 함수
// Standard : 유니티에서 빛의 계산을 자동으로 해준다. 추가로 물리기반 라이팅(사물과 사물의 빛 반사)도 계산 해준다.
#pragma surface surf Standard noambient
#pragma target 3.0
//변수는 CGPROGRAM에서 ENDCG까지 중 아무데나 넣어도 된다.
sampler2D _MainTex;
// 엔진으로 부터 받아오는 내용
struct Input
{
float2 uv_MainTex;
};
fixed4 _Color;
// 픽셀계산한다.
void surf (Input IN, inout SurfaceOutputStandard o)
{
//fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color;
// 여기서 색을 정해 넣음
// o.Albedo : 빛(Directional Light)의 영향을 받고 출력한다.
//o.Albedo = float3(0,0,0);
// o.Emission : 빛(Directional Light)의 영향을 받지 않고 출력한다.
o.Emission = float3(1,0,0);
o.Alpha = 1;
}
ENDCG
}
FallBack "Diffuse"
}
2. 랜더링
Shader "Custom/MyShader2"
{
Properties
{
// Range : 슬라이더
_Red ("Red", Range(0,1)) = 1
_Green("Green", Range(0,1)) = 1
_Blue("Green", Range(0,1)) = 1
_BrightDark ("Bright & Dark", Range(-1,1)) = 1
}
SubShader
{
// Opaque 가 있으면 o.Alpha = 1;를 추가할 필요가 없다.
Tags { "RenderType"="Opaque" }
CGPROGRAM
#pragma surface surf Standard fullforwardshadows
#pragma target 3.0
struct Input
{
fixed4 color;
};
float _Red;
float _Green;
float _Blue;
float _BrightDark;
void surf (Input IN, inout SurfaceOutputStandard o)
{
float3 r = float3(_Red, _Green, _Blue);
// 1 - 변수 => 색상 반전
o.Emission = 1 - r;
o.Alpha = 1;
}
ENDCG
}
FallBack "Diffuse"
}
https://docs.unity3d.com/kr/2020.3/Manual/SL-SurfaceShaders.html
표면 셰이더 작성 - Unity 매뉴얼
빌트인 렌더 파이프라인에서 표면 셰이더는 조명과 상호작용하는 셰이더를 더욱 간단하게 작성하는 방법입니다.
docs.unity3d.com
https://developer.download.nvidia.com/cg/max.html
max
Name max - returns the maximum of two scalars or each respective component of two vectors Synopsis float max(float a, float b); float1 max(float1 a, float1 b); float2 max(float2 a, float2 b); float3 max(float3 a, float3 b); float4 max(float4 a, float4 b);
developer.download.nvidia.com