首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >未亮节点阴影阴影图

未亮节点阴影阴影图
EN

Game Development用户
提问于 2019-03-07 08:18:01
回答 1查看 6K关注 0票数 2

如何使未亮的节点投下阴影?LWRP中的着色图的当前状态是可能的吗?

在这篇伟大的文章中,卡通着色器 OP从VertexLit着色器抓取。类似的东西可以用着色图实现吗?

EN

回答 1

Game Development用户

发布于 2019-08-06 18:24:10

我认为它不应该是一个节点,因为我们使用它时,once.it应该类似于切换。

如果您喜欢这样做,请尝试使用#pragma multi_compile,因为在标准着色器中,#pragma multi_compile_shadowcaster使用了。

ShadowCaster

默认情况下,未亮着色器投下阴影,如果您想移除未亮着色器中的阴影施法者,只需在着色图中打开您的着色器并复制着色器,然后创建另一个着色器并粘贴生成的着色器,然后移除阴影施法者。

代码语言:javascript
运行
复制
Name "ShadowCaster"
Tags{"LightMode" = "ShadowCaster"}

阴影接收者

默认情况下,未亮着色器不会接收阴影,我们需要将纹理坐标从顶点着色器转移到片段着色器。

代码语言:javascript
运行
复制
// As a new include, below the existing ones.
#include "AutoLight.cginc"

…

// Add to the v2f struct.
SHADOW_COORDS(2)

…

// Add to the vertex shader.
TRANSFER_SHADOW(o)

但是我不能在LightWeightRenderPipeline中使用它,我想是因为它过时了。

因此,我试着看看在PBR中生成的着色器和未亮起的着色器之间的差异,以了解ShaderGraph PBR用来接收阴影的东西。我注意到它使用定制的照明模型和阴影灯。

代码语言:javascript
运行
复制
    struct GraphVertexInput
    {
    //...
    float4 shadowCoord  : TEXCOORD2;
    };


    struct GraphVertexOutput
    {
    //...
    float4 shadowCoord  : TEXCOORD2;
    };

    half3 vertexLight = VertexLighting(vertexInput.positionWS, lwWNormal);
#ifdef _MAIN_LIGHT_SHADOWS
    o.shadowCoord = GetShadowCoord(vertexInput);
#endif

然后,您应该在照明中使用这个shadowCoord,所以您应该定制一个照明model.but,这个解决方案非常困难,因为我必须覆盖内置的hlsl文件。

在团结2019.2,我们带来了更多的功能和功能的阴影图。您可以在着色图https://blogs.unity3d.com/2019/07/31/custom-lighting-in-shader-graph-expanding-your-graphs-in-2019/中进行自定义照明

您可以使用自定义功能文件模式使用自定义照明功能

代码语言:javascript
运行
复制
void MainLight_half(float3 WorldPos, out half3 Direction, out half3 Color, out half DistanceAtten, out half ShadowAtten)
{
#if SHADERGRAPH_PREVIEW
   Direction = half3(0.5, 0.5, 0);
   Color = 1;
   DistanceAtten = 1;
   ShadowAtten = 1;
#else
#if SHADOWS_SCREEN
   half4 clipPos = TransformWorldToHClip(WorldPos);
   half4 shadowCoord = ComputeScreenPos(clipPos);
#else
   half4 shadowCoord = TransformWorldToShadowCoord(WorldPos);
#endif
   Light mainLight = GetMainLight(shadowCoord);
   Direction = mainLight.direction;
   Color = mainLight.color;
   DistanceAtten = mainLight.distanceAttenuation;
   ShadowAtten = mainLight.shadowAttenuation;

#endif
}
票数 1
EN
页面原文内容由Game Development提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://gamedev.stackexchange.com/questions/168731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档