首页 > 其他分享 >Unity URP Shader 基础光照

Unity URP Shader 基础光照

时间:2023-02-27 17:12:10浏览次数:38  
标签:half4 Varyings Shader half3 Unity URP worldNormal input output

函数 GetMainLight() 返回一个数据结构 Light

struct Light
{
    half3   direction; // 颜色&强度
    half3   color; // 方向
    half    distanceAttenuation; // 距离衰减
    half    shadowAttenuation; // 阴影衰减
};
Shader "Example/StandardLight" {
    Properties {
        _BaseColor("Base Color", Color)=(1, 1, 1, 1)
    }

    SubShader {
        Tags {
            "RenderType"="Opaque" "RenderPipeline"="UniversalPipeline"
        }

        Pass {
            HLSLPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
            #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"

            CBUFFER_START(UnityPerMaterial)

            half4 _BaseColor;
            CBUFFER_END

            struct Attributes
            {
                float4 positionOS : POSITION;
                half3 normal:NORMAL;
            };

            struct Varyings
            {
                float4 positionCS : SV_POSITION;
                half3 worldNormal:TEXCOORD0;
            };

            Varyings vert(Attributes input)
            {
                Varyings output;
                // 从对象空间到裁剪空间
                output.positionCS = TransformObjectToHClip(input.positionOS.xyz);
                output.worldNormal = TransformObjectToWorldNormal(input.normal);
                return output;
            }

            half4 frag(Varyings input): SV_Target
            {
                Light mainLight = GetMainLight();
                // saturate(value) 相当于 Mathf.Clamp01(value) 函数,限制值在 [0,1] 区间
                float power = saturate(dot(mainLight.direction, input.worldNormal)); // 计算漫反射的强度
                half4 output = _BaseColor * power * half4(mainLight.color, 1); //将表面颜色,漫反射强度和光源强度混合。
                return output;
            }
            ENDHLSL
        }
    }
}

标签:half4,Varyings,Shader,half3,Unity,URP,worldNormal,input,output
From: https://www.cnblogs.com/kingBook/p/17160442.html

相关文章

  • Proxifier配合burp抓包但是burp收不到响应包解决思路
    题记        最近公司的项目比较特殊,不是传统的在web端的测试。而是客户给了一个exe,安装在电脑之后需要登录在工作台点击相关系统测试,点击相关系统后会在exe内部......
  • [Unity/C#]委托+协程,依次启动多播委托里协程的方法
    1//委托的定义2publicdelegateIEnumeratorActiveDuringTurn(Player[]otherplayers);34publiceventActiveDuringTurnUEvent;567//依次启动协程......
  • 有关Unity中Text控件文本不能换行或换行无效的解决方案
    解决方案如下: 这里简单说明一下:@标识符用于禁止把后面的“\n”转化掉,也就是使用完“\n”的转移效果就会保留,自然就能换行了。@似乎只能加在""之......
  • Unity获取所有场景的名字
    ///<summary>获取所有场景名字</summary>privatestring[]getAllSceneName(){intcount=SceneManager.sceneCountInBuildSettings;string[]sc......
  • 【unity】基于Playable的自定义动画系统
    前言开发时逐渐对蜘蛛网动画系统中重复性的工作感到厌烦,而且当动画一多起来,即使蜘蛛网分了层,我仍然连看都不想看。遂寻求解决方案。蜘蛛网那一套系统不支持在运行时创建......
  • Unity 性能优化之DynamicBone
    DynmaicBone最新版本使用了多线程,30人同屏情况下消耗为6ms左右,如下图:这个消耗依旧挺大,会使50帧的游戏降10帧左右。 使用jobsystem+burst优化后的消耗为0.05ms,......
  • Unity 进去区域时显示模型,离开区域时候隐藏模型
    1.在“MainCamera”下面创建一个Cube,调整大小,并将其Tag指定为“Player”(如下图所示)。 2.新建一个脚本,命名为“Tourcamera”,用来控制相机的移动(代码如下),并将其挂......
  • Direct3D Compute Shader基础
    从DirectX11.0版本(即SM5.0,需win7及以上)开始,引入ComputeShader(计算着色器)来进行GPU编程。ComputeShader不属于图形渲染管线的一个步骤,使得开发者可以脱离图形渲染管线的......
  • burpsuite光标偏移
    0x01问题描述在新版的burp中,我们能明显的看到光标是比较粗的,在字符之前移动,好像字符在动,好像burp的光标前面空格太宽,在闪烁0x02解决办法(网络)0x021更改显示字体大小,如......
  • win11_安装VScommunity|CUDA|pytorch
    注意:安装cuda过程中,有一步会检查是否安装了VisualStudio,所以本文中先安装VisualStudio,再安装cuda。参考:https://blog.csdn.net/weixin_44019018/article/details/122052......