Unity Particle Pack 의 씬을 이용해 Post Process 를 몇개 적용해 보았다.
아티스트가 아니기에 눈에 띄는 요소들만 확인.
메인카메라에 Post Process Layer 와 Post Process Volume 이 추가되어 있다.
씬 전체에 적용하기 위해 Post Process Volume 의 Is Global 체크되어 있는 상태.
Bloom
https://docs.unity3d.com/kr/2018.3/Manual/PostProcessing-Bloom.html
Intensity 조정
Threshold 조정
Dirtiness
Texture
지저분함의 강도(intensity)를 조절해 카메라에 얼룩같은 효과를 주게 된다.
Color Grading
https://docs.unity3d.com/kr/2018.3/Manual/PostProcessing-ColorGrading.html
색감을 조절하기 위한 설정
화이트 밸런스 항목의 Temperature 등을 조절해 특정 환경 느낌이 나도록 한다.
Grain
https://docs.unity3d.com/kr/2018.3/Manual/PostProcessing-Grain.html
Lens Distortion
Vinette
https://docs.unity3d.com/kr/2018.3/Manual/PostProcessing-Vignette.html
.
.
커스텀 이펙트 정의
https://github.com/Unity-Technologies/PostProcessing/wiki/Writing-Custom-Effects
쉐이더 정의
Shader "Hidden/MyShader"
{
HLSLINCLUDE
#include "PostProcessing/Shaders/StdLib.hlsl"
TEXTURE2D_SAMPLER2D(_MainTex, sampler_MainTex);
float Blend;
float4 Frag( VaryingsDefault i): SV_Target
{
float4 baseColor = SAMPLE_TEXTURE2D( _MainTex, sampler_MainTex, i.textcoord);
float luminance = dot( baseColor.rgb, float3( 0.2126729, 0.7151522, 0.0721750));
color.rgb = lerp( color.rgb, luminance.xxx, Blend.xxx );
return color;
}
ENDHLSL
SubShader
{
Cull Off ZWrite Off ZTest Always
Pass
{
HLSLPROGRAM
#pragma vertex VertDefault
#pragma fragment Frag
ENDHLSL
}
}
}
포스트 프로세스 정의
using UnityEngine.Rendering.PostProcessing;
[System.Serializable]
[PostProcess(typeof( MyRenderer), PostProcessEvent.AfterStack, "Custom/MyRenderer")]
[PostProcess( 렌더 , 인젝션 위치, 메뉴 항목, allowInSceneView = true)]
인젝션 위치
BeforeTransparent : 불투명 오브젝트에만 적용
BeforeStack : 내장 스택 이전에 적용, 안티 앨리어싱, DOF(피사계 심도), 톤 매핑 등
AfterStack : 내장 스택 실행 이후에 적용
public sealed class MyEffectSetting : PostProcessEffectSettings
{
#region Shader Parameters
[Range(0f, 1f), Tooltip("bla~ bla~")]
public FloatParameter blend = new FloatParameter{ value = 0.5f };
#endregion
public override bool IsEnabledAndSupported( PostProcessRenderContext context)
{
return enabled.value && ( blend.value > 0f);
}
}
렌더러
public class MyRenderer : PostProcessEffectRenderer<MyEffectSetting>
{
public override void Render( PostProcessRenderContext context )
{
// PostProcessing/Runtime/PostProcessingContext.cs
var sheet = context.propertySheets.Get( Shader.Find( "Hidden/MyShader" ));
// 쉐이더 프로퍼티에 필요한 값을 지정
sheet.properties.SetFloat( "Blend", settings.blend);
//sheet.properties.SetInt()
//sheet.properties.SetTexture()
//sheet.properties.SetColor()
context.command.BlitFullscreenTriangle( context.source, context.destination, sheet, 0);
}
}
에디터 요소로 설정 추가 : Editor 폴더에 아래 클래스 추가
using UnityEngine.Rendering.PostProcessing;
using UnityEditor.Rendering.PostProcessing;
[PostProcessEditor(typeof(MyRenderer) ) ]
public sealed class MyEffectSettingEditor : PostProcessEffectEditor<MyEffectSetting>
{
SerializedParameterOverride m_Blend;
public override void OnEnable()
{
m_Blend = FindParameterOverride( x => x.blend );
}
public override void OnInspectorGUI()
{
PropertyField( m_Blend );
}
}
'프로그래밍 > Unity' 카테고리의 다른 글
[Unity] 테셀레이션 (0) | 2019.04.05 |
---|---|
[Unity] 인스펙터 변수 이름 변경 (0) | 2018.11.13 |
[Unity] SteamVR 액션 설정 (0) | 2018.11.05 |
[Unity] AR Foundation Package (0) | 2018.09.20 |
[Unity] 유니티용 DLL (0) | 2018.09.18 |
[Unity] VR 환경 끄거나 켜기 (0) | 2018.09.14 |
[Unity] AssetDatabase (0) | 2018.09.12 |
[Unity] AssetBundle (0) | 2018.08.24 |
[unity3d] 서피스 쉐이더 정리 (1) | 2018.06.26 |
[Unity] Mesh 생성 및 변경 (0) | 2011.06.24 |