当前位置: 首页 > article >正文

Unity shaderlab 实现LineSDF

实现效果:

实现代码:

Shader "Custom/LineSDF"
{
    Properties
    {
    }
    SubShader
    {
        Tags { "RenderType"="Opaque" }

        Pass
        {
            CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"

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

            struct v2f
            {
                float4 vertex : SV_POSITION;
                fixed2 uv:TEXCOORD0;
            };
           
           float line_segment(float2 p, float2 a, float2 b) {
	            float2 ba = b - a;
	            float2 pa = p - a;
	            float h = clamp(dot(pa, ba) / dot(ba, ba), 0., 1.);
	            return length(pa - h * ba);
           } 
         
           float3 mix(float3 e1, float3 e2, float e3){
                return e1 * (1-e3) + e2 * e3; 
           }

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

            float4 frag (v2f i) : SV_Target
            {
                float2 pos = (i.uv - 1 * .5) / 1;
	            float zoom = 2.5;
	            pos *= zoom;

	            float2 v1 = cos(_Time.x + float2(0.,5.));
	            float2 v2 = cos(_Time.x + float2(0.,5.) + 3.1);
	            float thickness = .2 * (.5 + .5 * sin(_Time.x * 1.));

	            float d = line_segment(pos, v1, v2) - thickness;

	            float3 color = float3(1,1,1) - sign(d) * float3(0,0,0);
	            color *= 1.5 - exp(.5 * abs(d));
	            color *= .5 + .3 * cos(120. * d);
	            color = mix(color, float3(1,1,1), 1. - smoothstep(.0, .015, abs(d)));

                return float4(color, 1.);
            }
            ENDCG
        }
    }
}

注:在ShaderToy里的fragCoord就相当于顶点着色器传过来的uv值。 

参考链接:

Line Segment (SDF) (shadertoy.com)

Inigo Quilez :: computer graphics, mathematics, shaders, fractals, demoscene and more (iquilezles.org)


http://www.kler.cn/a/414246.html

相关文章:

  • 【C#设计模式(15)——命令模式(Command Pattern)】
  • 【JavaEE】多线程(3)
  • 网络地址转换
  • TouchGFX设计模式代码实例说明
  • 第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议(ITCA 2024)
  • 03-控制结构
  • 根据中缀二叉树构建中缀表达式
  • 「Mac畅玩鸿蒙与硬件35」UI互动应用篇12 - 简易日历
  • Unity中的数学应用 之 插值函数处理角色朝向 (初中难度 +Matlab)
  • 【计算机网络】—— 物理层
  • IPguard与Ping32对比评测:数据安全保护谁更强?
  • 【热门主题】000067 React前端框架:探索高效Web开发之路
  • 在C#中使用OpenCV的.net包装器EmguCV
  • 11.25Scala
  • Maven 依赖项配置
  • 初级数据结构——二叉搜索树题库(c++)
  • RHCE——selinux和防火墙
  • 最新特性MCP协议客户端复现
  • 【R安装】VSCODE安装及R语言环境配置
  • 已解决WordPress图片无法显示,免插件实现WordPress上传图片时自动重命名
  • MySQL执行计划explain
  • vmware Ubuntu2004运行STAR-Searcher
  • 结构体详解+代码展示
  • 【Leetcode 每日一题】235. 二叉搜索树的最近公共祖先
  • cocos creator 3.8 合成大西瓜Demo 11
  • 卷积神经网络:图像特征提取与分类的全面指南