본문 바로가기

셰이더

제작 셰이더 리뷰 - 유니티 용암 셰이더 보호되어 있는 글입니다. 더보기
제작 셰이더 리뷰 - 유니티 물 기본 셰이더 보호되어 있는 글입니다. 더보기
코루틴(coroutine)을 활용한 번개 스크립트 보호되어 있는 글입니다. 더보기
셰이더에서 Time 사용시 프레임 렉을 줄이는 방법 셰이더는 디바이스를 타는 경우가 많아 코드 작성시 주의 해야할 사항이 많습니다.얼마전에 공유드렸던 vert_img가 노트4에서만 죽는 거 처럼 안드로이드 기기는 워낙 다양한 GPU를 사용하다보니로그에 남지 않는 크래쉬 발생이 많고, 또한 어디서는 정상으로 나오던 것들이 어디서는 잘못 렌더 되는 경우가 많습니다. 최근에는 디스토션 셰이더가 아이폰 6에서만 화면이 어둡게 나오는 현상이 발견되어 해당 셰이더를 못쓰는 상황도 발생했습니다..ㅠ 이번에 공유 드릴 내용은 셰이더코드를 어떻게 작성하느냐에 따라 프레임렉을 유발할수 있는 부분에 대해서 나누고자 합니다. 물 셰이더를 제작하면서 버텍스 연산하는 부분을 함수로 따로 뺀뒤 연산하도록 작업이 됐었는데,갤럭시 시리즈에서만 버텍스 애니메이션시 프레임 렉을 일으키는 .. 더보기
유니티 소팅과 셰이더의 연계성..(Unity Sorting Strange..) 바닥 아웃라인 셰이더를 만든후 그 위에 올라갈 오브젝트의 소팅에 문제가 있다는 것을 발견했습니다. 이 때 사용된 렌더큐를 따져보면 바닥 렌더 큐(Pink) - Tags {"Queue"="Transparent+100" "IgnoreProjector"="True" "RenderType"="Transparent"} 오브젝트 렌더 큐(Blue) - Tags {"RenderType"="Opaque"} 큐 순서를 따져보면 Transparnet 가 Opaque보다 소팅이 위에 찍히기에 당연한 결과라 할 수 있습니다. 그래서 오브젝트 렌더 큐를 아래와 같이 변경을 해보았습니다. Tags {"Queue"="Transparent+200" "IgnoreProjector"="True" "RenderType"="Transpar.. 더보기
유니티 셰이더 - Plane에서 아웃라인(outline)을 이쁘게 만들기 위한 고민.. 유니티의 아웃라인 셰이더는 구글에 돌아다니는 레퍼런스가 많아 손쉽게 구현이 가능합니다. 하지만, 자세하게 여러가지를 따지다 보면 불편한 사항이나 제약이 많이 뒤따른다는 것을 쉽게 발견할 수 있습니다. 일반적인 공식으로 알려져있는 아래 수식대로 셰이더를 만들어 아래 오브젝트에 연결해 보면.. v2f o; o.pos = mul(UNITY_MATRIX_MVP, v.vertex); fixed3 norm = mul ((fixed3x3)UNITY_MATRIX_MVP, v.normal); fixed2 offset = TransformViewToProjection(norm.xyz); o.pos.xy += offset * o.pos.z * _Outline; o.pos.z += 0.01 * _Outline; o.color.. 더보기
유니티 셰이더 - Surface 셰이더에서 알파가 안빠지는 현상 간단한 서피스 커스텀 셰이더를 만들었는데 알파 값을 0으로 아무리 해도 알파가 안빠지는 현상이 계속됐다. 여러가지 테스트를 해보니 SurfaceOutputCustom 에 Normal 과 Emission 값을 넣어주지 않으면 알파 값이 계속 빠지지 않는 것이다.. #pragme에 keepalpha 문을 넣어주는 것은 당연하고.. 서피스 셰이더 제작후 알파값이 빠지지 않으면 아래의 세 구문을 꼭 넣어주자. Blend One OneMinusDstAlpha #pragma surface surf keepalpha struct SurfaceOutputCustom { fixed3 Albedo; fixed3 Normal; fixed3 Emission; fixed Alpha; }; 더보기
셰이더 일괄 교체 스크립트 제작 프로젝트를 진행하면서 파티클 빌트인 셰이더들이 문제를 일으켜 일괄 변환해 줘야 하는 상황이 발생했습니다. 일일이 바꾸는 번거러움을 덜고자 제작한 스크립트 입니다. 1. 모바일 엔진 셰이더(바뀌어야할 셰이더 선택) 2. 바뀔 셰이더 선택 3. 대상 메터리얼들 선택(폴더 / 파일) 4. 대상 메터리얼중 1번과 동일 셰이더를 찾아 2번으로 바꿔줌~ 일괄 교체~ using UnityEngine; using UnityEditor; using System.Collections; using System.Collections.Generic; using System.IO; public class MaterialControl : EditorWindow { public Shader shader1 = null; public .. 더보기
언리얼엔진4 이펙트 쉐이더에서 PANNER 느려짐 현상 해결 공유 *제작한 이펙트가 처음엔 잘 나오다가 시간이 지나면 알파값이 제대로 안빠지고 소팅도 안되는 문제가 발생하고 있습니다. 동시에 프레임도 떨어지고 있습니다. .(갤럭시s5, 넥서스5, G2 모두 발생) 원본 이펙트 빌드후 시간이 지나면서 문제가 발생하는 모습 여러가지 테스트를 거쳐 원인을 파악해 본 결과 파티클에 패너 함수가 적용되면서 값이 누적되면서 발생하는 문제로 추정됩니다. 파트클에도 움직임을 주고 쉐이더에도 움직임을 주면서 뭔가 문제를 발생하는거처럼 보입니다. 패너값을 0으로 놓고 파티클로만 움직임을 주고 빌드를 하면 문제가 발생하지 않습니다. **이 문제의 해결방안~ 이 문제점을 커스텀 UV를 사용하여 해결하였습니다. 기존에는 PANNER를 이미지에 바로 연결하여 UV애니메이션을 적용했는데, 모바일.. 더보기
유니티 최적화 기술 총정리 참고 자료 [데브루키/141206 박민근] 유니티 최적화 테크닉 총정리 http://www.slideshare.net/agebreak/unite2015-47100325?related=1 유니티 그래픽 최적화, 어디까지 해봤니 http://www.slideshare.net/ozlael/graphics-opt-ndc?related=2 최적화 내용 간단 정리 ** 가장 중요한 것은 병목 지점 파악~(메모리인지, 콜인지, CPU인지, 버텍스연산인지.. 아니면 다함께..) ** 리소스 아껴 쓰기 ** 드로우콜 관리하기 ** 모바일 사운드는 모노로 사용하기~ ** 가비지 컬렉터 관리~~ ** 스크립트 함수에 무거운 함수 쓰지 않기~ ** 셰이더에 무거운 함수 사용 줄이기~ ** 물리 사용은 최소로~ 1. 프로그램 .. 더보기