精選文章

SmallBurger Asset Home

  SmallBurger

顯示具有 引擎研發 標籤的文章。 顯示所有文章
顯示具有 引擎研發 標籤的文章。 顯示所有文章

2014年3月15日 星期六

My first ios game demo

Performance:
  1. Device: Ipad Air
  2. fps:56~60(record video cause lag)
Technique:
  1. 5 Layer Splat and Lightmap Base Terrain.(for performance purpose, I redesign ogre terrain material).
  2. Dynamic cast shadow volume.(not ogre's original shadow)
  3. Pixel base water(dynamic reflection, refraction, depth, Interactive water waves map...)
  4. Lua Base Game Script(ai and game play script...)
  5. Static scene light map(character can be Affected)
  6. NAVmesh 3d path finding
  7. Render to texture base rendering(for performance purpose, the high resolution pixel process on device is to lag, especially multiple texture blending)
  8. Auto generate mini map from NavMesh.
The game video:
It's about Green Ninja help Sinbad Ogre to kill Dark Purple Ninja.
not end, to be continue...

2014年2月19日 星期三

The Lua-based AI System

目前規劃了一個以LUA Script為架構的AI系統,基礎框架為如下:
function Stroll_Enter(Brain, FromStateName)
end
function Stroll_Update(Brain, fDeltaTime)
end
function Stroll_Exit(Brain)
end
C++程式的部份預設會Call Stroll這個State的Enter為進入點,之後可以透過ChangeState這個C++綁定的成員函式來達到切換行為的目的,比方Brain:ChangeState("Fight")…
下列是目前有關這個Demo Game的相關AI Script的內容:

2013年12月6日 星期五

My scene lua script editor functionality

The demo is here:
  • Create floor board
local ShapeData = CShapeData()
    ShapeData.m_strPathFileName = "test02.mesh"
      ShapeData.m_ScalerData.m_ScaleFactor.m_fX = 1000
        ShapeData.m_ScalerData.m_ScaleFactor.m_fZ = 1000
          local Shape = GenerateShape(ShapeData)
          • Create a barrel object
          local ShapeData = CShapeData()
          ShapeData.m_strPathFileName = "Barrel.mesh"
          local Shape = GenerateShape(ShapeData)
          • In the center is the origin, range in length from 100 to create the object in random
          math.randomseed(os.time())

          function GetDirection()
          local Inverse = math.random(100)
          if Inverse >= 50 then
          return 1
          end
          return -1
          end

          local ShapeData = CShapeData()
          ShapeData.m_strPathFileName = "Barrel.mesh"
          local Center = CVector3(0.0, 0.0, 0.0)
          local Shape
          local OffestValue
          local Inverse
          for i = 1, 20 do
          OffestValue = math.random(100)
          ShapeData.m_LocationData.m_Position.m_fX = Center.m_fX+OffestValue*GetDirection()
          OffestValue = math.random(100)
          ShapeData.m_LocationData.m_Position.m_fZ = Center.m_fZ+OffestValue*GetDirection()
          Shape = GenerateShape(ShapeData)
          end

          The reference video is here:

          2013年11月28日 星期四

          Use LUA + LUABind + MyGUI achieve WOW LUA bind UI functionality


          WOW origin using the GUI binding LUA, players realize homemade one touch change equipment and small bags into one big bag of features that make me feel very stunning, can be made ​​if the player UI features, and that planning will be able to own get.

          2013年11月18日 星期一

          The integration of terrain and entity's lightmap

          Unlike new ogre terrain, can't affect entity.
          The demo video is here:

          2013年10月17日 星期四

          The new lightmap generator

          Feature list:
          1. Cast all scene object, not just ground.
          2. Cast transparency shadow.
          3. The character influence by light map.
          The demo video is here:

          2013年10月11日 星期五

          Lightmap generator

          For performance issue in mobile platform, maybe Lightmap is a good solution.
          the demo video is here:

          2013年10月3日 星期四

          Spawner Trigger Edit And 3D Sound Testing

          As title, all trigger Integrate LUA Script and LUABind.
          It shows the behavior Stroll and Shy.
          This demo also tested 3d sound.
          There is demo video:

          2013年9月9日 星期一

          關於APP資料佈署的解決辦法

            在開發MMO的時候,這個幾乎是完全交給人工去管理…不過以之前的經驗,為了怕Load不到資料而造成問題(當機或顯示不正確…等),能不砍則不砍,結果往往導致沒有用的資料越來越多,進而導致資料過於肥大。

            在現在APP當道,維護資料的精簡變得非常重要(因為APP要小而美,且部份平台-Andorid對於資料量的大小有嚴格的限制),能否把這件事做自動化處理呢?筆者開發了一個佈署工具來完成這件事。

            這個佈署工具其實就是一個執行command line(system(...))的程式,那為何不用批次檔直接來處理呢?主要的原因是因為目前3D引擎是用Ogre,需要Run過Ogre的一些函式庫及Manager才會知道相關的Reference檔案,所以還是得程式化才行。
          開發流程大致如下:

          2013年7月12日 星期五

          My First Android APP with Ogre3D

          拜Ogre1.9之福,已經將遊戲引擎跨到Android層級了,目前引擎橫跨PC、IOS及Android,接下來就是WinRT了…

          在此分享一下關於1.9跟Android處理的一些心得:
          1. 首先就是Ogre的StringConverter,由於osstream沒辦法在所有的Android平台上順利執行,因此蠻多用snprintf取代掉了…,我自己也有用到,所以也要改。
          2. std::atexit無法使用,導致只好不用Loki的Singleton,自己實作。
          3. OgreStableHeaders.h漏了OGRE_PLATFORM == OGRE_PLATFORM_ANDROID,要補上。
          4. 使用Nsight visual studio edition,以便於直接在Visual Studio插中斷點進行除錯(需搭配Tegra的硬體),所以就沒有使用Android MK檔的東西,Ogre專案檔也就要自己建立了…
          5. OgreGLES2Prerequisites.h少定義了GL_CHECK_ERROR巨集,要記得補上 。
          6. OgreGLES2FrameBufferObject.cpp有一行#Else寫成#Endif 。
          7. 全使用Native Code,沒有一行jni及java code。
          8. GLSLES雖然提供mat3參數傳遞的語法,但不是每個Android硬體都可以正行執行,改成傳3個Vector比較穩
          接下來就是Demo影片…

          2013年5月29日 星期三

          About dynamic font cache implement with MyGUI

          最近剛好有機會接觸到Dynamic Font Cache與MyGUI的整合,目前網路上可以找到的資源都只有簡體的資訊,而且幾乎都是直接更MyGUI的SourceCode,筆者懶得重編MYGUI(除了PC、還有IOS及Andorid,實在太麻煩了…),在這裡跟大家分享一下處理的心得:
          1. 熟悉FreeType字型處理運作的原理,可以看這篇:managing glyphs
          2. Font Texture Cache處理,可以參考OgreFont.cpp裡的Font::loadResource及MyGUI_ResourceTrueTypeFont.cpp裡的ResourceTrueTypeFont::initialise()。
          3. 為了達到不改到MyGUI的任何Code,自己繼承了EditText,重寫了TextView…等,並跟MyGUI的FactoryManager註冊。
          4. 將MyGUI_CommonSkins.xml的"EditText"改成自己的ClassName,比方
            BasisSkin type="DynamicEditText" offset="0 0 16 16" align="Stretch"
          PS:
          1. 雖然可以用Plugin來擴充MyGUI,但是流程有點麻煩,就直接把EditText給取代掉了…
          2. Ogre對於UV的換算方式,跟MyGUI不一樣(Ogre是把BearingX及BearingY內含在字的UV中,而MyGUI則是拆開來的,在Render字的時候才利用這些參數來設定相關資料)
          3. MyGUI沒有處理全形空白,筆者有將這個功能加進入。
          相關Demo影片:

          2013年5月3日 星期五

          分析Ogre關於材質及物件數量對效能的影響…

          結論:
          1. 共用材質的話,儘量共用,對效能有極大影響。(在其他的引擎好像也有這樣的特性,比方Unity)
          2. Combine成一個Static Geometry,儘量Combine,在材質共用的情況下,有極大幫助(不過如果Triangle數量太多的話,分成不同的Page Cull掉也許會比較好)
          3. 實際應用上,還是有其限制,同材質且同一個Mesh的做法,比較適合大量的小型物件(比方花花、草草之類的),Page Geometry應該就是用這個做法來最佳化。
          相關測試數據:

          2013年4月22日 星期一

          The motion path editor

          很早就想實作這個功能…如今終於如願…(最麻煩的是key frame edit user interface,還好之前就已經做好…)。
          除此之外,還加了水波互動整合,以下是相關Demo影片…

          2013年1月30日 星期三

          在IOS下,使用Ogre實現水波+折射+反射+Terrain+3D尋徑+Hardware Skinning…

          分享一下最近最近做的成果,用到的技術有…
          Shader:
          1. Water Fresnel
          2. Water ripple
          3. Terrain alpha splat
          4. Projection texture
          5. Render to texture
          6. Hardware Skinning 
          NAV Mesh path finding:

          場景強化的部份先暫時停下來了,接下來要強化的是角色及特效的部份,Game Play可能還要再等一段時間…


          以下是相關Demo影片…

          2013年1月26日 星期六

          在IOS上模擬互動水波+折射+反射…

          這次的實作幾乎完全使用Pixel Shader,目前為了效能考量,在New Ipad上還是不敢使用太大張的貼圖,之後看能不能在Ipad4上使用更高解析度的貼圖。

           以下是相關影片:

          2013年1月15日 星期二

          關於最近在處理行動平台上Pixel Shader的效能問題…

          最近行動平台紛紛流行起高解析度與視網模技術,雖然提高了解析度,但有些硬體卻沒相對提升Pixel Shader的Core能力,導致有發生了相同的Pixel Shader程式碼在Ipad2上比New Ipad執行效能還要好的狀況,這讓小弟非常的不高興(因為小弟就是買了New Ipad這個過渡時期的產品…),於是踏上了研究相關應對做法之路…

          經過實驗後,整理出相關的解決方法…

          2012年12月25日 星期二

          仿Torchlight場景遮擋鏡頭處理流程

          看過了許多網站的資料,大份都是以Multi Pass為主來處理,但是如果有物件有許SubEntity互疊,或不同角色之間互疊,仍然會有問題。

          目前解決方式是用畫二次的做法,在角色的RenderQueue之前直接使用RenderSystem裡的_render函式來進行繪製(記得要透出來的場景遮擋物件,需要在之前就畫好),比較麻煩的是直接使用_render沒辦法自動更新Shader constant,因此手動做Shader Binding,可以參考相關Ogre討論區的的文章…

          至於效能部份,雖說是畫二次,但是第一次Render時有做setDepthWriteEnabled(false),所以在沒有擋住時,是不會通過Depth Check,所以應該還好,而動作、Mesh及矩陣都是共用的,所以應該沒什麼影響。

          以下是相關測試影片…

          2012年12月21日 星期五

          The Ogre3D technique work follow

          首先慶祝一下部落格文章突破一百篇(買份鹹酥雞吃吃…)!!!!!!!!!!

          最近使用不少關於Render to texture的部份,在Ogre3D的Technique架構下,ViewPort的取用Technique的流程如下:

          2012年11月16日 星期五

          Fresnel(Reflection&Refraction)&PushRipple

          如題,就是反射+折射+水波處理,接下來再加入深度處理,就差不多了,之後就是IOS Porting…
          相關DEMO影片如下: