精华内容
下载资源
问答
  • doc
    千次阅读
    2021-07-17 01:17:15

    smart-doc 使用说明

    官方使用介绍:smart-doc功能使用介绍 - 上官胡闹的个人空间 - OSCHINA - 中文开源技术交流社区

    官方配置介绍:smart-doc-maven-plugin: smart-doc官方maven插件 (gitee.com)

    官方wiki:HOME - Wiki - Gitee.com

    对于smart-doc,官方是有3种方式的:

    • 单元测试生成(不推荐)
    • maven插件生成
    • gradle插件生成

    特殊功能

    支持JSR303规范

    支持fastjson和Jackson字段注解如:

    • @JSONField(serialize = false) – 字段忽略
    • @JSONField(name = “create_time”) – 字段名称

    请求参数忽略(1.5 + 版本)

    /**
         *  创建时间
         *  @ignore
         */
    private Timestamp createTime;
    

    参数模拟

    它会自动生成一个模拟参数,不用任何配置

    文档变更记录

    需要在smart-doc.json里增加配置:“allInOne”: true

    {
      "outPath": "D://md2",
      "allInOne": true
    }
    
    

    我们也可以自己设置它的一个变更记录,增加这个配置

     "revisionLogs": [{ //设置文档变更记录,没有需求可以不设置
          "version": "1.0", //文档版本号
          "revisionTime": "2020-12-31 10:30", //文档修订时间
          "status": "update", //变更操作状态,一般为:创建、更新等
          "author": "author", //文档变更作者
          "remarks": "desc" //变更描述
      }],
    

    而这个配置,不需要配置"allInOne": true

    字段版本记录

    使用原生注释:@since

     /**
         * @since 1.0
         * 用户名称
         */
        private String subUserName;
    
    

    多模块配置

    smart-doc之前说过是无侵入,通过注释来生成的API文档,所以对于多模块服务,无法获取到注释,需要获取到源代码才能进行分析,而对于这种情况,smart-doc也有手段解决。

    1. ApiConfig配置

    ApiConfig config = new ApiConfig();
    //以前的版本为setSourcePaths,SourceCodePath为SourcePath
    config.setSourceCodePaths(
            SourceCodePath.path().setDesc("本项目代码").setPath("src/main/java"),
            //smart-doc对路径自动会做处理,无论是window合适linux系统路径,直接拷贝贴入即可
            SourceCodePath.path().setDesc("加载外部项目源码").setPath("E:\\Test\\Mybatis-PageHelper-master\\src\\main\\java")
    );
    

    根据官网所说,后续版本不需要再手动配置,而这个功能我还没测试,其最终效果不得而见。

    2. maven的classifier指定源码包

    <!--依赖的库-->
    <dependency>
        <groupId>com.github.shalousun</groupId>
        <artifactId>common-util</artifactId>
        <version>[最新版本]</version>
    </dependency>
    <!--依赖库源码-->
    <dependency>
        <groupId>com.github.shalousun</groupId>
        <artifactId>common-util</artifactId>
        <version>[最新版本]</version>
        <classifier>sources</classifier>
        <!--设置为test,项目发布时source不会放入最终的产品包-->
        <scope>test</scope>
    </dependency>
    

    而这种方式在打包需要增加一个插件,才能在打包上将源码包打包的仓库

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-source-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
            <execution>
                <phase>package</phase>
                <goals>
                    <goal>jar-no-fork</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    

    文档输出

    默认我们是配置smart-doc.json的一个配置文件,里面必填参数就是“outPath”,

    {
      "outPath": "这里可以写resources下面的路径,在SpringBoot启动后就可以进行访问",
      "allInOne": true
    }
    

    路径配置好像不支持相对路径,所以使用绝对路径,但还有一个方法,就是使用代码:

    注意这里的postman和HTML只能输出一个

     @org.junit.Test
        public void smartDocApiConfig() {
            ApiConfig config = new ApiConfig();
            //导出postman建议将server设置成这样,然后在postman中建立一个server环境变量,调试时只需根据实际服务器来修改server的值。
            config.setServerUrl("http://{{server}}");
    
            config.setAllInOne(true);
            // 文档输出路径
            config.setOutPath(System.getProperty("user.dir") + DocGlobalConstants.FILE_SEPARATOR + DocGlobalConstants.HTML_DOC_OUT_PATH);
            // postman JSON输出(1.8+)
    //        PostmanJsonBuilder.buildPostmanCollection(config);
            // html 文档输出
            HtmlApiDocBuilder.buildApiDoc(config);
        }
    

    服务配置

    spring.resources.add-mappings=false只要配置了这个,就不能访问静态资源了,但如果是对于单体服务,这个配置不能改,所以,可能需要委婉一点处理。

    smart-doc自定义注释

    ignore注释,上面有提到过

    tag名称描述
    @ignoreignore tag用于过滤请求参数对象上的某个字段,设置后smart-doc不输出改字段到请求参数列表中。
    @required如果你没有使用JSR303参数验证规范实现的方式来标准字段,就可以使用@required去标注请求参数对象的字段,标注smart-doc在输出参数列表时会设置为true。

    配置请求参数和详情体包装

     "responseBodyAdvice":{ //自smart-doc 1.9.8起,ResponseBodyAdvice统一返回设置,可用ignoreResponseBodyAdvice tag来忽略
           "className":"com.power.common.model.CommonResult" //通用响应体
      },
      "requestBodyAdvice":{ //自smart-doc 2.1.4 起,支持设置RequestBodyAdvice统一请求包装类
           "className":"com.power.common.model.CommonResult"
      },
    

    smart-doc api如何做接口测试

    做测试,smart虽然没有提供,但是,它提供了与其他工具的对接,这点还是不错的,毕竟专业的还是专业的。

    1. 导入postman

    导入postman需要一个JSON文件,在smart-doc 1.7+ 是支持的。

    那么我们在去看看官方的配置说明:

    需要使用java代码来构建json:

     @org.junit.Test
        public void smartDocApiConfig() {
            ApiConfig config = new ApiConfig();
            //导出postman建议将server设置成这样,然后在postman中建立一个server环境变量,调试时只需根据实际服务器来修改server的值。
            config.setServerUrl("http://{{server}}");
    
            config.setAllInOne(true);
            // 文档输出路径
            config.setOutPath(System.getProperty("user.dir") + DocGlobalConstants.FILE_SEPARATOR + DocGlobalConstants.HTML_DOC_OUT_PATH);
            // postman JSON输出(1.8+)
            PostmanJsonBuilder.buildPostmanCollection(config);
            // html 文档输出
    //        HtmlApiDocBuilder.buildApiDoc(config);
        }
    

    将生成的JSON文件导入postman,进行测试。

    1. 在smart-doc里我们配置了http://{{server}},这个server是作为postman中的环境变量

    2. 在postman中,点击右上角配置,或是在左上角的new都可以新建环境变量

      image-20210523142954993

    3. 到这基本已经可以了,如果要做到自动化测试,还需要配各种变量和脚本,但根据现在的情况已经够用了。需要详细的可以到网上查看相关配置和语法。

    2.对接torna

    torna属于开源项目,需要下载部署

    部署

    部署方式可以是jar部署,和docker部署,详细的步骤在:torna使用步骤

    对于现在的项目完全使用jar包方式的没问题,毕竟都要下载。

    1. 导入数据库,复制官方的mysql.sql

      mysql -u root -p

      source ./mysql.sql

    2. 修改application.properties,mysql的连接

    3. 运行startup.sh

    登录

    1. torna超级管理员登录

      admin@torna.cn/123456
      

      image-20210523151450918

      API文档支持swagger和postman

      image-20210523151544429

      image-20210523151637751

      对接

      最后重点的一步来了,创建key

      对接需要3个key:

      • AppKey和secret

        空间列表,选择一个空间

      image-20210523151859970

      image-20210523151921563

      • AppToken

      这个需要进入项目,然后创建一个模块,然后找到openApi

      image-20210523153125889

    smart-doc对接

    只需要配置一些配置就行

    {
      "outPath": "D://md2",
    //  "allInOne": true,
    
      "serverUrl": "http://{{server}}",
      "revisionLogs": [{ //设置文档变更记录,没有需求可以不设置
        "version": "1.0", //文档版本号
        "revisionTime": "2020-12-31 10:30", //文档修订时间
        "status": "update", //变更操作状态,一般为:创建、更新等
        "author": "author", //文档变更作者
        "remarks": "desc" //变更描述
      }],
      "isStrict": false, //是否开启严格模式
    //  "packageFilters": "",//controller包过滤,多个包用英文逗号隔开
      "projectName": "smart-doc",//配置自己的项目名称
      "appKey": "20210523846044457521381376",// torna平台对接appKey,, @since 2.0.9
      "appToken": "a3f747cf83b94eb7927abd1e578fc87c", //torna平台appToken,@since 2.0.9
      "secret": "TDZQFAb*n7aAwY,M6#V68PO3BcobQTGY",//torna平台secret,@since 2.0.9
      "openUrl": "http://localhost:7700/api",//torna平台地址,填写自己的私有化部署地址@since 2.0.9
      "debugEnvName":"test", //torna测试环境
      "debugEnvUrl":"http://127.0.0.1"//torna
    }
    
    

    image-20210523154549367

    更多相关内容
  • │ 1.1 可行性研究报告框架.doc │ 1.10会议通知表.doc │ 1.10附表一: 通知回执表.doc │ 1.10附表二:回执统计表.doc │ 1.11会议签到表.doc │ 1.11附表一:参会人员统计表.doc │ 1.12会议资料明细表.doc │ ...
  • Spire.Doc 去水印版本.

    2019-04-25 17:01:06
    Spire.Doc 去水印版本文档.下载解压然后引用即可使用!!!
  • spire.doc API文档

    2018-02-09 15:04:25
    spire.doc API文档 spire.doc API文档spire.doc API文档
  • 用python将doc文件批量转为docx文件,用python将doc文件批量转为docx文件,
  • Spire.Doc API 帮助文档

    热门讨论 2016-12-02 14:56:25
    Spire.Doc API 为Spire.Doc 帮助文档,详细罗列Spire.Doc 控件提供的各种类,接口以及属性。对于如何了解和使用产品,有很好的指导意义。
  • 浏览器在线预览文件(支持pdf、excel、ppt、doc、jpg、png格式) PS:excel、ppt、doc格式只支持公网地址,如:http://xxx/x.odc
  • 1、实战问题星主,请教一下,我在painless中使用doc的形式访问字段,如if(doc['xxx'].value ...)报错了,是painless中不允许使用doc吗?我看官方示例和...

    1、实战问题

    星主,请教一下,我在painless中使用doc的形式访问字段,如if(doc['xxx'].value ...)报错了,是painless中不允许使用doc吗?

    我看官方示例和您之前的博客都是用ctx,请问 ctx 和 doc, params,params._source之间有什么区别吗? 我知道doc直接从内存获取,params从磁盘获取,但是对于上述4个的区别不是很了解,也没有查询到相关的资料......

    ——来自《死磕Elasticsearch 知识星球》

    上述问题不止一次被问到,我自己在使用 painless 脚本的时候,也会遇到上述困惑。

    今天,我们把这几种的区别梳理清楚。

    2、关于 Elasticsearch painless 脚本

    如果对 painless “无痛”脚本不了解的,推荐阅读:

    1. 干货 | Elasticsearch7.X Scripting脚本使用详解

    2. Elasticsearch 预处理没有奇技淫巧,请先用好这一招!

    3. Elasticsearch 脚本安全使用指南

    4. Elasticsearch 线上问题实战——如何借助 painless 更新时间?

    3、 从应用层面解读:ctx、doc、_source 的区别?

    3.1 场景1:ingest 管道预处理脚本使用 ctx

    上例子:

    PUT _ingest/pipeline/check_url
    {
      "processors": [
        {
          "set": {
            "if": """ctx.href.url!=null && ctx.href.url.startsWith("http")""",
            "field": "href.insecure",
            "value": true
          }
        }
      ]
    }
    POST test/_doc/1?pipeline=check_url
    {
      "href": {
        "url": "http://www.elastic.co/"
      }
    }
    POST test/_search

    解读如下:

    上面的脚本通过 ingest painless 脚本实现了判定:

    ctx.href.url 如果非空且 ctx.href.url 以 http 开头,则:href.insecure 设置为:true。

    159d4c24af3bdb926d2ccff1f9671e18.png

    官方文档地址:

    https://www.elastic.co/guide/en/elasticsearch/painless/7.15/painless-ingest-processor-context.html

    3.2 场景 2:update/update_by_query 脚本使用 ctx._source

    POST test/_doc/2
    {
      "tags": "green"
    }
    GET test/_doc/2
    POST test/_update/2
    {
      "script": {
        "source": "if (ctx._source.tags.contains(params.tag)) { ctx.op = 'delete' } else { ctx.op = 'none' }",
        "lang": "painless",
        "params": {
          "tag": "green"
        }
      }
    }
    GET test/_doc/2

    上面的例子解读如下:

    如果标签字段:tags 包含:“green”,则 执行删除操作;否则保持现状。

    4363584fd6ee6899b057ec66cf4a5fab.png

    官方文档地址:

    https://www.elastic.co/guide/en/elasticsearch/painless/7.15/painless-update-context.html

    3.3 场景3:reindex 脚本使用 ctx._source

    上例子:

    POST test-04/_doc/1
    {
      "foo": "bar",
      "views": 1
    }
    POST _reindex
    {
      "source": {
        "index": "test-04"
      },
      "dest": {
        "index": "test-new-04"
      },
      "script": {
        "source": "if (ctx._source.foo == 'bar') {ctx._source.views++; ctx._source.remove('foo')}",
        "lang": "painless"
      }
    }
    GET test-new-04/_search

    如上 reindex 脚本解读如下:

    如果源索引:test-04 字段 foo 内容=‘bar’,则 reindex 后删除 ‘foo’ 字段 且 views 取值加 1 。

    f31b90a25e07701b61d6a4d2113954f8.png

    3.4 场景4:search 脚本使用 doc['XXX']

    DELETE test_03
    PUT test_03
    {
      "mappings": {
        "properties": {
          "views": {
            "type": "integer"
          }
        }
      }
    }
    POST test_03/_doc/1
    {
      "views": 30
    }
    GET test_03/_search
    {
      "script_fields": {
        "rnd_views": {
          "script": {
            "lang": "painless",
            "source": """
    java.util.Random rnd = new Random();
    doc['views'].value+rnd.nextInt(1000);
    """
          }
        }
      },
      "query": {
        "match_all": {}
      }
    }

    如上search 脚本解读如下:

    对观看数 views 在检索的时候加了随机值。

    106451a84d6f05c39d004c27064b2efe.png

    官方文档:

    https://www.elastic.co/guide/en/elasticsearch/painless/7.15/painless-field-context.html

    3.5 应用层面小结

    从上面的应用层面,我们能看出区别:

    • ingest 场景,使用:ctx.XXX;

    • update / update / update_by_query / reindex 场景,使用:ctx._source;

    • search和聚合场景,使用:doc['value']。

    当然,Elasticsearch 远不止上面这些场景,更多推荐阅读:

    b5076bb2958f78e73718231270d0d104.png

    4、那遇到复杂的脚本处理咋办呢?

    4.1 获取字符串中的子串

    举例如下:求字符串中的某子串,java 语法中的 substring 还能用吗?

    如果使用:ingest processor 预处理方式,怎么查官方是否支持,我相信是大家关注的问题。

    因为:支不支持可以试,但试是穷举的方式,时间复杂度为 O(n);

    能查看官方明确说支持,是最快的方式,时间复杂度为O(1)。

    对于我们程序员来说,怎么快,我们就怎么来。

    来吧,一步步走一遍,其他复杂例子原理同。

    4.1.1 第一步,找 shard API。

    细节 API 入口文档。

    f59049af57a92cb9f33447b0d8c0e8e0.png

    https://www.elastic.co/guide/en/elasticsearch/painless/master/painless-api-reference-shared.html

    4.1.2 第二步,找到 string

    如上是 7.13 版本截图,早期版本如:7.2 版本还有 string类, 7.13 已没有。

    8890011577cbcf81b17f9edd1471b498.png

    4.1.3 第三步:找 substring

    dddaf4382b56f86ee996b2caa8cc4796.png

    4.1.4 第四步:找 java API

    这就到了 oracle 官网了。

    bc9b8efc30f3df37e1da36ee77ea019d.png实践一把:

    POST test-05/_doc/1
    {
      "title": "hello world"
    }
    PUT _ingest/pipeline/substring_pipeline
    {
      "processors": [
        {
          "script": {
            "lang": "painless",
            "source": """
    ctx.sub_title = ctx.title.substring(0,5);
    """
          }
        }
      ]
    }
    POST test-05/_update_by_query?pipeline=substring_pipeline
    {
      "query": {
        "match_all": {}
      }
    }
    POST test-05/_search

    上面脚本是借助 ingest pipelie 实现:取子串内容,源串为:“hello world”,取出后的子串为:“hello”。

    核心步骤再结合上面的截图解释一下:

    -步骤1:确认 string 类型支持取子串;

    -步骤2:找到取子串的语法:substring;

    -步骤3:通过 ingest 预处理方式实现取子串,借助 ctx 组合 substring 实现。

    9f98f31b9d7cf8bba5c649614cf6d074.png

    4.2 获取日期格式的年份

    POST test_06/_bulk
    {"index":{"_id":1}}
    {"m_type":1,"create_time":"2015-01-01T12:10:30Z","update_time":"2021-07-01T12:10:30Z"}
    GET test_06/_mapping
    GET test_06/_search
    {
      "script_fields": {
        "rnd_views": {
          "script": {
            "lang": "painless",
            "source": """
    doc['create_time'].value.getYear()
    """
          }
        }
      },
      "query": {
        "match_all": {}
      }
    }

    如上实例,借助 painless 脚本实现了获取日期类型数据的年份,是借助 getYear( ) 的函数实现的。

    cfe86e1a2265dfd3157146195de03880.png

    5、小结

    Painless 脚本在数据预处理、更新、reindex、获取字段方面应用广泛。

    因业务场景的不同,脚本使用方式也会有不同。大家使用过程中要根据使用方式的不同,来决定ctx、doc、_source 的选型。

    希望本文对你的脚本实战选型有所帮助,也欢迎留言交流你的脚本使用心得......

    推荐

    1、重磅 | 死磕 Elasticsearch 方法论认知清单(2021年国庆更新版)

    2Elasticsearch 7.X 进阶实战私训课(口碑不错)

    95e89afec30c8aed24dd2c4075c7b6fd.png

    更短时间更快习得更多干货!

    已带领72位球友通过 Elastic 官方认证!

    可能是中国学习氛围最好的 Elastic 圈子!

    文字教程、视频教程、打卡氛围一应俱全。

    全球近 1500+ 球友等你 >>

    a7618fd4848a746dc81d5dc91e3bdade.gif

    比同事抢先一步学习进阶干货!

    展开全文
  • 1.背景 这几天玩了一个美术表现不错的游戏,忍不住想扒点模型资源和效果。 直接用UnityStudio解包拿到fbx。 但是一起解压出来的三张贴图,一张普通贴图,一张法线,还有一张就难住我了。...RenderDoc之前我只

    1.背景

    这几天玩了一个美术表现不错的游戏,忍不住想扒点模型资源和效果。

    直接用UnityStudio解包拿到fbx。
    但是一起解压出来的三张贴图,一张普通贴图,一张法线,还有一张就难住我了。
    在这里插入图片描述
    这个绿色的是什么用处的,在群里问了一圈小伙伴也表示不知道?

    没有什么头绪,那就只好用GPU分析软件来调试。

    上一次用GPU分析软件还是2年前了,用的是Mali的MGD,需要搭配Root的手机。
    现在手上只有一台自用红米Note8,没有Root,于是本次使用群大佬推荐的RenderDoc。
    本文转自https://huutu.blog.csdn.net/article/details/111659729

    RenderDoc之前我只在PC上用过,没想到对Android支持也如此完善,有多完善,往下看就知道。

    2.目标

    这次分析,主要解决3个疑问:
    1.美人鱼的三张纹理中,绿色的那张是什么用途?
    在这里插入图片描述本文转自https://huutu.blog.csdn.net/article/details/111659729
    2.游戏中bloom的方式
    在这里插入图片描述
    3.冰冻特效如何制作
    在这里插入图片描述

    3.RenderDoc调试分析基础

    官网:https://renderdoc.org/

    GameDevTools已经集成,搜索 RenderDoc即可下载运行。
    GameDevTools是一套游戏开发常用工具集,输入关键词即可找到想要的工具。
    目前托管在Github:https://github.com/ThisisGame/GameDevTools

    安装后打开,界面如下:本文转自https://huutu.blog.csdn.net/article/details/111659729
    在这里插入图片描述

    3.1 连接Android手机(无需root)

    手机开启调试模式,打开AndroidStudio看logcat是否正常输出Log,确认连接OK。

    点击RenderDoc左下角,切换到手机进行连接。
    在这里插入图片描述本文转自https://huutu.blog.csdn.net/article/details/111659729
    选择手机之后,会通过adb,往手机上安装一个RenderDocCmd的插件app,然后启动。

    RenderDocCmd hook了Android的 gles渲染接口,然后将数据回传到PC端的RenderDoc。

    在这里插入图片描述
    上图表示正在启动手机上的RenderDocCmd。

    在这里插入图片描述
    上图表示手机上的RenderDocCmd已经启动成功,可以开始调试了。

    同时,你的手机上应该是这样的:
    在这里插入图片描述

    3.2 调试目标游戏

    本文转自https://huutu.blog.csdn.net/article/details/111659729
    在这里插入图片描述按上图选择目标游戏启动Activity。

    在这里插入图片描述选择好之后,手机会断开连接。
    重新选择手机连接。

    点击Launch按钮,开始调试目标游戏。
    一般都会收到下图错误。

    在这里插入图片描述
    这是因为,目标游戏是打的Release模式APK,而不是Debug模式的。

    那怎么办呢?
    不要急,RenderDoc为我们提供了一键重新打包服务。

    来一番骚操作。

    首先,选择另一个游戏,然后Launch,应该也是上面的错误。
    然后再选择目标游戏。

    这样来回选择,直到选择目标游戏的时候,出现下图的提示。

    在这里插入图片描述
    本文转自https://huutu.blog.csdn.net/article/details/111659729

    点击黄色区域,就会自动对选中的游戏进行重新打debug包了。

    在这里插入图片描述
    重新打包完成之后,再次点击 Launch,这次一定成功,目标游戏在手机上自动运行起来了。

    RenderDoc界面也发生了变化。

    在这里插入图片描述
    点击箭头所指按钮,即可截取当前帧所有渲染事件。

    在这里插入图片描述
    截取的这一帧数据,显示在列表区域中。

    此时截取的这一帧数据,仍然保存在手机上,一旦手机断开,就不可用。
    所以最好立即保存到电脑磁盘中。 对封面图片右键,选择
    save,然后找个地方存起来。

    双击封面图片,打开详细Drawcall列表。

    在这里插入图片描述左侧列表中,就是每一次Drawcall。
    中间的大图默认就是当前Drawcall后的效果。
    右边的小图是输入输出。本文转自https://huutu.blog.csdn.net/article/details/111659729

    和Unity的FrameDebuger类似,其实所有的GPU分析工具都差不多。

    4.RenderDoc分析具体场景

    下面使用RenderDoc来分析开始提到的3个问题。

    4.1 美人鱼的三张纹理中,绿色的那张是什么用途?

    在RenderDoc中开始调试目标游戏,玩一会儿游戏,等到出现美人鱼的时候,截取一帧数据进行分析。
    在左侧渲染事件窗口,鼠标单击,找到渲染美人鱼模型的地方。

    在这里插入图片描述当前界面示意如上图。
    右侧Inputs纹理列表,表示当前提交的纹理资源,以及shader变量名字。
    从变量名字,就可以看出这个纹理的作用。

    绿色的纹理,传递到shader的MetallicGlossMap变量,说明这是一张金属光泽的贴图。

    其他贴图名称及作用
    BumpMap 凹凸贴图(用来呈现衣服褶皱之类的凹凸效果
    AlphaMask 不透明度贴图(可以让你的服装呈现半透明状态)
    MetallicGlossMap 金属反光度贴图(影响质感跟光泽度显示的一张贴图)

    这个名称很熟悉,在Unity Standard Shader里,就有。
    那么不管目标游戏是不是用Unity Standard Shader,我这里就先用了。
    在这里插入图片描述
    将绿色贴图,拖到 Metallic里。
    效果如下:
    在这里插入图片描述

    4.2 游戏中bloom的方式

    Bloom 俗称全屏泛光,就是物体周围有一层光晕的效果,其实就是近视眼不带眼睛看灯的感觉。
    本文转自https://huutu.blog.csdn.net/article/details/111659729
    简单介绍Bloom就是,先普通渲染一次,然后渲染亮度高的物体一次并进行若干次高斯模糊,然后将两次渲染结果混合。

    对目标游戏截取一帧进行分析。

    步骤1:将普通渲染结果输出到Texture,将其作为输入,计算出较亮部分,输出到Texture。
    在这里插入图片描述
    具体是怎么实现的呢,切换到渲染流水线选项卡 Pipeline State。
    在这里插入图片描述
    后期特效都是在FS中完成,所以这里查看fs shader代码即可。
    按图中,第4步,点击Edit查看fs shader代码。
    在这里插入图片描述继续按照上面步骤1的方式,对左侧列表渲染事件进行查看。
    总结Bloom步骤如下:

    在这里插入图片描述最终效果
    在这里插入图片描述

    4.3 冰冻特效如何制作

    步骤和上面一样,在游戏中出现冰冻效果时,截取一帧。
    找到冰冻效果最开始的EID 1684,按顺序分析。
    在这里插入图片描述

    值得注意的是,这里输出到FBO 尺寸比我的手机尺寸小,这是游戏自动降低画质了。

    总结步骤如下:本文转自https://huutu.blog.csdn.net/article/details/111659729

    在这里插入图片描述如果要还原效果,就参考Pipeline中给的Shader,在Unity里重写一遍就好。
    在这里插入图片描述

    5.总结

    掌握一点OpenGL基础之后,就可以尝试去分析其他游戏的渲染流程,扶着鹰酱过河。RenderDoc又给我们提供了极大的便利,调试其他游戏更加方便,实乃学习必备神器。

    展开全文
  • renderdoc的使用

    万次阅读 多人点赞 2021-01-14 16:12:22
    renderdoc可以用来捕获帧渲染情况,排查一些GPU渲染、资源规格等问题。 下面讲述一些该软件连接真机调试使用。 一、下载安装renderdoc 软件的下载地址:https://renderdoc.org/可直接点击下载即可。该软件是开源...

    renderdoc可以用来捕获帧渲染情况,排查一些GPU渲染、资源规格等问题。

    下面讲述一些该软件连接真机调试使用。

    一、下载安装renderdoc

    软件的下载地址:https://renderdoc.org/可直接点击下载即可。该软件是开源免费的,不用破解。

    下载后直接安装即可使用。

    二、打开使用renderdoc

    打开界面后,默认的界面布局如下图所示,(这里我已经设置了黑色主题,可以忽略这点),renderdo中主要的窗口有Texture Viewer(纹理查看器)、Event Browser(事件浏览器)、API Inspector(API检查器)、Timeline Bar(时间轴)、Pipeline State(管道状态)、Mesh Viewer(网格查看器),后续会对这几个主要窗口功能进行介绍。

    renderdoc可以启动电脑上的EXE应用程序以及移动机器上的app。启动EXE文件就比较简单,

    在launch Application窗口下,填入Executable Path参数,点击如下图的按钮打开window文件窗口,然后选择需要启动的exe应用程序,最后点击Launch按钮即可启动程序。

    下面讲一下如何启动Android端的app,目前renderdoc应该是不支持iOS的。

    renderdoc连接Android设备调试的步骤:

    注意:测试的目标apk要是开启debug模式的包才能连接

    (1)、使用USB连接上Android移动手机;

    (2)、Android机器上设置为开发者模式,并开启允许USB调试

    (3)、在renderdoc界面的左下角下面点击Replay Context:Local,会弹出一个列表,一个是你连接上的Android机器,local是本地电脑的。我们这里选择Android机器选项。

    选择后,右边会有一行文本提示:Remote server ready,说明远程连接已经成功。

    同时你的手机上还会显示安装一个renderdoc的调试程序,点击允许安装即可。安装后,手机上会打开运行一个绿色的renderdoc的主界面,说明已经成功了,退出即可。

    (4)、连接成功后,将手机上的apk包加入到Executable Path中。然后点击Launch启动app即可。(在弹出的窗口中,显示了手机上所有已经安装的包列表,如果你觉得包很多,找起来不方便,可以在【3】这个地方输入你的debug包名进行搜索能快速找到目标程序。)

    (5)、启动成功后,界面会变成如下图所示,并且手机上会启动目标app。此时手机上可以正常跑你的app功能了。

    (6)、抓帧操作,点击capture frame immediately后,下面的列表中会出现一幅图片,双击图片就可以加载到刚刚抓取的这一帧GPU渲染的所有内容了。

    容易遇到的问题:

    (1)在点击Launch启动时,容易出现如下的报错。

    排查步骤:

    先根据提示打开diagnostic log窗口查看一下报错的原因;点击【window】——【Diagnostic Log】

    在log窗口中,我们看到了有红色的报错,

    这时可以尝试重新连接或者重启renderdoc看看。我这边重启renderdoc并重新连接就可以了。

    renderdoc连接unity调试的步骤

    1、在unity中启动后,在game窗口中右击选择Load Renderdoc

    2、 启动游戏,在game窗口下右边的小人头按钮。点击后,会启动renderdoc软件(前提是要按照了renderdoc)。

    3、启动后,会发现renderdoc里面有个localhost的连接窗口,说明连接unity成功了。测试正常跑游戏,跑到目标测试界面后,点击renderdoc里面的Capture Frame Immediately进行抓帧。

    4、抓帧后,会在Captures collected下显示该界面的图片,鼠标点击该图片进行数据加载,加载完后的界面图下所示:

    二、Renderdoc布局

    renderdoc的布局是可以自定义的,可以根据我们自己的使用习惯来自行排版,这里我就不多少,这里我介绍几个重要的窗口。

    Texture Viewer(纹理查看器):纹理查看器可以查看所有输入、输出的纹理,包括pvrtc, 纹理分片和表面。

    纹理查看器列表,在文理查看器中,列出了所有捕获了的纹理。

    选中点击某一个纹理,在中间的展示中显示该纹理的资源图片。

    在图片中右击后,会在pixel context里面显示该部分的局部像素内容。

    寻找要 debug 的 pixel 和 drawCall。可以通过线选择要debug的pixel,然后通过pixel history快速定位到要debug的drawCall

    在renderdoc中查看某一帧的纹理名字,操作如下动图所示。左边定位是那一帧,右边显示该帧的纹理渲染情况,最右边的input窗口下会显示这一阵所有包含的所有纹理列表,并且有显示纹理的名字,这对于我们查看定位纹理提供了帮助。

    Pipeline State窗口

    pipeline窗口可以查看管道渲染状态,在窗口中有一条链状顺序图,其中我们常用到的有VS、PS两个,分别表示定点着色器和像素着色器。如下动图,在定位某一个drawcall后,来到pipeline窗口中,选择VS查看定点着色数据情况,窗口里面列出所有该drawcall下的shader文件,贴图资源(如果没有显示的话就点一下【show Unused Items】按钮显示出来),如果想查看shader的话,可以点击view或者edit按钮查看shader的代码内容。

    在PS像素着色其中,可以看到某一帧所加载的纹理列表,列表有有纹理的名字,纹理的类型,纹理的长宽尺寸,format(纹理压缩格式)。通过长宽可以粗略计算纹理的在内存的大小范围,公式是:(长*宽)/(1024*1024)/(32/8),之所以说是粗略,是因为考虑到纹理有些会使用到纹理压缩,如果使用了压缩,那么实际的大小肯定会小于这个估算的结果的。

    点击Resource下的资源后面的链接图标按钮,会切到Parameter Inspecter窗口,在Parameter下会显示该纹理资源的属性信息,其中有名字以及该在内存中的大小。可以使用这种方式准确查看纹理的大小情况。

    Mesh View:查看模型网格、顶点信息

    这个功能主要查看当前帧先模型的网格、顶点信息可以查看模型上每个顶点的位置和进行空间转化后的顶点位置信息。

    结语:

    renderdoc的工具能够查看某一帧的渲染情况,包括纹理情况、网格情况、渲染时间、一帧的渲染过程等内容。

    通过renderdoc,可以查看到场景具体的纹理、shader等内容,这对于问题的排查定位很有帮助,其中纹理可以在着色器里面查看具体的名字和在属性窗口中查看纹理的具体大小,shader可以查看到具体的代码内容且可以进行编辑。

    同时renderdoc可以查看每一帧的drawcall调用情况。当然,renderdoc的功能远不止这些,不过鉴于笔者的水平问题,就先展开讲述这么多,后续等笔者学习到更加深入的内容再做补充。

     

    展开全文
  • Lucene8.0新特征 DocValues改进

    千次阅读 2018-12-25 13:28:33
    Lucene8.0新特征预告,继续优化DocValues,提升DocValues随机访问的性能。进一步讨论IndexedDISI的实现细节,以及如何服务DocValues。
  • 华为软件项目需求规格说明书.doc

    热门讨论 2016-06-24 16:25:49
    华为软件项目需求规格说明书.doc ,主要用于写模板指导。
  • Python百度文库爬虫之doc文件

    千次阅读 2020-04-27 21:55:55
    Python百度文库爬虫之doc文件 说明:此文件是在爬取txt文件下的基础进行的,因此重复内容会一笔带过,不懂请看前面爬取txt文件链接 对于文件的所有类型,我都会用一篇文章进行说明,链接: Python百度文库爬虫之...
  • Doc2Vec模型的介绍与gensim中Doc2Vec的使用

    千次阅读 多人点赞 2019-09-28 09:00:41
    文章目录一、Doc2Vec模型1 、PV-DM2 、PV-DBOW二、gensim实现1、gensim实现Doc2Vec(IMDB数据集)2、gensim实现Doc2Vec(中文数据集)三、总结四、程序编写时遇到的错误:gensim包中相关函数说明: 一、Doc2Vec模型...
  • Java程序中Doc(文档)注释详解

    千次阅读 多人点赞 2021-10-28 22:06:11
    没人会喜欢一个不写注释的程序员,当然,也没有一个喜欢写注释的程序员,今天,我们就来说说Java注释之一——Doc注释 我们知道,Java支持 3 种注释,分别是单行注释、多行注释和文档注释,我们来看看他们的样子 /...
  • 基本概念 这两个概念比较像,所以大部分时候会放在一起说。 这两个概念源于Elasticsearch(后面简称ES)除了强大的搜索功能外,还可以支持排序,聚合之类...doc_values和fielddata就是用来给文档建立正排索引的。他...
  • 幸亏没自己来,现在的我,连 Magisk 是啥都不知道~ 找一台 windows 电脑,安装好 RenderDoc 和 Android Studio 的环境,因为我们主要的操作都需要使用到 adb。 当然 RenderDoc 其实也自带一个 adb,但是它的版本...
  • http://feifei.im/archives/93————————————————————————...做个总结记录,下次要用直接查,省的忘了……方法1.poi读取doc + itext生成pdf (实现最方便,效果最差,跨平台)方法2.jodconver...
  • Android API DOC (二)Android文档4.4.2(19)

    千次下载 热门讨论 2014-06-09 16:07:18
    下载了好久,Google太坑爹了,给网友用吧,一共两个压缩包,一起解压就可以了!全英的文档!原装自带的文档,相当不错的!
  • PHPDoc 规范

    千次阅读 2019-04-22 10:12:41
    转载自 PHP 注释的艺术 —— phpDoc 规范 PHPDOC PHPDoc 是一个 PHP 版的 Javadoc。它是一种注释 PHP 代码的正式标准。它支持通过类似 phpDocumentor 这样的外部文档生成器生成 API 文档,也可以帮助一些例如 Zend...
  • Unity中RenderDoc的使用

    千次阅读 2021-11-09 10:53:55
    本文分享Unity中RenderDoc的使用 研究过渲染的同学想必对RenderDoc不陌生. RenderDoc是一个查看和分析渲染效果的工具, 可以查看每一帧的渲染信息, 比Unity自带的Frame Debugger更强大. 今天给大家分享在Unity中如何...
  • Node解析Doc两种格式,全代码

    万次阅读 热门讨论 2022-06-20 10:52:02
    i++) { arr.push({ dirname: './static/upload//', filename: data[i] }) } res.send({ code: 200, result: arr }) } }) }) // 对应文件数据的解析 router.get('/doc/jx/text', (req, res) => { // ConvertToHtml ...
  • 文本多分类之Doc2Vec实战篇

    千次阅读 多人点赞 2019-03-11 18:50:00
    在我之前的几篇博客中,我介绍了两种文档向量化的表示方法,如Sklearn的CountVectorizer和TfidfTransformer,今天我们再来学习另外一种文档的向量化表示方法-Doc2Vec。如果你还不太了解Doc2Vec的话,我提供一些资料...
  • Renderdoc调试总结

    千次阅读 2020-06-20 09:02:10
    Renderdoc调试总结 https://www.jianshu.com/p/7587dc0a42f4 renderdoc调试总结 http://aicdg.com/renderdoc-hlsl/ λ 1 /renderdoc-hlsl/ ⌘ blogspace λ * Menu utf-8 web .html 1 home 2 my ...
  • SpringBoot 集成 Smart-Doc

    千次阅读 2020-07-24 09:37:03
    一 什么是 Smart-Doc smart-doc 是一个 java restful api 文档生成工具,smart-doc 颠覆了传统类似 swagger 这种大量采用注解侵入来生成文档的实现方法。 smart-doc 完全基于接口源码分析来生成接口文档,完全做到...
  • Doc2Vec的简介及应用(gensim)

    万次阅读 多人点赞 2019-03-11 00:19:21
    在本文中,你将学习什么是doc2vec,它是如何构建的,它与word2vec有什么关系,你能用它做什么,并且没有复杂的数学公式。 介绍 文本文档的量化表示在机器学习中是一项具有挑战性的任务。很多应用都需要将文档量化...
  • Lucene DocValues详解

    千次阅读 2017-03-07 00:10:39
    DocValues,人称正向索引,也是大家所认识的面向列存储。即通过文档编号与字段值在索引建立直接映射的关系,并存储。对DocValues我想你并不陌生,但我相信你对它并不算熟悉。接下来,我们将具体来看看它的存储结构、...
  • android 操作office文档 doc docx xls xlsx ppt pptx pdf
  • Java使用smart-doc自动生成文档

    千次阅读 2020-12-24 15:27:08
    作为后端开发,写接口文档一直是一个很头痛的问题,今天推荐一个开源工具smart-doc,这个工具基于java原生的注释生成api文档,无需大量的注解配合使用。 官方地址:https://gitee.com/smart-doc-team/smart-doc 转载...
  • doc文件转为txt文件

    千次阅读 2021-01-07 14:30:31
    问,将大象放进冰箱需要几步? 啊呸,串场了。将doc文件转为txt文件需要几步? 答:需要两步, 1.先将doc转为docx。因为python-docx只能处理docx的文件,而无法处理doc文档。docx本质是xml文件比doc更...def doc2doc

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,936,605
精华内容 1,574,642
关键字:

doc