如何把Unity surf shader翻译为vert frag shader(懒人方法)

Unity 内置Surface着色器换到vert/frag着色器 本文出发点在于,从ASE工具导出的顶点片元着色器,需要进行重写! surface 阅读详情

起因

因为Unity URP环境下,surf shader是会失效的。

所以必须把surf shader 翻译为vert frag方式的shader。

因为不太明白surf里的Lighting 函数是怎么生效的。查阅了一些资料,终于找到了一个懒人方法。

以下就是具体的操作

一,选择要翻译的shader,点击Show generated code。

这时候就会在IDE中显示已经生成的vert frag shader,但是里面的代码有很多冗余,变体的东西。

二、我们只需把里面的surf函数、vert frag方法和关联的代码拷贝到一个新的shader文件里即可。

这里就要求操作的人有一定的shader代码基础才行。该基础的最低水平是能知道让shader代码生效、并达到想要的效果应该如何

做。

三、这时候,注意一下语法,看#ifdef #endif,括号是否完整,注意一下FallBack是否需要添加即可。

以上,翻译后的vert frag shader应该没太大问题了。

起码在standard环境下没问题。但是要完全移植到URP上,还得根据UPR的规则来。具体可以看我之前的文章或者给我评论留言!

本文参考文章:

https://blog.csdn.net/qq_36383623/article/details/105726115

卜若的代码笔记-unityshader系列-第三章:void surf()函数 第三章:void surf()函数 在本章中,我们主要介绍上一章遗留下的问题,void surf()扮演一个什么样的角色,我们应该怎么使用它? 1.1 函数的基本介绍 要想了解这个函数,我们或许得先了解一下片元着色器的着色流程 fragment shader 其中表面函数就是指void surf()函数。 请注意,这个流程是一个渲染流水线,在有些材料里面你可以看到渲染管线,其实都是... 阅读详情

相关推荐

Unity Shader入门:从渲染管线到自定义光照着色器实战

Shader是运行在GPU上的小程序,负责将3D模型数据换为屏幕像素颜色,是计算机图形学中实现视觉特效的核心技术。其工作原理基于图形渲染管线,通过顶点着色器和片元着色器等可编程阶段,控制模型的几何变换、纹理映射与光照计算。掌握Shader编程对于游戏开发、实时渲染和图形性能优化具有重要价值,能够实现从基础的材质表现到复杂的光照、折射、泛光等高级视觉效果。在Unity引擎中,开发者可以通过Surface ShaderVertex/Fragment Shader等不同抽象层级的工具,结合ShaderLab语

weixin_34319817的博客 411

(三)unity Shader之——————surface shader变为自己写的vertex&fragment Shader不受unity的动态实时点光源的影响解决方案

在写环境、植物的Shader时,原来使用的是Surface shader,出于性能的考虑要变成效果一致的vertex&fragment Shader变中遇到了一个问题。 首先我加了一个unity的标准点光源,如果都换成unity的standard shader,或者其他的surface shader(包括现在使用的环境和植物的surface shader),你会发现环境都是受点光源...

cgy56191948的博客 1440

Unity SRP渲染管线深度解析:从内置管线到URP/HDRP的Shader迁移与架构差异

在实时图形渲染领域,渲染管线是决定图形应用性能与表现的核心架构。其原理在于定义从3D场景数据到最终屏幕像素的完整处理流程,传统固定功能管线虽易用但缺乏灵活性。随着硬件发展与画质需求提升,可编程渲染管线(SRP)技术应运而生,它通过脚本化、模块化的方式赋予开发者对渲染流程的精细控制权,从而在性能优化与效果定制间取得平衡。这一技术价值在游戏开发、虚拟现实等需要跨平台适配与高质量视觉的场景中尤为凸显。Unity引擎的SRP框架正是这一趋势的典型实践,其包含的URP(通用渲染管线)与HDRP(高清渲染管线)代表了从

cigang4063的博客 511

Unity Shader表面着色器Surface Shader介绍

表面着色器是一种对艺术家友好的着色器,它不同于传统的顶点着色器和片元着色器等流程,而是添加了一层抽象,整个渲染流程的着色器被分为三个:表面着色器、光照模型和光照着色器。其中,表面着色器定义了模型表面的反射率、法线和高光等,光照模型则选择兰伯特、Phong和Bliin-Phong等模型。光照着色器负责计算光照衰减和阴影等。绝大部分时候只需要关注表面着色器,例如纹理和颜色等,光照模型是提前定义的,光照着色其由系统定义,不会轻易更改。...

weixin_42565127的博客 1099

shader 2: vertex, fragment, surf的区别

vertex shader, fragment shader, surf shader vertex shader逐个对

aalbertini的专栏 4063

Unity Shader中Lambert漫反射原理与实现详解

在计算机图形学中,光照模型是模拟虚拟场景中光线与物体交互的核心技术。Lambert漫反射模型作为最基础的光照模型,其原理基于兰伯特定律,通过计算表面法线与光源方向的点积来确定漫反射强度,为三维物体提供基本的明暗体积感。这一模型在游戏开发、实时渲染等领域具有重要技术价值,是理解更复杂光照模型(如Phong、PBR)的基石。在Unity引擎中,开发者可以通过Surface Shader快速实现Lambert光照,或手写顶点/片元着色器进行精细控制,其中涉及法线变换、光源方向计算等关键细节。掌握Lambert模型

weixin_34101229的博客 323

Unity URP着色器迁移指南:从内置管线升级到解决粉红材质问题

在计算机图形学中,着色器是控制3D物体外观的核心程序,它定义了光线与材质交互的数学计算。Unity引擎的渲染管线经历了从内置管线到可编程渲染管线(如URP)的演进,其原理在于提供了更模块化、高性能的渲染架构。这种升级的技术价值在于提升渲染效率、支持跨平台优化,并为现代图形功能(如SRP Batcher)奠定基础。应用场景广泛,涵盖游戏开发、虚拟现实和实时可视化等领域。当项目从内置渲染管线升级到通用渲染管线(URP)时,开发者常遇到“粉红材质”问题,这源于着色器代码与URP架构的兼容性问题。本文深入解析URP

weixin_33885676的博客 399

Unity PBR着色器从Build-in到URP管线迁移实战指南

在计算机图形学中,基于物理的渲染(PBR)是一种模拟真实世界光照与材质交互的技术,它通过能量守恒定律和微表面理论来确保渲染结果的物理准确性。其原理在于使用金属度、粗糙度等参数精确描述材质属性,结合环境光照与直接光照计算,实现高度真实的视觉效果。PBR的技术价值在于提供了一套标准化的材质工作流,使不同光照环境下都能保持一致的渲染表现,极大提升了美术资产的可复用性和跨项目兼容性。在游戏开发、影视制作和实时可视化等应用场景中,PBR已成为行业标准。随着渲染管线技术的演进,从Unity传统的Build-in管线迁移

weixin_30522183的博客 347

Unity SurfaceShader基础知识入门

本文主要讲解了UnitySurfaceShader的具体写法,以及几个常用的CG函数的用法。 在这里先说明一下,表面着色器将分为两次讲解,本文介绍表面着色器的基本概念和一些写法,用内置的兰伯特光照模式来进行Surface Shader的书写,而下次将介绍Surface Shader+自定义的光照模式的写法。

weixin_42565127的博客 1520

Shader学习笔记(一):Surface Shader

Surface ShaderUnity为了方便shader编写提供的特殊功能,它对底层的vertex/fragment shader做了封装,省去了一些重复代码编写的工作量。我的理解是它同时具有vertex/fragment shader的功能,只是写法上更加简洁,更容易上手。 Unity的官方manual上就提供了几个最好的学习例子,我在学习的过程中加上了注释。 简单的漫反射(Simp...

长三月的游戏开发 3744

UnityShader---SurfaceShader(模板和各种效果实现:边缘自发光、火焰流动、燃烧、法线扭曲、简单模糊、消融、区域过度、雪效果等)---17

//自定义表面着色器:自定义四个函数 Shader "Custom/39" { Properties { _Color ("Color", Color) = (1,1,1,1) _MainTex ("Albedo (RGB)", 2D) = "white" {} _BumpMap("BumpMap",2D)="bump"{} _Amount("Amount",Range(-0.1,0.1))=0 } SubSh

weixin_41155760的博客 1287

Unity Shader 小功能之 透明

1.在Properties块中添加一个新的property,这使得我们可以全局控制透明度。 Properties { _MainTex ("Base (RGB)", 2D) = "white" {} _TransVal ("Transparency Value", Range(0,1)) = 0.5 } 2.改变渲染队列 T

AK41君的专栏 3496

Unity Shader (三)Surface Shader机制

一直以来,Unity Surface Shader背后的机制一直是初学者为之困惑的地方。Unity Surface ShaderUnity 3.0的时候被开放给公众使用,其宣传手段也是号称让所有人都可以轻松地写shader。但由于资料缺乏,很多人知其然不知其所以然,无法理解Unity Surface Shader在背后为我们做了哪些事情。   前几天一直被问到一个问题,为什么我的场景里没有灯...

居安思危,游戏人生。 1670

Unity SurfaceShader】学习笔记(八)光照模型

LitSphere(Matcap) 发光球体光照模型就是将发光球体的纹理映射在球体上,来实现光照效果。这可以创造一些效果细腻的发光球体效果,但是它不受光照影响,改变光照的方向,球体的光照效果不变。如果要在固定视角的场景里制作细腻的球体光照,这会是一个不错的选择。 准备小球纹理贴图: 定义Properties: Properties { _MainTint ("Diffuse Tint", Color) = (1,1,1,1) .

第7维度 - 日常笔记 742

Unity Shader 详细自学(三)

FallBack "Diffuse" 遍历所有的subshader,这块显卡都不支持时,用于回滚到一指定的shader,如“Diffuse”。 其实FallBack还有一个作用,就是影响阴影的投射,unity会在本shader中找一个阴影投射pass,这当然这并不需要我们去实现这个pass,如果你设置了FallBack,那么FallBack会使用unity内置的一个通用阴影pass,所以设置FallBack的设置是很重要的。 ...

Sevol_Y 1193

UnityShader入门精要学习笔记】第十七章 表面着色器

表面着色器实际上就是对顶点片元着色器上的一层抽象,使用表面着色器可以用一种更容易理解的方式编写shader,不需要考虑前向渲染路径还是延迟渲染路径,场景中的光源等等等等要素。

milu_ELK的博客 1928

Unity Shader 学习笔记(29) 表面着色器(Surface Shader

Unity Shader 学习笔记(29) 表面着色器(Surface Shader)基本结构 参考书籍:《Unity Shader 入门精要》 官网API:Writing Surface Shaders Unity Shader 学习笔记(3)Unity Shader模板、结构、形式 【浅墨Unity3D Shader编程】之六 暗黑城堡篇: 表面着色器(Surface S

l773575310的博客 2045

Unity Shader 水面、波浪、折射、反射(使用表面着色器)

Unity Shader 水面、波浪、折射、反射(使用表面着色器)

qq_21315789的博客 1万+
上一篇: Unity的URP的自定义后处理效果
下一篇: Unity Tilemap 添加相应的法线贴图、高光贴图等等(超便捷方法)
黄琅
博客等级 码龄15年 104粉丝 25原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值