您当前的位置: 首页 >  unity

Jave.Lin

暂无认证

  • 5浏览

    0关注

    704博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

unity - 踩坑记录 - 关于AlphaTest投影烘焙后没有镂空的问题

Jave.Lin 发布时间:2022-01-28 10:29:48 ,浏览量:5

这是一篇年前:2021.1.28 些的日志

主要是备忘用

帮美术同学修改完 shader 后 发现烘焙后 alpha test 的 shader 都没有了投影镂空的效果

导致树叶之间的投影 乌黑一大片,然后搜索了一下

还好的是,发现 taecg 老师也在某乎上写过这个问题的处理分享

看了这篇文章就知道:unity黑箱 + 文档不说明有多 e xin:关于AlphaTest阴影烘焙后消失的问题

处理要点:

  • 主纹理名称必须是"_MainTex",只有这个名称才会被内部识别到,就像后处理Shader中也需要用到这个名称是一样的道理。
  • Shader中的Queue排序在2450-3999之间,也就是"Queue" = “AlphaTest"或者"Queue” = “Transparent”.
  • RenderType设置为"RenderType" = “Transparent"或者"RenderType” = “TransparentCutout”.

记住要处理:Forwardbase 和 ShadowCaster 两个 shader 的 tag, queue 等

如果我们要重写 ShaderGUI 那么注意处理这两点即可,如下:

References
  • 关于AlphaTest阴影烘焙后消失的问题
// jave.lin 2022/08/27 为 SanGuo_PBR_MRA_SSS shader 材质的编辑器重写

using UnityEngine;
using UnityEditor;
using System;
using System.Collections.Generic;

public enum JAVELIN_RenderType
{
    Opaque,
    AlphaTest,
    TransparentWithoutPMA,
    TransparentWithPMA,
    Additive,
    Subtractive,
}

public enum JAVELIN_ShowFaceType
{
    Front,
    Back,
    DoubleSide,
}

public class SanGuo_PBR_MRA_SSS_MAT_GUI : ShaderGUI
{
    static MaterialProperty FindAndRemoveProperty(string propertyName, List propertyList)
    {
        return FindAndRemoveProperty(propertyName, propertyList, true);
    }

    static MaterialProperty FindAndRemoveProperty(string propertyName, List propertyList, bool propertyIsMandatory)
    {
        for (var i = 0; i  0)
        {
            for (int i = 0; i             
关注
打赏
1664331872
查看更多评论
0.0721s