基于URP的程序化天空盒

这篇具有很好参考价值的文章主要介绍了基于URP的程序化天空盒。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

参考来源: 

 天空盒教程第 1 部分 |开尔文·范·霍恩 (kelvinvanhoorn.com)

【程序化天空盒】过程记录02:云扰动 边缘光 消散效果_九九345的博客-CSDN博客

程序化天空盒实现昼夜变换 - 知乎 (zhihu.com)

一、太阳 

        目标:改变光的方向,使天空球旋转(日夜交替);光的正方向:太阳,光的反方向:月亮;

        步骤一:计算天空球上的uv坐标与光的方向的距离,越与光的方向重合,越接近0,贴图越黑。(天空盒uv为xyz三个方向)

        步骤二:除以半径创建圆形,然后反相。

        smoothstep:可以用来生成0到1的平滑过渡值,它也叫平滑阶梯函数。

基于URP的程序化天空盒,unity,游戏引擎基于URP的程序化天空盒,unity,游戏引擎基于URP的程序化天空盒,unity,游戏引擎

代码:

Shader "URP_Skybox"
{
    Properties
    {
        _MainTex ("Texture", 2D) = "white" {}
        _SunRadius ("太阳半径", float) = 1.0
    }
    SubShader
    {
        Tags { "RenderType"="Background" "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)

            float _SunRadius;

            CBUFFER_END

            TEXTURE2D(_MainTex);
            SAMPLER(sampler_MainTex);

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

            struct v2f
            {
                float3 uv : TEXCOORD0;
                float4 vertex : SV_POSITION;
                float4 posWS : TEXCOORD1;
            };

            

            v2f vert (appdata v)
            {
                v2f o;
                o.vertex = TransformObjectToHClip(v.vertex);
                o.uv = v.uv;
                o.posWS = mul(unity_ObjectToWorld, v.vertex);
                return o;
            }

            float4 frag (v2f i) : SV_Target
            {
                Light light = GetMainLight(TransformWorldToShadowCoord(i.posWS));
                half sunDist = distance(i.uv.xyz, light.direction);
                //smoothstep:大于等于0.7 为0,小于等于1 为1
                half sunArea = 1-smoothstep(0.7, 1, sunDist * _SunRadius);
                return float4(sunArea,sunArea,sunArea,1);
            }
            ENDHLSL
        }
    }
}

二、月亮

        目标:月亮定位、贴图采样等 月亮使用cubemap,可以旋转。

        步骤一:光线追踪球体信息并从中创建模板(使用sphIntersect),如果没有相交就创建遮罩。

        步骤二:计算照明(NdotL),需要法线(视线方向-月亮顶点方向),光线方向为太阳光方向的反向。

基于URP的程序化天空盒,unity,游戏引擎基于URP的程序化天空盒,unity,游戏引擎

         步骤三:添加曝光度控制月亮的亮度,采样月亮cubemap纹理,并使用矩阵在月亮变换的时候自旋转。文章来源地址https://www.toymoban.com/news/detail-555272.html

Shader "URP_Skybox"
{
    Properties
    {
        [Header(Moon)]
            [NoScaleOffset] _MoonCubeMap ("月亮贴图", Cube) = "_Skybox" {}
            _MoonRadius ("月亮半径", Range(0, 1)) = 0.05
            _MoonMaskRadius("月亮遮罩半径", range(1, 25)) = 10
            _MoonSmooth("月亮边缘平滑度", Range(0, 1)) = 0.7
            _MoonExposure("月亮曝光度", range(0, 1)) = 1
        [Header(Sun)]    
            _SunRadius 

到了这里,关于基于URP的程序化天空盒的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 虚幻引擎程序化资源生成框架PCG 之 UPCGBlueprintElement源码笔记(二)数据流

    PCG节点处理的是数据流,也就是点云,点云到底是啥?笼统地说就是一个个携带着信息的点组成的集合。但是在具体是使用过程中,我们还得了解这些”携带着信息的点“是如何被层层包装起来的。本文中老王就和大家一边拆解源代码一边做实验,尝试着深入理解一下PCG中的

    2024年02月13日
    浏览(62)
  • Unity 使用柏林噪声程序化生成地形

    参考教程链接 项目链接 👇对噪声和柏林噪声不了解的可以看下面这个讲解。 柏林函数简介   简单来说柏林噪声是一种连续的、渐变的噪声,不理解原理也无所谓,unity自带有Mathf.PerlinNoise(X-coordinate,Y-coordinate);我们可以根据这个来制作更有层次性的柏林噪声。你可以把这个

    2024年02月15日
    浏览(41)
  • 虚幻引擎程序化资源生成框架PCG(Procedural Content Generation Framework) 之 PCG基础

    可以和Houdini说拜拜了 Unreal Engine 5.2全新推出了程序化资源生成框架即Procedural Content Generation Framework下文简称PCG, 开发者可以通过PCG程序快速生成宏大且复杂的游戏场景。以往这种程序化资源(场景)的生成需要借助Houdini来实现,有了PCG,真的可以和Houdini说拜拜了! 优点:

    2024年02月11日
    浏览(53)
  • 【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----程序化生成地形算法设计

    Input: Output: 程序化生成地形算法是一种在计算机中生成地形的方法,通常用于游戏开发和虚拟现实应用。下面是几种常见的程序化生成地形算法: Diamond-Square Algorithm(钻石-正方形算法) 该算法通过随机值填充网格的四个角落,然后计算中间点的高度值,不断重复直到整个网

    2024年02月01日
    浏览(50)
  • 什么是程序化交易

    大到量化、程序化、高频交易、套利交易、主观投资这些基本的概念,小到网格交易、条件单、T+0、ETF套利、期现套利、算法拆单交易、打板策略等具体的投资方式。如果没有接触过这些,很容易混淆。 程序化交易: 指通过既定程序或特定软件,自动生成或执行交易指令的

    2024年02月06日
    浏览(50)
  • 程序化交易接口策略过滤器–九宫格

    不同的程序化交易接口策略适用于不同的市场情况,有些交易策略使用于均值回归,有些则试用于方向明显的时候,有些试用于方向不明显的时候,因此,我们需要根据不同的市场情况,综合考虑方向和波动率,市场成交量来选择合适的交易策略。 本文介绍了一种选择程序化

    2023年04月09日
    浏览(46)
  • 分享股票量化交易程序化模型的设计思路

    一个股票量化交易程序化模型的入市设计往往伴随着设计者的偏好和交易时间框架等。主要分为震荡交易、套利交易以及趋势跟踪等。当然在近些年的发展中,也出现了类似遗传算法、人工智能神经网络等许多种类的系统模型。 但是对于大多数投资者来说,趋势跟踪系统可以

    2024年02月03日
    浏览(59)
  • Three.js程序化3D城市建模【OpenStreetMap】

    对于我在 Howest 的研究项目,我决定构建一个 3D 版本的 Lucas Bebber 的“交互式讲故事的动画地图路径”项目。 我将使用 OSM 中的矢量轮廓来挤出建筑物的形状并将它们添加到 3js 场景中,随后我将对其进行动画处理 推荐:用 NSDT编辑器 快速搭建可编程3D场景 为了使用 Node 和

    2024年02月11日
    浏览(44)
  • 用java去实现程序化广告应该有哪些步骤?

    1. 需求分析和规划 在这一阶段,我们需要详细分析和理解项目需求,并制定相应的规划和计划。这包括以下几个步骤: 项目背景和目标: 理解项目的背景和目标,确定开发的目的和意义。 功能需求分析: 分析用户需求,明确项目需要实现的功能和特性。 技术可行性评估:

    2024年04月10日
    浏览(55)
  • “小程序化”成OA数字化升级突破口

    如果说新冠疫情引发了在线办公需求的激增,那么企业对数字化转型的渴望,则是数字化办公赛道持续火热的根本原因。 2020年新冠疫情爆发,远程办公成为了大部分企业无奈又必然的选择,三年以来,随着疫情的持续蔓延和常态化管控,在线办公逐渐成为刚需,企业对于在

    2024年02月08日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包