일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ColorGradingLutPass
- AppSW
- ASW(Application SpaceWarp)
- Cartoon Rendering
- 3d
- 작업 집합
- OculusMotionVectorPass
- Toon Shader
- 게임 수학
- Three(Two) Tone Shading
- VR
- C언어
- Rim Light
- 개인 바이트
- Private Bytes
- Virtual Byte
- Cell Shader
- 메모리 누수
- 벡터
- URP로 변경
- 프로그래밍 기초
- URP
- working set
- Cell Look
- Windows Build
- Specular
- 가상 바이트
- Today
- Total
목록분류 전체보기 (258)
WinCNT
폭발이나 용암(Lava)을 표현하기 위한 기법 텍스처는 1차원, 2차원 2종류가 있다 1차원 텍스처는 LUT(Look Up Table) 용도로 많이 사용된다 2차원 텍스처는 3차원 모델링에 일반적으로 사용된다 Cube 맵은 6장의 2차원 텍스처로 주변 환경을 표현한다 Volume 텍스처 UV에 W좌표까지 포함한 3차원 텍스처 UV가 W만큼 나란히 있는 이미지 물론 용량은 커진다! * 0.82 - 0.12는 FlameMap(1D)에서 검정색과 흰색을 적게 나오게 하기 위한 매직 넘버 SSS
Ambient Light 주변광, 빛의 성분 중 하나 Legacy Model Ambient를 색 하나로 표현함 N dot L로 계산이 불가능한 영역을 그냥 색 하나로 처리했음 Ambient 표현의 발전 이후 Ambient에 대해서 여러 발전이 있었음 Ambient Occlusion(주변광 차폐) 차폐도를 계산하는 아이디어 기하적으로 얼마나 들어가(가려져) 있는가로 Ambient를 구성하는 방법 Ambient Occlusion을 그대로 계산한다면? 페이스(혹은 버텍스)마다 n개(모든 공간에 다 쏠 수는 없으니)의 레이를 쏴서 해당 페이스(혹은 버텍스)가 얼마나 차폐되어 있는가를 계산해야 한다 물론 이 방식은 계산하면 계산량이 어마어마하기 때문에 실시간 렌더링에서는 불가능하다 (1프레임 - 0.167초를 넘..
아지랑이(Haze)처럼 빛이 굴절되는 현상을 표현하는 기법 캐릭터의 사망 연출 등에도 자주 사용된다 Illusion의 구현 원리 Illusion Code sampler2D TextureSampler; sampler2D Noise; float fStrength = 0.1;// 노이즈의 강도 float fTime0_X; float2 uvDir = float2( 1, 1 );// 노이즈 맵을 읽을 방향 float4 ps_main( float2 uv : TEXCOORD0 ) : COLOR { float4 c0; float2 st = uv + uvDir * fTime0_X;// 시간에 따라서 노이즈 맵의 읽을 방향을 이동시킨다 float2 offset = tex2D( Noise, st ).xy * 2 - 1; f..
외곽선을 그리는 기법 캐릭터를 그릴 때 가장 많이 사용한다 장점 : 1픽셀의 외곽선을 정확하게 따준다 두께는 블러를 적용한 것 블러의 강도를 조절하면 깜박거리는 느낌을 줄 수 있다 Edge Detect Filter의 예시 값이 급격하게 변하는 곳이 윤곽선으로 만드는 기법 값이 급격하게 변하는 곳은 필터로 찾는다 Sobel Filter 가장 유명한 필터 주변 픽셀에 필터 값을 곱한 뒤 더한다 Laplacian Filter 또 다른 필터 적용 예시 법선 벡터(노멀 벡터)에 필터링을 적용하는 이유 노멀 벡터는 경계 부분에서 노멀 값이 급격하게 바뀐다 따라서 노멀 벡터에 필터를 적용하면 깔끔하게 딸 수 있다 반대로 일반적인 버퍼에 바로 필터링을 적용하면 카메라의 각도에 따라서 외곽선이 안 보이는 경우가 생기기도..
현실에서 구름이나 나뭇잎 등의 사이를 뚫고 나오는 빛줄기를 표현한 기법이다 Radial Blur와 구현 방식은 비슷하다 Light가 그려진 Buffer에 Radial Blur를 적용하여 BackBuffer와 합성(Add)해서 구현한다 float2 vLightShaftPos : POSTEFFECT_SEMANTIC_LIGHTSHAFT_POS; float4 vLightShaftValue : POSTEFFECT_SEMANTIC_LIGHTSHAFT_VALUE; // .x=Density, .y=Decay, .z=Weight, .w=Exposure float4 psLightShaft( float2 texCoord : TEXCOORD0 ) : COLOR0 { #define NUM_LIGHTSHAFT_SAMPLES 64..
Vignetting 현상은 빛을 모으는 렌즈의 특성상 초점에서 멀어질수록 광량이 줄어들어서 주변부가 어두워 지는 현상을 말한다 (대부분의 렌즈에서 발생하며 저렴한 렌즈에서 많이 발생함) Vignetting 기법은 이미지를 필름 카메라의 느낌을 들게 만드는 기법이다 다양한 구현 방법이 존재한다 Vignetting Code sampler2D Texture0; float fAlpha; float4 ps_main( float2 texCoord : TEXCOORD0 ) : COLOR { float2 uv = texCoord - 0.5f; float dist = length(uv); float radius = 0.8; float softness = 0.4; float vignette = smoothstep(radi..
Deferred Rendering 디퍼드 렌더링, 지연된 렌더링 Deferred Shading이라고도 함 레거시한 Forward Rendering과 대비됨 라이팅 계산을 먼저 하지 않고 미루어 두었다가 실행하기 때문에 지연(Deferred) 렌더링이라고 불린다 기존의 렌더링 파이프라인에서 더 발전하기 위해 픽셀 쉐이더 쪽으로 기하 정보를 보내는 시도가 있었다 픽셀 쉐이더의 다른 패스로 정보를 보내게 됐음 2D 텍스처끼리 조립해서 하나의 텍스처로 다시 조립하는 것 장점으로는 일단 광원을 무한대로 보낼 수 있다 오브젝트의 개수에 상관 없이 상수 시간에 라이팅의 처리가 가능하다 단점으로는 투명도를 처리할 수 없다 핵심 정리 1. 먼저 다양한 정보를 텍스처에 출력(1st pass, MRT) position, n..
DOF - Dgree Of Freedom과는 다른 것 Dgree Of Freedom는 자유도라고 애니메이션에서 사용되는 용도 DOF - Depth Of Field(피사계 심도)는 사진에서 나온 용어이며 카메라에서 초점이 맞지 않은 물체는 흐려지는 현상을 뜻한다 (참고로 사람 눈에는 없는 현상) TV나 영화에서 자주 나오는 연출이며 게임에서도 컷씬 등의 스토리 연출에서 자주 사용된다 깊이 버퍼로부터 얻은 값을 기준으로 초점과 픽셀의 거리를 구해서 먼 거리일수록 Blur 가중치 값을 증가시킨다 SSS
포토샵에도 있는 기법 중 하나 이것도 Cartoon Rendering, Pixelate와 비슷한 원리이다 다만 이번에는 0.0 ~ 1.0 사이의 컬러 값을 불연속적인 값으로 바꾸는 것이다 Posterize Code SSS
Cartoon Rendering와 원리가 비슷하다 Cartoon Rendering은 명암 값(N dot L)의 값을 불연속으로 바꾸는 것이라면 Pixelate는 UV 텍스처 좌표를 불연속 값으로 바꾸는 것이다 (0.0 ~ 1.0 사이의 UV텍스처 좌표를 불연속(discontinuous) 값으로 바꿈) 실제로 적용할 식은 round(x * 16) / 16(x = 0 to 1) 위와 같은 함수를 적용하면 16픽셀의 이미지로 바뀌게 된다 Pixelate Code float4 Pixelate( sampler2D s, float2 uv ) { uv = round( uv * _PixelSize ) / _PixelSize; // round()외에 ceil()이나 floor()를 써서 테스트 해보자 return tex..