728x90

셰이더 14

Normal Map 관련 자료 스크랩 + Normal 을 RGB로 변환, 역변환 계산

버텍스의 노멀 벡터 값을 노멀맵의 RGB로 변환하는 계산식버텍스의 노멀 벡터 값을 노멀맵의 RGB로 변환하는 계산식은 다음과 같다.버텍스의 노멀 벡터는 일반적으로 정규화되어 있다. 이를 (x, y, z)로 나타낸다.RGB 값은 일반적으로 0에서 1 사이의 범위를 가진다.따라서 각각의 컬러 채널(R, G, B)은 다음과 같이 계산된다:R = (x + 1) / 2G = (y + 1) / 2B = (z + 1) / 2이 계산식은 각각의 노멀 벡터 요소를 0에서 1 사이의 값으로 매핑하여 RGB 값으로 변환한다.이렇게 계산하는 이유는 다음과 같다:1. 노멀맵의 RGB 값의 범위는 0에서 1 사이여야 한다. 버텍스의 노멀 벡터는 보통 정규화되어 있으며, 이를 RGB 값으로 변환할 때 0에서 1 사이의 값으로 스케..

[Unity] 간단한 가우시안 블러(GaussianBlur) 셰이더 코드

텍스처에 가우시안 블러 처리를 하면 요런 결과물이 생성됨. 아래는 머티리얼 속성. Blur Radius 를 조절해서 Blur 강도를 조절할 수 있다. 간단한 가우시안 블러 셰이더 코드 Shader "Custom/GaussianBlur" { Properties { _MainTex ("Texture", 2D) = "white" {} _BlurRadius ("Blur Radius", Range(0.0, 10.0)) = 1.0 } SubShader { Tags { "RenderType"="Opaque" } Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #include "UnityCG.cginc" struct appdata { float4 vertex :..

[Unity] 유니티로 Texture 를 복사하거나 Shader로 변형하는 방법

Graphics.CopyTexture()는 텍스처 간의 간단하고 효율적인 데이터 전송 효율적인 데이터 전송 Texture.isReadable 값이 false 인 경우, CopyTexture 가 텍스처를 복사하는 가장 빠른 메소드. 아래 3가지 조건이 두 텍스처간에 동일해야 함. - 텍스처 포멧 - 크기 - RenderTexture.antiAliasing 값 https://docs.unity3d.com/ScriptReference/Graphics.CopyTexture.html Unity - Scripting API: Graphics.CopyTexture This method copies pixel data from one texture to another on the GPU. If you set Textu..

[Unity] Dithering 셰이더 함수, Dither 노드, Dither thresholds array

Dither는 양자화 오류를 무작위화하는 데 사용되는 의도적 형태의 노이즈. 이미지에서 컬러 밴딩과 같은 대규모 패턴을 방지하기 위해 사용되거나, 화면 공간에 디더링을 적용하여 패턴의 균일한 분포를 보장하기 때문에 불투명한 오브젝트의 특정 픽셀을 Cliping 하여 투명하게 보이도록 처리할 수 있음. 불투명 렌더링 패스에서 투명하게 보이도록 처리하는데 유용. 아래 함수의 ScreenPisition 은 디더 패턴을 적용하는 데 사용할 스크린 좌표. void Unity_Dither_float4(float4 In, float4 ScreenPosition, out float4 Out) { float2 uv = ScreenPosition.xy * _ScreenParams.xy; float DITHER_THRESH..

화면 블러 처리 관련 자료 메모

정규 분포 함수도 가우스 함수 중 하나. 흐려짐 수치에 곱하기 유용함. https://www.desmos.com/calculator/trhru2deav?lang=ko 최대값을 1로 한 함수 : https://www.desmos.com/calculator/gkpftewc06 위 함수 값을 가져다가 텍스쳐의 텍셀을 샘플링 한다. 블러의 설질상 해상도를 축소해도 별 문제가 없기 때문에 0.5 스케일로 샘플링 해도 됨. 아래는 셰이더 코드 Shader "Custom/BlurEffect" { Properties { _MainTex("Texture", 2D) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { ZTest Off ZWrit..

[Shader] Curved vertex shader

카메라에서 멀어지면 커브를 줘서 꺾이는 듯한 시각 효과를 주는 셰이더. 적용하면 아래처럼 보임. 1인칭 러닝게임에 어울리는 셰이더. 실제 Transform 좌표는 더 위에 있지만 셰이더 연산으로 곡선으로 꺾이게 그림. CG 코드. struct appdata { float4 vertex : POSITION; float2 uv : TEXCOORD0; float4 color : COLOR; }; struct v2f { float2 uv : TEXCOORD0; UNITY_FOG_COORDS(1) float4 color : TEXCOORD2; float4 vertex : SV_POSITION; }; v2f vert(appdata v) { v2f o; o.vertex = UnityObjectToClipPos(v.v..

[Shader] ComputeShader 기초 스터디 노트

3개 버퍼 생성. input, output, result 이 때, input buffer를 shader에 알려주기 위한 ShaderResourceView 필요, 생성. outout buffer를 shader에 알려주기 위한 UnordedAddressView 필요,생성. 처리 결과를 받아올 때 result buffer에 output buffer의 리소스를 복사. Map() -> target pointer 로 result buffer 값 복사 -> Unmap() 이렇게 처리하는 이유는, output buffer와 result buffer의 BUFFER_DESC 가 다르기 때문. D3D11_BUFFER_DESC https://learn.microsoft.com/ko-kr/windows/win32/api/d3d..

[Unity] Shader Keyword 셰이더 키워드로 동작 조건부 작성

셰이더 키워드를 활용해서 조건부 분기 동작을 작성할 수 있다. #if defined(_MY_KEYWORD) // 이 사이에 KEYWORD 가 활성화 돼있을 때 처리를 추가. #endif float4 pos = v.vertex; #if defined(_CUSTOM_INSTANCING) float4x4 insMatrix = _instancingData[svInstanceID]; pos = mul(insMatrix, pos); #endif 셰이더를 위처럼 작성한 뒤 C# 코드에서는 EnableKeyword 함수를 호출해서 KEYWORD 를 활성화한다. 셰이더 키워드 https://docs.unity3d.com/kr/current/Manual/shader-keywords.html#declaring-keyword..

[Unity.Shader] Scene Depth node의 Sampling 타입별 차이

Unity Engine 의 Shader Graph 에서 Scene Depth 노드의 Sampling 타입별 차이점을 알아본다. Scene Depth Node의 Sampling Type은 총 3가지. - Linear01 - Raw - Eye 순서대로 Linear01 카메라 위치로부터 Far평면까지의 거리를 정규화 해서 가까우면 0, 멀면 1값을 리턴. 즉, Far평면이 커질 수록 카메라에 가까운 좌표는 0에 다가감. Raw Near평면에서부터 물체까지의 거리를 정규화 해서 가까우면 1, 멀면 0값을 리턴. 즉, Near평면값이 커질 수록 Near평면에 가까운 좌표는 1에 다가감. Eye 카메라 위치에서부터 물체까지의 거리를 정규화 해서 가까우면 0, 멀면 1값을 리턴. 즉, 카메라에 가까운 물체의 좌표일 ..

728x90
반응형