首页 > 其他分享 >基于SDF的光照效果

基于SDF的光照效果

时间:2023-10-20 18:00:13浏览次数:31  
标签:基于 MainTex Color uv vertex SdfTex SDF float4 光照

基于SDF的光照效果

好久没写博客了,怠惰了,就当爬了一步

原神二次元风格面部渲染

效果

Show me the code

Shader "Unlit/SDF"
{
    Properties
    {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Texture", 2D) = "white" {}
        _SdfTex ("SdfTex", 2D) = "white" {}
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }
        LOD 100

        Pass
        {
            Tags { "LightMode"="ForwardBase" }
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

            struct appdata
            {
                float4 vertex : POSITION;
                float2 uv : TEXCOORD0;
            };

            struct v2f
            {
                float2 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
            };

            float4 _Color;
            sampler2D _MainTex;
            sampler2D _SdfTex;
            float4 _MainTex_ST;
            float4 _SdfTex_ST;

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(v.vertex);
                o.uv = TRANSFORM_TEX(v.uv, _MainTex);
                return o;
            }

            fixed4 frag (v2f i) : SV_Target
            {
                // sample the texture
                fixed4 col = tex2D(_MainTex, i.uv);

                //SDF
                float4 Left_tex = tex2D(_SdfTex, i.uv);
                float4 Right_tex = tex2D(_SdfTex, float2(1-i.uv.x, i.uv.y));
                float3 lightDir = _WorldSpaceLightPos0.xyz; //光线入射向量
                float3 RightSide = UnityObjectToWorldDir(float4(1.0,0.0,0.0,1.0)); //世界空间下右向量
                float is_right = dot(lightDir.x, RightSide.x); //光线是否在右边?
                float4 shadow = is_right > 0 ? Right_tex : Left_tex; //采样的阈值

                float3 forward = UnityObjectToWorldDir(float4(0.0,0.0,1.0,1.0));
                float reflect_val = -0.5 * dot(forward, lightDir) + 0.5; //计算得到的阈值
                float is_shadow = shadow < reflect_val ? 1:0; //比较两者,判断是否在阴影内

                float4 halfShadow = 0.5 * is_shadow + 0.5;
                return col * _Color* halfShadow;
            }
            ENDCG
        }
    }
}

标签:基于,MainTex,Color,uv,vertex,SdfTex,SDF,float4,光照
From: https://www.cnblogs.com/Firepad-magic/p/17777692.html

相关文章

  • 【Python&GIS】基于Python批量合并矢量数据
    ​老样子最近有项目需要将N个矢量文件合并成一个,总不能用ArcGIS一个个导入吧。所以我就想着用Python编个程序实现批量合并矢量。我之前也发了一些关于Python操作矢量数据的文章:【Python&GIS】Python处理矢量数据的基本操作(查询、修改、删除、新建),如果大家感兴趣可以去我的主......
  • 79基于java的在线家政预约服务系统设计与实现(配套lun文,可参考做bi设)
    本章节给大家带来一个基于java在线家政预约服务系统设计与实现,可适用于java家政服务系统,java预约家政系统,java在线家政系统,在线服务系统,社会家政系统,家政管理系统,家政服务平台,家政更加服务平台系统,家政管理系统等等;项目背景现代社会,由于经济不断发展,家政服务的数量也在不断的......
  • 小明哥学linux驱动之USB-OTG(基于gadget框架)【转】
    转自:https://blog.csdn.net/silence3039/article/details/100187666一、简介OTG是On-The-Go的缩写。其设计的初衷是为了两个“外设”在没有PC(Host)的情况下,也可以通过USB进行数据传输。可以理解为,拥有OTG功能的USB设备(OTG设备)既可以做host,也可以做peripheral。二、OTG基本结构2......
  • 使用CSS的cross-fade()实现基于url的网页背景图半透明显示
     参考链接:https://www.zhangxinxu.com/wordpress/2020/07/css-cross-fade-background-image-opacity/引子在开发过程中,碰到了一个比较特别的情况,就是使用url()背景图像,同时又希望background-image背景图片是半透明的,作为网页的半透明背景图,这时候使用opacity,如果使用某一个大......
  • triton部署基于wenet的流式asr服务
    1、docker镜像下载下载链接:https://catalog.ngc.nvidia.com/orgs/nvidia/containers/tritonserver/tags或者直接dockerpullnvcr.io/nvidia/tritonserver:23.01-py3 2、克隆wenet项目gitclonehttps://github.com/wenet-e2e/wenet.git3、下载预训练模型,下载链接https:/......
  • 从零开始打造基于GraphView的行为树框架
    本文主要介绍了行为树的一些特点,以及如何在Unity中从零开始实现基于事件驱动的行为树Runtime框架(包括黑板参数、可扩展的自定义序列化数据格式等),与如何基于GraphView开发配套的行为树可视化编辑器与调试器(包括注释块、复制粘贴、Undo/Redo等)。 本课程属于进阶课程,适合已经有......
  • 花生好车基于 KubeSphere 的微服务架构实践
    公司简介花生好车成立于2015年6月,致力于打造下沉市场汽车出行解决方案第一品牌。通过自建直营渠道,瞄准下沉市场,现形成以直租、批售、回租、新能源汽车零售,四大业务为核心驱动力的汽车新零售平台,目前拥有门店600余家,覆盖400余座城市,共设有25个中心仓库。目前已为超40万......
  • 花生好车基于 KubeSphere 的微服务架构实践
    公司简介花生好车成立于2015年6月,致力于打造下沉市场汽车出行解决方案第一品牌。通过自建直营渠道,瞄准下沉市场,现形成以直租、批售、回租、新能源汽车零售,四大业务为核心驱动力的汽车新零售平台,目前拥有门店600余家,覆盖400余座城市,共设有25个中心仓库。目前已为超40......
  • 【Python&RS】基于Python批量镶嵌拼接遥感影像/栅格数据
    ​    我之前分享过【Python&RS】基于GDAL镶嵌拼接遥感影像,但是没有加入批量处理的代码。最近正好有这个需求,所以就对原来的代码进行了优化加入了批量拼接的代码。现在只需输入一个文件夹即可将其中的影像全部镶嵌起来。 一、导入GDAL库fromosgeoimportgdal二......
  • 基于comsol的压力声学-热黏性声学模块模拟一种具有多阶吸声的低频宽带薄超表面
    研究背景:由于传统材料的能量耗散较弱,低频吸声一直是研究人员面临的一个具有挑战性的课题。近年来,声学超材料发展迅速,具有前所未有的优异低频性能。已经设计了一系列亚波长厚度的超材料,以实现对低频声音的100%吸收。例如,由弹性膜和刚性盘组成的膜型超材料可以吸收某些频率下几乎所有......