Unity의 Scriptable Render Pipeline (SRP)에서 조명 정보를 검색하는 메모

3712 단어 SRPUnity3DC#Unity
지난번 SRP의 최초 도입을 해 보았습니다.
htps : // 이 m / 종종 sh / ms / d6bdfc956859138 d6 f

전회의 결과 화면을 보면, 넉넉하고 있어 입체감이 없습니다.
그래서 입체감을 내기 위해 쉽게 라이팅을 해봅니다.

Unity가 제공하는 UniversalRP는 항상 SpotLight와 DirectionalLight를 이용할 수 있습니다.

마찬가지로 Unity의 Direcitonal Light 정보를 사용하여 조명을 만들려면
어떻게 하면 좋은지 메모 쓰기입니다.

Unity 버전은 2019.3.0b6
com.unity.render-pipelines.core 7.1.1
com.unity.render-pipelines.lightweight 7.1.1
com.unity.render-pipelines.universal 7.1.1

셰이더 개선



라이팅을 하기 위해서, 이전 쉐이더의 개량을 실시합니다.
길어지므로 내용은 생략하지만, 적어도 셰이더에 라이트가 가지는 방향 등의 파라미터를 건네줄 필요가 있습니다.

코드 확인



・라이트의 정보를 셰이더에 건네고 있는 개소는 어디인가?

ForwardLights 클래스의 SetupMainLightConstants 함수가 그 처리를하고 있다고합니다.
Vector4 lightPos, lightColor, lightAttenuation, lightSpotDir, lightOcclusionChannel;
InitializeLightConstants(lightData.visibleLights, lightData.mainLightIndex, out lightPos, out lightColor, out 
lightAttenuation, out lightSpotDir, out lightOcclusionChannel);
cmd.SetGlobalVector(LightConstantBuffer._MainLightPosition, lightPos);
cmd.SetGlobalVector(LightConstantBuffer._MainLightColor, lightColor);

cmd 는 CommandBuffer 로, 이 클래스를 통해 셰이더의 변수를 건네줄 수가 있습니다.
CommandBufferPool이라는 클래스가 CommandBuffer를 관리합니다.
풀어서 사용해 주도록(듯이) 하고 있는 것 같습니다.

・라이트의 정보를 취득하고 있는 곳은 어디인가?

LightData 구조체에는 VisibleLight라는 구조체가 있습니다.
UniversalPipeline의 InitializeRenderingData에서 받고 있으며 CullingResults에서 꺼낼 수있는 것 같습니다.
var visibleLights = cullResults.visibleLights;

이것은 이전 기사에서 했던 컬링 결과에 데이터가 들어오고 있습니다.
htps : // m / sh / sh / ms / d6bdfc956859138 d6 f

조명의 방향은 ShadowUtils의 SetupShadowCasterConstantBuffer 함수로 전달하는 것 같습니다.
행렬의 내부에 포함된 데이터의 취급은, 이하의 기사가 참고가 됩니다.
ht tp // 마르페 296. 사쿠라. 네. jp / DXG_의 39_를 rld t t ri fu r m choon. HTML
Vector3 lightDirection = -shadowLight.localToWorldMatrix.GetColumn(2);
cmd.SetGlobalVector("_ShadowBias", shadowBias);
cmd.SetGlobalVector("_LightDirection", new Vector4(lightDirection.x, lightDirection.y, lightDirection.z, 0.0f));

요약



다음 두 가지를 누르면 라이트 정보를 꺼내 셰이더에 전달할 수있었습니다.
· CommandBuffer를 사용하여 셰이더의 전역 변수를 전달할 수 있습니다.
・라이트 정보는 CullingResult가 가지고 있다.

Directional 조명

Directional, Spot, Point 라이트


참고 사이트

거의 거의 자신의 메모가되어 버렸습니다.
이하에, SRP를 이용한 라이팅이 제대로 정리되어 있으므로, 이쪽을 읽으면 여러가지 할 수 있다고 생각합니다.
h tps : // / t ぃ 케코 ぢ g. 코 m / 우니 ty / 쓰리 ls / sc 리 p b-- 렌 r- ぺぃね / ぃghts /

↓ 조금 새로운 버전
h tps : // / t ぃ 케코 ぢ g. 코 m / 우니 ty / 개 ls / kus와 msrp / ぢれ c 치오나 l ぃ ghts /

좋은 웹페이지 즐겨찾기