не выкидай! пригодится...
https://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf
https://blog.selfshadow.com/publications/s2013-shading-course/karis/s2013_pbs_epic_notes_v2.pdf
This media is not supported in your browser
VIEW IN TELEGRAM
давайте немного Юнити. Первое знакомство с рендер гафом в контексте кастомного SRP.
Этот самый примитивный рендер пасс для геометрии ничего не может сказать, кроме как "прекольно!"
Все изменилось, но стало удобно.
Этот самый примитивный рендер пасс для геометрии ничего не может сказать, кроме как "прекольно!"
Все изменилось, но стало удобно.
private static BaseRenderFunc<DrawGeometryPassData, RenderGraphContext> _renderFunction;
static MyPass()
{
_renderFunction = RenderFunction;
}
В гудини вспомнили про Контекст обработки изображений, и в будущей версии, решили на все деньги его обновить. Теперь это сабстанс какой-то. Любопытна передача данных симуляции.
🤯1
Forwarded from Иван Валерьевич
тогда
в шейдере
cmd.SetGlobalConstantBuffer(lightingPassData.DirectionalLightDataBuffer,"DirectionalLightDataBuffer",0, DirectionalLightData.stride);
в шейдере
CBUFFER_START(DirectionalLightDataBuffer)
half4 directionLightColor;
half4 directionLightDirectionaAndMask;
half4 shadowData;
CBUFFER_END
Forwarded from Иван Валерьевич
а ну и не забыть у графа перед создание BufferHandle
cs
directionalLightDataBufferDescriptor.target = GraphicsBuffer.Target.Constant;
конечно, я забыл про преобразование
m - это VP матрица света
для каскадов добаавляется оффсет и скейл, но это потом
m - это VP матрица света
private static Matrix4x4 ConvertMatrix(Matrix4x4 m)
{
if (SystemInfo.usesReversedZBuffer)
{
m.m20 = -m.m20;
m.m21 = -m.m21;
m.m22 = -m.m22;
m.m23 = -m.m23;
}
m.m00 = 0.5f * (m.m00 + m.m30);
m.m01 = 0.5f * (m.m01 + m.m31);
m.m02 = 0.5f * (m.m02 + m.m32);
m.m03 = 0.5f * (m.m03 + m.m33);
m.m10 = 0.5f * (m.m10 + m.m30);
m.m11 = 0.5f * (m.m11 + m.m31);
m.m12 = 0.5f * (m.m12 + m.m32);
m.m13 = 0.5f * (m.m13 + m.m33);
m.m20 = 0.5f * (m.m20 + m.m30);
m.m21 = 0.5f * (m.m21 + m.m31);
m.m22 = 0.5f * (m.m22 + m.m32);
m.m23 = 0.5f * (m.m23 + m.m33);
return m;
}
для каскадов добаавляется оффсет и скейл, но это потом
private static Matrix4x4 ApplyBiasMatrix(Matrix4x4 proj, Matrix4x4 view)
{
if (SystemInfo.usesReversedZBuffer)
{
proj.m20 = -proj.m20;
proj.m21 = -proj.m21;
proj.m22 = -proj.m22;
proj.m23 = -proj.m23;
}
Matrix4x4 worldToShadow = proj * view;
var textureScaleAndBias = Matrix4x4.identity;
textureScaleAndBias.m00 = 0.5f;
textureScaleAndBias.m11 = 0.5f;
textureScaleAndBias.m22 = 0.5f;
textureScaleAndBias.m03 = 0.5f;
textureScaleAndBias.m23 = 0.5f;
textureScaleAndBias.m13 = 0.5f;
return textureScaleAndBias * worldToShadow;
}
Media is too big
VIEW IN TELEGRAM
ладно, пока так
half4 MainLightShadowsData; //light strength, shadowBias, normalBias
half4 _MainLightShadowDistanceFade; //max distance, fadeWidth, 0, 0,
half fade = 1.0 - saturate ((distance (IN.positionWS, _WorldSpaceCameraPos.xyz) - _MainLightShadowDistanceFade.x) / _MainLightShadowDistanceFade.y );
shadow = LerpWhiteTo(shadow, MainLightShadowsData.x * fade);
🔥1
Media is too big
VIEW IN TELEGRAM
что Юнити предлагает в
ShadowSamplingTent.hlsl
ShadowSamplingTent.hlsl