아래 포스트는 고민하고 시도해본 방법들을 정리하였으며,
https://bulletprooves.tistory.com/34
[Unity] Custom Shader 셰이더 에디터 / 빌드 다른 결과
해당 포스트는 고민하고 시도해본 방법들을 정리하였으며,해결하지는 못했지만, 나름 다른 방법으로 우회(?)하여 겉보기엔 문제 없이 해결한 방법은 다음 포스트에서 다뤘습니다.https://bulletproov
bulletprooves.tistory.com
해당 포스에서는 해결하지는 못했지만, 나름 다른 방법으로 우회(?)하여 겉보기엔 문제 없도록 만든 과정을 정리했습니다.
문제 : Build 하고난 뒤, 음영이 반영 안 됨
빌드하고 나면, 전부 어두운 팩터만 곱해 밝은 부분과 중간 부분 음영이 반영 되지 않습니다.
원인은... 모르겠고, 여러 방법 시도해 보았지만 해결하지 못 했습니다.
아래 해결 방법을 찾기 위해 찾아본 것들입니다.


커스텀 쉐이더를 사용 중, Shader가 Editor 와 Build 에서 반영 결과가 다른 문제가 생겼습니다.
왼쪽이 Editor, 오른쪽이 Build 한 .exe 파일의 스크린샷입니다. (Post 프로세싱의 Bloom을 너무 과하게 한 거 같네요...ㅎㅎ)
내 Shader 코드 분석
우선 프로퍼티는 다음과 같습니다.

반투명용으로 사용할 Albedo, 그리고 아래 이미지와 같이 광원으로 부터의 방향과 표면 방향의 밝기에 따라
그 값을 바꿔 줄 factors, 상한값과 하한값 전용 Threshold입니다.
광원 (Directional Light)로 부터의 방향과 표면 방향을 dot product 했습니다.
먼저 빛이 오브젝트에 닿는 밝기에 따라 3개 구간으로 분기합니다.

- 밝은 곳 = 밝은 쪽 살짝 강조
- 중간 밝기 = 중간은 기본 텍스처
- 어두운 곳 = 음영 색깔 곱해줌
아래처럼 말이죠.

그럼 혹시 지침 키워드를 바꿔볼까? 생각해봤습니다만...

#pragma multi_compile_fwdbase 를 multi_compile_forwardadd로 바꿔보기 → 실패
UsePass "Legacy Shaders/Diffuse/FORWARD" 방식으로 Pass를 강제로 가져오는 것도 고려해 볼 수 있겠지만...
(혹은 Lighting.cginc 대신 UnityCG.cginc로 전환해서 직접 Directional Light 우회도 가능할까...? 안해봐서 모르겠어용)
// Tag { "LightMode" = "ForwardBase" } 이거 열어두니 아래처럼 나왔습니다.

https://docs.unity3d.com/kr/530/Manual/SL-PassTags.html
Tag 키워드는 위 링크에서 확인할 수 있습니다.

고민 끝에 선택한 방법은,
광원 레퍼런스 없이 Y축 수직으로부터 내려오는 가상의 빛
정말 제 머리 축으로 부터 수직한 방향으로 빛이 내리쬐는 것만 같았습니다.
위쪽에서 수직으로 내리쬐는 가상의 빛을 만들어 실제 Scene 내에 광원 (Directional Linght)가 존재하지 않아도
위에서 짠 프로퍼티 팩터가 잘 반영되도록 가짜로 광원을 만드는 겁니다.
float3 lightDir = normalize(_WorldSpaceLightPos0.xyz);
월드공간 내의 광원의 위치로 부터 Normalization 필요 없이, 아래와 같이
float3 lightDir = normalize(float3(0, 1, 0));
// Y축 위쪽에서 수직으로 내려오는 화려한 조명, 가상의 빛이 저를 비추네요
애초에 이렇게 한 줄 바꾸면 될 것을 허구하게 삽질하고 있었습니다.

아오... 드디어 됐습니다.
비교해 보겠습니다.



좌측 → 맨 처음 Editor 결과입니다. Build 하고도 좌측처럼 나오길 바랐지만,
중앙 → Build 결과가 중앙 사진 처럼 나와서 울었습니다. 그러다 아이디어가 떠올라 코드 한 줄 바꿔,
우측 → Build 후에도 광원(바꿔준 가상의 Light)으로부터의 밝기에 따른 factor에 맞게 구간별로 return합니다.
다들 화이팅! 오늘도 좋은 하루 되시기 바랍니다. (っ˘▿˘)(˘▿˘)˘▿˘ς)
'Graphics' 카테고리의 다른 글
| [Graphics] HLSL Vector 벡터 메서드 정리 (0) | 2025.04.30 |
|---|---|
| [Graphics] Shader Programming & HLSL (0) | 2025.04.28 |