'Work'에 해당되는 글 183건

  1. 2022.09.14 지브러쉬 불필요한 메쉬 삭제하기
  2. 2022.06.22 [3DMAX]밧줄 만들기
  3. 2022.06.22 [언리얼4] 여러개의 오브젝트 UV를 유지 병합설정
  4. 2022.06.22 [지브러쉬]지브러쉬 커스텀 UI 설정
  5. 2022.06.22 [언리얼4] 아티스트 퍼포먼스 지침
  6. 2022.06.22 [언리얼4] 오브젝트를 꺼도 그림자를 그리도록 처리
  7. 2022.06.22 [언리얼4 쉐이더] 랜드스케이프 Height Blend Shader 테스트
  8. 2022.06.22 [언리얼4 쉐이더] 뎁스 알파 쉐이더
  9. 2022.06.22 [언리얼4] 랜드스케이프 라이트맵 해상도 조절
  10. 2022.06.22 [언리얼4] 랜드스케이프 TA 문서 요약
  11. 2022.06.22 [언리얼4] 그림자 밝기 (인바이런먼트)
  12. 2022.06.22 [언리얼4] BSP 스테틱 메쉬 변환 조건
  13. 2022.06.22 [언리얼4 쉐이더] PBR 배경 쉐이더 작성
  14. 2022.06.22 [배경일러스트]2015년 작업 하나
  15. 2022.06.22 [배경일러스트]2019년 작업
  16. 2022.06.22 [배경일러스트]2015년 작업 둘
  17. 2020.07.07 [지브러쉬] 라이브블린 메쉬 변환(지모델러 오브젝트)
  18. 2020.07.07 Unity Shader Stencil
  19. 2020.07.07 Unity Alpha Blend Mode Toggle
  20. 2020.07.07 unity shader 프로퍼티 숨기기
  21. 2020.07.07 라이팅 모델
  22. 2020.07.07 타일 프로퍼티 숨기기 / 프로퍼티 이름달기
  23. 2020.07.07 감마환경에서 PBR쉐이더 보정(리니어)
  24. 2020.07.07 알파 블랜드 라이트맵
  25. 2020.07.07 SubfaceShader 리플렉션 프로브 사용방법
  26. 2020.07.07 Editor - Slide UI 표시(후처리쉐이더)
  27. 2020.07.07 Editor - Color UI (후처리 스크립트)
  28. 2020.07.07 Shader - tex2Dlod
  29. 2020.07.07 GPU instancing
  30. 2020.07.07 모바일 Time scroll 오류 해결방법

작업을 하다보니 생각보다 너무 작아 불필요한 메쉬들이라고 판단해 삭제하기로 했다.





메쉬가 하나의 그룹일 경우 오토그룹을 해주거나 마스킹한후 마스크 그룹을 나누어 준다.





삭제할 메쉬를 그룹을 나누워어 숨기거나 Ctrl+shift+ Alt + 드래그 해서 숨겨준다.
(Ctrl+shift+ Alt + 드래그 : 붉은색 사각 선택박스가 그려진다.)




Geometry에 Modify Topology 그룹에 Del Hidden을 누르면 숨겨진 메쉬를 삭제해준다.




끝~

Posted by 프리랜서 디자이너

사각형태로 감긴 밧줄을 만들기

Helix를 생성해 코일처럼 감기게 설정한다.

Rectangle을 만들어 모퉁이를 부드럽게 값을 조절해준다.

Helix에서 PathDeform을 추가해주고 Pick Path를 누른뒤 Rectangle을 선택하면 사각 라인을 따라 감기게된다.

Helix에서 길이와 감기는 정도등 조절한뒤 폴리로 바꿔주고 마무리한다.

폴리로 바꾸려먼 Rander가 체크되어야한다.

Posted by 프리랜서 디자이너
Posted by 프리랜서 디자이너

자주 사용하는 브러쉬 등록

커스텀 UI 켜기

브러쉬선택후 작은 브러쉬를 드래그앤드롭으로 설정함(Ctrl + Alt + 드래그)

 

변경 UI를 저장한다.

자주 사용하는 메뉴 컴스텀창 만들기

커스텀 UI 켜주기

Create New Menu 를 눌러 메뉴 만들기

이름을 정한다.

상단 메뉴창에 메뉴가 생김.

왼쪽 창으로 옮긴다.

Custom Subpalette 를 Ctrl + Alt + 드래그로 새로만든 메뉴에 넣어준다.

원하는 메뉴를 Custom Subpalette 를 Ctrl + Alt + 드래그 로 등록 시켜준다.

UI를 저장한다.

단축키는 커스텀을 끈 상태에서 내 메뉴에 상단에서 Ctrl + Alt + LMB 누른후

단축키 넣으라는 문구가 나오면 키보드로 단축키 설정을 한다.

제 경우 Alt + 1 로 지정했음.

단축키 설정후엔 언제든 빠르게 사용 가능하다.

Posted by 프리랜서 디자이너

아티스트용

오브젝트별 엘리먼트의 수를 최소화합니다.

- 엘리먼트당 트라이앵글 수가 적정량이 되도록 (예: 엘리먼트당 300+) 모델을 합칩니다.

- 불투명 머티리얼은 최적의 Z 버퍼 컬링으로 인해 가장 빠르며, 마스크드는 약간 느리고, 반투명이 오버드로 때문에 가장 느립니다.

- UV 이음새와 하드 에지는 하드웨어에 추가적인 버텍스로 이어지므로, 제한하는 것이 좋습니다. 최악의 경우 하드 에지가 있는 하이 폴리 메시는 모델링 프로그램에서 보고된 것보다 버텍스 수가 세 배나 많아집니다.

- 스키닝된 메시에 대한 버텍스 처리 비용은 스태틱 메시에 대한 것보다 높습니다.

- 버텍스 처리 비용은 모프 타깃을 추가할 때나 월드 포지션 오프셋을 사용할 때 커집니다. 텍스처 룩업도 캐시로 인해 꽤나 느려질 수 있습니다.

- 테셀레이션은 비용이 꽤 많이 추가되어, 가급적 피해야 할 것입니다.

보통 테셀레이션을 미리 적용한 메시가 더 빠릅니다.

- 매우 큰 메시를 나누면 컬링에 더욱 좋아집니다. 뷰 컬링에만 해당하는 것으로, 라이트 컬링은 보통 입자가 더욱 고운 경우에 해당합니다.

- 텍스처 포맷이 작을 수록 머티리얼이 빨라집니다 (예: DXT1 은 픽셀당 4 비트, DXT5 는 픽셀당 8 비트, ARGB 미압축은 픽셀당 32 비트입니다).

- 텍스처 해상도가 낮을수록 (확대했을 때) 빨라집니다. 심지어 가끔은 더욱 부드러워 질 수도 있는데, 바이리니어 필터링으로 인해 텍스처 포맷이 표현할 수 있는 것보다 많은 셰이더로 이어질 수 있기 때문입니다.

- 셰이더 인스트럭션과 텍스처 룩업 수가 적은 머티리얼은 빠르게 실행됩니다. 머티리얼을 최적화시키려면, 머티리얼 에디터 통계와 셰이더 복잡도 뷰모드를 사용하세요.

- 텍스처가 작은 스케일에서도 보이는 경우 절대 밉맵을 끄지 말아야 텍스처 캐시 미스로 인해 느려지는 현상을 피할 수 있습니다.

- 일부 머티리얼 표현식은 비싼 것이 있습니다 (sin, pow, cos, divide, Noise). 빠른 표현식은 다음과 같습니다: multiply, add, subtract, 0 과 1 을 사용할 때의 clamp().

셰이딩 모델마다 비용이 다릅니다: Unlit 이 가장 빠르고, Lit 이 평균적으로 가장 많이 사용되며, 나머지 모델은 조금 더 비쌉니다.

레벨 디자이너용

- 스테이셔너리 / 다이내믹 라이트 갯수를 제한합니다.

- 에어리어 라이트 소스는 약간 더 비싸니 가급적 피합니다.

- 작은 오브젝트는 컬링이 원활해 지도록 그리기 거리를 조절합니다.

LOD 전환이 적극적으로 일어나도록 범위 구성이 되었는지 확인하세요.

LOD 한 레벨당 버텍스 수를 최소 두 배는 사용합니다. 이에 대한 최적화는, 와이어프레임을 검사해 보면 단색 부분이 문제를 나타냅니다.

Simplygon 통합을 사용해 보면, 몇 분 밖에 걸리지 않습니다.

- 원점이 비슷한 라이트를 합쳐보세요. 예를 들어 차량 전조등은 하나의 라이트에다 라이트 함수를 사용하여 두 개로 보이게끔 만들 수 있습니다.

- 스태틱 라이트가 가장 빠르며, 스테이셔너리 라이트는 조금 덜하고, 다이내믹 라이트가 가장 비쌉니다.

- 감쇠 반경과 라이트 원뿔 각도를 필요한 최소치로 제한합니다.

다이내믹/스테이셔너리 포인트 라이트가 가장 비싸고, 디렉셔널 라이트는 약간 더 싸며, 스포트 라이트가 최선입니다.

섀도맵 생성 비용은 그림자를 드리우는 오브젝트의 라이트 프러스텀에 비례합니다.

- 라이트 함수는 비용이 추가되며 (실제 비용은 머티리얼에 달렸습니다) 라이트가 타일형 라이트로 렌더링되는 것을 방지할 수 있습니다.

- IES 프로파일은 비용이 추가되며 (라이트 함수보다는 덜합니다) 라이트가 타일형 라이트로 렌더링되는 것을 방지할 수 있습니다.

스포트라이트 원뿔 각도로 똑같은 효과를 낼 수 있는데도 IES 를 사용하는 것은 좋지 않습니다.

- 빌보드, 임포스터 메시, 스카이박스 텍스처를 사용하여 디테일한 지오메트리를 효율적으로 모방해 낼 수 있습니다.

- 좋은 레벨 디자인은 컬링을 고려합니다 (시야를 가리는 것을 잘 써서 퍼포먼스를 높입니다). r.VisualizeOccludedPrimitives 로 검사해 볼 수 있습니다.

- Light Propagation Volume 은 피하거나, 써야 한다면 GIReplace 머티리얼 표현식 사용 또는 대부분의 오브젝트에서 꺼 주는 방식으로 비용을 제한하시기 바랍니다.

- 그림자 드리우기는 오브젝트 단위든 라이트 단위든, 가급적 끕니다.

- 에디터의 ProfileGPU (Ctrl + Shift + ,) 를 사용하여 무엇이 느린지에 대한 정보를 빠르게 얻을 수 있습니다.

- 데칼 퍼포먼스 비용은 거기에 커버되는 픽셀 수에 비례합니다.

Posted by 프리랜서 디자이너

오브젝트를 끄더라도 그림자를 그리도록 처리하는 오브젝트 옵션

Posted by 프리랜서 디자이너

바위나 나뭇잎 등 표현을 할 계확이라 쉐이더 테스트를 진행했다.

언리얼 문서는 뭔가 친절하지가 않네요. 헤깔려....

결과 적으로 100% 텍스쳐간 분리되지는 않아서.. 아쉽다...

쉐이더 그래프 구성

레이어 블랜드 설정

레이어인포 생성 전 확인사항

***레이어 이름을 설정 하지 않으면 테레인 페인터에 레이어 인포생성이 되지않는다.***

결과

Posted by 프리랜서 디자이너

안개나 기타 이펙트가 주변 오브젝트와 부드럽게 섞일수 있도록 뎁스를 활용한 쉐이더를 만들다.

노드방식은 이렇게 준비되있는게 많아 작업 난이도는 확실이 낮고 편하네...

Posted by 프리랜서 디자이너

아래 수치를 조절하면 라이트맵 해상도를 조절 할 수있다.

Posted by 프리랜서 디자이너

1. 랜드스케이프 컴포넌트

1) 랜드스케이프의 컴포넌트는 모두 같은 크기이며 항상 정사각형

2) 컴포넌트의 높이 데이터는 하나의 텍스처에 저장

3) 인접한 두 컴포넌트의 에지에 공유되는 버텍스 열은 복제되어 각 컴포넌트에 저장.

2. 섹션

1) 컴포넌트를 적게 사용하면 보통 퍼포먼스가 향상

3. 하이트맵 치수 개산

64x64 버텍스가 들어있는 섹션 하나로 구성된 컴포넌트로 시작한다면, 컴포넌트 크기는 63x63 쿼드

컴포넌트 10x10 으로 된 랜드스케이프가 있다고 친다면, 랜드스케이프에는 총 630x630 쿼드

랜드스케이프에 대해 하이트맵을 임포트한다고 치면, 631x631 버텍스의 하이트맵이 있어야함.

버텍스 행 갯수는 항상 쿼드보다 하나 많기 때문입니다 (1x1 쿼드를 생각해 보면, 버텍스가 넷 필요합니다).

즉 631x631 이 유효.

4. 퍼포먼스 고려사항

컴포넌트 크기가 작을 수록 LOD 전환이 빨라짐

더 많은 지형에 대한 오클루전이 가능하지만, 크기가 작아지면 컴포넌트 수가 많아짐

컴포넌트마다 랜더 쓰레드 CPU비용 발생

최소한으로 유지하는것이 유리함.

추천 최대 크기는 1024 컴포넌트

5. 랜드스케이프 콜리전 밉 레벨

1) 콜리전 복잡도(Complex) 값 = 0 / 높은 정확도, 메모리비용 증가 || 값 = 5 / 낮은 정확도, 메모리비용 감소

2) 콜리전 복잡도(Simple) 값 = 0 / 높은 정확도, 메모리비용 증가 || 값 = 5 / 낮은 정확도, 메모리비용 감소

Posted by 프리랜서 디자이너

그림자 밝기가 너무 대비가 강해 만질수있느느 부분을 찾아보았다.

인바이런먼트(유니티 : 엠비언트) 의 강도가 기본 1로 되어있는 부분을 수치를 올려 수정 가능했다.

인바이런먼트 : 10.0

Posted by 프리랜서 디자이너

외주 작업으로 bsp로 바닥을 만들었는데 메쉬로 변환이 될때도 있고 안될때도 있어 이유를 찾아보았다.

문제는 단하나....오브직트의 레벨의 위치였다.

관리와 최적화의 이유로 레벨를 여러개 생성해 작업하게 되는데 변경할 오브잭트가 들어있는 래벨을 열어 변환하면된다.

위와같이 퍼시스턴트레벤 최상위에 위치해야 스테틱 메쉬로 변환이된다.

Posted by 프리랜서 디자이너

- 배경 작업을 위한 pbr 쉐이더 작성 해봤다.

- 각각의 값을 조절할수있는 파라미터를 추가한 정도의 간단한 쉐이더노드

 

 

 

 

Posted by 프리랜서 디자이너

 

2015년쯤 작업한 이미지를 찾았다.

원본은 어디에 있을까.....

 

어색한 절벽 형태 어쩔..... 지금보니허접하다.

더 열심히 해야...

 

 

((주)엔드림 에 저작권이 있습니다. / 도용, 수정및 재사용은 법적문제가 발생할수있습니다.)

Posted by 프리랜서 디자이너

 

 

(주)엔드림, (주)빅브레이크게임즈 에 저작권이 있습니다. / 도용, 수정

및 재사용은 법적문제가 발생할수있습니다.)

 

 

2019년 마지막 회사 다닐때 작업한 것이다.

2차 세계대전 전쟁게임이다.

 

어제 게임이 오픈해 올릴수있게 되었다.

하지만 원본은 어디에.....

 

3Dmax로 하이폴 작업및 랜더링 해 음영및 컬러 등등 수정 편집했다.

그림 느낌 나지않도록 직접 터치하는식의 수정은 하지않았다.

 

그동안 기획 내용이 바뀌었는지 실제 게임에는 조각 조각 활용하는 식으로 적용된듯하다.

마지막 직장인 시절 작업... ㅋ

 

Posted by 프리랜서 디자이너

 

스킬연구 창에 들어가는 이미지이다.

맥스에서 모델링 기본텍스쳐 작업후 랜더링한후 너무 실사 스럽지않게 리터칭한 작업이다.

 

역시나 원본은 도데체 어디에........

 

 

((주)엔드림 에 저작권이 있습니다. / 도용, 수정및 재사용은 법적문제가 발생할수있습니다.)

 

Posted by 프리랜서 디자이너

1. 모델링에 단차가 어느정도 있어야 함.

2. 빼기의 경우 차집합 아이콘이 눌러져있어야 함.

3. 머지 한다.

4. 지모델러로 만든 경우 폴리구룹을 재 설정해야함.

5.다이나 메쉬를 누르면 하이폴 메쉬로 변경된다.

되돌리면 망가지므로 미리 저장해두자.

 

Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:40

Unity Shader Stencil

 

구문(Syntax)

Ref

  Ref referenceValue

The value to be compared against (if Comp is anything else than always) and/or the value to be written to the buffer (if either Pass, Fail or ZFail is set to replace). 0–255 integer.

 

비교할 값 (Comp가 항상 아닌 것) 및 / 또는 버퍼에 쓸 값 (Pass, Fail 또는 ZFail이 Replace로 설정된 경우)입니다. 0-255 정수.

 

 

ReadMask

  ReadMask readMask

An 8 bit mask as an 0–255 integer, used when comparing the reference value with the contents of the buffer (referenceValue & readMask) comparisonFunction (stencilBufferValue & readMask). Default: 255.

 

참조 값을 버퍼의 내용 (referenceValue & readMask)과 비교할 때 사용되는 8 비트 마스크 (0-255 정수) comparisonFunction (stencilBufferValue & readMask). 기본값 : 255.

 

 

 

WriteMask

  WriteMask writeMask

An 8 bit mask as an 0–255 integer, used when writing to the buffer. Default: 255.

 

0-255 정수의 8 비트 마스크로, 버퍼에 쓸 때 사용됩니다. 기본값 : 255.

 

 

Comp

  Comp comparisonFunction

The function used to compare the reference value to the current contents of the buffer. Default: always.

 

이 함수는 참조 값을 버퍼의 현재 내용과 비교하는 데 사용됩니다. 기본값 : 항상.

 

 

Pass

  Pass stencilOperation

What to do with the contents of the buffer if the stencil test (and the depth test) passes. Default: keep.

 

스텐실 테스트 (및 깊이 테스트)가 통과하면 버퍼의 내용으로 수행 할 작업. 기본값 : 유지.

 

 

 

Fail

  Fail stencilOperation

What to do with the contents of the buffer if the stencil test fails. Default: keep.

 

스텐실 테스트가 실패 할 경우 버퍼의 내용으로 수행 할 작업. 기본값 : 유지.

 

 

 

ZFail

  ZFail stencilOperation

What to do with the contents of the buffer if the stencil test passes, but the depth test fails. Default: keep.

 

스텐실 테스트가 통과했지만 깊이 테스트가 실패 할 경우 버퍼의 내용으로 수행 할 작업. 기본값 : 유지.

 

Comp, Pass, Fail and ZFail will be applied to the front-facing geometry, unless Cull Front is specified, in which case it’s back-facing geometry. You can also explicitly specify the two-sided stencil state by defining CompFront, PassFront, FailFront, ZFailFront (for front-facing geometry), and CompBack, PassBack, FailBack, ZFailBack (for back-facing geometry).

 

 

Cull Front가 지정되지 않은 경우 Comp, Pass, Fail 및 ZFail이 전면 대칭 지오메트리에 적용됩니다. CompFront, PassFront, FailFront, ZFailFront (정면 지오메트리의 경우) 및 CompBack, PassBack, FailBack, ZFailBack (후면 지오메트리의 경우)을 정의하여 양면 스텐실 상태를 명시 적으로 지정할 수도 있습니다.

 

 

Comparison Function

Comparison function is one of the following:

   

Greater

Only render pixels whose reference value is greater than the value in the buffer.

참조 값이 버퍼의 값보다 큰 픽셀 만 렌더링합니다.

 

GEqual

Only render pixels whose reference value is greater than or equal to the value in the buffer.

참조 값이 버퍼의 값보다 크거나 같은 픽셀 만 렌더링합니다.

 

 

Less

Only render pixels whose reference value is less than the value in the buffer.

참조 값이 버퍼의 값보다 작은 픽셀 만 렌더링합니다.

 

LEqual

Only render pixels whose reference value is less than or equal to the value in the buffer.

 참조 값이 버퍼의 값보다 작거나 같은 픽셀 만 렌더링합니다.

 

Equal

Only render pixels whose reference value equals the value in the buffer.

참조 값이 버퍼의 값과 동일한 픽셀 만 렌더링합니다.

 

NotEqual

Only render pixels whose reference value differs from the value in the buffer.

참조 값이 버퍼의 값과 다른 픽셀 만 렌더링합니다.

 

Always

Make the stencil test always pass.

스텐실 테스트를 항상 통과 시키십시오.

Never

Make the stencil test always fail.

스텐실 테스트를 항상 실패하게 만드십시오.

 

 

 

 

Stencil Operation

Stencil operation is one of the following:

   

Keep

Keep the current contents of the buffer.

버퍼의 현재 내용을 유지하십시오.

Zero

Write 0 into the buffer.

버퍼에 0을 씁니다.

Replace

Write the reference value into the buffer.

참조 값을 버퍼에 씁니다.

IncrSat

Increment the current value in the buffer. If the value is 255 already, it stays at 255.

버퍼의 현재 값을 증가시킵니다. 값이 이미 255이면 255로 유지됩니다.

 

DecrSat

Decrement the current value in the buffer. If the value is 0 already, it stays at 0.

버퍼의 현재 값을 감소시킵니다. 값이 이미 0이면 0으로 유지됩니다.

 

Invert

Negate all the bits.

모든 비트를 부정합니다.

 

IncrWrap

Increment the current value in the buffer. If the value is 255 already, it becomes 0.

버퍼의 현재 값을 증가시킵니다. 값이 이미 255이면 0이됩니다.

 

DecrWrap

Decrement the current value in the buffer. If the value is 0 already, it becomes 255.

버퍼의 현재 값을 감소시킵니다. 값이 이미 0이면 255가됩니다.

 

 

Deferred rendering path

Stencil functionality for objects rendered in the deferred rendering path is somewhat limited, as during the base pass and lighting pass the stencil buffer is used for other purposes. During those two stages stencil state defined in the shader will be ignored and only taken into account during the final pass. Because of that it’s not possible to mask out these objects based on a stencil test, but they can still modify the buffer contents, to be used by objects rendered later in the frame. Objects rendered in the forward rendering path following the deferred path (e.g. transparent objects or objects without a surface shader) will set their stencil state normally again.

The deferred rendering path uses the three highest bits of the stencil buffer, plus up to four more highest bits - depending on how many light mask layers are used in the scene. It is possible to operate within the range of the “clean” bits using the stencil read and write masks, or you can force the camera to clean the stencil buffer after the lighting pass using Camera.clearStencilAfterLightingPass.

 

 

스텐실 버퍼가 다른 목적으로 사용되는 기본 패스 및 조명 패스 중에는 지연 렌더링 경로에서 렌더링 된 객체의 스텐실 기능이 다소 제한적입니다. 이 두 단계 동안 쉐이더에 정의 된 스텐실 상태는 무시되고 마지막 단계에서만 고려됩니다. 이 때문에 스텐실 테스트를 기반으로 이러한 객체를 마스크 처리 할 수는 없지만 나중에 프레임에서 렌더링되는 객체가 사용하도록 버퍼 내용을 수정할 수 있습니다. 지연 경로를 따르는 순방향 렌더링 경로에서 렌더링 된 객체 (예 : 투명한 객체 또는 표면 셰이더가없는 객체)는 스텐실 상태를 정상적으로 다시 설정합니다.

지연 렌더링 경로는 스텐실 버퍼의 세 개의 최상위 비트와 최대 네 개의 최상위 비트를 사용합니다 (장면에서 사용되는 조명 마스크 레이어의 수에 따라 다름). 스텐실 읽기 및 쓰기 마스크를 사용하여 "깨끗한"비트 범위 내에서 작동하거나 Camera.clearStencilAfterLightingPass를 사용하여 조명 통과 후 카메라가 스텐실 버퍼를 청소하도록 할 수 있습니다.

 

'TA > Unity' 카테고리의 다른 글

Unity Alpha Blend Mode Toggle  (0) 2020.07.07
unity shader 프로퍼티 숨기기  (0) 2020.07.07
라이팅 모델  (0) 2020.07.07
타일 프로퍼티 숨기기 / 프로퍼티 이름달기  (0) 2020.07.07
감마환경에서 PBR쉐이더 보정(리니어)  (0) 2020.07.07
Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:40

Unity Alpha Blend Mode Toggle

 

// Blend mode values

    [Enum(UnityEngine.Rendering.BlendMode)] _Blend ("Blend mode", Float) = 1

// A subset of blend mode values, just "One" (value 1) and "SrcAlpha" (value 5) 

   [Enum(One,1,SrcAlpha,5)] _Blend2 ("Blend mode subset", Float) = 1

 

   [Enum(UnityEngine.Rendering.BlendMode)] _Blend2 ("Blend mode Subset", Float) = 1

 >> 이런식으로 둘다 전체 목록을 다 호출해서 쓰는것도 가능하다.

 

// Culling Option

   [Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull mode", Float) = 2

 

 

 

 

다음과 같이 토글 창이 생성된다. Shader에는 다음과 같이 선언

 

Blend [_Blend] [_Blend2]

 

Blend Mode와 subset 두개의 창이 생성되며 각 생성되는 제어 옵션은

 

 

 

 

 

 

와 같다.

 

 

 

 

 

 

 

 

 

 

Culling Mode 토글 제어

 

Unity shader에서는 부분적으로 Toggle 제어가 가능합니다.


토글 제어가 가능한 항목은 Scripting API항목의 UnityeEngine.Rendering 아래 Enumerations에 있는 항목을 사용할 수 있습니다.

http://docs.unity3d.com/ScriptReference/Rendering.CullMode.html

 


예제로 Mesh의 면을 그려주는 CullMode를 보면

 

 

 

이렇게 소개를 해주고 있습니다.


이를 shader 코드에 반영하면

[Enum(UnityEngine.Rendering.CullMode)] _Cull ("Cull mode", Float) = 2

그리고 Cull off, Front Back 이렇게 정의하는 부분에
Cull [_Cull]

 

해주면 Material 별로 CullMode를 다르게 사용할 수 있습니다.

 

 

 

 



출처: http://illu.tistory.com/1108 [illustration of life]

'TA > Unity' 카테고리의 다른 글

Unity Shader Stencil  (0) 2020.07.07
unity shader 프로퍼티 숨기기  (0) 2020.07.07
라이팅 모델  (0) 2020.07.07
타일 프로퍼티 숨기기 / 프로퍼티 이름달기  (0) 2020.07.07
감마환경에서 PBR쉐이더 보정(리니어)  (0) 2020.07.07
Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:39

unity shader 프로퍼티 숨기기

 

 

[HideInInspector] _Cutoff ("_Cutoff", Range(0,1))= 0.5

'TA > Unity' 카테고리의 다른 글

Unity Shader Stencil  (0) 2020.07.07
Unity Alpha Blend Mode Toggle  (0) 2020.07.07
라이팅 모델  (0) 2020.07.07
타일 프로퍼티 숨기기 / 프로퍼티 이름달기  (0) 2020.07.07
감마환경에서 PBR쉐이더 보정(리니어)  (0) 2020.07.07
Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:38

Lambert 라이팅 모델

float lambert_term = max(0, dot(normal, light_direction));

 

 

Half Lambert 라이팅 모델

float halflambert_term = dot(normal, lightdirection) * 0.5f + 0.5f

float halflambert_pow_term = pow(dot(normal, lightdirection) * 0.5f + 0.5f, power);

 

 

 

Wrapped Diffuse

float wrapped_diffuse_term = (dot(normal, lightdirection) + w) / (1+w);

 

 

Wrapped Diffuse + 에너지 보존법칙

float3 wrappedDiffuse = LightColour * saturate((dot(N, L) + w) / ((1 + w) * (1 + w)));

http://www.gamedevforever.com/150

 

 

 

 

Oren-Nayar Reflectance Lighting Model

http://www.gamedevforever.com/93

 

 

 

- 좀 더 거친 표면의 Diffuse 표현 -> Oren-Nayar Model

- 일반적인 표면의 Diffuse 표현 -> Lambert Model

- 좀 더 부드러운 표면의 Diffuse 표현 -> Wrapped Diffuse Model

Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:38

타일 프로퍼티 숨기기

[NoScaleOffset]

 

프로퍼티 이름달기

[Header(Name)]

 

 

https://docs.unity3d.com/kr/current/Manual/SL-Properties.html

 

  • [HideInInspector] - does not show the property value in the material inspector.
  • [NoScaleOffset] - material inspector will not show texture tiling/offset fields for texture properties with this attribute.
  • [Normal] - indicates that a texture property expects a normal-map.
  • [HDR] - indicates that a texture property expects a high-dynamic range (HDR) texture.
  • [Gamma] - indicates that a float/vector property is specified as sRGB value in the UI (just like colors are), and possibly needs conversion according to color space used. See Properties in Shader Programs.
  • [PerRendererData] - indicates that a texture property will be coming from per-renderer data in the form of a MaterialPropertyBlock. Material inspector changes the texture slot UI for these properties.

 

'TA > Unity' 카테고리의 다른 글

unity shader 프로퍼티 숨기기  (0) 2020.07.07
라이팅 모델  (0) 2020.07.07
감마환경에서 PBR쉐이더 보정(리니어)  (0) 2020.07.07
알파 블랜드 라이트맵  (0) 2020.07.07
SubfaceShader 리플렉션 프로브 사용방법  (0) 2020.07.07
Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:38

감마환경에서 PBR쉐이더 보정(리니어)

 

 

return fixed4( (finalColor * 1 / 2.2) * 1.125 , 1);

 

Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:37

알파 블랜드 라이트맵 리시브 지원방법

정확히 이게 맞는지는 모르겟으나 일단 된다..;;

 

 

#pragma surface surf BlinnPhong decal:blend

 

 

 

Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:37

SubfaceShader 리플렉션 프로브 사용방법

 

float3 worldRefl = WorldReflectionVector (IN, o.Normal);

fixed3 ReflectionCube = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, worldRefl).rgb * unity_SpecCube0_HDR.r;

o.Emission = ReflectionCube;

 

 

출처

http://ozlael.tistory.com/38

'TA > Unity' 카테고리의 다른 글

감마환경에서 PBR쉐이더 보정(리니어)  (0) 2020.07.07
알파 블랜드 라이트맵  (0) 2020.07.07
Editor - Slide UI 표시(후처리쉐이더)  (0) 2020.07.07
Editor - Color UI (후처리 스크립트)  (0) 2020.07.07
Shader - tex2Dlod  (0) 2020.07.07
Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:36

Editor - Slide UI 표시(후처리쉐이더)

 

 

[Range(0, 1), Tooltip("GrayScale Color ON OFF")]

public float Properties= 0;

'TA > Unity' 카테고리의 다른 글

알파 블랜드 라이트맵  (0) 2020.07.07
SubfaceShader 리플렉션 프로브 사용방법  (0) 2020.07.07
Editor - Color UI (후처리 스크립트)  (0) 2020.07.07
Shader - tex2Dlod  (0) 2020.07.07
GPU instancing  (0) 2020.07.07
Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:36

Editor - Color UI (후처리 스크립트)

 

[ColorUsage(false), Tooltip("Smoothness of the vignette effect.")]

public Color _Color = new Color(1f, 1f, 1f);

'TA > Unity' 카테고리의 다른 글

SubfaceShader 리플렉션 프로브 사용방법  (0) 2020.07.07
Editor - Slide UI 표시(후처리쉐이더)  (0) 2020.07.07
Shader - tex2Dlod  (0) 2020.07.07
GPU instancing  (0) 2020.07.07
모바일 Time scroll 오류 해결방법  (0) 2020.07.07
Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:36

tex2dlod (sampler, float4(UV, 0,miplevel))

 

tex2Dlod 는 밉맵의 레벨을 불러온다. 일부러 텍스쳐를 흐리게 할 때 유용함.

단 이걸 사용하면 거리에 따른 밉맵 조절이 안되는 문제가 있다.

miplevel은 0 부터 사용한다. 숫자가 늘어날수록 밉 레벨이 늘어난다.

여기서의 miplevel은 2.5라고 넣는다면 2와 3 사이를 보간해 준다

#pragma target 3.0 필요

 

http://kblog.popekim.com/2011/04/tex2dlod.html

 

 

 

tex2dbias (sampler, float4(UV, 0,miplevel))

 

tex2Dbias 는 밉맵의 레벨을 불러온다. 일부러 텍스쳐를 흐리게 할 때 유용함.

음.. 여기서의 miplevel은 2.5 라고 넣는다면 지금의 밉레벨 + 2.5 ... 인건가

결과물을 봐도 bias가 더 나쁘고, 3.0도 요구하지 않는다.

 

즉 lod는 밉맵레벨을 고정하는거고

bias는 지금 레벨에 원하는 레벨을 더해줘서 결과물을 내보낸다..

하이브리드한테까지 물어봐서 결과냄. 도무지 이해가 안가길래..

 

 

 

 

 

참고 스레드

http://forum.unity3d.com/threads/tex2dlod-vs-tex2dbias.249140/

 

http://jyblues.blogspot.kr/2011/12/direct3d11-intrinsic-functions.html

 

tex2Dbias(s,t): t.w에 의해 mip map level을 정한 후 샘플러 s를 이용 2D 텍스쳐의 픽셀 색깔 정보를 얻는다.

tex2Dlod(s,t): t.w에 의해 mip map level을 정한 후 샘플러 s를 이용 2D 텍스쳐의 픽셀 정보를 얻는다. t.w에 의해 LOD가
              어느단계에서 변할지를 결정한다.



출처: http://chulin28ho.tistory.com/256 [대충 살아가는 게임개발자]

'TA > Unity' 카테고리의 다른 글

Editor - Slide UI 표시(후처리쉐이더)  (0) 2020.07.07
Editor - Color UI (후처리 스크립트)  (0) 2020.07.07
GPU instancing  (0) 2020.07.07
모바일 Time scroll 오류 해결방법  (0) 2020.07.07
texcoord를 늘려 사용하는 방법  (0) 2020.07.07
Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:35

GPU instancing

 

https://docs.unity3d.com/Manual/GPUInstancing.html

 

사내 프로젝트 테스트 결과 프레임이 소폭 상승하는것을확인해 프로젝트에 적용하기로 했음.

IOS 테스트도 문제 없었음.

 

 

 

 

본문 내용 정리(구글 번역)

 

 

GPU 인스턴스는 다음 플랫폼 및 API에서 사용할 수 있습니다.

DirectX 11 and DirectX 12 on Windows

OpenGL Core 4.1+/ES3.0+ on Windows, macOS, Linux, iOS and Android

Metal on macOS and iOS

Vulkan on Windows and Android

PlayStation 4 and Xbox One

WebGL (requires WebGL 2.0 API)

 

 

 

 

 

특징및 제한사항

다이나믹 배칭보다 우선 작동한다, 인스턴싱된 오브젝트는 다이나믹 배칭은 작동안함

여러개의 라이트를 받게되면 기본 패스만 인스턴싱 처리된다.

라이트맵이나 리플렉션 프로브가 적용되면 인스터싱 되지않는다.

쉐이더가 투 패스 이상일 경우 첫번째 패스만 인스턴싱됨

너무많은 인스턴싱은(D3D : 64KB, Opengl : 16KB) 쉐이더 컴파일 실패를 부를수 있다.

UNITY_MAX_INSTANCE_COUNT 로 숫자를 제한할수있다.

최대갯수는 500개, 오픈지엘은125개가 기본

오픈지엘 3.0이상 작동

SkinnedMeshRenderer는 지원되지 않음

 

 

 

인스턴스 별 데이터 추가

 

기본적으로 Unity는 인스턴스화 된 각각의 드로 콜에서 서로 다른 Transform을 가진 GameObject 인스턴스를 일괄 처리합니다. 인스턴스화 된 GameObjects에 더 많은 분산을 추가하려면 Shader를 수정하여 Material 색상과 같은 인스턴스 별 속성을 추가하십시오.

 

 

아래 예제는 각 인스턴스에 대해 서로 다른 색상 값을 가진 인스턴스화 된 셰이더를 만드는 방법을 보여줍니다.

 

Shader "Custom/InstancedColorSurfaceShader" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _Glossiness ("Smoothness", Range(0,1)) = 0.5 _Metallic ("Metallic", Range(0,1)) = 0.0 } SubShader { Tags { "RenderType"="Opaque" } LOD 200 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types #pragma surface surf Standard fullforwardshadows // Use Shader model 3.0 target #pragma target 3.0 sampler2D _MainTex; struct Input { float2 uv_MainTex; }; half _Glossiness; half _Metallic; UNITY_INSTANCING_BUFFER_START(Props) UNITY_DEFINE_INSTANCED_PROP(fixed4, _Color) UNITY_INSTANCING_BUFFER_END(Props) void surf (Input IN, inout SurfaceOutputStandard o) { fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * UNITY_ACCESS_INSTANCED_PROP(Props, _Color); o.Albedo = c.rgb; o.Metallic = _Metallic; o.Smoothness = _Glossiness; o.Alpha = c.a; } ENDCG } FallBack "Diffuse" }

 

 

 

 

_Color를 인스턴스 속성으로 선언하면 Unity는 GameObject에 설정된 MaterialPropertyBlock 객체에서

_Color 값을 수집하여 단일 그리기 호출에 넣습니다.

 

MaterialPropertyBlock props = new MaterialPropertyBlock(); MeshRenderer renderer; foreach (GameObject obj in objects) { float r = Random.Range(0.0f, 1.0f); float g = Random.Range(0.0f, 1.0f); float b = Random.Range(0.0f, 1.0f); props.SetColor("_Color", new Color(r, g, b)); renderer = obj.GetComponent<MeshRenderer>(); renderer.SetPropertyBlock(props); }

 

 

 

 

인스턴스화 셰이더가 사용되지 않거나 _Color가 인스턴스 별 속성이 아닌 일반적인 경우에는 MaterialPropertyBlock의

다른 값으로 인해 드로잉 호출 배치가 중단됩니다. 이러한 변경 사항을 적용하려면 GPU 인스턴스를 활성화해야합니다. 이렇게하려면 Project 창에서 Shader를 선택하고

Inspector에서 Instance Enable 확인란을 선택합니다.

 

 

 

 

 

 

 

 

버텍스 및 프래그먼트 셰이더에 인스턴스 추가

다음 예제는 단순한 비 조명 셰이더를 사용하고 다른 색상으로 인스 턴싱 할 수있게합니다.

 

 

Shader "SimplestInstancedShader" { Properties { _Color ("Color", Color) = (1, 1, 1, 1) } SubShader { Tags { "RenderType"="Opaque" } LOD 100 Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_instancing #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; UNITY_VERTEX_INPUT_INSTANCE_ID }; struct v2f { float4 vertex : SV_POSITION; UNITY_VERTEX_INPUT_INSTANCE_ID // necessary only if you want to access instanced properties in fragment Shader. }; UNITY_INSTANCING_BUFFER_START(Props) UNITY_DEFINE_INSTANCED_PROP(float4, _Color) UNITY_INSTANCING_BUFFER_END(Props) v2f vert(appdata v) { v2f o; UNITY_SETUP_INSTANCE_ID(v); UNITY_TRANSFER_INSTANCE_ID(v, o); // necessary only if you want to access instanced properties in the fragment Shader. o.vertex = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag(v2f i) : SV_Target { UNITY_SETUP_INSTANCE_ID(i); // necessary only if any instanced properties are going to be accessed in the fragment Shader. return UNITY_ACCESS_INSTANCED_PROP(Props, _Color); } ENDCG } } }

 

 

 

 

Shader modifications

AdditionFunction

#pragma multi_compile_instancing Unity가 인스턴스 변형을 생성하도록 지시하려면이 옵션을 사용하십시오. 표면 쉐이더에는 필요하지 않습니다.
UNITY_VERTEX_INPUT_INSTANCE_ID 버텍스 쉐이더 입력 / 출력 구조에서 이것을 사용하여 인스턴스 ID를 정의하십시오. 자세한 내용은 SV_InstanceID를 참조하십시오.
UNITY_INSTANCING_BUFFER_START(name) / 
UNITY_INSTANCING_BUFFER_END(name)
모든 인스턴스 별 등록 정보는 특별히 명명 된 상수 버퍼에 정의되어야합니다. 이 매크로 쌍을 사용하여 각 인스턴스에 고유하게 만들 속성을 래핑합니다.
UNITY_DEFINE_INSTANCED_PROP(float4, _Color) 이 메서드를 사용하여 유형별 및 이름 별 인스턴스 별 Shader 속성을 정의합니다. 이 예제에서 _Color 속성은 고유합니다.
UNITY_SETUP_INSTANCE_ID(v); 이것을 사용하여 셰이더 기능에서 인스턴스 ID에 액세스 할 수있게 만듭니다. 버텍스 쉐이더의 맨 처음에 사용해야하며 프래그먼트 쉐이더에서는 옵션입니다.
UNITY_TRANSFER_INSTANCE_ID(v, o); 이것을 사용하여 입력 구조의 인스턴스 ID를 버텍스 쉐이더의 출력 구조로 복사하십시오. 프래그먼트 셰이더에서 인스턴스 별 데이터에 액세스해야하는 경우에만 필요합니다.
UNITY_ACCESS_INSTANCED_PROP(arrayName, color) 인스턴스화 상수 버퍼에 선언 된 인스턴스 별 Shader 속성에 액세스하려면이 옵션을 사용합니다. 인스턴스 ID를 사용하여 인스턴스 데이터 배열을 색인화합니다. 매크로의 arrayName은 UNITY_INSTANCING_BUFFER_END (이름) 매크로의 arrayName과 일치해야합니다.



 

 

#pragma instancing_options #pragma instancing_options 지시어는 다음 스위치를 사용할 수 있습니다.

 

SwitchFunction

forcemaxcount:batchSizeand maxcount:batchSize 대부분의 플랫폼에서 Unity는 대상 장치의 최대
상수 버퍼 크기를 모든 인스턴스 별 속성을 포함
하는 구조체의 크기로 나누어 인스턴스화 데이터
 배열 크기를 자동으로 계산합니다. 일반적으로
배치 크기에 대해 걱정할 필요가 없습니다.
그러나 일부 플랫폼 (Vulkan, Xbox One 및 Switch)
에서는 여전히 고정 배열 크기가 필요합니다.
 maxcount 옵션을 사용하여 해당 플 '폼에 대한 일}
 처리 크기를 지정할 수 있습니다.
이 옵션은 다른 플랫폼에서 완전히 무시됩니다.
모든 플랫폼에서 배치 크기를 강제로 설정하려면
 forcemaxcount를 사용하십시오
(예를 들어, DrawMeshInstanced를 통해 256 개의
 인스턴스 스프라이트가있는 드로잉 만 발행하는
 경우). 두 옵션의 기본값은 500입니다.
assumeuniformscaling 유니티에 모든 인스턴스가 균일 한 스케일링
(모든 X, Y, Z 축에 대해 동일한 스케일)을 가지고
있다고 가정하도록 지시하려면이 옵션을
사용하십시오.
lodfade 이것을 사용하여 LOD 페이드 값을 인스턴스화
할 수 있습니다. 이것은 SpeedTree 및 LOD
페이드 기능을 사용하는 다른 LOD 기술에
유용합니다.
procedural:FunctionName

Unity가 Graphics.DrawMeshInstancedIndirect와 

함께 사용할 추가 변형을 생성하도록 지시하려면이

 옵션을 사용하십시오.

버텍스 쉐이더 단계의 시작 부분에서 Unity는 

콜론 다음에 지정된 함수를 호출합니다. 

인스턴스 데이터를 수동으로 설정하려면 

일반적으로 인스턴스 당 데이터를 셰이더에 

추가하는 것과 같은 방법으로이 함수에 인스턴스 

별 데이터를 추가하십시오. Unity는 가져온 

인스턴스 속성 중 하나가 조각 Shader에 포함되어

 있으면 조각 Shader의 시작 부분에서이 함수를 

호출합니다.

 

 

 

UnityObjectToClipPos 셰이더 스크립트를 작성할 때는 mul (UNITY_MATRIX_MVP, v.vertex) 대신 항상

UnityObjectToClipPos (v.vertex)를 사용하십시오. 인스턴스화 된 쉐이더에서 UNITY_MATRIX_MVP를 정상적으로 계속 사용할 수 있지만

UnityObjectToClipPos는 오브젝트 공간에서 클립 공간으로 정점 위치를 변환하는

가장 효율적인 방법입니다. Unity는 또한 프로젝트의 모든 셰이더를 스캔하고,

mul (UNITY_MATRIX_MVP, v)의 모든 항목을 UnityObjectToClipPos (v)로 자동으로

대체하는 셰이더 업그레이드 프로그램을 구현합니다. UNITY_MATRIX_MVP (UNITY_MATRIX_MV와 함께)가 사용되는 장소가 여전히있는 경우

콘솔 창 (메뉴 : 창> 콘솔)은 성능 경고를 표시합니다.

'TA > Unity' 카테고리의 다른 글

Editor - Color UI (후처리 스크립트)  (0) 2020.07.07
Shader - tex2Dlod  (0) 2020.07.07
모바일 Time scroll 오류 해결방법  (0) 2020.07.07
texcoord를 늘려 사용하는 방법  (0) 2020.07.07
unity shdaer AplhaTest Shadow pass  (0) 2020.07.07
Posted by 프리랜서 디자이너
TA/Unity2020. 7. 7. 11:35

공통

fmod 함수로 오류 해결

UV 스케일은 인트로 고정(소수정 변화 불가)

 

 

 

서피스 쉐이더의 경우

 

uniform float _Foam_Time_U;

uniform float _Foam_Time_V;

uniform int _Normal_A_Scale;

uniform int _Normal_B_Scale;

.

.

.

void surf (Input IN, inout SurfaceOutput o) {

 

//UV scroll

float A_U = fmod(_Time*_NormalA_Time_U, 1);

float A_V = fmod(_Time*_NormalA_Time_V, 1);

float B_U = fmod(_Time*_NormalB_Time_U, 1);

float B_V = fmod(_Time*_NormalB_Time_V, 1);

IN.uv_NormalMapA = IN.uv_NormalMapA + float2(A_U, A_V);

IN.uv_NormalMapA *= _Normal_A_Scale;

IN.uv_NormalMapB = IN.uv_NormalMapB + float2(B_U, B_V);

IN.uv_NormalMapB *= _Normal_B_Scale;

.

.

.

//Normal

fixed3 _NormalMap_varA = UnpackNormal(tex2D(_NormalMapA,IN.uv_NormalMapA));

fixed3 _NormalMap_varB = UnpackNormal(tex2D(_NormalMapB,IN.uv_NormalMapB));

 

 

 

 

 

 

 

 

Vertex&frag경우

 

 

 

uniform float _NormalA_Time_U;

uniform float _NormalA_Time_V;

uniform int _Normal_A_Scale;

 

 

 

VertexOutput vert (VertexInput v) {

 

float2 UV = TRANSFORM_TEX(v.texcoord1.xy, _WaterNormalMap);

o.uv1.xy = UV;

 

float NATU = fmod(_Time*_NormalA_Time_U, 1);

float NATV = fmod(_Time*_NormalA_Time_V, 1);

o.uv1.xy = (UV + float2(NATU, NATV)) * _Normal_A_Scale;

.

.

.

.

}

 

 

 

float4 frag(VertexOutput i) : COLOR {

.

.

float4 _Normal_A_Texture_var = tex2D(_Normal_A_Texture, i.uv1);

.

.

.

 

}

 

'TA > Unity' 카테고리의 다른 글

Shader - tex2Dlod  (0) 2020.07.07
GPU instancing  (0) 2020.07.07
texcoord를 늘려 사용하는 방법  (0) 2020.07.07
unity shdaer AplhaTest Shadow pass  (0) 2020.07.07
Unity Shader Properties 인터페이스 추가기능 정리(펌)  (0) 2020.07.07
Posted by 프리랜서 디자이너