디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

유니티 쉐이더 기초에대해서 생각정리 해본 것들

ㅆㅇㅆ(124.216) 2024.09.22 03:09:13
조회 754 추천 26 댓글 6
														

유니티는 2020부터 새로 생성된 내장된 물리기반 랜더링 쉐이더인 Standard Shader를 씀


3db2c077abc236a14e81d2b628f1766856705a


기본적으로 유니티는 일반적으로 쉐이더 생성에서 5가지 유형을 생성 가능한데


StandardSurfaceShader,UnlitShader,LmageEffectShader,ComputeShader,RayTracingShader를 씀


여기서

스탠다드 쉐이더는 기본 조명 모델을 포함하는 표면 쉐이더 템플릿을 생성

언릿 쉐이더는 조명 없이, 그러나 FOG를 포함하는 기본 버텍스,프래그먼트 쉐이더를 생성함

이미지 이펙트 쉐이더는 화면 후처리 효과용 쉐이더

컴퓨트 쉐이더는 특수 쉐이더인데, GPU 병렬성을 이용한 일반 렌더 파이프라인과 관련 없는 계산 수행함


05bcd934d1c031ab20b8dfb336ef203ecc2af08058933083b7

이런식으로 특수한 쉐이더를 구현할 수 있음.


레이트레이싱은 유니티 실시간 레이트레이싱에 쓰는 쉐이더, 레이트레이빙은 장면의 개별 픽셀에 대한 레이(Ray,즉 빛)을 추적하여 현실에게서 얻는 빛 반사를 시뮬레이션 하는 기술,


유니티의 쉐이더의 기초는 HLSL,GLSL도 아닌 쉐이더 랩(ShaderLab)이라는 고급 렌더링 추상화 레이어임


사실 머티리얼 표시하는 모든 것을 정의한다는 점에서 FX언어와 유사하다고 할 수 있음



3db2c074abc236a14e81d2b628f17668885ad4

유니티 쉐이더의 기본 구조는 다음과 같음


Shader "쉐이더 이름"

속성(Properties)

서브 쉐이더(SubShader)

서브 쉐이더(SubShader)
Fallback



3db2c075abc236a14e81d2b628f1766c6f6de9

머티리얼과 유니티 쉐이더간의 연결을 일반적으로 프로퍼티라고 하고


인스펙터, 즉 머티리얼 패널에서 일반적으로 보이게 정의할 수 있음


머티리얼 속성Properties은 기본적으로

숫자 유형인 Int, Float, Range와 같은 프로퍼티의 기본값은 단일 숫자이고,

Color, Vector와 같은 프로퍼티의 기본값은 괄호로 둘러싸인 4차원 벡터이며,

2D, Cube, 3D의 세 가지 텍스처 유형의 기본값은 약간 더 복잡하며 문자열 뒤에 괄호로 묶인 한 쌍으로 지정됨.

여기서 문자열은 비어 있거나 "흰색", "검은색", "회색" 또는"Bump".로 되어있음

괄호의 목적은 원래 일부 텍스처 속성을 지정하는 것.

고정 파이프라인의 텍스처 좌표 생성을 제어해야 하는 경우,

버텍스 셰이더에서 해당 텍스처 좌표를 계산하는 코드를 작성해야함


서브 쉐이더(SubShader)는 여러개 있어도 되지만, 무조건 하나이상은 존재해야함

유니티에서는 쉐이더를 로드해야할까, 서브 쉐이더 블록을 스캔한 다음 플랫폼에서 실행할 첫번째 서브 쉐이더를 선택함.

만약, 그 어떤 서브 쉐이더라도 없을 경우 FallBack으로 지정된 쉐이더를 사용함.


유니티에서 Fallback을 사용하는 이유는 기본적으로 그래픽카드마다 기능이 다르기때문에.



SubShader블록에 정의된 것은 일반적으로 다음과 같은데

Tags

RenderSetup

Pass{}


서브 쉐이더는 기본적으로 일련의 패스와 렌더 셋업 태그 설정을 함

각패스는 완전한 랜더링 프로세스를 정의하지만, 패스가 너무 많으면 랜더링 성능이 저하됨. 따라서 가능한 최소한의 패스를 사용해야함

서브쉐이더의 경우 상태 및 태그도 패스에서 선언할 수 있음.


쉐이더 랩은 이런 일련의 랜더링 상태 설정 명령을 제공하여, 블렌딩/뎁스 여부등의 다양한 상태를 설정할 수 있음


Cull 컬링 모드 설정

ZTest 심도 테스트 설정 시 사용되는 기능(그림자 그릴때 씀 그에 대해서 내가 쓴 글 링크)

ZWrite 딥 라이팅 켜기/끄기

Blend 블렝딩 모드 켜기 및 설정


위의 랜더링 상태가 서브쉐이더 블록에 설정되면 나머지 모든 패스에 일괄적용됨. 이를 원하지 않을 경우, 패스 시멘틱 블록에서 별도로 설정가능함


서브쉐이더는 기본적으로 태그는


Key/Value Piar 로 이루어진 키와 문자열 유형임.


이러한 키와 밸류 페이너는 랜더링 엔진간의 일종의 통신 브리지임


태그의 기본 구조는 이러함


Tags{"TagName1" = "Value1" "TagName'2" = "Value2"}


유니티가 지원하는


서브쉐이더 태그 유형


Queue -랜더링 순서 제어, 객체가 속하는 렌더링 대기열 지정

RenderType - 쉐이더 종류 분류

DisableBatching - 일부 서브 쉐이더에서 버텍스 애니메이션을 위해 공간 좌표 쓸때, 유니티의 일괄 처리기능 여부를 키고 끌수있음.

ForceNoShadowCasting - 객체가 그림자를 투사할지

IgnoreProjector -서브 쉐이더를 사용하는 객체의 반투명 여부

CanUseSpriteAtlas -서브 쉐이더가 스프라이트에 사용되는 경우 False

PreviewType - 패널에서 미리보기


패스 태그 유형


LightMode Unity의 랜더링 파이프에서 이 패스 역할 정의

RequireOptions 특정 조건 충족시 패스가 랜더링되도록 지정


Fallback


-모든 서브 쉐이더가 이 그래픽 카드에서 실행되지 않을 경우 최하수준으로 실행되는 쉐이더를 폴백이라고함


실제로 폴백은 그림자 투사에도 영향을 끼치고, 기본적으로 유니티 범용 패스가 포함되어있기때문에 직접 모든 패스를 구현할 필요가 없음.


쉐이더 유형


기본적으로 표면 쉐이더(SurfaceShader)는 서브 쉐이더의 CGPROGRAM과 ENDCG사이에 정의됨

그 이유는 표면 쉐이더를 사용할 때, 개발자가 사용할 패스 수, 각 패스가 랜더링 되는 방식에 대해서 생각할 필요가 없고, 이 작업을 유니티 엔진 차원에서 해줌

CGPROGRAM과 ENDCG사이의 코드는 CG/HLSL을 사용하여 작성되는데, Cg/HLSL 언어는 쉐이더 언어와 중복되서 쓸 수가 있음



Shader "Custom/Simple Surface Shader"{

SubSHader{

Tags{"RenderType"="Opaque"}

CGPROGAM

#pragma surface surf Lambert

struct Input{

float4 color : COLOR;

};

void surf(Input IN,inout SurfaceOutput o){

o.Albedo = 1;

}

ENDCG

}

Fallback "Diffuse"

}



Shader "Custom/Simple VertexFragment Shader"{

SubShader{

Pass{

CGPROGRAM


#progama vetex vert

#pragma fragment frag


float4 vert(float4 v : POSITION) : SV_POSITON{

return mul(UNITY_MATRIX_MVP,v);

}


fixed4 frag() : SV_Target{

return fixed4(1.0,0.0,0.0,1.0);

}


ENDCG

}

}

}

버텍스/ 프래그먼트 쉐이더 또한 CGPROGRAM과 ENDCG사이에 정의되야함

표면 쉐이더와 차이점은 SubShader가 아닌 Pass 블록에서 작성된다는거



따라서 유니티 쉐이더는 실제 쉐이더가 아님.

전통적인 쉐이더에서는 입력 출력을 하기 위해서 출력 위치 대응을 해야했지만, 유니티 쉐이더에서는 특정 블록만 활성화하면됨.

유니티 쉐이더는 모델에 제공되는 버텍스 위치, 텍스쳐 좌표, 노멀에 직접 접근할 수 있으므로 개발자는 쉐이더에 데이터를 전달하기위한 추가 코딩이 필요 없음



22aec335f19c3faf689fe8b115ef046ca3ca8bf5a35d

간단하게 구현해본

Ramp텍스쳐를 사용한 단방향 머티리얼라이즈 쉐이더


프로테제 효과라고 남한테 알리기위해서 글쓰는게 공부를 곱씹는데 도움된다고해서 글을 적어본다.



추천 비추천

26

고정닉 1

1

댓글 영역

전체 댓글 0
등록순정렬 기준선택
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 제목 글쓴이 작성일 조회 추천
설문 축의금 적게 내면 눈치 줄 것 같은 스타는? 운영자 24/11/11 - -
공지 프로그래밍 갤러리 이용 안내 [79] 운영자 20.09.28 39274 62
2773399 음기 충전 발명도둑잡기갤로그로 이동합니다. 03:39 17 0
2773396 전세계 문자 중에 동그라미 있는 게 [1] 발명도둑잡기갤로그로 이동합니다. 03:35 15 0
2773389 나만 동덕여대 시위 이해되냐? 신종야옹갤로그로 이동합니다. 03:19 17 0
2773382 '악' 김형서(비비), '열혈사제2' 향한 각오 [MD숏폼] 발명도둑잡기갤로그로 이동합니다. 03:00 11 0
2773378 80년대로 돌아가나 발명도둑잡기갤로그로 이동합니다. 02:46 16 0
2773377 정말 눈과 철학만 단련하면 ㄹㅇ 뭐든 할수 있는거같음 [4] 공기역학갤로그로 이동합니다. 02:41 33 0
2773374 북한강토막살인사건 양광준 중령 카이스트 출신 해커였네 [1] 발명도둑잡기갤로그로 이동합니다. 02:31 20 0
2773372 동아리장 이해가 안됨 [4] 공기역학갤로그로 이동합니다. 02:21 48 0
2773369 동덕여대 공학 문제, 의사 수 조종 문제의 근본원인은 사영화 때문입니다 발명도둑잡기갤로그로 이동합니다. 02:15 12 0
2773368 스프링부트 공부하고 있는데 재밌네 VBKO갤로그로 이동합니다. 02:14 13 0
2773365 코딩교육이라고 이상한 빵에 잼바르기하는거 개열받는점 [3] 공기역학갤로그로 이동합니다. 02:10 35 0
2773361 故송재림, 日사생팬에 시달려→ 사이버렉카 '사생활 집착'…이제는 멈춰야 발명도둑잡기갤로그로 이동합니다. 01:58 18 0
2773360 7년 전 수험생 수송 봉사…故 송재림 “당신이 정답”이라던 응원 재조명 발명도둑잡기갤로그로 이동합니다. 01:56 10 0
2773358 작곡 갤러리에 올리면 검열 삭제되는 노래 모음 발명도둑잡기갤로그로 이동합니다. 01:50 8 0
2773357 민중미술 진원지에는 미술 동인 ‘두렁’도 있답니다 발명도둑잡기갤로그로 이동합니다. 01:46 9 0
2773351 CHUU(츄) _ PINK CLOUD 발명도둑잡기갤로그로 이동합니다. 01:08 11 0
2773350 신입한테 MSA 요구하는 회사는 진짜 너무한 새끼들 아니냐 [2] 노예갤로그로 이동합니다. 01:02 43 0
2773347 [#하이킥] 네모네모 빔을 맞아 버린 감슴뮨 | 하이킥3 발명도둑잡기갤로그로 이동합니다. 00:46 9 0
2773342 스텔라장(Stella Jang)-지구는 평평(Earth Is Flat) [1] 발명도둑잡기갤로그로 이동합니다. 00:26 22 0
2773340 송대관 - 지갑이 형님 발명도둑잡기갤로그로 이동합니다. 00:23 10 0
2773339 [조성진의 가창신공] 남기연, 트로트 전문 편곡자 '20년 한길' 발명도둑잡기갤로그로 이동합니다. 00:19 10 0
2773338 “전쟁이 온다” [신영전 칼럼] 발명도둑잡기갤로그로 이동합니다. 00:15 12 0
2773335 한강 비판한 소설가 김규나 "좌파 조카에 절연 당해" 발명도둑잡기갤로그로 이동합니다. 00:08 15 0
2773334 "조카의 소설, 타락의 극치"‥한강의 목사 삼촌 '오지랖'? 발명도둑잡기갤로그로 이동합니다. 00:05 12 0
2773332 독점보다 과점이 전체적 이익 측면에서 더 나쁜 사례 발명도둑잡기갤로그로 이동합니다. 00:01 14 0
2773330 그룹웨어 진짜 창업해서 그룹웨어 사서 쓰다보면 발명도둑잡기갤로그로 이동합니다. 11.13 13 0
2773328 투비소프트 조만간 상폐하실것같다 [1] 헬마스터갤로그로 이동합니다. 11.13 37 0
2773327 여자친구 마싸지 해주고싶다 발명도둑잡기갤로그로 이동합니다. 11.13 17 0
2773325 한국 도청 문건 유출범 '징역 15년' 선고, 도청 아니란 주장 설 발명도둑잡기갤로그로 이동합니다. 11.13 13 0
2773323 대학 때 방에 붙여놨던 여자친구 사진 발명도둑잡기갤로그로 이동합니다. 11.13 27 0
2773321 삼성계열사 IT 직무 면접가는데 직무면접 대비 어케해야되노 ㄹㅇ ㅇㅇ(211.104) 11.13 29 0
2773320 "이재명 대표 집권해도 금투세 재추진 어려울 것" 발명도둑잡기갤로그로 이동합니다. 11.13 14 0
2773311 이번 겨울에는 뱅쇼를 도전해볼까 합니다 ㅇㅅㅇ [1] ㅇㅇ(223.62) 11.13 30 0
2773309 이정도 했는데 취업가능함? [2] ㅇㅇ(203.229) 11.13 60 1
2773308 Rx Punch 라이브러리 소개- 프갤러(121.172) 11.13 30 1
2773306 7천만 조회 아기 발명도둑잡기갤로그로 이동합니다. 11.13 19 0
2773305 작은 강아지 발명도둑잡기갤로그로 이동합니다. 11.13 11 0
2773304 A rendez-vous 발명도둑잡기갤로그로 이동합니다. 11.13 11 0
2773303 영상촬영 분해하는거 어떻게 해요? 도리스아(14.35) 11.13 15 0
2773302 이제 내일이면 국비 수료하는데 빠르게 취업할 자신이 없다. 프갤러(175.125) 11.13 25 0
2773299 소니 엑스페리아 10 ii XQ=AU52 중고나라에 올렸는데, 도리스아(14.35) 11.13 15 0
2773297 CSS 찾았당- 프갤러(121.172) 11.13 35 1
2773296 나 그룹웨어 만들고싶은데 도움좀 줘 [3] ㅇㅇ(220.123) 11.13 44 0
2773295 23살인데 국비지원해서 취업할까요 전문대 폴리텍이라도 들어갈까요? [1] 프갤러(124.53) 11.13 32 0
2773294 CSS 이거 이거 봐봐. 프갤러(121.172) 11.13 34 0
2773292 이전에 말이 많던 코딩테스트는 Domain 감각을 위한 것인 듯.. +abcd3421갤로그로 이동합니다. 11.13 24 0
2773290 자바충은 게임개발 못함? [3] ㅇㅇ(104.28) 11.13 43 0
2773286 김나영 Kim Na Young - 오늘 하루 Today 발명도둑잡기갤로그로 이동합니다. 11.13 11 0
2773285 멜로망스 (MeloMance) - 내일 Tomorrow 발명도둑잡기갤로그로 이동합니다. 11.13 11 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

뉴스

디시미디어

디시이슈

1/2