【知识学习】Unity3D——Surface Shaderlightning的概念及使用方法示例

news2024/11/19 23:16:01

Unity3D是一个广泛使用的跨平台游戏引擎,它提供了强大的图形渲染功能。在Unity中,Shader是用于控制图形渲染过程的程序,它们运行在GPU上,用于计算屏幕上每个像素的颜色。Surface Shader和Lighting是Unity Shader编程中非常重要的概念。

Surface Shader

Surface Shader是一种高级的Shader编写方式,它抽象了底层的Shader编写细节,使得开发者可以更专注于视觉效果的实现。Surface Shader主要用于处理表面渲染的各个阶段,包括顶点处理、片元处理等。

基本概念
  • Properties: 定义了Shader的属性,比如颜色、纹理等。
  • SubShader: 定义了Shader的子着色器,可以包含多个Pass。
  • Tags: 用于标记Shader的用途,比如"RenderType"、"Queue"等。
  • CGPROGRAM 和 ENDCG: 包围着Shader的CG代码块。
使用方法示例
Shader "Custom/SimpleSurfaceShader" {
    Properties {
        _Color ("Color", Color) = (1,1,1,1)
        _MainTex ("Albedo (RGB)", 2D) = "white" {}
    }
    SubShader {
        Tags { "RenderType"="Opaque" }
        LOD 200

        CGPROGRAM
        #pragma surface surf Lambert

        struct Input {
            float2 uv_MainTex;
        };

        sampler2D _MainTex;
        fixed4 _Color;

        void surf (Input IN, inout SurfaceOutput o) {
            fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
            o.Albedo = c.rgb;
            o.Alpha = c.a;
        }
        ENDCG
    }
    FallBack "Diffuse"
}

这个示例定义了一个简单的Surface Shader,它接受一个颜色和一个纹理作为属性,然后在表面着色函数中将它们相乘,输出到Albedo通道。

Lighting

在Unity中,Lighting指的是光照效果,它影响物体表面的颜色和亮度。Unity支持多种光照模型,如标准光照模型(Standard Lighting Model)和物理基础渲染(Physically Based Rendering, PBR)。

基本概念
  • Directional Light: 方向光,模拟太阳光线。
  • Point Light: 点光源,光线从一点向所有方向发射。
  • Spotlight: 聚光灯,光线从一个点发射并在一定角度内集中。
  • Ambient Light: 环境光,影响场景中所有物体的基础亮度。
使用方法示例

在Surface Shader中处理光照通常涉及到使用内置的光照函数。例如,使用Lambert着色模型时,可以这样写:

void surf (Input IN, inout SurfaceOutput o) {
    fixed4 c = tex2D(_MainTex, IN.uv_MainTex) * _Color;
    o.Albedo = c.rgb;
    o.Alpha = c.a;

    // 计算光照
    fixed3 lightDir = normalize(_WorldSpaceLightPos0.xyz - IN.worldPos);
    fixed diff = max(0, dot(IN.worldNormal, lightDir));
    o.Emission = _LightColor0.rgb * diff * c.rgb;
}

这段代码在Surface Shader中计算了简单的Lambert光照模型,其中_WorldSpaceLightPos0是世界空间中的光源位置,IN.worldNormal是表面法线,_LightColor0是光源颜色。

要注意的是,Unity的Shader编程是一个复杂的主题,这里提供的只是非常基础的示例。在实际开发中,你可能需要根据项目需求编写更复杂的Shader代码。

扫描下方二维码,

获取更多游戏开发干货知识和学习资料~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1867097.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA期末速成库(7)第七、八章

一、习题介绍 第七章 Check Point:P251 7.2,7.4,7.16,8.2 Programming Exercise:7.10,7.14,7.26 二、习题及答案 Check Point: 7.2 When is the memory allocated for an ar…

群体优化算法---石墨烯优化算法介绍以及在期权定价上的应用(Black-Scholes模型来计算欧式期权的理论价格)

介绍 石墨烯算法是一种新兴的优化算法,灵感来自于石墨烯的结构和特性。石墨烯是一种由碳原子构成的二维蜂窝状晶格结构,具有优异的机械、电学和热学性能。石墨烯算法通过模拟石墨烯原子之间的相互作用和迁移,来求解复杂的优化问题 基本概念…

力扣每日一题 特别的排列 DFS 记忆化搜索 位运算 状态压缩DP

Problem: 2741. 特别的排列 👨‍🏫 参考题解 🍻 暴搜 ⏰ 时间复杂度: O ( N ) O(N) O(N) class Solution {public int specialPerm(int[] nums) {boolean[] visited new boolean[nums.length];return dfs(nums, 0, -1, visit…

一个Mongodb案例-使用地理信息查询酒店

学习mongodb,体会mongodb的每一个使用细节,欢迎阅读威赞的文章。这是威赞发布的第79篇mongodb技术文章,欢迎浏览本专栏威赞发布的其他文章。如果您认为我的文章对您有帮助或者解决您的问题,欢迎在文章下面点个赞,或者关…

vue3项目登录成功后根据角色菜单来跳转指定页面(无首页)

前言:需求不想要首页,登录什么角色跳转到这个角色经常使用的页面。(例如:审核者角色的人输入用户名密码成功后就自动跳转到待审核的页面,仓库管理员登录成功则自动跳转到仓库列表) 需要解决的点和想法&…

Linux笔记之Bash脚本中的EOF

Linux笔记之Bash脚本中的EOF code review! 文章目录 Linux笔记之Bash脚本中的EOF基本用法自定义结束符变量替换禁用变量替换用于脚本嵌入重定向到文件与命令组合总结 在 Bash 脚本中, EOF 通常用于定义一个多行字符串或文档块。这种技术被称为“Here Document”&a…

python基础语法 003-3 数据类型元组

1 元组 1.1 元组含义 1.1.1 元组的表示 #元组的表示方法:() names ("xiaoyun", "xiaoming") print(names)--结果------- (xiaoyun, xiaoming) 1.1.2 空元组 #空元组 names () print(type(names)) print(len(names))----------------结果--------- &l…

802.11漫游流程简单解析与笔记_Part2_02_wpa_supplicant、cfg80211、nl80211内核与驱动的关系

wpa、cfg80211、nl80211内核与驱动的关系示意图如下: nl80211和cfg80211都是内核定义的标准接口,目的是规范驱动和应用的统一调用,wpa中常出现nl80211就是通过内核的nl80211接口调用对应cfg80211的部分,进而控制驱动收发数据或切换…

禁止浏览器对input的自动填充和填充提示(适用于谷歌、火狐、Edge(原IE浏览器)等常见浏览器)

目录 1.要解决的问题2.一技能:原生属性,小试牛刀3.二技能:傀儡input,瞒天过海4.三技能:JavaScript出击,直接开大 写在前面: 如有转载,务必注明出处,否则后果自负。 1.要解…

基于STM32设计的智能家居远程调温系统(通过红外线控制空调)_75

文章目录 一、前言1.1 项目介绍【1】项目功能介绍【2】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】ESP8266工作模式配置1.3 设计的意义1.4 开发工具的选择1.5 系统框架图1.6 系统功能总结1.7 原理图二、硬件选型2.1 ESP8266-串口WIFI2.2 STM32F103C8T6开发板2.3 红外学…

已解决java.beans.IntrospectionException: 在Java Beans中内省过程失败的正确解决方法,亲测有效!!!

已解决java.beans.IntrospectionException: 在Java Beans中内省过程失败的正确解决方法,亲测有效!!! 目录 问题分析 报错原因 解决思路 解决方法 检查命名规范 验证Getter/Setter匹配性 确认访问权限 审查类型一致性 简…

charls抓包工具 mumu模拟器抓包apk

1.先安装mumu 官网添加链接描述 2.配置 设置,点进互联网,点编辑,选择手动代理 主机名写自己电脑的ip地址,端口随便,只要不被占用,一般参考其他人都是8888 3.下载charls 参考这个添加链接描述 先官网…

静态时序分析:ideal_clock、propagated_clock以及generated_clock的关系及其延迟计算规则(一)

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 理想时钟(ideal_clock)、传播时钟(propagated_clock)是两种相对的时钟,理想时钟用于时钟树综合(CTS)前,而传播时钟用于时钟树综合后。生成…

flink-触发器Trigger和移除器Evictor

Trigger 触发器 触发器作用:控制窗口什么时候除法计算。即执行窗口函数;基于WindowStream调用trigger()方法,传入自定义触发器(trigger); 每一个窗口分配器(windowAssi…

Websocket在Java中的实践——握手拦截器

在《Websocket在Java中的实践——最小可行案例》一文中,我们看到如何用最简单的方式实现Websocket通信。本文中,我们将介绍如何在握手前后进行干涉,以定制一些特殊需求。 在《Websocket在Java中的实践——最小可行案例》的基础上,…

工商业储能柜用的Acrel-2000ES储能能量管理系统-安科瑞 蒋静

概述 Acrel-2000ES储能能量管理系统,专门针对工商业储能柜、储能集装箱研发的一款储能EMS,具有完善的储能监控与管理功能,涵盖了储能系统设备(PCS、BMS、电表、消防、空调等)的详细信息,实现了数据采集、数据处理、数据存储、数据查询与分析…

数字化世界的守卫之防火墙

在这个数字化的时代,我们的电脑和手机就像是一座座繁华的城市,而病毒和黑客则是那些潜伏在暗处的敌人。但别担心,我们有一群忠诚的守卫——“防火墙”,它们日夜守护着我们的数字家园。 1. 病毒:数字世界的“瘟疫” 想象…

CNware虚拟化平台功能介绍:虚拟机业务连续性保护,确保核心业务持续运行,构筑稳健的数字防线

全球数字化转型的大潮中,虚拟化技术已成为企业IT架构的基石。据Gartner预测,到2026年,全球90%以上的组织将采用某种形式的虚拟化技术。虚拟化环境的广泛应用,不仅提升了资源利用率、降低了成本,更极大地增强了业务灵活…

PDF转成清晰长图

打开一个宝藏网址在线PDF转换器/处理工具 - 在线工具系列 点击图下所示位置 按照图下所示先上传文件,设置转换参数后点击转换,等待 等待转换完成后,可以在转换结果处选择下载地址,点击即可进行下载使用了。对比了其他几个网站的转…

在Python中使用类继承提高代码复用性使用详解

概要 在面向对象编程(OOP)中,继承是一种创建新类的方式,这些新类继承了一个或多个父类的特性。Python 中的继承允许我们定义保持代码通用性和简洁性的类层次结构。本文将详细探讨 Python 中的类继承机制,包括基本继承、多重继承、方法重写以及使用 super() 函数的技巧,并…