Shader "CustomRenderTexture/BackgroundShader"
{
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" { }
_ScreenTex ("Screen Tex", 2D) = "white" { }
_PixelRange ("Pixel Range", Range(1, 10)) = 5
}
SubShader
{
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
};
struct v2f
{
float4 pos : TEXCOORD0;
};
v2f vert(appdata v)
{
v2f o;
o.pos = v.vertex;
return o;
}
sampler2D _ScreenTex;
float _PixelRange;
float4 SampleAverage(float2 screenPos, float range)
{
float3 avgColor = float3(0.0, 0.0, 0.0);
int count = 0;
for (int x = -range; x <= range; x++)
{
for (int y = -range; y <= range; y++)
{
float2 offset = float2(x, y) * _ScreenTex_TexelSize;
avgColor += tex2D(_ScreenTex, screenPos + offset).rgb;
count++;
}
}
return float4(avgColor / count, 1.0);
}
float4 frag(v2f i) : SV_Target
{
float2 screenPos = i.pos.xy / i.pos.w;
return SampleAverage(screenPos, _PixelRange);
}
ENDCG
}
}
}
셰이더 코드는 이렇게 생겨먹었고
using UnityEngine;
public class SetTexelSize : MonoBehaviour
{
public Material material;
public Texture screenTex;
void Update()
{
if (screenTex != null)
{
Vector2 texelSize = new Vector2(1.0f / screenTex.width, 1.0f / screenTex.height);
material.SetVector("_ScreenTex_TexelSize", texelSize);
}
}
}
그걸 보좌하는 C# 코드는 이렇게 생겨먹었는데
어떻게 써야할지 감이 안 잡힌다
모자이크처럼 보이는 걸 원하는 거임? - dc App
GPT에게 물어봐서 뽑아낸 코드인데 특정한 범위만큼 가우시안 블러를 적용시키려고 뽑아낸거고 그 전에 테스트하려고 주변 픽셀의 색을 뽑아와서 혼합시키는 코드로 짜달라고 물어본거다
매터리얼에 쉐이더 연결시키고 그걸 원하는 오브젝트에 적용 ㄱㄱ 그 전에 쉐이더에서 vert함수랑 frag함수가 뭐하는 역할인지 어떻게 동작하는지 찾아봐바 ㄱㄱ
렌더링 파이프라인 관련해서 vertex shader랑 fragment shader 찾아보면 됨